Python で過去の株価データを CSVデータで取得する

2024年3月5日

Python のライブラリーを使えば簡単に株価をダウンロードすることができます

yfinance

Yahoo!ファイナンスAPI を使用する Python ライブラリです

Yahoo!、Y!Finance、Yahoo! financeは、Yahoo!ファイナンスの登録商標です。 Yahoo!の利用規約を参照してください。 ダウンロードされた実際のデータを使用する権利の詳細。- Yahoo!ファイナンスAPIは、個人使用のみを目的としています。

Yahoo Developer API Terms of Use | Yahoo

GitHub – ranaroussi/yfinance: Download market data from Yahoo! Finance’s API

Reliably download historical market data from with Python | Ran Aroussi (Official Website)

Python の 環境構築

Windows の環境構築

ライブラリーが競合する可能性がある場合に仮想環境を構築した方が良いです

yfinance のインストールと使い方

インストールは"WinPython Command Prompt.exe"を実行した後

pip install yfinance

プログラムを作成し実行するには"Spyder.exe"または"Jupyter Notebook.exe"を使うと良いです

データを取得するソース

開始日と終了日または機関を指定してデータをダウンロードします。取得する間隔も指定します

#ライブラリのインポート
import pandas as pd
import yfinance as yf
import datetime
#ターゲットを指定
tickers = "AMZN AAPL"
st='2024-01-01'
ed=datetime.date.today()

#株価データを取得
data = yf.download(tickers=tickers, start=st, end=ed, auto_adjust=True)

print(data)
#data.to_csv('ticker.csv')
# 日経平均株価のデータを取得
tickers = "^N225"
#tickers = "^DJI"  # ダウ
#tickers = "^GSPC" # S&P500
#tickers = "^IXIC"  # ナスダック


data = yf.download(ticker , period= "7d", interval = "1d")
print(data)
#data.to_csv('ticker.csv')
# # トヨタ自動車の株価データを取得
tickers = "7203.T"
data = yf.download(tickers, period= "7d", interval = "1d")
print(data)
#data.to_csv('ticker.csv')

銘柄コードの書いてあるテキストファイルを読んで CSV データをダウンロードする

銘柄コードや期間と間隔変更して使用してください

サーバーに負荷がかからないように大量のデータはお控えください

import pandas as pd
import yfinance as yf
#tickers = ['AAPL', 'MSFT']
df2 = pd.read_csv('N225.txt', header=None)
tickers = df2.to_numpy().tolist()
print(tickers)
df = pd.DataFrame()
for ticker in tickers:
    data = yf.download(ticker, group_by="Ticker", period='2d')
    data['tick'] = "ticker"
    df = pd.concat([df, data])
    df["tick"] = df["tick"].replace(["ticker"], [ticker])
df.to_csv('ticker.csv')

入力データ

7203.T
1332.T

出力データのサンプル架空のデータです

Date,Open,High,Low,Close,Adj Close,Volume,tick
2025-02-29,3560.0,3629.0,3540.0,3621.0,3621.0,143900,1000.T

パラメーター

        tickers : str, list
             ダウンロードするティッカーのリスト
        period : str
            Valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
             有効期間: 1日、5日、1ヶ月、3ヶ月、6ヶ月、1年、2年、5年、10年、年月、最大
             期間パラメータを使用するか、開始と終了を使用します
        interval : str
            Valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
             有効な間隔: 1分、2分、5分、15分、30分、60分、90分、1時間、1日、5日、1週間、1ヶ月、3ヶ月
             日中データは過去 60 日間延長できません
        start: str
             ダウンロード開始日文字列 (YYYY-MM-DD) または _datetime (両端を含む)。
             デフォルトは99年前です
             例えば。 start="2020-01-01" の場合、最初のデータ ポイントは "2020-01-01" になります。
        end: str
             ダウンロード終了日文字列 (YYYY-MM-DD) または _datetime (排他的)。
             デフォルトは現在です
             例えば。 end="2023-01-01" の場合、最後のデータ ポイントは "2022-12-31" になります。
        group_by : str
             「ティッカー」または「列」でグループ化(デフォルト)
        prepost : bool
             市場前と市場後のデータを結果に含めますか?
             デフォルトはFalseです
        auto_adjust: bool
             すべてのOHLCを自動的に調整しますか? デフォルトはFalseです
        repair: bool
             通貨単位の 100 倍の取り違えを検出し、修復を試みます
             デフォルトはFalseです
        keepna: bool
             Yahoo から返された NaN 行を保持しますか?
             デフォルトはFalseです
        actions: bool
             配当+株式分割データをダウンロードします。 デフォルトはFalseです
        threads: bool / int
             一括ダウンロードに使用するスレッドの数。 デフォルトはTrueです
        ignore_tz: bool
             異なるタイムゾーンを組み合わせる場合は、日時のその部分を無視してください。
             デフォルトは間隔によって異なります。 日中 = false。 Day+ = True
        proxy: str
             オプション。 プロキシサーバーのURLスキーム。 デフォルトはなしです
        rounding: bool
             オプション。 値を小数点以下 2 桁に四捨五入しますか?
        show_errors: bool
             オプション。 Falseの場合はエラーを出力しません
             非推奨、将来のバージョンでは削除される予定です
        session: None or Session
             そうでない場合は、指定された回数の後に応答の待機を停止します。
             秒。 (0.01 など、1 秒未満の場合もあります)
             オプション。 すべてのリクエストに使用される独自のセッション オブジェクトを渡します

Google Colaboratory 

Colab(正式名称「Colaboratory」)では、ブラウザ上で Python を記述、実行できます。以下の機能を使用できます。

  • 環境構築が不要
  • GPU に料金なしでアクセス
  • 簡単に共有

https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja

!pip install yfinance
import pandas as pd
import yfinance as yf
#tickers = ['AAPL', 'MSFT']
df2 = pd.read_csv('/content/N225.txt', header=None)
tickers = df2.to_numpy().tolist()
print(tickers)
df = pd.DataFrame()
for ticker in tickers:
    data = yf.download(ticker, group_by="Ticker", period='2d')
    data['tick'] = "ticker"
    df = pd.concat([df, data])
    df["tick"] = df["tick"].replace(["ticker"], [ticker])
df.to_csv('/content/ticker.csv')

CSV データの加工をバッチ処理で行う

Python,

Posted by eightban