Csv 用边'构建图形;使用距离矩阵显示的长度

Csv 用边'构建图形;使用距离矩阵显示的长度,csv,numpy,matrix,graph,networkx,Csv,Numpy,Matrix,Graph,Networkx,假设我有一个csv('matrix.csv')文件,其中有一个图的边长度的对称矩阵: ,a,b,c,d a,nan,0.3,0.2,nan b,0.3,nan,nan,nan c,0.2,nan,nan,0.1 d,nan,nan,0.1,nan 作为输出,我想得到一幅图,图中有3条边,连接a和b,a和c,d和c,这些边上写着距离 到目前为止,我有一个代码,可以使用pandas dataframe对象将csv文件读入numpy对象(我知道,这很愚蠢,但从_pandas_dataframe来看,

假设我有一个csv('matrix.csv')文件,其中有一个图的边长度的对称矩阵:

,a,b,c,d
a,nan,0.3,0.2,nan
b,0.3,nan,nan,nan
c,0.2,nan,nan,0.1
d,nan,nan,0.1,nan
作为输出,我想得到一幅图,图中有3条边,连接a和b,a和c,d和c,这些边上写着距离

到目前为止,我有一个代码,可以使用pandas dataframe对象将csv文件读入numpy对象(我知道,这很愚蠢,但从_pandas_dataframe来看,它不适用于networkx)

但代码也会绘制所有其他边(即“nan”值)。
另一个问题是如何仅绘制长度大于0.1的边集,例如?

在将数据帧转换为矩阵之前,可以使用Pandas.fillna()方法将NaN替换为0。然后请注意,矩阵中有0和其他浮点数的字符串版本。然后可以使用numpy array.astype()方法将矩阵项分为浮点数

如果要进一步过滤边,请检查:
回答问题的第二部分:

import matplotlib
import networkx as nx
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('mat.csv', sep=';',index_col=0, decimal=",")
l = list(df)
G = nx.Graph()
for item in l:
    for item0 in l:
        if l.index(item0) < l.index(item) and df[item][item0] > 0.1:
            G.add_edge(item, item0, weight=df[item][item0])
nx.draw(G, with_labels=True, pos=nx.spring_layout(G), node_color='salmon')
plt.draw()
plt.show()
导入matplotlib
将networkx导入为nx
matplotlib.use('TkAgg')
将matplotlib.pyplot作为plt导入
作为pd进口熊猫
df=pd.read_csv('mat.csv',sep=';',index_col=0,decimal=“,”)
l=列表(df)
G=nx.Graph()
对于l中的项目:
对于l中的项目0:
如果l.index(item0)0.1:
G.添加边缘(项目,项目0,重量=df[项目][项目0])
nx.draw(G,带标签=True,位置=nx.spring\u布局(G),节点\u color='salmon')
plt.draw()
plt.show()
基本上,这里您读取csv文件,然后(假设对称矩阵)对于您决定(不)在两个节点之间绘制边的每对节点,如果某个条件成立(这里是df[item][item0]>0.1,即边的长度(权重)大于0.1)

numpyMatrix = df.fillna(0).as_matrix()
numpyMatrix = numpyMatrix.astype(float)
import matplotlib
import networkx as nx
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('mat.csv', sep=';',index_col=0, decimal=",")
l = list(df)
G = nx.Graph()
for item in l:
    for item0 in l:
        if l.index(item0) < l.index(item) and df[item][item0] > 0.1:
            G.add_edge(item, item0, weight=df[item][item0])
nx.draw(G, with_labels=True, pos=nx.spring_layout(G), node_color='salmon')
plt.draw()
plt.show()