爬蟲之前,3分鐘 Python 快速打底-從零開始的Python股票爬蟲教學(二)

2015 年以來 Python 在全球的討論度急速上升,老實說 Python 就其他程式語言相比的確好學很多,在數據分析及機器學習的部分更是屌打其他語言。

所以大家不用擔心沒程式背景,網路上也有非常多的 documents 可以參考,開發效率更是高得嚇人,你敢相信短短三行程式碼就可以做量化分析嗎?

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

    電子郵件

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

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

    還有什麼詢問的?

    好富投 1920x400
    好富投 978x258

    點我了解更多資訊


    一、認識程式語言

    python_syntax_101112152105

    程式語言依是否接近核心 Hardware 區分成高低等語言,越接近底層核心屬於低等語言,離底層核心越遠的則為高等語言。

    低等語言的語法通常艱澀難懂,寫法非常複雜,好處是執行速度相當快,因為程式碼完全依據功能所開發,相反地高等語言語法非常簡單易懂,短短 3 行就可以達到低等語言需要寫數十行甚至數百行程式碼的功能,缺點是執行速度較低等語言慢,但單就開發效率而言仍屬高等語言佔據優勢。

    因為開發時間可能差 1 到 2 小時,但執行速度上可能只慢 3~5 秒,這也是我們之所以選擇用 Python 作為學習的程式語言的原因。

    Py 101209161710
    Py 101209161711

    二、Python基礎語法

    1. 變數型態

    #str (字串)
    a = 'apple'
    
    # int (整數)
    x = 30
    
    # float (小數點)
    y = 4.5
    
    # list
    l = [2,3,4,5,6]
    
    # dict
    d = {'apple':10,'orange':30}
    
    # bool (布林訊號:True / False)
    condition = True

    2. 函式庫

    (1)class

    class Animal():
        def __init__(self, name):
            self.name = name
    x = Animal("dog")
    
    print(x.name)
    
    

    >>> dog

    class Account:
    
        def __init__(self,name,number):
            self.name = name
            self.number = number
            self.balance = 0
    
        def deposit(self,amount):
            if amount<0:
                raise '輸入錯誤'
            self.balance += amount
    
        def withdraw(self,amount):
            if amount<=self.balance:
                self.balance -= amount
            else:
                raise RuntimeError('餘額不足')
    
    account = Account('Andy','123–456–789') # 輸入使用者名稱 & 電話號碼
    account.deposit(100) # 存入100元
    account.withdraw(30) # 提出30元
    account.balance # 目前存款

    >>> 70

    (2)decorator

    # syntactic sugar 快寫法
    
    class Animal:
        def __init__(self, barking):
            self.barking = barking
    
        def bark(self):
            print("Bark~")
    
    @Animal
    def dog():
        print("woof~")
    
    @Animal
    def cat():
        print("meow~")
    
    x = dog
    x.barking()

    >>> woof~

    (3)try / except (嘗試執行第一區塊的程式碼如果出現error的話則執行第二區塊的程式碼)

    import requests
    try:
    res = requests.get(url)
    except:
    print('爬蟲失敗,請稍後再試')

    (4)lambda

    import pandas as pd
    
    # def 寫法
    def str_to_numeric(s):
    f = pd.to_numeric(str(s))
    return f
    
    df = str_to_numeric(df)
    
    # lambda 寫法
    df = df.applymap(lambda s:pd.to_numeric(str(s)))

    (5)list comprehension

    # list 寫法
    l = []
    for x in df:
    if x>0:
    l.append('red')
    else:
    l.append('green')
    
    # list 縮寫法
    ['red' if x>0 else 'green' for x in df]

    三、pandas應用

    Series
    import pandas as pd
    
    date = pd.date_range('2022-01-01','2022-01-05')
    s = pd.Series([111,124,131,126,121],index=date

    >>>
    2022-01-01    111
    2022-01-02    124
    2022-01-03    131
    2022-01-04    126
    2022-01-05    121

    Freq: D, dtype: int64

    DataFrame
    import pandas as pd
    
    date = pd.date_range('2021-01-05','2021-01-09')
    df = pd.DataFrame({
        'data1':[120,123,122,127,130],
        'data2':[31,33,37,34,29]
    },index=date)

    >>>
            data1 data2
    2021-01-05   120   31
    2021-01-06   123   33
    2021-01-07   122   37
    2021-01-08   127   34
    2021-01-09   130    29

    結論

    一路複習下來有沒有感受到 Python 語法的強大呢?特別是資料科學家必學的 pandas 應用,礙於篇幅我們就不特別深入去探討,其實大部分的時候也是需要用到才會去查程式寫法,所以大家不用強迫自己一定要背起來所有的功能!

    最後大家如果對於pandas有興趣的話可以參考 《資料科學家的 pandas 實戰手冊:掌握 40 個實用數據技巧》 ,裡面有更多厲害的功能給大家自行去挖掘囉!

      電子郵件

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

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

      還有什麼詢問的?


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

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

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

      Oscar
      Oscar

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

      文章: 5

      4 則留言

      發佈留言

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