モモノキ&ナノネと一緒にPythonで時系列分析を覚えよう(4)
Pandasで時系列データの作成とグラフ描画
時系列分析の続きを始めるね。今回もPandasの使い方を練習するよ。ナノネ、またPandasだけインポートしておいて。
Pandasの準備OK。
import pandas as pd
日付型の値の作り方を以前に少しだけ練習したけど、日付を一度にたくさん生成する方法も覚えよう。Pandasのdate_rangeを使うと効率よく日付が作れるよ。
連続した日付を作りたい場合は.pd.date_range(開始日[時], freq='D', periods=個数)だよ。
今日の日付から5日分作ってみた。
date_index=pd.date_range('2018-02-24', freq='D', periods=5) # 周期に日を指定
date_index
my_df = pd.DataFrame([10,20,30,40,50],
index=date_index,
columns=['val'])
my_df
月毎に作りたい場合は.freqに'M'か'MS'を指定すればできるよ。'M'は月末で'MS'だと月初になるよ。
date_index=pd.date_range('2018-02-24', freq='M', periods=5) # 周期に月(末)を指定
date_index
my_df = pd.DataFrame([10,20,30,40,50],
index=date_index,
columns=['val'])
my_df
date_index=pd.date_range('2018-02-24', freq='MS', periods=5) # 周期に月(初)を指定
date_index
my_df = pd.DataFrame([10,20,30,40,50],
index=date_index,
columns=['val'])
my_df
週間隔で作るには'W'?
'W'でOKだよ。あと、特定の開始曜日も指定できるよ。金曜日を指定したい場合は、freqに'W-FRI'と指定してね。
簡単にできた。便利かも。
date_index=pd.date_range('2018-01-01', freq='W-FRI', periods=5) # 周期に週(金曜始まり)を指定
date_index
my_df = pd.DataFrame([10,20,30,40,50],
index=date_index,
columns=['val'])
my_df
年毎を作ろうとして、freqに'Y'を指定したらエラーで怒られた。
# date_index=pd.date_range('2018-01-01', freq='Y', periods=5)
# -> ValueError: Invalid frequency: Y
年毎は'A'を指定してね。'A'なら年末、'AS'で年初になるよ。
date_index=pd.date_range('2018-01-01', freq='AS', periods=5) # 周期に週(金曜始まり)を指定
date_index
my_df = pd.DataFrame([10,20,30,40,50],
index=date_index,
columns=['val'])
my_df
ややこしいなぁ。。。
便利な機能で、Pandasに格納したデータから簡単にグラフが描けるよ。 ナノネ、日付と値を入れたデータを適当に1年分作ってみて。
import numpy as np
n = 365
date_index=pd.date_range('2018-01-01', freq='D', periods=365) # 日付1年分
values = np.cumsum(np.random.randn(n)) # 正規乱数365個、足し合わせ
my_df = pd.DataFrame({'val': values}, index=date_index)
my_df.head()
モモノキ、データ作ったけでこれでいい?日付は今年1年分、値はNumpyを使って乱数で。
データはそれで十分だよ。ナノネ、Numpyいつのまに覚えたの?
グーグル先生に聞いてみた。
なるほど。グラフ作成はDataFrame(またはSeries)変数名のあとに.plot()とすればOKだよ。インデックスに日付、列データが1つ以上あれば時系列グラフを自動で作成してくるよ。
それと、グラフはMatplotlibの機能を利用して描画されるのでインライン表示用のマジックコマンドも忘れずに。
%matplotlib inline
my_df.plot()
なんかいい感じ?のグラフがでてきた。
グラフ種類は他にも沢山あるよ。データ内容に応じて活用できそうなものを調べてみてね。
最後にデータのダウンサンプリングを学習しておこう。日次データを週単位、月単位などに集約することができるよ。サンプルサイズを変更するには、resample(周期指定文字)を使えばOKだよ。利用する場合は値の集約方法もあとに続けて指定する必要があるよ。
たとば月毎で集約、値に平均値(mean)を適用するときは、DataFrame変数名.resample('M').mean()とすれば、ダウンサンプリングができるよ。
my_df_down = my_df.resample('M').mean() # 月(末)単位、値は平均化
my_df_down
うまくいったみたい。日次データが月次データに変更できた。
ナノネ、さっき覚えたグラフの作成方法で、ダウンサンプリングしたデータもプロットしてみて。
plot()でOK。
my_df_down.plot() # ダウンサンプリングした月次データ
参考までに2つのデータを同じグラフにプロットしてみたよ。(月次の方のデータが月初?でプロットされちゃったけど、気にしないことにするね)
my_df_down = my_df_down.rename(columns={'val': 'val_month'}) # 列名(ラベル)変更
axis = my_df.plot() # 日次
my_df_down.plot(ax=axis) # 月次
次回は飛行機乗客数のデータを使って、時系列分析の練習を進めていくよ。
飛行機、ラジャー。
0 件のコメント :
コメントを投稿