HW #01Python 環境建立和Hello World
1.Notebook
2.youtube
3.學習卡與測驗
💻 加上註解的 Python 程式碼
python
import numpy as np # 匯入 NumPy:用於高效的數值計算與隨機變數生成
import pandas as pd # 匯入 Pandas:用於資料結構(DataFrame)處理與表格分析
import matplotlib.pyplot as plt # 匯入 Matplotlib:用於資料視覺化繪圖
from scipy import stats # 匯入 SciPy 的 stats 模組:用於進階統計分析
# -------------------------------------------------------------------------
# 設定模擬參數
# -------------------------------------------------------------------------
np.random.seed(42) # 設定隨機亂數種子,確保每次執行程式產生的「隨機數」完全相同(方便除錯與重現結果)
days = 252 # 統一設定交易天數為 252 天(此為美股與多數金融市場一年的實際交易天數)
# -------------------------------------------------------------------------
# 1. 生成日報酬率並計算價格序列(幾何布朗運動簡化版)
# -------------------------------------------------------------------------
# loc = 0.001 (平均每日報酬率 0.1%)
# scale = 0.02 (每日報酬率的波動度/標準差 2%)
# size = days (生成 252 個符合上述常態分佈的隨機變數)
returns = np.random.normal(loc=0.001, scale=0.02, size=days)
# 透過報酬率計算每日股價:
# np.cumsum(returns) -> 將每日報酬率進行「累加」(計算累積報酬率)
# np.exp(...) -> 取指數函數。因為金融學上假設股價報酬呈對數常態分佈,這樣做能確保模擬出來的股價「永遠不會小於 0」
# 100 * ... -> 設定股票的初始起始價格為 $100
prices = 100 * np.exp(np.cumsum(returns))
# -------------------------------------------------------------------------
# 2. 建立股票價格 DataFrame 並檢視
# -------------------------------------------------------------------------
# 將「天數(1 到 252)」與「模擬股價」打包成一個二維的 Pandas 表格 (DataFrame)
df_stock = pd.DataFrame({
'Day': range(1, days + 1),
'Price': prices
})
# 查看 DataFrame 的前 5 筆資料(預設顯示 head 5 筆),確認資料結構正確
print("--- 模擬股價前 5 天資料 ---")
print(df_stock.head())
# -------------------------------------------------------------------------
# 3. 繪製股價走勢圖
# -------------------------------------------------------------------------
plt.figure(figsize=(10, 5)) # 設定圖表畫布寬度為 10,高度為 5
plt.plot(df_stock['Day'], df_stock['Price'], color='royalblue') # X軸放天數,Y軸放股價,並指定線條顏色
plt.title('Stock Price Simulation (252 Days)') # 設定圖表標題
plt.xlabel('Trading Days') # 設定 X 軸標籤
plt.ylabel('Price ($)') # 設定 Y 軸標籤
plt.grid(True, linestyle='--', alpha=0.6) # 開啟網格線(虛線,透明度 0.6)
plt.show() # 在 Colab 視窗中渲染並完整秀出圖表
請謹慎使用程式碼。
🎓 關鍵學習重點(精華筆記)
這段程式碼雖然簡短,卻涵蓋了資料科學與量化分析中最重要的四個核心觀念:
1. 金融統計基礎:為什麼是 252 天與常態分佈?
- 252 天的由來:扣除週休二日、國定假日後,金融市場一年的實際交易日大約就是 252 天。因此在金融量化分析中,這是一個約定俗成的基準點。
- 報酬率與股價關係:程式使用
np.random.normal來模擬每日報酬率。現實中,股價通常不會直接符合常態分佈(因為股價不會小於零,且有肥尾效應),但股價的「報酬率」在傳統金融理論中常被假設為常態分佈。
2. 幾何布朗運動(GBM)的數學美感
- 程式碼核心的
100 * np.exp(np.cumsum(returns))是財務工程中用來模擬資產價格的幾何布朗運動簡化模型。 np.cumsum(累積加總):代表時間的推移與複利效應。np.exp(自然指數):這是最精妙的一步!任何實數經過 \(e^{x}\) 計算後結果必定大於零,完美符合現實世界中「股票價格不可能為負值(頂多破產下市變成 0)」的特性。
3. 亂數種子(Seed)在 AI 與科學運算中的重要性
- 電腦產生的亂數其實是「偽亂數」(透過公式算出來的)。
- 設定
np.random.seed(42)的目的,是為了讓這部電腦、那部電腦、或是你明天再次執行時,都能得到一模一樣的隨機序列。這在機器學習訓練、程式除錯(Debugging)或寫教學範例時至關重要。
4. Python 資料科學鐵三角的完美協作
這段範例體現了典型的資料科學工作流:
- NumPy 負責高速、大規模的底層數學運算(生成隨機數、累加、指數)。
- Pandas 負責把散落的數據整理成有結構、好閱讀、有欄位標籤的「表格(DataFrame)」。
- Matplotlib 負責將冰冷的數據表格轉化為直觀的視覺化圖表。










留言
張貼留言