[Python] アメリカ株の情報取得

株の分析をしてみたくなったのでまとめていきます。

情報の取得が簡単に行えるアメリカ株を対象にします。

モジュール

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

pandas_datareader は、yahoo finance に限らず、Web上の様々なソースに簡単にアクセスして、pandasDataFrameの形でデータを取得できるライブラリです。

yf.pdr_override() と記述するだけで、yfinacepdr をオーバーライドしてくれて、pdryfinace が使えるようになります。

アップルの株価取得とグラフ表示

アップルの情報を取得してみます。

必要なモジュールをインポートします。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from pandas_datareader import data as pdr
import yfinance as yf

pdryf を使えるようにします。

>>> 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()