ぷそさんのプログラミング研究所

【2023年版】Pythonで株価を取得する方法(日本株対応)|初心者向けに丁寧に解説

目次

株価データを取得する

株価データを取得するにはpandas-datareaderというライブラリを使用します。

このライブラリでは,「ある企業の「ある期間における株価を一括で取得できます。

スプレッドシートでの株価取得方法はこちら

あわせて読みたい
【5分で出来る!】株価や配当金を自動取得する方法|Google スプレッドシート 株を運用する際に,スプレッドシートやエクセルで管理することがあると思います。 今回は,スプレッドシートで株価を取得する方法についてご紹介します。 【スプレッド...

事前準備

まずは株価分析に必要なライブラリをインストールします。

この2つのパッケージをインストールします。

# Anaconda環境の人
conda install pandas
conda install pandas-datareader

# Anaconda環境以外の人
pip install pandas
pip install pandas-datareader

特定の企業の株価取得

必要パッケージのインポート

まずは、先ほどインストールしたモジュールを使えるようにインポートします。

import pandas as pd
from datetime import datetime
from pandas_datareader.stooq import StooqDailyReader

株価の取得

取得する銘柄を指定する

ある企業の株価を取得するために、銘柄コードを調べます。

銘柄コードの取得方法はこちら

銘柄コードは以下のサイトで企業名を検索すると出てきます。

例えば、『任天堂』と検索すると、7974というコードが出てくると思います。

https://quote.jpx.co.jp/jpx/template/quote.cgi?F=tmp/stock_search

CODE=に取得したい企業の銘柄コードを入力します。

任天堂の株価をダウンロードしたい時には、CODE=7974と入力してください。

# 取得したい銘柄コードを指定
CODE = 7203
CODE_str = str(CODE) + ".JP"

株価を取得する期間を指定する

次に,株価をいつからいつまで取得するかを指定します。

2023年1月1日から2023年8月1日までを取得する場合には以下のように入力します。

# 取得したい日付を指定
start = datetime(2023, 1, 1)
end = datetime(2023, 8, 1)

株価を取得して保存する

df_targetというDataFrameに株価を取得します。

見やすくなるように日付順に並べてあります。

# 株価を取得する
df_target = StooqDailyReader(CODE_str, start=start, end=end).read()
# 日付でソートする
df_target = df_target.sort_values('Date')
# 欠損日がある場合には前の日の値で埋める
df_target = pd.DataFrame(df_target).asfreq("D", method="ffill")

このようにすると,df_targetには以下のようなデータが保存されます。

display(df_target)

ここで,それぞれのカラムの意味は以下のようになっています。

  • Open:その日の始値
  • High:その日の高値
  • Low:その日の安値
  • Close:その日の終値
  • Volume:その日の出来高

コード全文

特定の企業の株価取得をするコード全文はこちらです。

import pandas as pd
from datetime import datetime
from pandas_datareader.stooq import StooqDailyReader

# 取得したい銘柄コードを指定
CODE = 7203
CODE_str = str(CODE) + ".JP"

# 取得したい日付を指定
start = datetime(2023, 1, 1)
end = datetime(2023, 8, 1)

# 株価を取得する
df_target = StooqDailyReader(CODE_str, start=start, end=end).read()
# 日付でソートする
df_target = df_target.sort_values('Date')
# 欠損日がある場合には前の日の値で埋める
df_target = pd.DataFrame(df_target).asfreq("D", method="ffill")

複数の企業の株価を一括で取得する

複数の株価を一気に取得する方法をご紹介します。

必要パッケージのインポート

まずは、先ほどと同様にインストールしたモジュールを使えるようにインポートします。

import pandas as pd
from datetime import datetime
from pandas_datareader.stooq import StooqDailyReader

株価の取得

取得する銘柄を指定する

取得したい銘柄を配列で指定します。これは何個でも設定することができます。

# 取得したい銘柄コードを指定
CODE_lists = [7203, 4755]

株価を取得して保存する

あとは,先ほどと同様に株価を取得して保存します。

今回は,df_stocklistというDataFrameに保存します。

# 取得したい日付を指定
start = datetime(2023, 1, 1)
end = datetime(2023, 8, 1)

# 保存用のdataframeを作成
df_stocklist = pd.DataFrame()

# 株価を銘柄ごとに取得
for code in CODE_lists:
    CODE_str = str(code) + ".JP"

    # 株価を取得する
    df_target = StooqDailyReader(CODE_str, start=start, end=end).read()
    # 日付でソート
    df_target = df_target.sort_values('Date')

    # 銘柄コードを頭につける
    df_target = df_target.add_prefix(str(code) + '_')
    
    # 欠損日がある場合には前の日の値で埋める
    df_target = pd.DataFrame(df_target).asfreq("D", method="ffill")
    
    # 結合する
    df_stocklist = pd.concat([df_stocklist, df_target], axis=1)

このようにすると,df_stocklistには以下のようなデータが保存されます。

display(df_stocklist)

コードまとめ

今回使用したコードはこちらになります。

import pandas as pd
from datetime import datetime
from pandas_datareader.stooq import StooqDailyReader

# 取得したい銘柄コードを指定
CODE_lists = [7203, 4755]

# 取得したい日付を指定
start = datetime(2023, 1, 1)
end = datetime(2023, 8, 1)

# 保存用のdataframeを作成
df_stocklist = pd.DataFrame()

# 株価を銘柄ごとに取得
for code in CODE_lists:
    CODE_str = str(code) + ".JP"

    # 株価を取得する
    df_target = StooqDailyReader(CODE_str, start=start, end=end).read()
    # 日付でソート
    df_target = df_target.sort_values('Date')

    # 銘柄コードを頭につける
    df_target = df_target.add_prefix(str(code) + '_')
    
    # 欠損日がある場合には前の日の値で埋める
    df_target = pd.DataFrame(df_target).asfreq("D", method="ffill")
    
    # 結合する
    df_stocklist = pd.concat([df_stocklist, df_target], axis=1)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

このブログでは,PythonやLaTeXの使い方などを紹介しています!
仕事でも趣味でもプログラミングをしています。
ブログは2022年8月にスタートしました。
【経歴】東京大学大学院修了→大手IT企業勤務

コメント

コメントする

目次