数据集中文本元素频率之间的相关性

时间:2019-05-09 11:22:58

标签: python python-3.x pandas statistics

试图找到项目之间的相关性,这些项目被构造成数据集的一行。想找到项目集之间的频率相关性。

我不得不承认我完全迷路了,并且到目前为止,我已经尝试使用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行中还包含“薯条”,这如何影响相关性?

1 个答案:

答案 0 :(得分:1)

制作该表格的更好方法是:

pd.get_dummies(your_table)

要获得相关性,您可以这样做:

your_table.corr()

要绘制相关性,请执行以下操作:

import seaborn as sns
sns.heatmap(your_table.corr())

如果大多数情况下客户购买含汽水和薯条的汉堡包,那么该人在汽水和汽水和汉堡包,薯条之间的相关性就很高。如果汉堡包的薯条较少,而苏打水较多,那么苏打水的相关性就很高。