LoginSignup
5
13

pandasで前日と比べての変化率や差分(数字, 日付)を出したり、移動平均を出したりする

Last updated at Posted at 2019-04-30

概要

データフレームのとある列に対して前日(一つ前のレコード)との変化率や
経過日数(日付の差分)を出したり、
移動平均を出したりする方法を書きます。

移動平均とは

一定区間の平均値を区間をずらしながら算出する平均値。
マイナーなものではないけど、めったに使わない人もいると思うので一応説明。
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
スクリーンショット 2019-04-30 23.13.28.png
  • データフレーム2
スクリーンショット 2019-05-01 0.14.09.png

変化率を出す

データフレーム1のsales列の変動率を
pandasの pct_change を使って計算します。
計算結果を pct_change という列をデータフレームに作ってそこに格納します。

スクリーンショット 2019-04-30 23.16.46.png

簡単な解説

  • 計算式
(その行の値 - 前の行の値) / 前の行の値

例)
(20 - 2) / 2 
  • 1行目はそれより前のレコードがないのでpct_change列はNaNになる。
  • 2行目は1行目が2で2行目は20なので、割合としては900%upなので9.0となる。

差分を出す

数字の差分をだす

データフレーム1のsales列の差分をpandas の diff を使って計算して、
計算結果を diff という列をデータフレームに作って格納します。
今回は数字だ

diff.png

日付の差分を出す(経過日数を出す)

データフレーム2のdate列のレコード間の経過日数を算出し、
計算結果を diff_date という列を作って格納する。

スクリーンショット 2019-05-01 0.17.56.png

移動平均を出す

データフレーム1のsales列の3日間(3レコード分)の移動平均を計算し、
計算結果を rolling_mean 列を作って格納します。
スクリーンショット 2019-04-30 23.33.45.png

簡単な解説

  • 1,2行目は3日間(3レコード)分のデータがないのでNaN
  • 3行目は (2+20+1)/3 で 7.66~ が算出されている

累積比を出す

df["sales"].cumsum() / df["sales"].sum()
5
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
13