将熊猫数据框转换为snap.py

时间:2018-08-10 06:51:46

标签: pandas dataframe graph stanford-snap

我有一个大型数据集(数百万行),我想将其用于图分析。经过数据准备和清理之后,数据现在为python格式(pandas数据框)。

为了进行图形分析,我使用的是斯坦福网络分析项目(SNAP)。即使使用networkx或GraphLab等其他框架,我也使用SNAP的原因是SNAP可以处理非常大的图形。

但是SNAP使用的数据结构与我们使用大熊猫时所习惯的数据结构不同。它使用向量,哈希表和对。

https://snap.stanford.edu/snappy/doc/tutorial/tutorial.html

我发现很难从数据帧格式转换为任何这些格式。我目前正在做的是先将数据帧转换为文本格式,然后将其保存在硬盘上,然后使用SNAP重新读取 snap.LoadEdgeListStr

https://snap.stanford.edu/snappy/doc/reference/LoadEdgeListStr1.html?highlight=loadedgeliststr

是否可以在两种格式之间进行直接转换,所以我不需要每次都执行相同的过程?

1 个答案:

答案 0 :(得分:0)

如果您希望将熊猫数据框转换为内存中的SNAP图,则可以创建一个新图,并用节点和边填充它,如下所示:

import pandas as pd
import snap

# Create a sample pandas dataframe:
data = {
    's': [0, 0, 1],
    't': [1, 2, 0]
}
df = pd.DataFrame(data)

# Create SNAP directed graph:
G1 = snap.TNGraph.New()
# Add nodes:
nodes = set(df['s'].tolist() + df['t'].tolist())
for node in nodes:
    G1.AddNode(int(node))
# Add edges:
for index, row in df.iterrows():
    G1.AddEdge(int(row['s']), int(row['t']))
# Print result:
G1.Dump()

如果您仍然希望在首次创建图形后保存/加载图形,请考虑以二进制格式保存它们,而不是使用文本文件(使用save()load()函数)。那应该更有效率。

SNAP还提供了Tables

  

SNAP中的表旨在提供大规模的快速性能,并毫不费力地处理包含数亿行的数据集。可以使用提供的方法将它们以二进制格式保存并加载到磁盘中。

这些允许使用方便的API来转换tables into graphs,但是我不认为我会用它们代替熊猫数据框。