在NetworkX Python中给出一个属性文件的Assortativity

时间:2018-03-06 09:08:25

标签: python networkx

我正在使用python的NetworkX软件包,我希望在给定文本文件中的节点属性的情况下获取网络的协同系数。

我有两个制表符分隔的文件: (1)属性文件:在第一列中有节点的名称;在第二列中这些节点的来源。像这样:

11264   E
9410    E
2746    R
7432    R
8424    E

(2)边缘文件:网络本身,其中两个第一列是有边缘的节点,第三列是来自爆炸的标识的百分比;第四列是这两个序列之间的相互覆盖。

4275    5402    97.04   97.83
6268    6338    98.49   100.0
2175    2178    99.26   100.0
4461    4777    97.06   98.55
11882   4129    98.4    100.0

因此,在我的代码中,我为属性文件创建了一个字典,因此每个节点都有一个值,即" E"或" R"。当我根据这个字典计算出这种混淆时,会弹出这个错误:

RuntimeWarning: invalid value encountered in true_divide
  r=(t-s)/(1-s)
nan 

我已经检查过,我知道它必须是除以0或NA相关的东西,但我无法弄清楚原因。

这是我的代码:

import networkx as nx

origin = {}
infile=open("attrib_file.tsv","r")
for line in infile:
    t = line[:-1].split("\t")
    origin[t[0]] = t[1]
infile.close()

G = nx.Graph()
G = nx.read_edgelist("edge_file.tsv", delimiter="\t", data=(('ID',float),('Coverage', float)), encoding='utf-8')
print(nx.attribute_assortativity_coefficient(G, 'origin'))

我正在使用python 3.5.1和networkx 1.11

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

正如您在评论中提到的,dict属性可能存在问题。

在这里,我使用的是python 3.6和networkx 2.1。

设置

import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt

attr_file = pd.read_clipboard()
attr_file

[OUT]:

    name    origin
0   11264   E
1   9410    E
2   2746    R
3   7432    R
4   8424    E

我改变了你给的样品:

edge_list = pd.read_clipboard()
edge_list

[OUT]:

n1  n2  percent coverage
0   11264   9410    97.04   97.83
1   9410    2746    98.49   100.00
2   11264   2178    99.26   100.00
3   9410    8424    97.06   98.55
4   7432    2746    98.40   100.00

创建节点

G = nx.Graph()
for i,node in attr_file.iterrows():
    G.add_node(node['name'], origin=node['origin'])

G.nodes(data=True)

[OUT]:

NodeDataView({11264: {'origin': 'E'}, 9410: {'origin': 'E'}, 2746: {'origin': 'R'}, 7432: {'origin': 'R'}, 8424: {'origin': 'E'}})

创建边

for i, edge in edge_list.iterrows():
    G.add_edge(edge.n1, edge.n2, percent=edge.percent, coverage=edge.coverage)

计算协调性

nx.attribute_assortativity_coefficient(G, 'origin')

[OUT]:

0.2592592592592593