いくつかのデータ (Web サービスの応答時間など) を分析し、さまざまな統計情報、主にパーセンタイル/クォンタイル、優れた値の存在を取得したいと考えています。
Statistics::Descriptiveについては知っていますが、すべてのデータをメモリに保存したくありません。一方で、結果が数 % ずれていても問題ありません。私は大きな違いしか気にしません。
そこで、次のアイデアを思いつきました: 対数バケットの配列を作成し、各バケットに到達するデータ ポイントをカウントします。データを 6 桁に分散させ、1% の精度を保証しても、6 * log 10 / log 1.01 =~ 1400
完全に問題のないバケットが残ります (現在の Perl のスカラー サイズを考えると、36 kb のメモリ)。
$sum
パーセンタイルのカウントは簡単です。超過するまでバケット カウンタを加算するだけ$percentage * $total_count
です。
ただし、実際のコードを書き始める前に、どのメモリ効率の高い統計モジュール (Perl 用) とアルゴリズムが既に存在するかを尋ねたいと思います。
私はこの質問を見つけました。回答の1つに同様の方法が提案されています。ただし、既製の Perl 実装は見つかりませんでした。
これは、このPerlmonks の質問を少し編集したバージョンです 。