Problem:meldet Zwei Probe K-S-Statistik aus zwei vorberechneten Histogrammen
Hier plotten I 2 Datensätze in Textdateien gespeichert (in der Liste dataset
), die jeweils 21,8 Milliarden Datenpunkte. Dies macht die Daten zu groß, um sie als Array im Speicher zu halten. Ich bin immer noch in der Lage, sie als Histogramme darzustellen, aber ich bin mir nicht sicher, wie ich ihre Differenz über eine 2 sample KS test berechnen kann. Dies liegt daran, dass ich nicht herausfinden kann, wie auf jedes Histogramm im PLT-Objekt zugegriffen wird.
Beispiel:
Hier ist ein Code Dummy-Daten zu erzeugen:
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)))
Diese meinen beiden Histogramme erzeugt (ermöglicht here):
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')
Frage:
Die meisten examples for KS-statistics verwenden zwei Arrays von Rohdaten/Beobachtungen/Punkte/etc, aber ich habe nicht genug Speicher, um diesen Ansatz zu verwenden. Per Beispiel oben, wie kann ich diese vorberechneten Bins zugreifen (von 'gsl_test_1.txt'
und 'gsl_test_2.txt'
die KS-Statistik zwischen den beiden Verteilungen berechnen
Bonus Karma:? Bilanz der KS-Statistik und p-Wert auf dem Graphen