在Python中,是否可以對兩個數據集中的字符串出現進行重要性測試?

2024-04-19 11:58:04 发布

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

我有两组数据都是从不同的来源汇编的。这两组数据都包含出现频率较高的单词。我想检查两个数据集中是否都存在某个词,如果存在,是否有可能进行某种统计意义的检验,以证明该词是有意义的。你知道吗

For example:

word = 'apple'
dict1 = {'oranges': 45, 'apple': 34,...., 'x': y}
dict2 = {'apple': 165, 'orange': 12,...., 'x': y}

如果单词“apple”同时出现在两个数据集中(dict1和dict2),则计算单词apple的显著性检验。你知道吗


Tags: 数据证明appleforexample来源单词word
1条回答
网友
1楼 · 发布于 2024-04-19 11:58:04

获取两个来源中出现的单词非常容易:

(set(dict1) & set(dict2))

将dict传递给set会创建一组字典的键,然后&就是set intersection操作符。你知道吗

我们可以做的最简单的统计显著性检验是卡方检验,使用一个虚拟变量来比较每个共同单词的“一对所有”计数。您可以在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}}

相关问题 更多 >