该代码的功能是转换数据集,以便对于每个给定的电影对,它都会统计看过这两个电影的用户数量并跟踪该值(将其存储为列值)。
我已经尝试过编写这样的代码,但是当代码对增加时,要花很多时间。
def dataset_to_item_graph(self):
self.dataset1=self.dataset
items=self.dataset['movieId'].unique()
print(len(items))
ux=combinations(items,2)
item_edges=[]
for x in ux:
i = x[0]
j = x[1]
a = set(self.dataset1.loc[self.dataset1['movieId'] == i]['userId'])
b = set(self.dataset1.loc[self.dataset1['movieId'] == j]['userId'])
c = a.intersection(b)
if len(c) >0:
edge_list=[i,j,len(c)]
item_edges.append(edge_list)
else:
continue
item_graph = pd.DataFrame(item_edges, columns=['movie1','movie2','weight'])
return item_graph
This is the sample dataset I am working with:
userId movieId rating timestamp
0 1 1 4.0 964982703
1 1 3 4.0 964981247
2 1 6 4.0 964982224
3 1 47 5.0 964983815
4 1 50 5.0 964982931
5 2 1 3.0 964982931
6 2 3 4.0 964982831
7 2 6 4.0 964982933
8 3 47 5.0 964981249
9 3 1 2.0 964981248
10 3 50 3.5 965982931
This is the output I am expecting:
movieId1 movieId sum
0 1 3 2
1 1 6 2
2 1 47 2
3 1 50 2
4 3 6 1
5 3 47 1
6 3 50 1
7 6 47 1
8 6 50 1
9 47 50 2
答案 0 :(得分:0)
似乎您的问题对于for循环来说太大了。启动子流程以并行而不是顺序地计算这些步骤可能会很有趣。您知道多处理模块吗?您可以尝试查看this article,尤其是最后使用from multiprocessing import Queue
的示例。