[英]Is it possible to test for significance using seaborn barplots in Python?
[英]Is it possible to do a test of significance for a string occurrence in two datasets in Python
我有两组数据都是从不同来源编译的。 两组数据均包含出现频率高的单词。 我想检查两个数据集中是否存在某个特定单词,如果它们同时存在,是否有可能进行某种意义上的统计检验以证明该单词具有重要意义。
For example:
word = 'apple'
dict1 = {'oranges': 45, 'apple': 34,...., 'x': y}
dict2 = {'apple': 165, 'orange': 12,...., 'x': y}
如果单词“ apple”出现在两个数据集(dict1和dict2)中,则计算单词apple的显着性检验。
弄清在两个来源中都出现的单词很容易:
(set(dict1) & set(dict2))
将字典传递给set
会创建一组字典键,然后&
是集合交集运算符。
对于统计显着性,我们可以做的最简单的检验是卡方检验,它使用一个虚拟变量比较共同每个单词的“一对所有”计数。 您可以在scipy
使用实现。 放在一起,您可以执行以下操作:
from scipy.stats import chisquare
import numpy as np
dict1 = { 'cat': 20, 'dog': 40 }
dict2 = { 'cat': 22, 'dog': 38 }
def get_freqs_for_chisq(dict1, dict2):
for key in (set(dict1) & set(dict2)):
yield key
for d in [dict1, dict2]:
other_freq = sum([v for (k,v) in d.iteritems() if k != key])
freq = d[key]
yield np.array([freq, other_freq])
iter = get_freqs_for_chisq(dict1, dict2)
results = {}
while True:
try:
word = iter.next()
results[word] = dict(zip(('chisq', 'P'),
chisquare(iter.next(), f_exp=iter.next())))
except StopIteration:
break
这会给你这样的输出:
{'cat': {'P': 0.59209697588539778, 'chisq': 0.28708133971291866},
'dog': {'P': 0.59209697588539778, 'chisq': 0.28708133971291866}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.