こんにちは!
データ分析でよく扱うものとして、「時系列データ」があります。
そして、時系列データをグラフにするさいによく用いるのが、「トレンドグラフ」です。
今回は、Pythonで時系列データを用いてトレンドグラフを描く方法を紹介していきます^^
時系列データとは
そもそも時系列データとはどういうものなのでしょう?
そんなのいちいち聞かれなくてもわかるわと言われそうですが、一応確認しておきます。
時系列データとは、グラフにしたときにX軸に時間がくるデータを指します。
例えば、こういうデータは時系列データです。
結論から言うと、このデータをグラフとして表したものがトレンドグラフになります。
このとき時間の間隔は問いません。図のように数日間隔のものもあれば、数時間単位、ミリ秒単位のデータも存在します。
データごとの時間間隔は揃っていた方が分析しやすいですが、仮に揃っていなくてもトレンドグラフを描くくらいなら問題ありません。
厳密には、イベントが起きたというタイミングを収集した「イベント時系列データ」や、離散時刻を扱った時系列データもあるようですが、ここでは割愛します。
Pythonでトレンドグラフを描く
使用するデータ
今回は、2020年3月から9月までのwalmart(ウォルマート)の株価データを使います。
見ての通り、1日1件のデータです。
描くだけ
まずは、シンプルにトレンドグラフを描いてみます。
トレンドグラフの描画には、matplotlibのplot()を用います。つまり、折れ線グラフってことですね。
X軸が時間になるようにします。High(高値)のトレンドグラフは、以下のようになります。
import pandas as pd
import matplotlib.pyplot as plt
#dfに上記のデータフレームが入っています
x = df["Date"]
#列名の都合で半角あいてます^^;
y = df[" High"]
plt.plot(x,y)
こんな感じでグラフが描けます。
見てわかるように、x軸の目盛ラベルがとんでもないことになっています^^;
データの日付を全て表示してしまっているために重なりまくってしまています。
X軸の目盛を調整する
表示する値を間引いて、いい感じのグラフにしていきます。
import pandas as pd
import matplotlib.pyplot as plt
x = df["Date"]
y = df[" High"]
plt.plot(x,y)
plt.xticks([0, 20, 40, 60, 80, 100, 120], rotation=45)
目盛ラベルを編集するときは、xticks() (y軸の場合はyticks())を用います。
最初の引数で渡している配列は、何番目のデータの値を表示するかを指定しています。この場合、20件おき(20日ごと)に目盛ラベルを表示するようにします。
また、rotation=45で、目盛ラベルを45°回転させます。
これで見やすくなりました
閾値ラインを表示したい
閾値の線を引けば、いつその値を超えたのか(下回ったのか)がよりわかりやすくなります。
y軸の値に対する閾値のラインを引くには、axhline()を使います。
import pandas as pd
import matplotlib.pyplot as plt
x = df["Date"]
y = df[" High"]
plt.plot(x,y)
plt.xticks([0, 20, 40, 60, 80, 100, 120], rotation=45)
plt.axhline(y=140)
これで、高値が140を超えた時点がより分かりやすくなりました。
ちなみに、垂直な線を引くには、axvline()を用います。
import pandas as pd
import matplotlib.pyplot as plt
x = df["Date"]
y = df[" High"]
plt.plot(x,y)
plt.xticks([0, 20, 40, 60, 80, 100, 120], rotation=45)
plt.axvline(x=80)
引数がx= になるので間違えないようにしてください。80は、80件目のデータの値(日時)に線を引くという意味です。
Pythonでデータサイエンスするなら
Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。
ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^
まとめ
Pythonでのトレンドグラフの描き方を紹介してきました。
目盛の調整などは、最初のつまづきポイントかもしれないので、参考になれば幸いです。
閾値の線も利用して、わかりやすいトレンドグラフを描いてみてください^^
ではでは👋