0

異なるソースからコンパイルされた 2 つのデータ セットがあります。両方のデータセットには、出現頻度のある単語が含まれています。特定の単語が両方のデータセットに存在するかどうかを確認したいと思います。存在する場合、その単語が重要であることを証明するために統計的に有意性のテストを実行することは可能ですか。

For example:

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

'apple' という単語が両方のデータセット (dict1 と dict2) に含まれている場合、apple という単語の有意性検定を計算します。

4

1 に答える 1

0

両方のソースで発生する単語を取得するのは簡単です。

(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}}
于 2014-01-03T03:41:05.793 に答える