【问题标题】:Is there a way to get correlation with string data and a numerical value in pandas?有没有办法在熊猫中获得字符串数据和数值的相关性?
【发布时间】:2018-07-30 02:31:36
【问题描述】:

我试图在 pandas 中找到相关性,这给我带来了一些困难。本质上,我想回答以下问题:给定一个句子、一个值和一个数据框,哪个词将最好的与更高的值相关联?最坏的情况呢?

简单的例子:

Sentence      | Score
"hello there" | 100
"hello kid"   | 95
"there kid"   | 5

我希望在这里看到“你好”这个词和得分的高相关值。希望这是有道理的——如果这在 Pandas 中是可能的,我真的很感激知道!

如果有什么不清楚的地方请告诉我。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这是一种方法。取每个字符串中每个单词出现的平均分数。例如“hello”接收 97.5,“there”接收 52.5 [(100 + 5) / 2],等等

    from collections import defaultdict
    import numpy as np
    
    df = pd.DataFrame.from_dict({'Score': {0: 100, 1: 95, 2: 5},
                                 'Sentence': {0: 'hello there', 1: 'hello kid', 2: 'there kid'}})
    
    df['WordList'] = df['Sentence'].str.split(' ')
    
    d = defaultdict(list)
    
    for idx, row in df.iterrows():
        for word in row['WordList']:
            d[word].append(row['Score'])
    
    d = {k: np.mean(v) for k, v in d.items()}
    
    {'hello': 97.5, 'there': 52.5, 'kid': 50.0}
    

    【讨论】:

      【解决方案2】:

      我不确定 pandas 是否是您要查找的内容,但是是的,您可以:

      import pandas as pd
      
      df = pd.DataFrame([ ["hello there", 100],
                          ["hello kid",   95],
                          ["there kid",   5]
                        ], columns = ['Sentence','Score'])
      
      s_corr = df.Sentence.str.get_dummies(sep=' ').corrwith(df.Score/df.Score.max())
      print (s_corr)
      

      会还给你

      hello    0.998906
      kid     -0.539949
      there   -0.458957
      

      详情见pandas帮助

      1. str.get_dummies()
      2. corrwith()

      【讨论】:

      • 谢谢,这看起来很棒。你说 pandas 可能不是我要找的东西——你有什么不同的图书馆推荐吗?我使用 pandas 是因为 a) 我想做得更好 b) 这就是现在的数据。
      • 据我了解,pandas 是具有优势的出色内存 RDBMS。使用这些好处,我可以用 oneliner 准确回答您的问题 - 它很有趣并且对探索非常有帮助。但在现实世界中,你会遇到很多问题。从str.get_dummies 生成的巨大稀疏矩阵的内存消耗开始,该矩阵称为词袋 (BoW),形状为样本*所有数据集的字典。
      • 在接下来的步骤中,您会发现某些词(如“the”、“a”、“is”)是无意义的频繁出现,您需要删除它们或使用 TF-IDF 调整它们的权重转型等等。所有这些都是自然语言处理 (NLP) 的一部分,因此如果您要进行文本深度分析,我建议您使用专门的 NLP 库,例如 ntlk。如果您要根据文本和其他因素预测分数,请查看 ML 框架 sklearn,它支持 NLP 的所有基础知识。
      猜你喜欢
      • 2017-08-28
      • 2020-02-22
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      相关资源
      最近更新 更多