今天是鐵人的第24天,要來用前一天介紹的抓取股票資訊來分析股票,取出歷史收盤資料畫出圖表、取得收益率(投資風險會使用到)、每天的波動。
介紹底下的圖表之前先預先載入需要的套件
# basic
import numpy as np
import pandas as pd
# get data
import pandas_datareader as pdr
# visual
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
#time
import datetime as datetime
股票數據是一種時間序列數據,因此有時間順序,因此可以對股票數據進行歷史趨勢分析和圖表化,
以下用台積電(2330)和華新科(2492)進行比較
start = datetime.datetime(2015,1,5)
df_2330 = pdr.DataReader('2330.TW', 'yahoo', start=start)
df_2492 = pdr.DataReader('2492.TW', 'yahoo', start=start)
取出的股價格式如下
示範1. 台積電(2330)和華新科(2492)的收盤價
fig = plt.figure()
df_2330['Adj Close'].plot(label="台積電")
df_2492['Adj Close'].plot(label="華新科")
plt.legend()
其中藍色是台積電(2330),橘色是華新科(2492),圖表的線條顏色可以利用以下的方式取得
sns.palplot(sns.color_palette())
示範2. 台積電(2330)和華新科(2492)的交易量
fig = plt.figure()
df_2330['Volume'].plot(label="台積電")
df_2492['Volume'].plot(label="華新科")
plt.legend()
示範3. 台積電(2330)和華新科(2492)每天的波動
df_2330['High-Low'] = df_2330['High'] - df_2330['Low']
df_2492['High-Low'] = df_2492['High'] - df_2492['Low']
fig = plt.figure()
df_2330['High-Low'].plot(label="台積電")
df_2492['High-Low'].plot(label="華新科")
plt.legend()
可以看到華新科的波動比較大
示範4. 台積電(2330)的收益率,使用直方圖
收益率:代表股票在一天交易中的價值變化百分比
plt.rcParams['axes.unicode_minus']=False
fig = plt.figure(figsize=(10, 6))
df_2330['daily-return'] = df_2330['Adj Close'].pct_change()
df_2330['daily-return'].plot(label="台積電", kind='hist')
plt.legend()
可以看到收益率都是落在0以上,因此可以判定總體價格是在上升的
示範4. 華新科(2492)的收益率,使用seaborn的kde密度圖
fig = plt.figure(figsize=(10, 6))
df_2492['daily-return'] = df_2492['Adj Close'].pct_change()
sns.distplot(df_2492['daily-return'].dropna(),bins=100, label="華新科")
plt.legend()
# pct_change() = (df_2492['Adj Close'][0] - df_2492['Adj Close'][1]) / df_2492['Adj Close'][1]
DataReader之前示範都一次只有讀取一支股票,但DataReader可以一次讀取多個股票,使用方式就是傳入一個list
2492:華新科
2330:台積電
3045:台灣大
2412:中華電
2409:友達
start = datetime.datetime(2015,1,5)
campany = ['2492.TW', '2330.TW', '3045.TW', '2412.TW', '2409.TW']
df_stock = pdr.DataReader(campany, 'yahoo', start=start)
獲取的股票資訊是multiple index,假設要取得2330.TW的收盤價要使用以下的方式
df_stock['Adj Close']['2330.TW']
範例1. 取得每個股票的收盤價
adjClose = df_stock['Adj Close']
adjClose.plot()
範例2. 比較台灣大(3045)和中華電(2412)的收益率關係,使用閃點圖
plt.rcParams['axes.unicode_minus']=False
adjClose_pct = adjClose.pct_change()
sns.jointplot('2412.TW','3045.TW',adjClose_pct, kind="scatter")
其中x軸是代表中華電,y軸是台灣大,這張圖表傳達的訊息
範例3. 跟範例2相同,但加上線性回歸線
sns.regplot('2412.TW','3045.TW',adjClose_pct)
範例4. 同時比較5家公司
sns.pairplot(adjClose_pct.dropna())
x和y座標會同時列出5家公司,兩兩座比較,可以用範例2的分析方式來分析兩家公司。