株価データを取得する
株価データを取得するにはpandas-datareaderというライブラリを使用します。
このライブラリでは,「ある企業」の「ある期間」における株価を一括で取得できます。
スプレッドシートでの株価取得方法はこちら

事前準備
まずは株価分析に必要なライブラリをインストールします。
この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)

コメント