从CSV文件创建Networkx图表 [英] Create Networkx Graph from CSV file

查看:27
本文介绍了从CSV文件创建Networkx图表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从CSV file构建一个NetworkX社交网络图。我使用的是Networkx 2.1和Python3

我关注了this post,但没有成功,因为我一直收到错误:

AttributeError: 'list' object has no attribute 'decode'

我的目标是使权重越高,显示的边缘越厚。

以下是我到目前为止的代码:

import networkx as nx
import csv

Data  = open('testest.csv', "r", encoding='utf8')
read = csv.reader(Data)
Graphtype=nx.Graph()   # use net.Graph() for undirected graph

G = nx.read_edgelist(read, create_using=Graphtype, nodetype=int, data=(('weight',float),))

for x in G.nodes():
      print ("Node:", x, "has total #degree:",G.degree(x), " , In_degree: ", G.out_degree(x)," and out_degree: ", G.in_degree(x))   
for u,v in G.edges():
      print ("Weight of Edge ("+str(u)+","+str(v)+")", G.get_edge_data(u,v))

nx.draw(G)
plt.show()

有没有更简单的方法来解决这个问题?数据比较简单。

感谢您的帮助!

推荐答案

您误用了函数read_edgelist。从documentation开始,每一行都需要解析一个字符串,而csv.reader将输入文件中的行解析为字符串列表(例如,202,237,1 -> ['202', '237', '1'])。因此,引发AttributeError是因为read_edgelist正在尝试解析csv.reader提供的列表,而这些列表应该是字符串。

我们可以在不使用csv模块的情况下从输入文件中正确地解析图形。但是,我们仍然需要处理输入文件的第一行(头),它不应该被解析。有两种方法。第一种方法使用next跳过第一行:

Data = open('test.csv', "r")
next(Data, None)  # skip the first line in the input file
Graphtype = nx.Graph()

G = nx.parse_edgelist(Data, delimiter=',', create_using=Graphtype,
                      nodetype=int, data=(('weight', float),))

第二种方法有点"老生常谈":因为第一行以target开始,所以我们将t标记为输入文件中注释的开始。

Data = open('test.csv', "r")
Graphtype = nx.Graph()

G = nx.parse_edgelist(Data, comments='t', delimiter=',', create_using=Graphtype,
                      nodetype=int, data=(('weight', float),))
在这两种方法中,我们必须使用parse_edgelist而不是read_edgelist,因为输入文件使用 作为换行符。要使用read_edgelist,需要以二进制模式打开文件,当换行时,换行数为 。因此, 换行符的输入文件无法拆分为行,因此无法正确分析。

此外,由于您要查找入度和出度,因此应使用DiGraph而不是Graph创建图表。

编辑

这里的关键点是跳过输入文件中的头。我们可以通过首先将输入文件读取到pandas.DataFrame中,然后将其转换为图形来实现这一点。

import networkx as nx
import pandas as pd

df = pd.read_csv('test.csv')
Graphtype = nx.Graph()
G = nx.from_pandas_edgelist(df, edge_attr='weight', create_using=Graphtype)

这篇关于从CSV文件创建Networkx图表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆