我的数据存在问题
我从数据库中读取数据使用python,让我们说分配给变量data
type(data)
是list
,实际上是list of list
data = [(1, 'Shirt', 2),(1, 'Pants', 3),(2, 'Top', 2),(2, 'Shirt', 1),(2, 'T-Shirt', 4), (3, 'Shirt', 3),(3, 'T-Shirt', 2)]
data[0][0] is unique_id
以及data[0][1] is category_product
和data[0][2] is count
我需要根据unique_id
scipy
)计算category_product
1和2之间的相似度
unique_id
不仅仅是两个,也可能超过2个我想我需要将data
转换为矩阵:
unique_id | Shirt | Pants | Top | T-Shirt
1 | 2 | 3 | 0 | 0
2 | 1 | 0 | 2 | 4
3 | 3 | 0 | 0 | 2
我想用余弦相似度计算这个矩阵,输出是:
1,2,0.121045506534
1,3,0.461538461538
2,3,0.665750285936
Sim(1,2) = 0.121045506534
我怎么能用python做到这一点?
THX
答案 0 :(得分:1)
import pandas as pd
from scipy import spatial
from itertools import combinations
df = pd.DataFrame(data, columns=['unique_id', 'category_product', 'count'])
pt = df.pivot(index='unique_id', columns='category_product', values='count').fillna(0)
>>> pt
category_product Pants Shirt T-Shirt Top
unique_id
1 3 2 0 0
2 0 1 4 2
3 0 3 2 0
combos = combinations(pt.index, 2)
>>> [(a, b, 1 - spatial.distance.cosine(pt.ix[a].values, pt.ix[b].values))
for a, b in combos]
[(1, 2, 0.12104550653376045),
(1, 3, 0.46153846153846168),
(2, 3, 0.66575028593568275)]