私は現在、timeseriesの解析を行うアルゴリズムをリファクタリングする過程にあります。時系列のグループ化されたローリング統計を生成するためにtimeseriesをラップします
アルゴリズムは、timeseriesを24hチャンクにスライスしてDataFrame
を生成し、各列が24時間のtimeseriesデータで構成されるように並べます。
次のステップは、その日の(ローリング)統計を前の7日(列)の結合(ローリング)統計と比較することです(データのSNRは非常に悪いそれを強化するために日数を組み合わせる)。問題は、非常に遅い、からdf.loc[]
経由でスライスを取るPython自体のforループです。
私はアルゴリズムをスピードアップするためにネイティブパンダの方法をできるだけ使用したいと思いますが、私はこの時点でちょっと立ち往生しています。
私はそう
[[day 0] [day 1] [day 2] [day 3] [day 4] [day 5] [day 6] [nan..] [nan..] [nan..] [nan..] [nan..] [nan..] [nan..] ...
[nan..] [day 1] [day 2] [day 3] [day 4] [day 5] [day 6] [day 7] [nan..] [nan..] [nan..] [nan..] [nan..] [nan..] ...
etc.]
ような大きな対角線DataFrame
にデータを配置する必要があり、代わりにループの1つのコマンドで(前の7日から構成される)ローリング「の参照」の統計情報を生成すると仮定それから、単にdf.rolling(foo).whatever()を適用することができます。
私はdf.groupby(pd.TimeGrouper("1d"))
の助けを借りて上記のようなDataFrame
を生成しようとしましたが、私はループなしでそれを行う方法を考えることができません。
誰かがこのようなフレームを生成する方法を知っている場合、またはこれに取り組むためのよりよい方法を考えることができる場合は、私は助けていただければ幸いです。
編集: これについていくつかのより多くの思考、DataFrame
は、各要素は、データの24時間の時系列であるハンケル行列のサブセットのように見えるこの
[[day 0] [day 1] [day 2] [day 3] [day 4] [day 5] [day 6]
[day 1] [day 2] [day 3] [day 4] [day 5] [day 6] [day 7]
etc.]
ようになります。