试图找到项目之间的相关性,这些项目被构造成数据集的一行。想找到项目集之间的频率相关性。
我不得不承认我完全迷路了,并且到目前为止,我已经尝试使用Google搜索来寻找解决方案将近6个小时。
试图说明以下数据:
#create a table
data = {'Customer': [1, 2, 3, 4],
'Order': ['1 Hamburger, 1 Soda',
'1 Soda, 1 Hamburger, 1 Fries',
'1 Pizza, 2 Soda',
'1 Soda, 1 Ice Cream']}
表格:
Customer Order
0 1 1 Hamburger, 1 Soda
1 2 1 Soda, 1 Hamburger, 1 Fries
2 3 1 Pizza, 2 Soda
3 4 1 Soda, 1 Ice Cream
因此,在这里我们可以看到订单列中的项目没有分开。 所以我用它们的逗号分隔符。
new = df["Order"].str.split(",", n = -1, expand = True)
new.columns.astype('str')
new.rename(columns=lambda x: 'Item'+str(x), inplace=True)
在订单列中拆分项目后,我删除了项目前面的编号,
for i in list(new):
new[i] = new[i].map(lambda x: x.lstrip()[1:] if x is not None else None)
哪个返回此表:
Item0 Item1 Item2
0 Hamburger Soda None
1 Soda Hamburger Fries
2 Pizza Soda None
3 Soda Ice Cream None
到目前为止(我认为)很好,现在是问题所在。
我想看看例如汉堡包和汽水一起购买。 作为回报,这意味着我可以查看项目之间的相关性,因此可以查看例如Hamburger和Fries的相关性。
到目前为止,我在想解决方案可能是这样的(由于我在Pandas中找不到方法来手动制作表格):
example = {'Hamburger': [1,1,0,0],
'Soda': [1,1,1,1],
'Pizza': [0,0,1,0],
'Fries': [0,1,0,0],
'Ice Cream': [0,0,0,1]}
Hamburger Soda Pizza Fries Ice Cream
0 1 1 0 0 0
1 1 1 0 1 0
2 0 1 1 0 0
3 0 1 0 0 1
有没有一种很好的方法来显示项目的相关性?
我是否需要将其转换为就像我在上表中所做的那样,如果是0和1,那么如果假设数据集为100万行,那是最好的方法?
我还担心每行项目数量不均的影响,结果是否会因行的差异而歪斜?
例如,在上表的“汉堡包”和“汽水”中位于第1行,而在第2行中还包含“薯条”,这如何影响相关性?
答案 0 :(得分:1)
制作该表格的更好方法是:
pd.get_dummies(your_table)
要获得相关性,您可以这样做:
your_table.corr()
要绘制相关性,请执行以下操作:
import seaborn as sns
sns.heatmap(your_table.corr())
如果大多数情况下客户购买含汽水和薯条的汉堡包,那么该人在汽水和汽水和汉堡包,薯条之间的相关性就很高。如果汉堡包的薯条较少,而苏打水较多,那么苏打水的相关性就很高。