Python 入門:變數、數據類型到 NumPy 與 Pandas|Quant Theory 第 9 講筆記

第 9 課・共 34 課

⚠️ 本站內容僅作教育用途,不構成投資建議。投資涉及風險,作出任何投資決定前請諮詢持牌專業人士。
目錄

這是 Liu Peng 大學級量化交易課程第 9 講的筆記,屬 Python 入門教學。講者由開發環境安裝講起,依次講解變數與數據類型、運算符與控制流程、函數封裝,最後落到量化交易真正常用的兩件工具——NumPy 陣列與 Pandas 數據框,為日後處理金融數據鋪路。

學習重點

詳細筆記

開發環境:Anaconda 與 Jupyter Notebook

講者建議初學者由 Anaconda 入手——這是一套管理 Python 軟件、套件與環境的工具,按作業系統下載對應安裝程式即可。他特別提醒一個細節:安裝時應選「為整部電腦安裝」而非「僅為此用戶安裝」,否則日後安裝套件時可能因權限不足而報錯。若不想安裝任何軟件,可改用 Google Colab 等雲端 Jupyter Notebook,打開瀏覽器已能寫代碼。

講者解釋選用 Python 的原因:語法簡單、可讀性高,加上開源函數庫生態成熟,處理金融數據特別順手。至於編程環境,主力是 Jupyter Notebook(或其進階版 JupyterLab)。介面以儲存格為單位:代碼儲存格寫程式,Markdown 儲存格寫文件。講者強調,寫代碼是一回事,寫好註釋是另一回事——清晰的註解令邏輯可讀,他人(以及三個月後的自己)才看得懂。

變數與賦值

變數 Variable 是記憶體中的佔位符,用來存放數據。以賦值運算符 = 把數值放入變數:a = 10,左邊是變數名,右邊是值。賦值後的變數又稱對象 Object,自帶屬性與方法可供調用。若直接 print(10) 而不存入變數,這個 10 打印後便消失,無法再用。

講者特別示範一個陷阱:print 本身是系統內建函數,若寫 print = 5 把它當變數名,之後再調用 print(10) 便會報錯——因為 print 已不再是函數。變數命名規則:只限一個字、不可有空格;可含字母、數字與底線;不得以數字開頭;並應避開 Python 關鍵字。講者推薦初學者用 pythontutor.com 逐步追蹤代碼執行過程。

數據類型總覽

講者以一張表總結常用數據類型:

常用數據類型總結:整數、浮點數、布爾值、字串、列表、字典、ndarray 與 DataFrame(截圖出自原片(Liu Peng))

運算符:比較與邏輯

運算符 Operator 用來執行特定操作。比較運算符包括 ><>=<===!=,所有比較表達式的結果都是布爾值。邏輯運算符把多個條件串連:and 要求左右兩個條件同時為真才回傳真;or 只要其一為真即真;not 把結果取反。以邏輯記號表示:

$$a \land b = \text{True} \iff a = \text{True} \;\text{且}\; b = \text{True}$$

這類條件判斷正是日後撰寫交易訊號(例如「價格高於某門檻且成交量放大」)的基礎。

控制流程與函數

當程式需要「若此條件成立便做甲、否則做乙」,便用到控制流程 Control Flow。講者以 if-elif-else 結構示範:兩個條件、三個分支。執行是順序的——先評估條件一,成立便執行第一分支並結束;不成立才評估條件二;兩者皆假則落入 else。因此條件的先後次序本身也是設計的一部分。每個分支的主體以四格縮進 Indentation 界定,這是 Python 語法的硬性要求。只有單一條件時,可寫成一行:val1 if condition else val2,條件為真回傳 val1,否則回傳 val2

控制流程:if-elif-else 三分支結構與單行寫法(截圖出自原片(Liu Peng))

函數 Function 是封裝的手段:當一段邏輯變得複雜,便把它包起來當黑箱調用。系統內建函數如 print(輸出訊息、無回傳值)與 type(回傳數據類型)各司其職;用戶亦可自訂函數,輸入與輸出皆屬可選。

字串、列表與字典的操作

字串是字符的集合,採零基索引 Zero-based Indexing——第一個字符的索引是 $0$ 而非 \$1$,第 $i$ 個字符寫作 $s[i-1]$。常用操作包括:len() 求長度、以冒號切片取子字串(如 s[0:3])、用 in 判斷某字串是否包含於另一字串、以 + 拼接兩個字串。

列表的存取方式與字串類似,同樣用方括號與零基索引:取第二個元素寫 list[1]。亦可求長度、切片取連續元素、用 in 判斷元素是否存在,以及用 append 擴充列表。字典則沒有順序概念,一律以鍵取值:contacts['John'] 回傳對應的值。對現有的鍵賦新值會覆蓋舊值;若鍵不存在,則自動新增一個鍵值對——更新與新增是同一個語法。

NumPy 陣列與廣播機制

進入套件部分。安裝套件可用 pip install,或在 Anaconda 介面點按安裝;使用前必須先 import,習慣上給 NumPy 起別名 np。NumPy 的核心是 n 維陣列 ndarray:一維陣列由一層列表轉成,二維是多個列表排成矩陣,三維則是把二維陣列再疊一層,維度可繼續向上。以下代碼摘自原片教學:

import numpy as np                      # 摘錄自原片教學
arr_1d = np.array([10, 20, 30])
arr_2d = np.array([[10, 20], [30, 40], [50, 60]])
print(arr_2d.ndim)   # 維度數
print(arr_2d.shape)  # 各維度長度
print(arr_2d.size)   # 元素總數

陣列附帶 ndim(維度數)、shape(形狀)、size(元素總數)、dtype(元素類型)等屬性可查閱。元素存取與列表類似,按維度傳入多個索引;內建函數可直接計均值 $\bar{x} = \dfrac{1}{n}\sum_{i=1}^{n} x_i$、最大值、標準差、百分位數等統計量——留意有 NumPy 函數與對象方法兩種調用方式。

NumPy ndarray:由列表建立一至三維陣列及查閱屬性(截圖出自原片(Liu Peng))

NumPy 的另一重點是逐元素運算 Element-wise Operation 與廣播 Broadcasting。對陣列寫 arr + 10,系統先把 10 廣播成與陣列同形的 $[10, 10, 10]$,再逐元素相加,效果等同 $c_i = a_i + 10$。講者提醒:廣播並非每次都行得通,例如二維陣列加一維陣列時,系統會沿垂直軸複製後者再相加,動手前必須確認維度相容。

Pandas Series 與 DataFrame

PandasSeries 可視為表格中的一列,由列表或陣列建成,附帶索引與值兩部分——索引預設是整數,處理時間序列時可換成日期,值則是對應的價格。存取元素有兩套邏輯:按位置(position-based)與按標籤(label-based)。

DataFrame 是建於 ndarray 之上的二維表格:行是觀察記錄、列是變數欄位。最簡單的建立方法是先組織一個字典,再轉換成數據框。以下代碼摘自原片教學:

stock = pd.DataFrame({                   # 摘錄自原片教學
    "TSLA": [122.72, 123.08, 122.94],
    "FB":   [3220.08, 3203.53, 3186.73],
    "GOOG": [584.76, 568.82, 593.38]})
print(stock.columns)  # 欄名
print(stock.shape)    # 維度

數據框附帶 .columns.index.shape.size 等屬性;索引可如 Series 般覆寫。取單列直接傳欄名,取多列則把欄名包成列表再傳入。

Pandas DataFrame:由字典建立三隻股票三日的價格表(截圖出自原片(Liu Peng))

更常用的是 .loc.iloc 兩個屬性:.loc標籤選取——例如指定某個日期索引的行、某個名為 TSLA 的列,亦可同時選多日多列;.iloci 代表 index,按位置選取——傳入 1 即第二行或第二列,毋須理會標籤是甚麼。

條件篩選與檔案讀寫

講者最後示範布林篩選 Boolean Indexing:先寫一個條件(例如特斯拉股價高於某門檻),會得到一列 True/False;把這個條件傳入 .loc,系統便只回傳符合條件的行,完成行級篩選。多個條件可用邏輯運算符 &(and)、|(or)、~(not)組合。講者補充一個小語法:當一行代碼過長,可用反斜線 \ 換行,告訴 Python 這仍是同一行。

檔案讀寫方面,讀入數據用 read_csvread_excel 等函數,可指定哪一欄作索引,並留意不同作業系統的檔案路徑寫法;處理完畢後用 to_csv 存檔——講者建議保留一份清洗好的乾淨數據,供下游分析直接調用,省卻每次重複清洗。

🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:

ZA Bank 邀請碼 P20923 —— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。 立即開戶 → (聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)

欣利克的看法

名詞解釋

常見問題 FAQ

學量化交易一定要先學 Python 嗎?

不一定,但 Python 是現時最主流的選擇。講者解釋,原因在於語法簡單易讀,加上 NumPy、Pandas 等開源套件生態成熟,處理金融數據特別方便。市場上亦有 R、MATLAB、MQL5 等替代方案,惟論社羣資源與教學材料,Python 對初學者最友善。

Jupyter Notebook 與一般 Python 腳本有甚麼分別?

Jupyter Notebook 以儲存格為單位,可以逐格執行、即時看到中間結果,並夾雜 Markdown 說明文件,適合探索式分析與教學;一般 .py 腳本則由頭到尾順序執行,適合正式、需重複運行的程式。講者提醒,筆記本儲存格可亂序執行,依賴變數狀態時要格外留神。

NumPy 陣列與 Python 列表有甚麼分別?

列表是 Python 內建的通用容器,可混合存放不同類型;NumPy 陣列則專為數值計算而設,支援多維結構、向量化運算與廣播機制,整列數據一次過運算,速度遠勝以迴圈逐個處理列表。處理大規模金融數據時,陣列是標準做法。

.loc 與 .iloc 如何分辨?

.loc 按標籤選取:傳入的是索引的名稱,例如某個日期或欄名 TSLA。.iloc 按位置選取:傳入的是整數位置,例如 1 代表第二行或第二列,與標籤內容無關。記憶口訣是 i 代表 index(整數位置)。兩者皆可同時選取多行多列,是數據框切片的主力工具。

原影片

本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看:

來源:https://www.youtube.com/watch?v=u5mSDRCoaEo

🏦 ZA Bank 開戶優惠

本站所有內容免費提供。多使用網站的推薦碼,就是對我們繼續製作優質內容的最大鼓勵和支持 🙏

去 ZA Bank 開戶,享價值 HKD 2,000 迎新獎賞,仲有機會享 USD 30 指定美股兌換券!

  • 💛 全線上開戶,無需前往分行
  • 💛 無最低存款要求,零賬戶管理費
  • 💛 24x7 銀行服務

專屬邀請碼:P20923

立即開戶 → (聯盟連結)