寻找多个变量与目标值之间的相关性
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 corr
和 corrwith
函数来解决这个问题,还使用 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分数应该可以给你一个粗略的估计。
corr
和corrwith
是为数字列设计的。为了您的目的,请查看:
Forthmann, Boris. (2015). Re: Can I use Pearson’s correlation
coefficient to know the relation between perception and gender, age,
income?. Retrieved from:
你需要想出一个代码来给每个词一个从好到坏的排名,从排名较低的好形容词开始到坏的具有更高的等级。我会首先对它们进行排序,然后给它们一个数字代码来反映 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 假设变量呈正态分布,在这种情况下我不推荐它。
我有一堆单词,取自对一家酒店的评论。 例如
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 corr
和 corrwith
函数来解决这个问题,还使用 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分数应该可以给你一个粗略的估计。
corr
和corrwith
是为数字列设计的。为了您的目的,请查看:
Forthmann, Boris. (2015). Re: Can I use Pearson’s correlation coefficient to know the relation between perception and gender, age, income?. Retrieved from:
你需要想出一个代码来给每个词一个从好到坏的排名,从排名较低的好形容词开始到坏的具有更高的等级。我会首先对它们进行排序,然后给它们一个数字代码来反映 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 假设变量呈正态分布,在这种情况下我不推荐它。