両方のソースで発生する単語を取得するのは簡単です。
(set(dict1) & set(dict2))
dict を に渡すset
と、辞書のキーのセットが作成されます。次に&
、セット交差演算子です。
統計的有意性について実行できる最も簡単な検定はカイ 2 乗検定であり、ダミー変数を使用して、共通する各単語の「1 対すべて」の数を比較します。で実装を使用できます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}}