【はじめに】
Pythonを学習し始めて、実データを使ってデータ分析をしてみたいと思ったので「Yahoo! Finance」から株価を取得してデータの可視化までやってみました。
これから、データ分析をしてみたい方にオススメですので、是非一緒にコードを実行してみてください。
本記事の内容
- Yahoo! Financeから株価を取得する
- 取得した株価の値動きを可視化してみる
※OS環境はMacOS、実行環境はJupyter Labを使用します。
【Yahoo! Financeから株価を取得する】
今回、Yahoo! Financeから株価の情報を取得します。
日経225の銘柄一覧をCSVファイルで作成する
次のような、銘柄と証券コードをまとめた表を準備します。
私のGitHubに「nikkei.csv」としてアップロードしてあるので、ターミナルから下記コマンドでダウンロードすれば簡単に準備できます。
curl https://raw.githubusercontent.com/nakachan-ing/finance-streamlit/master/nikkei.csv -O
yfinanceのインストール
オープンソースとして公開されている「yfinance」というライブラリを使用します。
下記コマンドでインストールします。
!pip install yfinance
ライブラリの読み込み
「nikkei.csv」の読み込みと株価取得に必要なライブラリをインポートします。
import pandas as pd
import yfinance as yf
「nikkei.csv」を読み込む
filename = 'nikkei.csv'
df = pd.read_csv(filename, encoding='shift-jis')
株価を取得したい名柄と期間を変数として指定する
start = '2020-10-01'
end = '2020-10-31'
company = 'トヨタ'
名柄から証券コードを抽出する
yfinanceを使って株価を取得するには、証券コードを使用する必要があります。
ですが、証券コードそのままでは株価を取得することができません。
証券コードの後ろに「.T」を付ける必要があります。
そこで、読み込んだdfから指定した銘柄の証券コードを抽出します。
下記コードでは、指定した名柄の行を取得してから、「コード」列の値を取得しています。
code = df[df['銘柄名']==company]['コード']
codeを表示してみると、証券コードと一緒にカラム名とデータ型の情報も取得できました。
この状態で「.T」を付けると、取得した全ての情報の後ろについてしまいます。
stockCode = str(code) + '.T'
ポイント
iloc[-1]
を付けて「カラム名」と「データ型」の情報を除き、証券コードのみを抽出します。- 抽出した名柄コードのデータ型をint型からstr型に変換してから文字列結合します。
code = df[df['銘柄名']==company]['コード'].iloc[-1]
stockCode = str(code) + '.T'
取得した「.T」付き証券コード、期間を引数に指定して株価を取得する
下記のようにyf.download()
の引数に証券コードと期間の始まりと終わりを指定して株価を取得します。
取得した株価を新たに「_df」に代入します。
_df =yf.download(tickers=stockCode, start=start, end=end)
ポイント
次の項目に対して、株価取得ができます。
- 始値
- 最高値
- 最安値
- 終値
- 調整済み終値
- 出来高
取得した株価の値動きを可視化してみる
今回は「調整済み終値」の値動きを可視化してみます。
ライブラリの読み込み
データの可視化には「matplotlib」を使用します。
import matplotlib.pyplot as plt
ポイント
- jupyter labでmatplotlibで可視化させて表を表示させるには、下記コードを追加します。(通常のpyファイルには記述不要です。)
%matplotlib inline
- matplotlibは標準では日本語対応していないため、日本語表示したい場合は下記コマンドで「japanese_matplotlib」をインストールしてからライブラリをインポートします。
!pip install japanize_matplotlib
import japaneze_matplotlib
株価の値動きを可視化する
今回は「調整済み終値」の値動きを可視化してみます。
次のように、コードを記述します。
# 可視化させる表の縦横のサイズ比率を指定
plt.figure(figsize=(16,6))
# 「調整済み終値」を「終値」という凡例名でグラフ表示させる
plt.plot(_df['Adj Close'], label='終値')
# 横軸は「日付」
plt.xlabel('日付')
# 縦軸は「価格」
plt.ylabel('価格')
# 凡例表示
plt.legend()
# グリッド線を表示
plt.grid()
# 表示
plt.show()
コード全体
def get_data(start, end, company):
# nikkei.csvを読み込む
filename = 'nikkei.csv'
df = pd.read_csv(filename, encoding='shift-jis')
#「.T」をつけた証券コードを抽出する
code = df[df['銘柄名']==name]['コード'].iloc[-1]
stockCode = str(code) + '.T'
# 指定した名柄と期間で株価を取得する
_df =yf.download(tickers=stockCode, start=start, end=end)
return _df
_df = get_data(start, end, company)
def show_plot(_df):
# 可視化させる表の縦横のサイズ比率を指定
plt.figure(figsize=(16,6))
# 「調整済み終値」を「終値」という凡例名でグラフ表示させる
plt.plot(_df['Adj Close'], label='終値')
# 横軸は「日付」
plt.xlabel('日付')
# 縦軸は「価格」
plt.ylabel('価格')
# 凡例表示
plt.legend()
# グリッド線を表示
plt.grid()
# 表示
plt.show()
start = '2020-10-01'
end = '2020-10-31'
company = 'トヨタ'
get_data(start, end, company)
show_plot(_df)
【おわりに】
今回は、Yahoo! Financeから株価を取得・可視化してみました。
銘柄によって、値動きが違うので比較してみると面白いです。
発展させれば、チャート分析などで株の売買のタイミングなどを分析することもできます。
今回のデータ分析を発展させてアプリを作成しました。GitHubでコードも公開しているので、是非参考にしてみてください。
コメント