Python 無料で独習 Matplotlib & Seaborn 入門講座 03_02

Python 無料で独習 Matplotlib & Seaborn 入門講座 03_02

【実践】株価のデータを折れ線グラフで可視化してみよう_02

前回の講義の続きです。
前回の講義ではpandas_datareaderをつかって
Yahooファイナンスから日経平均株価を取得して、
matplotlibでグラフ描画、そしてグリッド表示、ラベルの設定などを
して、最後に日本語表示ができるように
japanize_matplotlib をインストール、インポートしてタイトルを付けました。

from pandas_datareader import data
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
%matplotlib inline

start = '2019-11-01'
end = '2020-11-01'

df = data.DataReader('^N225','yahoo',start,end)
x=df.index
y=df['Adj Close']


plt.figure(figsize=(30,10))
plt.plot(x,y ,color='r')
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('Date',fontsize=30)
plt.ylabel('Price',fontsize=30)
plt.grid()
plt.title('日経平均株価2019-2020',fontsize=35)

インデックス番号を追加

取り込んだデータにはインデックス番号がありません。
取り込んだデータ

このデータにindex番号を追加します。

df['index_num'] = df.reset_index().index
df.head(20)

グラフに矢印付きの注釈(アノテーション)を追加

以前に受講した今西先生の講義
Matplotlib20本ノック 10,注釈
と内容が被る部分もありそうですが復習も兼ねて実装していきます。
データでいうとindex番号10番に注釈を追加します。

今回の座標の指定の場合、x軸が時系列データ(2019-11-18)
なのでこのままでは扱えないので
時系列データを指定できるmatplotlib.datesをインポートする必要があります。

次に各設定をしていきます。
・注釈に表示するテキストを 'points'
・矢印の先端の座標を指定  xy=(mdates.date2num(x[10]),y[10])
・注釈テキストの開始位置  xytext=(mdates.date2num(x[10])+10,24000)                x[10]+10で矢印の先端から10日ずれた位置を指定
 y座標は24000円の位置を指定
・注釈のテキストのフォントサイズ、カラーfontsize=30,color='red'
・矢印の設定  arrowprops=dict(color='black')

グラフを画像として保存

plt.savefig('N225.png')

複数の線グラフを表示

株式のチャートなどでよく出てくる
移動平均線を追加します。
今回は5日と25日の移動平均線です。

過去5間の移動平均と過去25日の移動平均を算出します。
yはその日の終値が入っています。
移動平均の計算はpnadasrollingメソッドを使用します。
引数に間隔を意味するwindowに定義した変数span05  span25
をそれぞれ入力します。
最後に平均を計算するmean()を入力します。
これで元データに新しいカラムが二列追加されます。

#移動平均線
span05=5
span25=25

df['sam05']=y.rolling(window=span05).mean()
df['sam25']=y.rolling(window=span25).mean()
df.head(10)

このデータを元にグラフをプロットします。
yの部分にそれぞれ df['sam05'] df['sam25']
を代入します。

plt.figure(figsize=(30,10))
plt.plot(x,y, label='close')
plt.plot(x,df['sam05'], label='sam05')
plt.plot(x,df['sam25'], label='sam25')
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('Date',fontsize=30)
plt.ylabel('Price',fontsize=30)
plt.legend(fontsize=20)
plt.grid()
plt.title('日経平均株価2019-2020',fontsize=35)

プログラミン独習カテゴリの最新記事