概要
データフレームのとある列に対して前日(一つ前のレコード)との変化率や
経過日数(日付の差分)を出したり、
移動平均を出したりする方法を書きます。
移動平均とは
一定区間の平均値を区間をずらしながら算出する平均値。
マイナーなものではないけど、めったに使わない人もいると思うので一応説明。
https://bellcurve.jp/statistics/blog/15528.html
ex) 3日移動平均だと3日づつの平均値を算出することになります。
日付 | 値 | 移動平均 |
---|---|---|
2019-01-01 | 1 | - |
2019-01-02 | 1 | - |
2019-01-03 | 1 | 1 |
2019-01-04 | 4 | 2 |
2019-01-05 | 2 | 2.33 |
2019-01-06 | 1 | 2.33 |
2019-01-07 | 1 | 1.3 |
前提
データフレームはこんなのを使います。
- データフレーム1
- データフレーム2
変化率を出す
データフレーム1のsales列の変動率を
pandasの pct_change を使って計算します。
計算結果を pct_change という列をデータフレームに作ってそこに格納します。
簡単な解説
- 計算式
(その行の値 - 前の行の値) / 前の行の値
例)
(20 - 2) / 2
- 1行目はそれより前のレコードがないのでpct_change列はNaNになる。
- 2行目は1行目が2で2行目は20なので、割合としては900%upなので9.0となる。
差分を出す
数字の差分をだす
データフレーム1のsales列の差分をpandas の diff を使って計算して、
計算結果を diff という列をデータフレームに作って格納します。
今回は数字だ
日付の差分を出す(経過日数を出す)
データフレーム2のdate列のレコード間の経過日数を算出し、
計算結果を diff_date という列を作って格納する。
移動平均を出す
データフレーム1のsales列の3日間(3レコード分)の移動平均を計算し、
計算結果を rolling_mean 列を作って格納します。
簡単な解説
- 1,2行目は3日間(3レコード)分のデータがないのでNaN
- 3行目は (2+20+1)/3 で 7.66~ が算出されている
累積比を出す
df["sales"].cumsum() / df["sales"].sum()