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

前言

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

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

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

    電子郵件

    有興趣的主題
    量化交易金融知識台灣股市國內期貨海外期貨虛擬貨幣

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

    還有什麼詢問的?

    好富投 1920x400
    好富投 978x258

    點我了解更多資訊


    一、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

    Py 101209161710
    Py 101209161711

    二、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 呢?

      電子郵件

      有興趣的主題
      量化交易金融知識台灣股市國內期貨海外期貨虛擬貨幣

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

      還有什麼詢問的?


      量化通粉絲社群,一起討論程式交易!

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

      加入臉書社團「程式交易 Taiwan」即時獲取實用的資源!

      Oscar
      Oscar

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

      文章: 5

      發佈留言

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