爬蟲之後,視覺化的開始!matplotlib/seaborn-從零開始的Python股票爬蟲教學(五)

前言

如何將數據視覺化是評斷資料科學家功力的重要指標,將龐大的市場數據爬下來後如果只是看著一行行的 dataframe,那不如直接在網站上看不就好了嗎?所以數據視覺化的能力是絕對必須具備的!

這章節我們會介紹常用且好用的python package,像是靜態的matplotlib、seaborn,到互動式圖片的 plotly、pyecharts,都是非常實用的工具,等著大家打造專屬的視覺化介面。

立即訂閱電子報,掌握最新資訊!

    稱呼

    電子郵件

    以下非必填,但若您願意分享,我們將能推送更精準的內容給您

    投資經驗

    是否為理工科背景、工程師或有寫程式的經驗?

    有興趣的主題
    量化交易台股期貨海外期貨虛擬貨幣美股

    有興趣的量化交易軟體/平台
    不清楚MultiChartsTradingViewPythonXQ

    想透過量化交易達成甚麼目的?
    不確定自動交易選股回測投資績效量化自己的投資方法想找現成的策略套用

    還有什麼想詢問的?

    一、matplotlib

    繪製股票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()
    lesson_visual_101112151555

    二、seaborn

    繪製大盤歷年每月漲跌幅%數

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

    結論

    上完這堂課後有沒有發現視覺化其實很簡單,只要從 package 提供的 demo 檔一步步修改,就能畫出我們心目中想要的數據統計圖,而且程式碼都不長,掌握到每個參數對應到的功能,我們也能自己打造出比外面選股網站還要精美的看盤界面。

    而 Python 的繪圖功能絕對比 Excel 的圖表還要強大,所以誰說一定要會 Excel 呢?

    【系列閱讀】從零開始的Python股票爬蟲教學

    Py 101209161710
    Py 101209161711

    加入LINE社群量化交易討論群」無壓力討論與分享!

    加入Discord 「量化交易討論群」即時獲取實用的資源!

    Anti Fraud 10140382164
    Anti Fraud 10140382163
    Anti Fraud 10140382165


    加入LINE社群量化交易討論群」無壓力討論與分享!

    加入Discord 「量化交易討論群」即時獲取實用的資源!

    Anti Fraud 10140382164
    Anti Fraud 10140382163
    Anti Fraud 10140382165
    Oscar
    Oscar

    具備多年量化經驗,現於外商基金公司擔任量化交易工程師,研究臺股、期貨、加密貨幣等交易策略及回測系統。擅長使用Python網站爬蟲、資料處理、建構回測系統、風險分析,及資料統計視覺化。曾受邀至國立臺北商業大學擔任業師授課。未來將著重在機器學習、神經網路於投資交易上的應用。

    文章: 5

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *