2016-03-30 8 views
2

コンピュータのメモリに収まらない要素の集合を持つ非常に大きな配列があるとします。 Pythonでこの配列の平均値、中央値、標準偏差、およびその他の要約統計値をどのように計算しますか?Pythonの大規模配列のサマリー統計をインクリメンタルに計算する

平均値を計算する数学を漸進的に説明し、リストやイテレータオブジェクトをとるPython関数も提供していますが、必ずしもイテレータオブジェクトにアクセスできない場合があるため、 collections.Counterと同様に動作します。しかし、stdminmaxmedianskewnesskurtosisなどのようなものを計算するにはどうすればよいですか?

次のコードは、増分meanminmaxを実装し、残りはフィットする場所を示して、最小限の作業例です:

class Inc_sumstats(object): 
    def __init__(self): 
     self.length = 0 
     self.mean = 0 
     #self.std = 0 
     self.min = np.inf 
     self.max = 0 
     #self.median = 0 
     #self.skewness = 0 
     #self.kurtosis = 0 

    def update(self, num): 
     self.length += 1 
     self.mean = (self.mean * (self.length - 1) + num)/self.length 
     #self.std = ... 
     self.min = num if num < self.min else self.min 
     self.max = num if num > self.max else self.max 
     #self.median = ... 
     #self.skewness = ... 
     #self.kurtosis = ... 
     return self 


更新:

I私はこのサイトのsimilar questionsを知っていますが、私は解決策が見つかっていません。うん。私のバックグラウンド研究で何かが欠けている場合は、質問をリンクしたり、重複としてマークしてください。

+0

はどのようにメモリ内にない場合は、この配列を格納していますか? – Natecat

+0

配列をインクリメントするときに平均値が変化するので、最初からstdを再度計算する必要があると思います。 – lordingtar

+0

@Natecat配列は、電子メール文字の長さ、または他のタイプのリアルタイムのデータストリームの大規模なストリームになる可能性があります。それとも大きなハードドライブに保存することもできます。 –

答えて

2

あなたが探しているのは、オンラインアルゴリズムの注文統計情報です。オンラインアルゴリズムは、いくつかの統計のためのジェネレータのようなものです。メモリやディスクから読み込んだデータを蓄積するので、プログラマはメモリ管理の問題を処理しても正しい出力を得ることができます。

あり、これらのアルゴリズムの実装の背後にあるCS理論の多くは、ですが、あなたはここでそれについての詳細を読むことができます:https://en.wikipedia.org/wiki/Selection_algorithm#Online_selection_algorithm

数学とはいえ、やや直感的である:あなたのクラスは、要素の数を更新し、再計算しなければなりません平均値、最小値、最大値、尖度、std-devなどを前の値の関数として返し、これらの値をタプルとして返します。私は、あなたは、オンライン統計アルゴリズムを構築する方法についての徹底的な答えを、この質問を参照してください。

"On-line" (iterator) algorithms for estimating statistical median, mode, skewness, kurtosis?

+0

リンクされた質問は基本的にITです。私はこの質問タイトルを更新し、Pythonでの実装を明示的に求めています。そうでなければ、これは明らかに重複しているからです。あなたの方向性に感謝しますが、+1は受け入れません。 –

関連する問題