コンピュータのメモリに収まらない要素の集合を持つ非常に大きな配列があるとします。 Pythonでこの配列の平均値、中央値、標準偏差、およびその他の要約統計値をどのように計算しますか?Pythonの大規模配列のサマリー統計をインクリメンタルに計算する
平均値を計算する数学を漸進的に説明し、リストやイテレータオブジェクトをとるPython関数も提供していますが、必ずしもイテレータオブジェクトにアクセスできない場合があるため、 collections.Counter
と同様に動作します。しかし、std
、min
、max
、median
、skewness
、kurtosis
などのようなものを計算するにはどうすればよいですか?
次のコードは、増分mean
、min
とmax
を実装し、残りはフィットする場所を示して、最小限の作業例です:
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を知っていますが、私は解決策が見つかっていません。うん。私のバックグラウンド研究で何かが欠けている場合は、質問をリンクしたり、重複としてマークしてください。
はどのようにメモリ内にない場合は、この配列を格納していますか? – Natecat
配列をインクリメントするときに平均値が変化するので、最初からstdを再度計算する必要があると思います。 – lordingtar
@Natecat配列は、電子メール文字の長さ、または他のタイプのリアルタイムのデータストリームの大規模なストリームになる可能性があります。それとも大きなハードドライブに保存することもできます。 –