前言
使用pandas
、requests
爬取台灣證交所及期交所的台指大盤資料跟選擇權結算價,因選擇權的結算時間原則上為週三13:30,與大盤收盤時間相同,故將用plotly
繪製選擇權和台指價格線圖,比較兩者關係。完整程式碼在最下方。
環境設定及使用套的函示庫
'''
Anaconda的jupyter(6.0.3)
'''import pandas as pd
import requests
import time
import random
import plotly.graph_objects as go #繪圖用
import plotly.io as pio #儲存圖片用
開始工作
步驟1:爬取選擇權結算價
#選擇權結算價網站
url = ‘https://www.taifex.com.tw/cht/5/optIndxFSP'#需要的期間資料
data = {‘start_year’:’2021',
‘start_month’:’12',
‘end_year’:’2021',
‘end_month’:’12'}#開始爬蟲
content = requests.post(url, data = data).text#將爬蟲資料資料處理成DataFrame
df_option = pd.read_html(content)[3]#保留需要的資料
df_option = df_option.iloc[:, :3]#欄位重新命名
df_option.columns = [‘date’, ‘contract’, ‘TXO’]#依照’data’排序
df_option.sort_values(by=’date’, inplace=True)df_option.head()
步驟2:爬取台指大盤報價價
#選擇權結算價網站
url = ‘https://www.twse.com.tw/indicesReport/MI_5MINS_HIST?response=html&date=20211201'#將爬蟲資料資料處理成DataFrame
df_index = pd.read_html(url)[0]#欄位修改
df_index.columns = df_index.columns.get_level_values(1)#欄位重新命名
df_index.columns = [‘date’, ‘open’, ‘Thigh’, ‘low’, ‘close’]df_index.head()
由爬蟲下來的資料發現日期的年份都寫著"民國"年份,但希望可以用"西元年"表示。
#將年月日分割
df_date = df_index[‘date’].str.split(‘/’, expand=True)#民國年及西元年差距1911年
df_date[0] = df_date[0].astype(int) + 1911#將[0]轉為str
df_date[0] = df_date[0].astype(str)#合併年月日
df_index['date'] = df_date[0] + '/' + df_date[1] + '/' +df_date[2]
步驟3:選擇權與台指大盤資料合併
#將選擇權報價與大盤資料合併
df_result = pd.merge(df_option, df_index, on=’date’, how=’left’)df_result[‘date’] = pd.to_datetime(df_result[‘date’])df_result.head()
步驟4:繪製選擇權與台指大盤資料
因github
連結無法顯示出由plotly
所繪製的圖片,但其實plotly
不同於Matplotlib
之處在於可互動,例如放大縮小、調整視窗。
#繪製選擇權結算與大盤收盤圖import plotly.graph_objects as go#建立圖片
fig = go.Figure()#選擇權資料
fig.add_trace(go.Scatter(x=df_result[‘date’], y=df_result[‘TXO’],
mode=’lines+markers’,
name=’option expiry price’))#台指資料
fig.add_trace(go.Scatter(x=df_result[‘date’], y=df_result[‘close’],
mode=’lines+markers’,
name=’index close price’))#標頭和座標名稱
fig.update_layout(title=’Taiwanese Option & Index’,
xaxis_title=’date’,
yaxis_title=’price’)fig.show()
在儲存不像Matplotlib
可以直接儲存,需要先安裝與調整環境,請參閱Plotly — Exporting to Static Images,
'''
#前置作業
conda install -c plotly plotly-orca psutil
npm install -g electron@1.8.4 orca
pip install psutil
'''#儲存圖片import plotly.io as piopio.write_image(fig, “Taiwanese Option & Index.png”)
完整程式碼
完整程式碼中的最終成果
小結
首次使用plotly繪圖,試試看不同函示庫提供的服務內容和差異,發現在美感上plotly有著較好的質感,但這只是主觀意識,還是要根據不同的數據提供適當的視覺化才是最重要的。