株の分析をしてみたくなったのでまとめていきます。
情報の取得が簡単に行えるアメリカ株を対象にします。
モジュール
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()