使用 networkx 创建加权图的有效方法,其中权重是审阅者身份之间外观的交集?
Efficient way to create a weighted graph with networkx where weights are intersection of appearances between reviewers identities?
我正在分析亚马逊的评论数据集,我有客户 ID、他们对不同产品的评论,以及产品的标识符。
数据可以表示为:
Customer
Product
Review
...
1
A
....
1
B
....
2
A
....
2
C
....
我想使用 networkx
创建一个加权无向图,其中每个节点都是一个产品,节点(产品)之间的权重是评论这两个产品的不同客户的数量。
数据很大,所以我想知道是否有一种可行的方法可以在逐个产品时迭代更新网络的当前权重。
对于上面的示例,该图的另一种理想表示形式是
A
B
C
A
2
1
1
B
1
1
0
C
1
0
1
编辑:错误地写了(A,C)=2
。替换为 1.
试试这个
import pandas as pd
df = pd.read_csv('file.csv')
# cross-tabulate
v = pd.crosstab(df['Product'], df['Customer'])
# dot product for the number of customers who reviewed 2 products
v.dot(v.T)
Product A B C
Product
A 2 1 1
B 1 1 0
C 1 0 1
我正在分析亚马逊的评论数据集,我有客户 ID、他们对不同产品的评论,以及产品的标识符。
数据可以表示为:
Customer | Product | Review | ... |
---|---|---|---|
1 | A | .... | |
1 | B | .... | |
2 | A | .... | |
2 | C | .... |
我想使用 networkx
创建一个加权无向图,其中每个节点都是一个产品,节点(产品)之间的权重是评论这两个产品的不同客户的数量。
数据很大,所以我想知道是否有一种可行的方法可以在逐个产品时迭代更新网络的当前权重。
对于上面的示例,该图的另一种理想表示形式是
A | B | C | |
---|---|---|---|
A | 2 | 1 | 1 |
B | 1 | 1 | 0 |
C | 1 | 0 | 1 |
编辑:错误地写了(A,C)=2
。替换为 1.
试试这个
import pandas as pd
df = pd.read_csv('file.csv')
# cross-tabulate
v = pd.crosstab(df['Product'], df['Customer'])
# dot product for the number of customers who reviewed 2 products
v.dot(v.T)
Product A B C
Product
A 2 1 1
B 1 1 0
C 1 0 1