問題:報告二サンプルK-S統計
ここでは、それぞれが218億個のデータポイントを含む(リストdataset
に)テキストファイルに格納された2つのデータセットをプロットします。これは、データを大き過ぎてメモリとして配列として保持することができません。私はまだそれらをヒストグラムとしてグラフにすることができますが、2 sample KS testでその差を計算する方法は不明です。これは、pltオブジェクト内の各ヒストグラムにアクセスする方法がわからないからです。
例:ここでは
はダミーデータを生成するためのいくつかのコードです:
chunksize = 1000
dataset = ['gsl_test_1.txt', 'gsl_test_2.txt']
for fh in dataset:
# find the min, max, line qty, for bins
low = np.inf
high = -np.inf
loop = 0
for chunk in pd.read_table(fh, header=None, chunksize=chunksize, delimiter='\t'):
low = np.minimum(chunk.iloc[:, 2].min(), low)
high = np.maximum(chunk.iloc[:, 2].max(), high)
loop += 1
lines = loop*chunksize
nbins = math.ceil(math.sqrt(lines))
bin_edges = np.linspace(low, high, nbins + 1)
total = np.zeros(nbins, np.int64) # np.ndarray filled with np.uint32 zeros, CHANGED TO int64
for chunk in pd.read_table(fh, header=None, chunksize=chunksize, delimiter='\t'):
# compute bin counts over the 3rd column
subtotal, e = np.histogram(chunk.iloc[:, 2], bins=bin_edges) # np.ndarray filled with np.int64
# accumulate bin counts over chunks
total += subtotal
plt.hist(bin_edges[:-1], bins=bin_edges, weights=total)
plt.savefig('gsl_test_hist.svg')
質問:
mu = [100, 120]
sigma = 30
dataset = ['gsl_test_1.txt', 'gsl_test_2.txt']
for idx, file in enumerate(dataset):
dist = np.random.normal(mu[idx], sigma, 10000)
with open(file, 'w') as g:
for s in dist:
g.write('{}\t{}\t{}\n'.format('stuff', 'stuff', str(s)))
これは私の二つのヒストグラム(here可能にした)を生成
ほとんどのexamples for KS-statisticsは、生データ/観測/ポイント/などの2つの配列を使用していますが、このアプローチを使用するのに十分なメモリがありません。上記の例につき、どのように私は2つのディストリビューション間のKS統計量を計算するために'gsl_test_1.txt'
と'gsl_test_2.txt'
から(これらの事前に計算ビンにアクセスすることができます
ボーナスカルマ:?! 録音KS統計量とp値グラフ上