减少二分投影的网络图的大小

数据挖掘 社会网络分析 网络x
2022-03-04 04:06:49

我有一个从熊猫数据框创建的图表。图的长度约为 450k 边。当我尝试运行该weighted_projected_graph函数时,它运行了很长时间(我还没有看到它完成),大概是因为这个数据集的大小。在创建二分图之前减少此数据集大小的好方法是什么?

我尝试通过使用连接最多的组件来缩小范围:

trim1 = len([c for c in net.connected_component_subgraphs(g) if len(c) > 10])
C = net.Graph()
gg = sorted(net.connected_component_subgraphs(g), key=len, reverse=True)[trim1]

但我不认为这给了我想要的结果,此外,我不相信这是一个分析合理的策略。有没有人有任何其他建议来减少这个集合的大小?

编辑:完整的代码,没有减少。我将尝试对上述内容进行的操作将在g以下gg调用中从上面替换为bi.projected_graph

reviews = pd.read_csv(r"\BX-Book-Ratings.csv", sep=";", encoding = "ISO-8859-1")
users = reviews['User-ID'].values.tolist()
books = reviews['ISBN'].values.tolist()

g=net.from_pandas_edgelist(reviews,'User-ID','ISBN',['Book-Rating'])

print(len(g))
>>> 445839

p = bi.projected_graph(g, users)
```
1个回答

我认为问题不在于数据大小,而在于存在大度节点(节点的度数是它的邻居数)。

实际上,二分图中一个节点的所有邻居在投影中都链接在一起;它们在投影中形成一个集团(完整的子图)。这太可怕了,因为一个集团中的链接数量d节点是d(d1)2d2.

具体来说,二分图中的 2,000 度节点将在投影中诱导近 200 万个链接…… 20,000 度数的节点将诱导近 2 亿个链接……

有关二分图投影问题的更多讨论,您可以查看本文的示例:大型附属网络分析的基本概念/二分图