我正在使用networkx
从txt文件构建电子邮件网络结构,其中每行代表一个"边缘。"我首先将txt文件(3列:{' #Sender','收件人''时间'})加载到Python中,然后转换为{{1使用以下代码对象:
networkx

import networkx as nx
import pandas as pd
email_df = pd.read_csv('email_network.txt', delimiter = '->')
email = nx.from_pandas_dataframe(email_df, '#Sender', 'Recipient', edge_attr = 'time')
数据可以访问here。
但是,email.txt
(email_df
pandas
个对象)的长度为82927,而DataFrame
(email
个对象)的长度为3251
Networkx
我真的很困惑,因为即使对于In [1]: len(email_df)
In [2]: 82927
In [3]: len(email.edges())
In [4]: 3251
的前两列中包含相同两个节点的行具有相同的方向序列(例如,' 1'到' 2'),第三列('时间',意思是时间戳)应该将它们彼此区分开,因此,不会出现复制的边缘。那么为什么在使用email_df
来读取`email_df'?
有人会帮我解释一下吗?
谢谢。
答案 0 :(得分:1)
此处的行说明将ngOnInit() {
this.getUserGroups(this.userId);
}
列作为源节点,Sender
列作为目标,并将Recipient
添加为边缘属性 。因此,您只在Sender和Recipient之间创建单个(定向)边,并且只将最后一行的时间添加为边的属性。
time
您只能为一对节点定义一条边 - 您可以在构建网络之前对数据框进行分组,并将计数用作边的权重,
email = nx.from_pandas_dataframe(email_df, '#Sender', 'Recipient', edge_attr = 'time')