Pandas, Matplotlib(mplfinance)でローソク足チャートを作成するには
ここではYahoo! Financeから株価データを取り込んでローソク足チャートを作成する方法を解説します。
Yahoo! Financeから株価データを取り込むには、PandasのDataReader()メソッドを使用します。
そして取り込んだ株価データからローソク足チャートを作成するには、Matplotlib(mplfinance)を使用します。
PandasのDataReader()を使うと株価の他にビットコインなどの仮想通貨(暗号通貨)の価格データも取り込むことができます。
仮想通貨(暗号通貨)の価格データを取り込む方法とチャートを作成する手順については別記事にて紹介します。
この記事では、Pandas、Matplotlib, Mplfinanceのライブラリを使用しますので
「記事(Article001) | 記事(Article002) | 記事(Article003) | 記事(Article004)」
を参照して事前にインストールしておいてください。
Pythonのコードを入力するときにMicrosoftのVisula Studio Codeを使用します。
まだ、インストールしていないときは「記事(Article001)」を参照してインストールしておいてください。
説明文の左側に図の画像が表示されていますが縮小されています。
画像を拡大するにはマウスを画像上に移動してクリックします。
画像が拡大表示されます。拡大された画像を閉じるには右上の[X]をクリックします。
画像の任意の場所をクリックして閉じることもできます。
Yahoo! Financeから株価データを取り込んでCSVファイルに保存する
-
PandasにAmazonの株価データを取り込む
Visual Studio Codeを起動したら以下のコードを入力して実行します。
行2-6ではPythonのライブラリを取り込んでいます。
PandasのDataReader、Mplfinanceのライブラリをインストールしていないときは、Pythonのpipでインストールしてください。
pipのコマンドはソースコードのコメントに記述しています。
行9-10ではYahoo! Financeから取り込む株価データの日付の範囲(開始日・終了日)を定義しています。
行11ではPandasのDataReader()メソッドでYahoo! FinanceからAmazonの株価を取り込んで、PandasのDataFrameに格納しています。
DataReader()の引数1には株価の「ティッカーシンボル」を指定します。ここではAmazoのシンボル「AMZN」を指定しています。
引数2には取り込み先を指定しています。ここでは「yahoo」を指定しています。
行12ではDataFrameの情報を表示しています。
行13ではDataFrameのデータを先頭から3件表示しています。
図1の実行結果から分かるようにAmazonのシンボル「AMZN」が全ての列名に含まれています。
# Import the necessary libraries
import pandas as pd
import pandas_datareader.data as web # pip install pandas_datareader
import matplotlib as plt
import mplfinance as mpf # pip install mplfinance
import datetime as dt
# Load Data from Yahoo! Finance
start = dt.datetime(2019, 1, 1)
end = dt.datetime(2021, 9, 9) # end = dt.datetime.now()
df = web.DataReader(['AMZN'], 'yahoo', start=start, end=end)
print(df.info())
print(df.head(3)) #print(df.tail(3))
図1は実行結果です。PandasのDataReaderで取り込んで株価データには全ての列にシンボルが含まれています。
-
Amazonの株価データをCSVファイルに保存する
行6ではDataFrameのstack()メソッドでDataFrameの列名からシンボル「AMZN」を除去しています。
そして列名「Symbols」にのみ「AMZN」が格納されるようにしています。
さらに、DataFrameのreset_index()メソッドでDataFrameからindex「Date」を削除しています。
これで列名「Date」は通常の列となります。
そして、新たにデフォルトのindexが追加されます。
行9ではCSVファイルのパスを定義しています。
行10ではDataFrameのto_csv()メソッドでDataFrameに取り込んだAmazonの株価データをCSVファイルに保存しています。
to_csv()の引数indexには「False」を指定してPandasのindexを出力しないようにしています。
# Load Data from Yahoo! Finance
start = dt.datetime(2019, 1, 1)
end = dt.datetime(2021, 9, 9)
df = web.DataReader(['AMZN'], 'yahoo', start=start, end=end)
df = df.stack().reset_index() # Remove Symbols and reset date index
print(df.info())
print(df.head(3))
csv_file = 'data/csv/article011/AMZN.csv'
df.to_csv(csv_file, index=False)
図2は実行結果です。DataFrameの列名からシンボル「AMZN」が除去されています。
さらに、列「Date」が通常の列になっています。そして新たにPandasが追加したindex(0,1,2,...)が表示されています。
ローソク足チャートを作成する
-
CSVファイルから株価データを取り込む
行2ではDataFrameのread_csv()メソッドでCSVファイルをPandasのDataFrameに取り込んでいます。
行4ではPandasのto_datetime()関数でobject型(str型)の日付をdatetime型に変換しています。
行6では列「Date」にindexを設定しています。
# Load amazon stock data from the csv file
df = pd.read_csv(csv_file)
print(df.info())
df['Date'] = pd.to_datetime(df['Date'])
print(df.info())
df = df.set_index('Date')
print(df.head(3))
図3は実行結果です。列「Date」がobject型からdatetime64型に変換されています。
さらに列「Date」にindexが設定されています。
-
株価データからライン・チャートを作成する
行2ではmplfinanceのplot()メソッドでライン・チャートを作成しています。
plot()の引数1にはPandasのDataFrameを指定しています。
引数typeには「line」を指定しています。
これでライン・チャートが描画されます。
# Plot line chart
mpf.plot(df, type='line')
図4は実行結果です。ライン・チャートが表示されました。
-
ライン・チャートに出来高のグラフを追加する
行2ではplot()の引数に「volume=True」を追加してライン・チャートに出来高の棒グラフを追加しています。
さらに引数1のDataFrameに日付「2021-08」を指定して株価のデータを2021年8月のデータに絞り込んでいます。
# Add volume
mpf.plot(df['2021-08'], type='line', volume=True)
図5は実行結果です。ライン・チャートに出来高の棒グラフが追加されました。
さらにライン・チャートに2021年8月のデータのみ表示されています。
-
ローソク足チャートを作成する
行2ではplot()の引数typeを「candle」に書き換えてローソク足チャートを描画するように変更しています。
さらに引数1のDataFrameに「'2021-08':'2021-09'」を指定して株価のデータを絞り込んでいます。
# Draw candlestic chart
mpf.plot(df['2021-08':'2021-09'], type='candle', volume=True)
図6は実行結果です。2021年8月から2021年9月の株価がローソク足チャートで表示されています。
-
移動平均線(20日)を追加
行2ではplot()の引数に「mav=(20)」を追加して移動平均線(20日)を表示させています。
移動平均線は「mav=(20, 60, 120)」のようにコンマ区切りで複数指定できます
# Add Moving Average
mpf.plot(df['2021-03':'2021-09'], type='candle', mav=(20), volume=True)
図7-1は実行結果です。ローソク足チャートに移動平均線が追加されています。
図7-2は移動平均線を「mav=(2,4,6)」、スタイルを「style='mike'」に変更しています。
-
タイトル、スタイル等を追加
行2-8ではplot()に「figratio=(20,12)」「title=''」「style='yahoo'」などを追加してカスタマイズしています。
styleは'blueskies', 'brasil', 'charles', 'checkers', 'classic', 'default', 'mike', 'nightclouds', 'sas', 'starsandstripes'などが指定できます。
# Add yahoo style
mpf.plot(df['2021-03':'2021-09'],
figratio=(20,12),
type='candle',
title='Amazon Price 2021',
mav=(20), volume=True,
tight_layout=False,
style='yahoo')
図8は実行結果です。ローソク足チャートにタイトルが追加されてチャートのスタイルが変わっています。
-
ローソク足チャートを保存する
行2-9ではplot()に「savefig='...'」を追加してローソク足チャートを保存しています。
# Save figure
mpf.plot(df['2021-03':'2021-09'],
figratio=(20,12),
type='candle',
title='Amazon Price 2021',
mav=(20), volume=True,
tight_layout=False,
style='yahoo',
savefig='data/png/article011_amazon_candlestick.png')
図9は実行結果です。フォルダ「data/png/」にローソク足チャートが保存されています。