見出し画像

Pythonでサクッと株価データをゲットする方法

Pythonを使って株価分析をしてみたい方向けの記事になります。


Pandas Datareader
というライブラリーを使って
サクッと株価データをゲットする方法をご紹介します。

Googleコラボラトリーで実装していきますので、
環境構築不要で
超簡単にゲットできます!!





✅ Pandas Datareaderってどんなライブラリー?


Pandas Datareaderは、
株価、為替レート、経済指標などのデータを簡単に取得し、
PandasのDataFrame形式で扱うことができるライブラリーです。

データソースとして、
Stooq、
Yahoo ファイナンス,
Google ファナンス,
Quandl
などをサポートしています。

この記事では、
データソースとして、
StooqとYahooファイナンスを使っていきます。


📈"Stooq"でゲットしよう


TOPIX(東証株価指数)の1年分の株価を取得します。

TOPIXは後から説明するYahooファイナスでは取得できないようです。

1️⃣必要なライブラリーをインポートします

import pandas_datareader.data as web
from datetime import date
import pandas as pd


2️⃣データソース、取得期間、株価ティッカーコードの指定をします。

データソースは、"Stooq"
取得期間は、2023年4月1日〜2024年3月29日
取得する株価は、TOPIX(ティッカー:^TPX)とします。

# データソース
source = 'stooq'

# 取得期間
dt_s = date(2023, 4 1)
dt_e = date(2024, 3, 29)

# 株価ティッカー
symbol = '^TPX'

個別株式をゲットしたい場合は、
株価ティッカーを"証券コード.JP"で指定します。

証券コードが9021なら
symbol = "9021.JP"とします

3️⃣DataReaderに引数を与えて実行します。
実行結果をデータフレームで取得します。

df_topix = web.DataReader(symbol, source, dt_s, dt_e)
df_topix = df_topix.sort_values("Date").reset_index()
df_topix

実行結果

TOPIXの値動きが取得できていますね。

Stooqは、株式が分割・併合された場合、価格への反映に時間がかかるようなので注意が必要です。
Yahoo!ファイナンスは調整前、調整後の株価を持っているので、その心配はありません。


📈 "Yahooファイナンス"でゲットしよう


日経平均株価の1年分の株価を取得します。

1️⃣ライブラリーのインポートと、データソースのインスタンス化をします

import yfinance as yf

yf.pdr_override()


2️⃣取得期間、ティッカーの指定をします。

取得期間は、2021年4月1日〜2024年3月29日
取得する株価は、日経平均株価(ティッカー:^N225)とします。

# 取得期間
dt_s = date(2023, 4, 1)
dt_e = date(2024, 3, 30) #エンドは最終日+1日

# 株価ティッカー
ticker = '^N225'

個別株式をゲットしたい場合は、
株価ティッカーを"証券コード.T"で指定します。

証券コードが9021なら
ticker = "9021.T"とします

3️⃣DataReaderに引数を与えて実行します。
実行結果をデータフレームで取得します。

df = web.get_data_yahoo(tickers=ticker,start=dt_s,end=dt_e).reset_index()
df

実行結果

Yahooファイナンスの場合、
Adj Closeというカラムがあります。
これは、株価の分割・併合があった場合の
調整後株価になります。
基本的にはこのAdj Closeを使うと良いでしょう



🌈 複数銘柄の株価情報をまとめてゲットしよう


ここまでは1銘柄の株価を取得してきましたが、
最後に、複数銘柄の株価をまとめて取得してみましょう。
Yahooファイナンスを使います。

▶️▶️証券コードのファイル

以下のファイルは、東証プライム市場に上場している銘柄の証券コード(Code)と企業名(CompanyName)が格納されたCSVファイルです。

このCSVファイルに格納されている企業の
株価を取得していきます。

1️⃣CSVファイルの読み込み&codeリストの作成
まず、CSVファイルを読み込み、
codeというリストに証券コードを格納します。

df_code = pd.read_csv("/content/prime_code.csv")
code = df_code["Code"].tolist()
code


2️⃣取得開始日と終了日を設定したうえで、以下のコードを実行します

from tqdm import tqdm
# 開始日と終了日を設定
dt_s = date(2023,4,1)
dt_e = date(2024,3,30) #エンドは最終日+1日

# 株価データを格納するDataFrameを作成
stock_data = pd.DataFrame()

# 各銘柄について株価データを取得し、DataFrameに追加
for c in tqdm(code):
    try:
        data = web.get_data_yahoo(f"{c}.T",start=dt_s,end=dt_e).reset_index()
        stock_data["Date"] = data["Date"]
        stock_data[c] = data[["Adj Close"]]
    except Exception as e:
        print(e)

銘柄によっては上場廃止等によりデータを取得できない場合があります。
この場合、エラーで止まってしまうので、それを避けるために例外処理を入れます。

#欠損データは削除します
stock_data.dropna(axis=1,inplace=True)
stock_data

実行結果

1,646銘柄の株価が取得できました。

🎉Stooqで取得したTOPIXデータとマージしてみます

stock_data = pd.merge(
        stock_data, 
        df_topix[["Date","Close"]], 
        how="left",
        on="Date"
)
stock_data = stock_data.rename(columns={"Close":"TOPIX"})
stock_data

TOPIXとマージできましたね


🎁おまけ 為替情報をゲットする


Yahooファイナンスなら
米ドル円などの為替情報も簡単にゲットできます

1996年11月からの
米ドル円の月足データを取得してみました。

1996年11月が遡れる限界のようです。

ティッカーは、"USDJPY=X"を指定します。
get_data_yahooの引数として、interval="1mo"を指定します。

# 取得期間
dt_s = date(1996, 11, 1)
dt_e = date(2024, 3, 30) #エンドは最終日+1日

ticker = "USDJPY=X"

df = web.get_data_yahoo(tickers=ticker,start=dt_s,end=dt_e,interval='1mo').reset_index()
df

インターバルとして、
1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo
をサポートしています。

出力結果
ちゃんとゲットできていますね


さいごに


Pythonを最大限活用して、
良き投資ライフを!!


よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!