https://turi.com/products/create/docs/generated/graphlab.toolkits.anomaly_detection.moving_zscore.create.htmlのように、移動するzスコアを計算するためのオープンソース関数はありますか?私はstdを計算するためにpandas rolling_stdにアクセスできますが、それを拡張してローリングzのスコアを計算できるかどうかを見たいと思っています。パンダのデータフレームにおけるローリングzスコアを計算する
答えて
rolling.apply
カスタム関数を使用すると、組み込みのローリング関数(meanやstdなど)を使用するよりも大幅に遅くなります。したがって、平均値とstd圧延の圧延の圧延Zスコアを計算する:
def zscore(x, window):
r = x.rolling(window=window)
m = r.mean().shift(1)
s = r.std(ddof=0).shift(1)
z = (x-m)/s
return z
this page上を転動Zスコアを与えられた定義によれば、直前の現在位置にローリング平均とstdに依存します。この効果を達成するために、が上記で使用されています。以下
、偶数(長さ100の)小さなシリーズのために、zscore
が速くrolling.apply
を使用するよりも5倍以上です。 rolling.apply(zscore_func)
は本質的にPythonループの各ローリングウィンドウに対してzscore_func
を1回呼び出すので、Cython化されたr.mean()
とr.std()
関数を使用する利点は、ループのサイズが大きくなるにつれてさらに顕著になります。 したがって、シリーズの長さが増えるにつれて、速度の利点はzscore
となります。
In [58]: %timeit zscore(x, N)
1000 loops, best of 3: 903 µs per loop
In [59]: %timeit zscore_using_apply(x, N)
100 loops, best of 3: 4.84 ms per loop
これは、ベンチマークのために使用されたセットアップです:
あなた:
import numpy as np
import pandas as pd
np.random.seed(2017)
def zscore(x, window):
r = x.rolling(window=window)
m = r.mean().shift(1)
s = r.std(ddof=0).shift(1)
z = (x-m)/s
return z
def zscore_using_apply(x, window):
def zscore_func(x):
return (x[-1] - x[:-1].mean())/x[:-1].std(ddof=0)
return x.rolling(window=window+1).apply(zscore_func)
N = 5
x = pd.Series((np.random.random(100) - 0.5).cumsum())
result = zscore(x, N)
alt = zscore_using_apply(x, N)
assert not ((result - alt).abs() > 1e-8).any()
おかげさまで@unubtu、素晴らしい答え!私は最初にpandas groupbyの操作をしてからzolling z score計算をしていたので、ローリング・アプリケーションに興味があった – user308827
シフトをコーディングしていただきありがとうございます( - : – piRSquared
は、私たちは、あなたがデータフレームは、このようになりますこれは、データと呼ばれているとしましょう次のコードを実行します。
data_zscore = data.apply(lambda X:。)/ x.expanding(((平均))(xx.expanding)STD())
enter image description hereそれは標準偏差を有していないように、第1行は常にNaN値を有するであろうことに注意してください。
)このコードスニペットは[ //meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は、あなたの投稿の質を向上させるのに本当に役立ちます。将来の読者の質問に答えていることを忘れないでください。あなたのコード提案の理由を知ってください。 –
- 1. パンダのデータフレームにおけるkmeansの損失関数の計算
- 2. パンダのデータフレームのローリング累積積の計算方法
- 3. パンダのデータフレームにPCAをローリング
- 4. データ房で計算Zスコアが、NA
- 5. パンダのデータフレームにおける複数ステップの集計
- 6. パンダ:一度にn行のローリング行すべての平均を計算する
- 7. ApacheSparkでデータフレームAPIのzスコアを計算する方法stucured streaming?私は現在、以下に苦しんだ
- 8. パンダのデータフレーム計算の不安定性
- 9. パンダの行間のデータフレーム計算
- 10. パンダのデータフレームの平均計算
- 11. マルチインデックスのデータフレームのパンダで計算列
- 12. スコアのスピードを計算するには?
- 13. Excelのようなパンダのデータフレーム計算カラムを追加する
- 14. パンダ:データフレームの重複エントリの平均値を計算する
- 15. シリーズオブジェクト(パンダ)内のデータフレームの平均を計算する方法は?
- 16. パンダの行フィルタ/クロス集計をローリングするには?
- 17. パンダの文字列のローリング合計
- 18. IDを持つパンダにおけるデータフレームと配達の日はパンダ
- 19. Google PageSpeedスコア計算
- 20. 並列計算におけるセグメンテーションフォールト(コアダンプ)
- 21. 車両ルーティングにおけるハードスコア計算
- 22. KeyError例外:パンダのデータフレームにおける偽
- 23. マージ2つのパンダにおけるデータフレームと条件
- 24. パンダのデータフレームでローリング操作後にナンズを取り除く
- 25. パンダのデータフレームを再設計する
- 26. パンダのデータフレームに名前を付ける?
- 27. ZスコアをプロットするにはR
- 28. パンダの行計算の最小値を計算する
- 29. パンダ:過去数日間の変数のローリング合計はどのように計算されますか?
- 30. パンダ - ローリングスロープ計算
ええ、 'rolling.apply'を使用してください。 –