Python {Article011}

ようこそ「Python」へ...

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ファイルに保存する

  1. 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))
    click image to zoom!
    図1
    図1は実行結果です。PandasのDataReaderで取り込んで株価データには全ての列にシンボルが含まれています。
  2. 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)
    click image to zoom!
    図2
    図2は実行結果です。DataFrameの列名からシンボル「AMZN」が除去されています。 さらに、列「Date」が通常の列になっています。そして新たにPandasが追加したindex(0,1,2,...)が表示されています。

ローソク足チャートを作成する

  1. 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))
    click image to zoom!
    図3
    図3は実行結果です。列「Date」がobject型からdatetime64型に変換されています。 さらに列「Date」にindexが設定されています。
  2. 株価データからライン・チャートを作成する

    行2ではmplfinanceのplot()メソッドでライン・チャートを作成しています。 plot()の引数1にはPandasのDataFrameを指定しています。 引数typeには「line」を指定しています。 これでライン・チャートが描画されます。
    # Plot line chart
    mpf.plot(df, type='line')
    click image to zoom!
    図4
    図4は実行結果です。ライン・チャートが表示されました。
  3. ライン・チャートに出来高のグラフを追加する

    行2ではplot()の引数に「volume=True」を追加してライン・チャートに出来高の棒グラフを追加しています。 さらに引数1のDataFrameに日付「2021-08」を指定して株価のデータを2021年8月のデータに絞り込んでいます。
    # Add volume
    mpf.plot(df['2021-08'], type='line', volume=True)
    click image to zoom!
    図5
    図5は実行結果です。ライン・チャートに出来高の棒グラフが追加されました。 さらにライン・チャートに2021年8月のデータのみ表示されています。
  4. ローソク足チャートを作成する

    行2ではplot()の引数typeを「candle」に書き換えてローソク足チャートを描画するように変更しています。 さらに引数1のDataFrameに「'2021-08':'2021-09'」を指定して株価のデータを絞り込んでいます。
    # Draw candlestic chart
    mpf.plot(df['2021-08':'2021-09'], type='candle', volume=True)
    click image to zoom!
    図6
    図6は実行結果です。2021年8月から2021年9月の株価がローソク足チャートで表示されています。
  5. 移動平均線(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)
    click image to zoom!
    図7-1
    図7-1は実行結果です。ローソク足チャートに移動平均線が追加されています。
    click image to zoom!
    図7-2
    図7-2は移動平均線を「mav=(2,4,6)」、スタイルを「style='mike'」に変更しています。
  6. タイトル、スタイル等を追加

    行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')
    click image to zoom!
    図8
    図8は実行結果です。ローソク足チャートにタイトルが追加されてチャートのスタイルが変わっています。
  7. ローソク足チャートを保存する

    行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')
    click image to zoom!
    図9
    図9は実行結果です。フォルダ「data/png/」にローソク足チャートが保存されています。