Pythonnumpyはローリングケースを実装します

パンダと比較すると、numpyには直接的なローリング方法はありませんが、numpyにはCコード内でこのループを実行できるようにするトリックがあります。

これは、ウィンドウサイズと同じサイズと適切なストライドを追加することで実現されます。

import numpy as np
data = np.arange(20)
def rolling_window(a, window):
 shape = a.shape[:-1]+(a.shape[-1]- window +1, window)
 strides = a.strides +(a.strides[-1],)return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)rolling_window(data,10)
Out[12]:array([[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9,10],[2,3,4,5,6,7,8,9,10,11],[3,4,5,6,7,8,9,10,11,12],[4,5,6,7,8,9,10,11,12,13],[5,6,7,8,9,10,11,12,13,14],[6,7,8,9,10,11,12,13,14,15],[7,8,9,10,11,12,13,14,15,16],[8,9,10,11,12,13,14,15,16,17],[9,10,11,12,13,14,15,16,17,18],[10,11,12,13,14,15,16,17,18,19]])

np.mean(rolling_window(data,10))
Out[13]:9.5

np.mean(rolling_window(data,10),-1)
Out[14]:array([4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5])

補足知識:パンダのローリングウィンドウローリング機能と拡張ウィンドウ拡張機能

データ分析では、特に時系列データを分析する場合、移動平均の計算など、固定長ウィンドウのシーケンスでローリング計算と分析を実行する必要があることがよくあります。シーケンスに従って新しいシーケンスを取得する必要がある限り、ウィンドウのスクロールが必要になることがよくあります。パンダでは、DataFrameとSeiesの両方にrolling()と呼ばれるウィンドウをローリングするための関数があります。具体的なパラメータは次のとおりです。DataFrame.rolling(window、min_periods = None、center = False、win_type = None、on = None、axis = 0、closed = None)

パラメータwindowは、正の整数またはオフセット(時間間隔の長さと見なすことができます)にすることができ、ウィンドウの長さはこのパラメータによって設定されます。min_periodsは、ウィンドウのメンバー数がこの設定より少ない場合に、ウィンドウで必要な最小観測値を表します。このウィンドウの値は、計算後にNaNを返します。たとえば、min_periodsが3に設定されているが、現在のウィンドウにメンバーが2つしかない場合、ウィンドウの対応する位置はnull値を返します。centerパラメーターがTrueに設定されている場合、ウィンドウカバレッジ間隔を取得するときに、現在のラベルを中央として両側に配置することを意味します。Falseの場合、現在のラベルをウィンドウの右端として取得し、左側に移動することを意味します。デフォルトはFalseです。 Trueの場合、ウィンドウの長さが奇数の場合、中央の位置である中央の位置が適切に決定されますが、長さが偶数の場合、デフォルトの中央の位置は右中央の位置です。win_typeパラメーターはさまざまなウィンドウタイプを示します。 、このパラメータを使用してウィンドウメンバーに異なる重みを割り当てることができます。デフォルトは等しい重みです。onパラメータは、インデックスのデフォルトではなく、特定の列がローリング用に指定されていることを示します。onパラメータが指定されている場合、指定されていることに注意してください。列は時系列である必要があります。そうでない場合、ローリング機能は失敗します。

簡単な例を見てみましょう。次の例では、ウィンドウの長さが3で、min_periodsが2に設定されている場合、最初のウィンドウには値1が1つしかないため、結果の最初の要素はNaNであり、min_periodsは2であるため、少なくとも2つの数値が含まれている必要があります。 OK、最初の値はnull値であり、2番目の要素から始まるnull以外の値があります。これがmin_periodsパラメーターの意味です。 centerがTrueに設定されている場合、ウィンドウの長さが偶数4の場合、たとえばウィンドウ[a、b、c、d]の場合、center値はcenterの右側の位置、つまりcであるため、最初のウィンドウは以下に示すように、要素は1と2であるため、合計は3になります。

import pandas as pd
import numpy as np
df=pd.DataFrame([1,2,3,5],columns=['a'])
df
	a
01122335
 
df.rolling(3,min_periods=2).sum()
  a
0 NaN13.026.0310.0
 
df.rolling(4,min_periods=2,center=True).sum()
  a
03.016.0211.0310.0

ローリング関数は、ウィンドウオブジェクトまたはローリングサブクラスを返します。返されるウィンドウの値は、オブジェクトのmean()、sum()、std()、count()などの関数、およびオブジェクトのapply(func)を呼び出すことで計算できます。 )関数、カスタム関数を使用してウィンドウの特定の値を計算します。詳細については、ドキュメントを参照してください。

上記から、ローリングウィンドウは前方と両側の値を取ることができますが、後方の値はありません。実際には、元のシーケンスを逆の順序で配置してから、値を前方に取るだけで、後方の値を実現できます。 DataFrame.expanding(min_periods = 1、center = False、axis = 0)である拡張関数についてもう一度説明します。パラメーターの意味は、固定ウィンドウ長ではなく、その長さが常に拡張されていることを除いて、ローリングと同じです。

python numpyを使用してローリングを実装する上記の例は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。

Recommended Posts

Pythonnumpyはローリングケースを実装します
Pythonはスーパーマリオを実装しています
Pythonはtic-tac-toeゲームを実装しています
Pythonはtic-tac-toeゲームを実装しています
Pythonはマンマシンゴバンを実装します
PythonはTetrisゲームを実装しています
Pythonは画像スティッチングを実装しています
Pythonはminesweeperゲームを実装しています
Pythonはスキャンツールを実装しています
Pythonはしきい値回帰を実装します
Pythonは地雷除去ゲームを実装しています
Pythonは電子辞書を実装しています
Pythonは推測ゲームを実装しています
Pythonは単純なタンクバトルを実装します
Pythonはudpチャットウィンドウを実装します
PythonはWeChat飛行機ゲームを実装しています
Pythonは単語推測ゲームを実装しています
Pythonは推測ゲームを実装しています
Pythonは駐車場管理システムを実現
Pythonはデジタル爆弾ゲームを実装しています
PythonはTCPファイル転送を実装します
OpenCVPythonはパズルゲームを実装しています
Pythonは単純なtic-tac-toeゲームを実装しています
Pythonはパスワード強度検証を実装します
Pythonは車の管理システムを実装しています
Pythonはコードブロックフォールディングを実装します
Pythonはパノラマ画像スティッチングを実装しています
PythonはSMTPメール送信を実装します
Pythonは多次元配列ソートを実装しています
PythonがFTP機能を実装する方法
Pythonは平均シフトクラスタリングアルゴリズムを実装しています
Pythonは検証コード認識を実装します
Pythonは勾配降下法を実装しています
Pythonはテキストバージョンのminesweeperを実装しています
pythonコードは大文字と小文字を区別しますか
Pythonは画像スティッチング機能を実装しています
Pythonは実店舗のゲームを実装しています
Pythonは学生のパフォーマンス評価システムを実装しています
Pythonがメール機能を実装する方法
Pythonは単にスネークゲームを実装します
PythonでNumpyを使い始める
Python3はシングルトンデザインパターンを実装しています
Pythonは為替レート変換操作を実装します
Pythonは文字列と数値のスプライシングを実装します
Pythonは10の古典的なソートアルゴリズムを実装しています
PythonはユニバーサルWebフレームワークを実装しています
Python開発でのnumpyの使用
Pythonは、メールを送信するために126のメールボックスを実装しています
PythonはAIフェイスチェンジ機能を実装しています
Pythonは最も急な降下方法を実装します
Pythonは実際の銀行システムを実装しています
Pythonはデジタル爆弾ゲームプログラムを実装しています
Pythonはftpファイル転送機能を実装しています
Pythonはユーザー名とパスワードの検証を実装しています
Pythonがタイマー機能を実装する方法
Pythonは航空機戦争プロジェクトを実装します
Pythonは写真の水平ステッチを実装しています
PythonはGIFグラフを逆さまに実装します