2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

データ解析への道 #1  〜株価編〜

Last updated at Posted at 2018-11-29

Pythonを学び始めて早3ヶ月。データ解析学習中です。
Jupyter Notebookなどが主流だと思いますが、PyCharmを使用してデータ解析をしていきたいと思います。

#使用するソフトウェア

#記事内容
株式データを元にデータの可視化についてメモを(主に自分用に)残す。

#インポート

stock_analysis.py
import pandas as pd
from pandas import Series, DataFrame
import pandas_datareader as web

import numpy as np
import matplotlib.pyplot as plt

from datetime import datetime

import seaborn as sns
sns.set_style('whitegrid')

データ可視化

1. 様々なグラフ表示

stock_analysis.py
# 続き

tech_list = ['AAPL', 'GOOG', 'MSFT', 'AMZN']  # 左から Apple, Google, Microsoft, Amazon

# 直近1年分のデータを取得するため。
end = datetime.now()
start = datetime(end.year - 1, end.month, end.day)

# comp_list内の企業それぞれの株価データの取得。
for entry in comp_list:
    globals()[entry] = web.DataReader(entry, 'yahoo', start, end)

# globals()関数はグローバル変数を返してくれる。
AAPL['Adj Close'].plot(legend=True, figsize=(10, 4))
plt.show()

上記を実行すると、以下のようなグラフが実行結果として得られる。
myplot1.png

使用されたそれぞれの関数の引数は、

          引数  説明
DataReader(name, data_source, start, end) name (株価データを獲得したい&すでに定義した)企業名
data_source データソース元
start, end データの取得期間(start & end)
plot(legend, figsize) legend 凡例を表示させるか否か(=True or False)[default: False]
figsize 表示するサイズ (x, y)

移動平均を算出するには

stock_analysis.py

# 続き

# 移動平均を算出する。
ma_day = [10, 20, 50] # ma: moving average
for ma in ma_day:
    column_name = 'MA {}'.format(ma)
    # 移動平均算出(old version: pd.rolling_mean(AAPL['Adj Close'], ma)
    AAPL[column_name] = AAPL['Adj Close'].rolling(ma).mean()

print(AAPL.head())

<実行結果:テーブル>

High Low Open ... MA 10 MA 20 MA 50
Date ...
2017-11-27 175.080002 173.339996 175.050003 ... NaN NaN NaN
2017-11-28 174.869995 171.860001 174.300003 ... NaN NaN NaN
2017-11-29 172.919998 167.160004 172.630005 ... NaN NaN NaN
2017-11-30 172.139999 168.440002 170.429993 ... NaN NaN NaN
2017-12-01 171.669998 168.500000 169.949997 ... NaN NaN NaN
  • Open:始値
  • High:高値
  • Low:安値
  • Close:終値
  • Volume:出来高(1日に取引が成立した株の数)
  • Adj Close:調整後終値

そして、これをグラフで表す。

stock_analysis.py
# 続き

AAPL[['Adj Close', 'MA 10', 'MA 20', 'MA 50']].plot(subplots=False, figsize=(10, 4))
plt.show()

<実行結果:グラフ>
myplot2.png

次に、日毎の調整後終値の変動推移を計算する。

stock_analysis.py
 # 続き

# pct_change: 変動推移を計算
AAPL['Daily Return'] = AAPL['Adj Close'].pct_change()
print(AAPL.head())

<実行結果:テーブル>

High Low ... MA 50 Daily Return
Date ...
2017-11-27 175.080002 173.339996 ... NaN NaN
2017-11-28 174.869995 171.860001 ... NaN -0.005859
2017-11-29 172.919998 167.160004 ... NaN -0.020743
2017-11-30 172.139999 168.440002 ... NaN 0.013984
2017-12-01 171.669998 168.500000 ... NaN -0.004655

グラフで可視化するには、

stock_analysis.py
# 続き

AAPL['Daily Return'].plot(figsize=(10, 4), legend=True, linestyle='--', marker='o')
plt.show()

<実行結果:グラフ>
myplot3.png

##2. 分布図
次に、snsを使用して正規分布を取得する、

stock_analysis.py
# 続き

sns.distplot(AAPL['Daily Return'].dropna(), bins=100, color='purple')
plt.show()

<実行結果:分布図>
myplot4.png

stock_analysis.py
# 続き

sns.distplot(AAPL['Daily Return'].dropna(), bins=100, color='purple')  
# dropna(): テーブル上でNaNになっている部分を無くす。
plt.show()

<実行結果:分布図>
myplot5.png

次にそれぞれの調整後終値(Adj Close)を取得する。

stock_analysis.py
# 続き
closing_df = web.DataReader(['AAPL', 'GOOG', 'MSFT', 'AMZN'], 'yahoo', start, end)['Adj Close']  # 左から、Apple, Google, Microsoft, Amazon
print(closing_df.head())

<実行結果:テーブル>

Symbols AAPL AMZN GOOG MSFT
Date
2017-11-27 171.514999 1195.829956 1054.209961 82.442818
2017-11-28 170.510101 1193.599976 1047.410034 83.435616
2017-11-29 166.973206 1161.270020 1021.659973 81.921829
2017-11-30 169.308151 1176.750000 1021.409973 82.737709
2017-12-01 168.519974 1162.349976 1010.169983 82.826172

次に、それぞれの変動値を求める。

stock_analysis.py
# 続き
tech_rets = closing_df.pct_change()
print(tech_rets.head())

<実行結果:テーブル>

Symbols AAPL AMZN GOOG MSFT
Date
2017-11-27 NaN NaN NaN NaN
2017-11-28 -0.005859 -0.001865 -0.006450 0.012042
2017-11-29 -0.020743 -0.027086 -0.024585 -0.018143
2017-11-30 0.013984 0.013330 -0.000245 0.009959
2017-12-01 -0.004655 -0.012237 -0.011004 0.001069
2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?