人気記事

Python

Python pandasで米国S&P500全銘柄の株価をCSVファイルに出力する

投稿日:

米国株投資を行うにあたり、上昇トレンドにある銘柄を把握したいと思いました。証券会社から色々とツールは出ていますが、とりあえず全銘柄の株価を取得できれば自分でも色々できると考え、手始めにS&P500全銘柄の株価をCSVファイルに出力してみました。

結果イメージ

日付と各銘柄の株価一覧を取得します。

Date MMM AOS ABT ABBV ATVI
2021/1/20 169.039993 57.3800011 112.650002 112.910004 93.9599991
2021/1/21 170.220001 57.5600014 112.25 112.629997 95.4700012
2021/1/22 170.199997 57.8100014 113 110.650002 94.6800003
2021/1/25 168.880005 57.6100006 113.059998 109.730003 95.5299988
2021/1/26 173.779999 57.0400009 114.25 111.300003 93.3499985
2021/1/27 177.309998 53.7099991 115.199997 106.279999 91
2021/1/28 185 55.4799995 117.910004 104 89.5699997
2021/1/29 182.289993 56.3199997 120.25 104 90

 

環境

・Mac Sierra バージョン 10.12.6

・jupyter 

 

ソースコード

import pandas as pd
import pandas_datareader.data as pdr
import datetime
from tqdm import tqdm

df = pd.read_csv('S&P500.csv')

end = datetime.date.today()
start = end - datetime.timedelta(days=10)
stock = {} #株価データ格納
error_symbols = [] #エラー用

#株価取得
for s in tqdm(df['Symbol']):
    try:
        stock[s] = pdr.DataReader(s,"yahoo",start, end)
    except:
        error_symbols.append(s)

#Open時のみの株価を抽出
open_stock_values={}
for s in df['Symbol']:
    try:
        single_stock = stock[s]
        open_stock_values[s] = single_stock['Open'].values
    except:
        error_symbols.append(s)

#データフレームに変換
df_stock = pd.DataFrame.from_dict(open_stock_values, orient='index').T

#日付抽出
#日付はどの銘柄にも付与されているので、ここではAppleで実施
apple_stock = stock['AAPL']
apple_open_stock = apple_stock['Open']

#pandas_seriesに変換
ser_date = pd.Series(apple_open_stock.keys())

#辞書型に変換
dic_date={}
dic_date["Date"]=ser_date

#データフレームに変換
df_date = pd.DataFrame.from_dict(dic_date, orient='index').T

#株価と日付を結合
join_stock = df_date.join(df_stock)

#CSV出力
join_stock.to_csv("stock.csv")

動作説明

取得する銘柄を指定するCSVファイルを作成する。

以下リンクのようにCSVファイルを作成します。

S&P500.csv

 

取得する期間をstart,endで指定する。

daysを変更することで取得期間を調整します。

end = datetime.date.today()
start = end - datetime.timedelta(days=10)

 

株価をpandas.datareaderで取得する

以下の処理で株価を取得しています。

取得までに数分〜数十分かかります。

#株価取得 
for s in tqdm(df['Symbol']): 
    try: 
        stock[s] = pdr.DataReader(s,"yahoo",start, end) 
    except: 
        error_symbols.append(s)

stockの中身を見ると銘柄毎にOpen,High,Low等の株価が取得できています。

 

Open時のみの株価を抽出

 今回はOpen時のみの株価を使うことにします。

    以下の処理で抽出します。

#Open時のみの株価を抽出
open_stock_values={}
for s in df['Symbol']:
    try:
        single_stock = stock[s]
        open_stock_values[s] = single_stock['Open'].values
    except:
        error_symbols.append(s)

#データフレームに変換
df_stock = pd.DataFrame.from_dict(open_stock_values, orient='index').T

 

日付を抽出

 うまい方法が思いつかず変換づくしで何とか抽出しました。

#日付抽出
#日付はどの銘柄にも付与されているので、ここではAppleで実施
apple_stock = stock['AAPL']
apple_open_stock = apple_stock['Open']

#pandas_seriesに変換
ser_date = pd.Series(apple_open_stock.keys())

#辞書型に変換
dic_date={}
dic_date["Date"]=ser_date

#データフレームに変換
df_date = pd.DataFrame.from_dict(dic_date, orient='index').T

日付と株価を結合

日付(df_date)と株価(df_stockj)を両方ともデータフレーム型としてのでjoinで結合しました。

#株価と日付を結合
join_stock = df_date.join(df_stock)

CSV出力

データフレームなのでto_csvの1行で出力できます。

#CSV出力
join_stock.to_csv("stock.csv")

 

 出力結果

出力したCSVファイルを添付しておきます。

S&P500銘柄.csv

 

グラフ化したら下図のようになりました。

 

最後に

自分が探した限りでは株価の生データ一覧をサクッと取得できなかったので、今回試してみましたが、pandasのdatareaderという便利機能のおかげで思ったより簡単に達成できました。株価データさえ取れればあとはグラフで可視化したり株価上昇率でフィルタリングしたりと自由にデータ分析ができそうです。

 

以上。

-Python
-, , , ,

Copyright© ITエンジニアへの転身 , 2024 All Rights Reserved Powered by STINGER.