Help us understand the problem. What is going on with this article?

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

概要

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

移動平均とは

一定区間の平均値を区間をずらしながら算出する平均値。
マイナーなものではないけど、めったに使わない人もいると思うので一応説明。
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~ が算出されている
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした