株の分析をしてみたくなったのでまとめていきます。
情報の取得が簡単に行えるアメリカ株を対象にします。
モジュール
numpy
scipy
pandas
matplotlib
は使うとして、他に下記の2つのモジュールを使っていきます。
yfinance
yfinance
というライブラリを使うことで、アメリカの yahoo finance の情報が簡単に取得できます。
Reliably download historical market data from Yahoo! Finance with Python
pandas_datareader
yfinace
だけで必要な情報は取得できるのですが、既存の多くの参考コードが pandas_datareader
というライブラリを使っているので、yfinance
とともに、pandas_datareader
を使うことにします。
pandas_datareader
は、yahoo finance に限らず、Web上の様々なソースに簡単にアクセスして、pandas
のDataFrame
の形でデータを取得できるライブラリです。
yf.pdr_override()
と記述するだけで、yfinace
が pdr
をオーバーライドしてくれて、pdr
で yfinace
が使えるようになります。
アップルの株価取得とグラフ表示
アップルの情報を取得してみます。
必要なモジュールをインポートします。
import numpy as np import pandas as pd import matplotlib.pyplot as plt from pandas_datareader import data as pdr import yfinance as yf
pdr
で yf
を使えるようにします。
>>> yf.pdr_override()
情報をダウンロード、表示します。
>>> stock = ['AAPL'] >>> start = pd.to_datetime('2019-01-01') >>> end = pd.to_datetime('2019-12-31') >>> data = pdr.get_data_yahoo(stock, start=start, end=end) [*********************100%***********************] 1 of 1 completed>>> print(data.head()) Open High ... Adj Close Volume Date ... 2018-12-31 158.529999 159.360001 ... 155.037109 35003500 2019-01-02 154.889999 158.850006 ... 155.214005 37039700 2019-01-03 143.979996 145.720001 ... 139.753540 91312200 2019-01-04 144.529999 148.550003 ... 145.719513 58607100 2019-01-07 148.699997 148.830002 ... 145.395203 54777800 [5 rows x 6 columns]
調整後終値を折れ線グラフで表示してみます。
>>> data_adj_close = data['Adj Close'] >>> data_adj_close.plot() ‹matplotlib.axes._subplots.AxesSubplot object at 0x0000021368D81688› >>> plt.show()
日々の値動きを求めてみます。
>>> dayly_price_movement = (data_adj_close/data_adj_close.shift(1))-1 >>> print(dayly_price_movement.head()) Date 2018-12-31 NaN 2019-01-02 0.001141 2019-01-03 -0.099607 2019-01-04 0.042689 2019-01-07 -0.002226 Name: Adj Close, dtype: float64
日々の値動きをヒストグラムにしてみます。
>>> dayly_price_movement.hist(bins=100) ‹matplotlib.axes._subplots.AxesSubplot object at 0x0000021368D40148› >>> plt.show()
import numpy as np import pandas as pd import matplotlib.pyplot as plt from pandas_datareader import data as pdr import yfinance as yf yf.pdr_override() stock = ['AAPL'] start = pd.to_datetime('2019-01-01') end = pd.to_datetime('2019-12-31') data = pdr.get_data_yahoo(stock, start=start, end=end) data_adj_close = data['Adj Close'] # data_adj_close.plot() # plt.show() dayly_price_movement = (data_adj_close/data_adj_close.shift(1))-1 print(dayly_price_movement.head()) dayly_price_movement.hist(bins=100) plt.show()