以前の記事で,コロナ感染者数と相関がある銘柄を紹介しました.
コロナ感染者数と相関がある銘柄(日本株) - 株メモ
この記事では,このグラフを簡単に描く方法を紹介します.Googleアカウントさえあればコピペして実行できます.詳しくは次の記事を参照してください.
コード
Google Driveをマウント
今回は,Google Driveのファイルを読み込むため,いくつか操作が必要です.まずは,次のコードを実行します.
# Google Driveをマウント (ファイルを参照できるようにする) from google.colab import drive drive.mount('/content/drive')
▶ボタンをクリックすると実行され,リンクが表示されます.リンク先のコードを□枠内に入力してください.
コードを入力し,以下が表示されると,Google Driveのファイルを読み込める状態になっています.
図の赤枠部分「My Drive」がGoogle Driveです.
データの取得
今回,コロナ感染者のデータは,NHKのWebページから取得します.新型コロナウイルス 日本国内の感染者数・死者数・重症者数データ|NHK特設サイト
ひとまず,ダウンロードして,好きなフォルダに置いてください.
ファイルのアップロード
Google Driveにコロナ感染者のデータをアップロードします.「My Drive」の右側にある︙をクリックし,「アップロード」を選択してください.さきほど保存した感染者数のファイルを選択すると,ファイルが「My Drive」に保存されます.
グラフの描画
mplfinanceのインストール.pip install mplfinance
必要なライブラリの読み込み.
import pandas as pd import mplfinance as mpf import matplotlib.pyplot as plt import pandas_datareader.data as web import datetime as dt
アップロードしたファイルの読み込み.
df_covid = pd.read_csv('/content/drive/MyDrive/nhk_news_covid19_domestic_daily_data.csv', index_col='日付', parse_dates=True) df_covid.rename(columns={'日付': 'Date'}, inplace=True) df_covid['covid_MA_7d'] = df_covid['国内の感染者数_1日ごとの発表数'].rolling(7).mean() display(df_covid)
ここで,'/content/drive/MyDrive/nhk_news_covid19_domestic_daily_data.csv'
の部分は,ファイル名・保存した場所によって変える必要があります.アップロードしたファイルの右にある︙をクリック→「パスをコピー」として取得したものを貼り付けてください.
ウォッチリストの作成
watchlist = ['9416', '9020', '9024'] start = dt.date(2020,1,1) end = dt.date.today()
グラフの描画.
def my_plt(code): df = web.DataReader(code + '.JP', 'stooq', start, end) mpf.plot(df, title = code, type='candle', mav=(5, 25, 200), volume=True) df = df.sort_index() df['Close_pct_change'] = df['Close'].pct_change() df_all = pd.merge(df, df_covid, left_index=True, right_index=True, how='outer') df_all = df_all.dropna() fig = plt.figure() ax1 = fig.add_subplot(1,1,1) ax2 = ax1.twinx() df_covid['covid_MA_7d'].plot(ax = ax2, color='g', lw = 1, zorder = 2) ax2.bar(df_covid.index, df_covid['国内の感染者数_1日ごとの発表数'], color='r', alpha=0.5, label = 'covid', zorder = 1) df_all['Close'].dropna().plot(ax = ax1, color='b', rot=90, grid=True, label = code, zorder = 3) ax2.grid(False) h1, l1 = ax1.get_legend_handles_labels() h2, l2 = ax2.get_legend_handles_labels() ax1.legend(h1+h2, l1+l2, loc='best') print(code, pd.to_datetime(df.index.values[-1]).strftime('%Y-%m-%d'), '終値:', df['Close'][-1]) plt.show() for code in watchlist: my_plt(code)
以上のコードを貼り付けた状態が以下です.
実行結果
ランタイム「すべてのセルを実行」を選択すると,グラフが描画されます.- 青線:株価
- 赤棒:新規感染者数
- 緑の線:感染者数の7日移動平均線