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

從零開始的Python股票爬蟲教學系列文:

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

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

一、認識程式語言

python_syntax_101112152105

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

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

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

二、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 個實用數據技巧》 ,裡面有更多厲害的功能給大家自行去挖掘囉!

延伸閱讀:


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

加入LINE匿名群組量化通QuantPass」無壓力討論與分享!

追蹤量化通的粉絲專頁量化通QuantPass」即時獲取實用的資源!

python_course_all_1920X400
Oscar
Oscar

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

文章: 5

發佈留言

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