寻找多个变量与目标值之间的相关性

Finding correlation between multiple variables and a target value

我有一堆单词,取自对一家酒店的评论。 例如

array(['advantage', 'advice', 'anniversary', 'arrived', 'aveda', 'bangs',
       'bath', 'bed', 'check', 'clean', 'closing', 'comfortable', 'deal',
       'did', 'disappointed', 'distance', 'doors', 'easy', 'evening',
       'existent', 'expensive', 'experience', 'goldfish', 'good', 'got',
       'great', 'hallway', 'having', 'hear', 'heard', 'high', 'hotel',
       'just', 'late', 'like', 'little', 'location', 'longer', 'loud',
       'maybe', 'morning', 'music', 'neck', 'neighbors', 'nice', 'night',
       'noisy', 'non', 'not', 'opening', 'overall', 'parking', 'pay',
       'people', 'pillows', 'previous', 'products', 'quick', 'reviews',
       'room', 'shopping', 'size', 'soundproof', 'stay', 'staying',
       'stiff', 'taken', 'talking', 'took', 'touch', 'valet', 'view',
       'walking', 'woke'], dtype='<U12')

然后我得到了该酒店在该评论中的评分
例如,在这种情况下,酒店获得了 4 星。

我有大约 2 万条评论。

我正在寻找尝试找出单词与评论之间的相关性。

例如,人们可能会认为包含“干净”、“很棒”、“喜欢”、“推荐”等词的评论比包含“肮脏”、“不喜欢”、“小”等词的评论获得更高的星标", "令人失望"

我尝试使用 pandas corrcorrwith 函数来解决这个问题,还使用 ​​NumPy 来计算相关性,但我无法让它工作并产生良好的结果.

我不是 pandas 专家,但我可以提供一种可能的方法。 您可以创建一个字典,其中键是一个词,值是与该词相关的酒店星级列表。 假设您的数据是一个代表酒店的字典列表,并且至少具有以下键:分数、单词。其中 score - 是酒店评分,words - 你的话数据

from collections import defaultdict
word_rates = defaultdict(list())
for hotel in hotels:
    for word in hotel['words']:
        word_rates.append(hotel['score'])

现在你有每个单词的分数,像这样:

{
    'bad': [1, 2, 1, 2, 2, 3, 2],
    'great': [4, 5, 5, 4, 4, 5, 4],
    ...
}

如何解读由你决定,但计算good/bad分数应该可以给你一个粗略的估计。

corrcorrwith是为数字列设计的。为了您的目的,请查看:

Forthmann, Boris. (2015). Re: Can I use Pearson’s correlation coefficient to know the relation between perception and gender, age, income?. Retrieved from:

https://www.researchgate.net/post/Can_I_use_Pearsons_correlation_coefficient_to_know_the_relation_between_perception_and_gender_age_income/567f17ed61432567d88b45e8/citation/download.

你需要想出一个代码来给每个词一个从好到坏的排名,从排名较低的好形容词开始到坏的具有更高的等级。我会首先对它们进行排序,然后给它们一个数字代码来反映 good/bad 一个词的含义。 请注意,并非所有单词都需要指定代码。在这种情况下,0 就可以了。

我会从类似

的内容开始
words.sort()
word_coded=dict([[x,0] for x in words])

会给你一本字典

{'advantage': 0,
 'advice': 0,
 ......
 'bed': 0,
 'check': 0,
 'clean': 0,
 ...
 'comfortable': 0,
 'deal': 0,
 'did': 0,
 ...
 'disappointed': 0,

字典比列表更容易使用。然后我会说,例如

 words_coded['advantage']=10
 ........
 words_coded['disappointed']=120

等等。您将不得不手动执行此操作或提出某种编码算法。无论哪种方式,一旦你对你的单词进行排名,你就可以使用 non parametric correlation like Spearman's 来找出你的相关系数。

Spearman 相关系数 不做任何假设,因为它只对值进行排名,然后使用排名计算相关性。另一方面,Pearson 假设变量呈正态分布,在这种情况下我不推荐它。