エミ眠太の自由帳
 エミ眠太の自由帳
    
 
 やってみた      2023-10-30      

Pythonで株価情報を取得・チャート化してみた。

Language:
 Python
Framework/Library:
 pandas yahoo_finance_api2 pandas-datareader matplotlib
Technology:
 Web API データ分析・データ解析
Platform/Tool:

記事一覧へ

目次


はじめに

2024年から新NISAが始まりますがみなさん準備はできていますでしょうか?私ですか?何もしてないですよ。でもとりあえず何かやらなきゃということで、気になる企業の株価推移だけでも取得・チェックできるようになっておきましょう。

ステップ

今回株価取得・チャート化にあたって、以下のステップで実施していきたいと思います。

  1. Yahoo Finance APIでデータを取得し表形式に変換
  2. 表形式にしたデータをチャート化

1. Yahoo Finance APIでデータを取得し表形式に変換

株価を取得するための方法についていろいろ調べてみましたが、「yahoo_finance_api2」「pandas-datareader」とAPIが利用できそうです。今回は前者を使わせていただきましょう。なお、pandas-datareaderについてはpandasという名前がついているように、元はpandasの一部だったようです。公式ドキュメントはそれぞれ以下の通りです。 ・yahoo_finance_api2:URL ・pandas-datareader:URLです。

ライブラリインストール

yahoo_finance_api2を利用するためのライブラリと、表への変換のために利用するpandasをインストールします。

pip install yahoo_finance_api2
pip install pandas

データ取得→表形式に変換

データ取得、表形式の変換は以下の通りです。公式のコードを参考にしております。

「一行解説」を見る
  1. (l.2-3) yahoo-finance-api2shareモジュールをインポートします。shareモジュールは (l.17) で使用されますが株価データを取得するためのメソッドが含まれます。また、yahoo-finance-api2YahooFinanceErrorモジュールはエラー表示を可能にします。
  2. (l.7) 今回株価を取得する3社の証券コードになります。順番に、JR東日本・JR西日本・JR東海です。証券コードはWeb検索で出てきますので、好きなものを見つけてきてください。
  3. (l.9-11) 各証券コードの末尾に".T"という文字列を付け足す処理をしています。これにより東証における証券コードであることを明示しており、4桁の数字の組み合わせが一意のものになります。
  4. (l.13-26) 上の操作で東証コード化した3社の証券コードについて、APIを叩いてデータを取得していきます。取得した株価は (l.13) に格納していきます。
    • (l.15-16) 各社のコードについて、try-exceptで株価を取得します。
    • (l.17) 証券コードを引数にして、(l.2)でインポートしたshareShareクラスでインスタンス化します。
    • (l.18) 上で作成したインスタンスについて、.get_historical()メソッドを利用して実際に株価データを取得していきます。
    • (l.19) .get_historical()メソッドの引数としてshare.PERIOD_TYPE_YEARを記述し年次データを取得します。今回は"5"とあるように5年分のデータを取得します。
    • (l.20) .get_historical()メソッドの引数としてshare.FREQUENCY_TYPE_MONTHを記述しデータの取得間隔を指定します。今回は"1"とあるように1ヶ月間隔でデータを取得します。
    • (l.21) (l.20) まででデータ取得はできていますが、ここから (l.23) まではデータを見やすくするための処理を記述していきます。まずは"timestamp"列の情報をもとにlen()メソッドでデータの数量を確認します。
    • (l.22) 今回は3社の情報を取得しますがデフォルトではそれを判別する術がないので、ここでは証券コード列を株価データstock_dataの最終列に追加するという記述です。
    • (l.23) 最終列に証券コードを追加した株価データstock_dataを (l.13) のstock_data_listリストに一旦格納します。これを残り2社分for文を回して実施します。
    • (l.24) 例外処理を記述します。(l.3) で追加したYahooFinanceErrorを利用します。
    • (l.25) エラーの場合、 (l.24) で検出したものを出力します。
    • (l.26) エラーの場合、sys.exit(1)メソッドで処理を終了します。
  5. (l.28-31) APIで取得した株価データは (l.13) の通りstock_data_listリストに格納されているので、これを一つずつDataFrame化していきます。
  6. (l.33-35) DataFrame化した株価データを、証券コード別に分けます。
  7. (l.37-39) 株価データは全てtimestampがついているので、これをもとに取得時間を取得します。unit="ms"とすることでミリ秒まで正確に取得可能です。
  8. (l.41-43) (l.37-39) で取得できている時間は日本時間ではないので、新しく時間を計算して再度株価データstock_dataに追加します。
  9. (l.45-47) 最後に出力すると (l.40) 以降にあるように結果が出力されます。
  10. (l.49) 既出のもの以外で取得できる情報として、open(始値)から順番に、high(高値)、low(安値)、close(終値)、volume(出来高)の通りです。

上記の通り3社(JR東日本・JR西日本・JR東海)の5年分の株価データを取得できたところで、続いてチャート化していきましょう。

2. 表形式にした株価データをチャート化

株価データのチャート化には「matplotlib」というライブラリを利用します。公式のHPはこちらです。

ライブラリインストール

下の通りmatplotlibをインストールします。

pip install matplotlib

表形式の株価データ→チャート化

それでは表形式にした株価データをチャート化していきます。

「一行解説」を見る
  1. (l.3) matplotlibpyplotモジュールをインポートします。pyplotモジュールによってチャートの描画が可能になります。
  2. (l.5-8) 今回は3社の株価データを折れ線グラフにして表示したいと思います。x軸を年月、y軸を株価としてデータをプロットしていくイメージです。それぞれ株価データstock_dataの月の列と終値の列を抜き出して変数に入れていきましょう。
  3. (l.10-12) pyplotモジュールのplotメソッドでパラメータを設定していきます。(l5.8) のデータとともにmarker(プロットする点の形式)、linestyle(線の種類)、color(色)、label(凡例(legend)に表示されるラベル)を設定します。今回はお試しなので色々変えてみました。
  4. (l.14-16) チャートのタイトルと軸のラベルを設定します。
  5. (l.18) (l.10-12) で設定したlabelをチャート内に表示します。
  6. (l.20) 最後にチャートを表示します。

すると下図のようにチャートを描画することができました。下図内下方の赤枠にセーブボタンと思しきボタンがありますが、これを押下すると画像を保存できるようになります。

まとめ

以上で、株価データの取得とチャート化がPythonでできました。matplotlib公式にチートシートも用意されているので、これを参考にパラメータを設定してチャートをいじってみると面白いと思います。なお、これができたからと言って株に詳しくなるわけではないので悪しからず。


記事をシェアする


関連する記事

よろしければこちらの記事も参考にしてみてください。

Loading...




記事一覧へ