【问题标题】:"Correlation matrix" for strings. Similarity of nominal data字符串的“相关矩阵”。名义数据的相似性
【发布时间】:2019-01-20 17:33:14
【问题描述】:

这是我的数据框。 df

  store_1      store_2         store_3         store_4     

0 banana      banana           plum            banana
1 orange      tangerine        pear            orange
2 apple       pear             melon           apple
3 pear        raspberry        pineapple       plum
4 plum        tomato           peach           tomato

我正在寻找一种方法来计算商店中同时出现的次数(以比较它们的相似性)。

【问题讨论】:

  • 我正在考虑使用 df["store_1"] = df["store_1"].astype('category').cat.codes,但这会将相似的类别分配给不同商店的不同商品.
  • 为了更好的解释:例如:store_1与store 2有2个交集,与store_3有2个交集,与store_4有4个交集...等等。寻找相应的计数和可视化方法。 ——
  • 随着数据集中每个商店的“产品”数量增加,可能很难简洁地可视化这一点,除非您应用规则来消除低频项目。无论哪种方式,“杂货店”(或您在此处比较的任何东西)都具有提供高基数的潜力。

标签: python python-3.x pandas dataframe correlation


【解决方案1】:

你可以试试这样的

import itertools as it
corr = lambda a,b: len(set(a).intersection(set(b)))/len(a)
c = [corr(*x) for x in it.combinations_with_replacement(df.T.values.tolist(),2)]

j = 0
x = []
for i in range(4, 0, -1): # replace 4 with df.shape[-1]
    x.append([np.nan]*(4-i) + c[j:j+i])
    j+= i
pd.DataFrame(x, columns=df.columns, index=df.columns)

产量

        store_1 store_2 store_3 store_4
store_1 1.0     0.4     0.4     0.8
store_2 NaN     1.0     0.2     0.4
store_3 NaN     NaN     1.0     0.2
store_4 NaN     NaN     NaN     1.0

【讨论】:

    【解决方案2】:

    如果您想估计商店与其产品的相似性,那么您可以使用:

    One hot encoding

    那么每个商店可以用一个向量来描述,长度为n =所有商店中所有产品的数量,例如:

    香蕉 橙 苹果 梨 李子 橘子 覆盆子 番茄 瓜 . . .

    Store_1 然后被描述为 1 1 1 1 1 0 0 0 0 0 ... Store_2 1 0 0 1 0 1 1 1 0 ...

    这为您留下了一个数值向量,您可以在其中计算差异度量,例如欧几里得距离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      相关资源
      最近更新 更多