今回の記事は「matplotlib」と「statsmodel.api」を使用して時系列のデータをグラフ描写をするとともに時系列データを扱う上でグラフの成分を乖離させて表示分析を行う方法について記事にしていきます。
時系列データをグラフで描写する際の前準備
今回のPython環境はDocker上に構築しております。imageはTensorFlowを利用しております。Pythonバージョンは3.6.5です。
jupyter notebookをdocker上で開くことでブラウザでdockerコンテナ内を操作できるのでおすすめです。環境構築方法はこちらのリンクからご参照ください。
まずは必要なモジュールをimportする必要があります。下記コマンドを使用して下さい。jupyter上で実行する場合は「!」を先頭につけて下記コマンドを実行して下さい。
pip install pandas numpy matplotlib statsmodel
次に今回使用するデータセットをダウンロードします。今回は私が参考にした記事の中で使用されていた航空会社の乗客数の水位を表すcsvファイルにします。こちらのURLからダウンロードできます。
これで準備完了です。メインの記述をおこなっていきましょう。
時系列データをグラフで描写する方法
まずは通常のグラフを表示させてみます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import statsmodels.api as sm
# CSVファイル読み込み
df = pd.read_csv('./AirPassengers.csv')
# Pandas.Seriesにデータを格納(データに乗客数、インデックスは日付)
passengers = pd.Series(df['#Passengers'], dtype='float') # ①
passengers.index = pd.to_datetime(df['Month']) # ②
# Pasdasでグラフをプロット(Matplotlibの機能を利用している)
passengers.plot()
下記のようなグラフが表示できます。
次にトレンド、季節性という表現を使ってグラフを分けていきます。
「トレンド」とは全体で見た時に乗客数がどのようになっているかを表しています。「季節性」とは四季の変化も含まれますが、季節的な周期がある変動のことをまとめて季節性と呼ぶそうです。
#statsmodelsのAPI部分
sm.tsa.seasonal_decompose(passengers)
res = sm.tsa.seasonal_decompose(passengers)
original = passengers # オリジナルデータ
trend = res.trend # トレンドデータ
seasonal = res.seasonal # 季節性データ
plt.figure(figsize=(8, 8)) # グラフ描画枠作成、サイズ指定
# オリジナルデータのプロット
plt.subplot(311) # グラフ3行1列の1番目の位置(一番上)
plt.plot(original)
plt.ylabel('Original')
# trend データのプロット
plt.subplot(312) # グラフ3行1列の2番目の位置
plt.plot(trend)
plt.ylabel('Trend')
# seasonalデータ のプロット
plt.subplot(313) # グラフ3行1列の3番目の位置
plt.plot(seasonal)
plt.ylabel('Seasonality')
plt.tight_layout() # グラフの間隔を自動調整
下記のようなグラフが表示できます。
以上で今回の記事に関して終了です。基本的な「mtplotlib」の使用方法と便利な「statsmodels」のAPIいついて使用方法を記載しました。
他にも機械学習関連の記事を多数記載しているのできになる方は
コメント