iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0

前言

今天是鐵人的第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)

取出的股價格式如下
https://ithelp.ithome.com.tw/upload/images/20181108/20111390Bi3GwsGsvg.png

示範1. 台積電(2330)和華新科(2492)的收盤價

fig = plt.figure()
df_2330['Adj Close'].plot(label="台積電")
df_2492['Adj Close'].plot(label="華新科")
plt.legend()

https://ithelp.ithome.com.tw/upload/images/20181031/20111390OIOvM8PsVV.png
其中藍色是台積電(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()

https://ithelp.ithome.com.tw/upload/images/20181031/20111390AAFCN4x3m5.png

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

https://ithelp.ithome.com.tw/upload/images/20181031/20111390OlqWnWGfw6.png
可以看到華新科的波動比較大

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

https://ithelp.ithome.com.tw/upload/images/20181031/20111390UaghgIBncj.png
可以看到收益率都是落在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]

https://ithelp.ithome.com.tw/upload/images/20181031/20111390ndJlolWiWN.png

比較多個股票

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

https://ithelp.ithome.com.tw/upload/images/20181031/201113901EhwrGGLsB.png

範例2. 比較台灣大(3045)和中華電(2412)的收益率關係,使用閃點圖

plt.rcParams['axes.unicode_minus']=False
adjClose_pct = adjClose.pct_change()
sns.jointplot('2412.TW','3045.TW',adjClose_pct, kind="scatter")

https://ithelp.ithome.com.tw/upload/images/20181031/20111390lzyRyF2Nas.png
其中x軸是代表中華電,y軸是台灣大,這張圖表傳達的訊息

  1. 當x和y的座標都小於0,代表那天中華電和台灣大都是跌,大於0則漲
  2. 當x和y的值越相近時,則閃點圖會越趨向一直線。代表兩個股票越正相關

範例3. 跟範例2相同,但加上線性回歸線

sns.regplot('2412.TW','3045.TW',adjClose_pct)

https://ithelp.ithome.com.tw/upload/images/20181101/20111390ieKmoPSlSU.png

範例4. 同時比較5家公司

sns.pairplot(adjClose_pct.dropna())

https://ithelp.ithome.com.tw/upload/images/20181031/20111390F67wa6A6dS.png
x和y座標會同時列出5家公司,兩兩座比較,可以用範例2的分析方式來分析兩家公司。

之前的章節


上一篇
[Day23]抓取股票 - twstock、pandas-datareader
下一篇
[Day25]繪製K線圖
系列文
python 入門到分析股市30

尚未有邦友留言

立即登入留言