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

2024-10-01 00:15:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列的单词,摘自对一家酒店的评论。 例如

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')

然后我得到了该酒店在本次审查中的评级
e、 g在这种情况下,酒店获得了4颗星

我在大约2万篇评论中也有同样的评论

我想看看这些词和评论之间的关系

例如,有人可能会认为,与“脏”、“不喜欢”、“小”、“令人失望”的评论相比,带有“干净”、“很棒”、“喜欢”、“推荐”等词的评论会获得更高的星级

我试图用pandascorrcorrwith函数来处理这个问题,并使用NumPy来计算相关性,但我无法让它工作并产生良好的结果


Tags: cleancheck评论酒店单词arrayclosingbed
3条回答

我不是熊猫专家,但我可以提供一种可能的方法。 您可以创建一个dict,其中关键字是一个单词,value是与该单词相关的酒店星级列表。 让我们假设您的数据是一个dict列表,它表示酒店,并且至少有以下键:分数、单词。其中score-是酒店得分,words-您的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],
    ...
}

这取决于你如何解释它,但计算好/坏分数应该给你一个粗略的估计

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

你需要想出一个代码,让每个单词从好到坏都有一个等级,从等级较低的好形容词开始,到等级较高的坏形容词。我将首先对它们进行排序,然后给它们一个数字代码,以反映一个单词的好坏请注意,并非所有单词都需要指定代码。在这种情况下,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 correlationlikeSpearman's来找出你的相关系数

斯皮尔曼的相关系数不作任何假设,因为它只对值进行排序,然后使用排序计算相关性。另一方面,Pearson's假设变量为正态分布,我不建议在这种情况下使用它。

相关问题 更多 >