gpt4 book ai didi

python - 从 CSV 文件中的邻接矩阵绘制 NetworkX 图

转载 作者:太空狗 更新时间:2023-10-29 17:12:14 26 4
gpt4 key购买 nike

我现在一直在与这个问题作斗争,我知道这很简单——但我对 Python 或 NetworkX 的经验很少。我的问题很简单,我正在尝试绘制一个看起来像这样的矩阵的大型数据集(大约 200 行/列)。第一行和第一列是相同的。

  A,B,C,D,E,F,G,H,I,J,K
A,0,1,1,0,1,1,1,1,0,1,0
B,1,0,0,0,1,1,1,1,0,1,0
C,1,0,0,0,1,1,1,1,0,1,0

它只是一个显示人们如何联系的矩阵,我想要的只是导入并绘制此 csv 文件,以及它在 NetworkX 中的相应标签。

我有这个文件 (people.csv),并查看以前的答案 here ,似乎最好的方法是将数据放入带有 numpy 的数组中。

这似乎有问题:

import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
from numpy import genfromtxt
import numpy as np

mydata = genfromtxt('mouse.csv', delimiter=',')

我得到以下输出:

File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/npyio.py", line 1272, in genfromtxt
fhd = iter(np.lib._datasource.open(fname, 'rbU'))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/_datasource.py", line 145, in open
return ds.open(path, mode)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/_datasource.py", line 472, in open
found = self._findfile(path)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/_datasource.py", line 323, in _findfile
if self.exists(name):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/_datasource.py", line 417, in exists
from urllib2 import urlopen
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 94, in <module>
import httplib
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 69, in <module>
from array import array
File "/Users/Plosslab/Documents/PythonStuff/array.py", line 4, in <module>
NameError: name 'array' is not defined

最佳答案

我制作了一个名为 mycsv.csv 的小型 csv,其中包含以下内容:

,a,b,c,d
a,0,1,0,1
b,1,0,1,0
c,0,1,0,1
d,1,0,1,0

第一行的第一个字符没有“,”,而是有一个空格,所以如果这是我的错误,请告诉我。总体思路是一样的。读入 csv:

from numpy import genfromtxt
import numpy as np
mydata = genfromtxt('mycsv.csv', delimiter=',')
print(mydata)
print(type(mydata))

这打印:

[[ nan  nan  nan  nan  nan]
[ nan 0. 1. 0. 1.]
[ nan 1. 0. 1. 0.]
[ nan 0. 1. 0. 1.]
[ nan 1. 0. 1. 0.]]
<type 'numpy.ndarray'>

现在我们已经将 csv 作为 numpy 数组读入,我们只需要提取邻接矩阵:

adjacency = mydata[1:,1:]
print(adjacency)

这打印:

[[ 0.  1.  0.  1.]
[ 1. 0. 1. 0.]
[ 0. 1. 0. 1.]
[ 1. 0. 1. 0.]]

如果我的小示例与您的不完全相同,您可以根据需要对 numpy 数组进行切片。

要绘制图表,您需要导入 matplotlib 和 networkx:

import matplotlib.pyplot as plt
import networkx as nx

def show_graph_with_labels(adjacency_matrix, mylabels):
rows, cols = np.where(adjacency_matrix == 1)
edges = zip(rows.tolist(), cols.tolist())
gr = nx.Graph()
gr.add_edges_from(edges)
nx.draw(gr, node_size=500, labels=mylabels, with_labels=True)
plt.show()

show_graph_with_labels(adjacency, make_label_dict(get_labels('mycsv.csv')))

这是一个简短的 tutorial在 python 图表上。

graph from csv

关于python - 从 CSV 文件中的邻接矩阵绘制 NetworkX 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29572623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com