繁体   English   中英

是否可以对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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM