- 登入
- 註冊
如何將數據視覺化是評斷資料科學家功力的重要指標,將龐大的市場數據爬下來後如果只是看著一行行的 dataframe,那不如直接在網站上看不就好了嗎?所以數據視覺化的能力是絕對必須具備的!
這章節我們會介紹常用且好用的python package,像是靜態的matplotlib、seaborn,到互動式圖片的 plotly、pyecharts,都是非常實用的工具,等著大家打造專屬的視覺化介面。
繪製股票K線圖
import matplotlib.pyplot as plt
import yfinance as yf
import numpy as np
# 使用中文字體
plt.rcParams['font.sans-serif'] = ['Taipei Sans TC Beta']
stock_id = '2330.TW'
ohlcv = yf.Ticker(stock_id).history(period='max')
x = ohlcv.tail(120).index.astype(str)
y = ohlcv.tail(120)
def ma(n):
return ohlcv.Close.rolling(n).mean().tail(120)
fig,ax = plt.subplots(figsize=(23,8),dpi=80,facecolor='#414343')
ax.set_facecolor('#414343')
ax.bar(x,y.Close-y.Open*0.9995,0.6,y.Open,color=['#e27980' if x>0 else '#73d9b6' for x in y.Close-y.Open])
ax.vlines(x,y.Low,y.High,color=['#e27980' if x>0 else '#73d9b6' for x in y.Close-y.Open])
for n,color in zip([5,20,60,120],['#6b90e4','#fae239','#93d557','#aa57d5']):
ax.plot(x,ma(n),color=color,label=f"ma{n}")
ax2 = ax.twinx()
ax2.bar(x,y.Volume,color='#39a1fa',alpha=.2)
ax.set_title(f"{stock_id} 個股K線圖",fontsize=25,color='w',loc='left',y=1.1)
ax.set_xlabel('Date',fontsize=13,color='w')
ax.set_ylabel('Price',fontsize=13,color='w')
ax2.set_ylabel('Volume',fontsize=13,color='w')
ax.tick_params('x',labelcolor='w')
ax.tick_params('y',labelcolor='w')
ax2.tick_params('y',labelcolor='w')
ax.text(x[1],y.Close.mean(),
f"{y.index[-1].strftime('%Y-%m-%d')}\n\n開:{y.Open[-1]}\n收:{y.Close[-1]}\n高:{y.High[-1]}\n低:{y.Low[-1]}\n量:{y.Volume[-1]}\n幅:{round(((y.Close/y.Close.shift())[-1]-1)*100,2)} %",
color='w',fontsize=18,bbox=dict(boxstyle='round',ec='#fa397708',fc='#fa397708'))
ax.legend(fontsize=12,loc='upper left')
ax.set_xticks(np.arange(0,len(x),len(x)/10))
ax.grid('-',alpha=.5)
plt.show()
繪製大盤歷年每月漲跌幅%數
import matplotlib.pyplot as plt
import yfinance as yf
import seaborn as sns
stock_id = '^TWII'
s = yf.Ticker(stock_id).history('max').Close
# 以月份來分類資料
s = s.groupby([s.index.year,s.index.month]).last().pct_change()*100
s.index.names = ['year','month']
s = s.unstack()
fig,ax = plt.subplots(figsize=(12,10),dpi=80)
sns.heatmap(s,cmap='vlag',center=0,annot=True,fmt='.2f',ax=ax)
plt.show()
上完這堂課後有沒有發現視覺化其實很簡單,只要從 package 提供的 demo 檔一步步修改,就能畫出我們心目中想要的數據統計圖,而且程式碼都不長,掌握到每個參數對應到的功能,我們也能自己打造出比外面選股網站還要精美的看盤界面。
而 Python 的繪圖功能絕對比 Excel 的圖表還要強大,所以誰說一定要會 Excel 呢?