Speichereffizientes statistisches Verteilungsmodul

9

Ich möchte einige Daten (z. B. Antwortzeiten für Web-Services) analysieren und verschiedene statistische Informationen erhalten, hauptsächlich Perzentile / Quantile und Vorhandensein herausragender Werte.

Ich kenne Statistics :: Deskriptive , möchte jedoch nicht alle Daten im Speicher ablegen . Auf der anderen Seite, meine Ergebnisse um ein paar Prozent wäre in Ordnung, ich interessiere mich nur für große Unterschiede.

Also kam ich auf die folgende Idee: Erstelle ein Array von logarithmischen Buckets und zähle Datenpunkte, die in jedem Bucket landen. Wenn die Daten über 6 Größenordnungen verteilt sind und die garantierte Genauigkeit von 1% immer noch bei 6 * log 10 / log 1.01 =~ 1400 buckets liegt, ist das völlig in Ordnung (36 kb Speicher bei der aktuellen Perl-Skalargröße).

Das Zählen von Perzentilen ist einfach - addieren Sie einfach Bucket-Zähler, bis $sum $percentage * $total_count überschreitet.

Bevor ich jedoch mit dem Schreiben des eigentlichen Codes beginne, möchte ich fragen, welche Speichermodule (für Perl) und welche Algorithmen bereits existieren.

Ich habe diese Frage gefunden, und es gibt eine ähnliche Methode, die in einer der Antworten vorgeschlagen wird. Ich habe jedoch keine vorgefertigte Perl-Implementierung gefunden.

Dies ist eine leicht bearbeitete Version dieser Perlmonk Frage .

    
Dallaylaen 10.06.2013, 10:52
quelle

1 Antwort

1

Da meine Suche bisher nicht erfolgreich war, habe ich ein neues Modul Statistics :: Deskriptive gestartet: : LogScale Ich hoffe, es wird hilfreich sein.

Es folgt im Allgemeinen der API von Statistics :: Descriptive :: Full , mit einigen kleineren Zusätzen (wie hinzugefügt zentrale und standardisierte Momente beliebiger Kräfte). Ich plane auch, Statistics :: Deskriptive :: Weighted genauer unter die Lupe zu nehmen.

%Vor%     
Dallaylaen 29.06.2013, 10:29
quelle

Tags und Links