🎯 期中模擬全真測驗
模擬期中考正式規格!從全套 155 題中隨機抽取題目,包含完整的七大講主題(Python環境、語法、NumPy、Pandas、Matplotlib、Scikit-learn)。交卷前不會顯示答案,交卷後將生成完整成績單與詳細題解。
📘 第 1 講:資料科學簡介
資訊科學/電腦科學 (Computer Science)、數學與統計 (Math & Stat)、領域專業知識 (Domain Expertise)。
numpy: 高效多維陣列與矩陣運算
pandas: 結構化表格資料分析與前處理 (耗時80%)
matplotlib: 資料視覺化與圖表繪製
scikit-learn: 機器學習演算法
純文字逗號分隔;若欄位包含逗號、換行或雙引號,必須用雙引號 " 包裹;內部雙引號用兩個 "" 轉義。
MNIST: 70,000張手寫數字,28×28 灰階 (單通道)。
CIFAR-10: 60,000張彩色圖片,32×32 RGB (3通道),10類別。
💻 第 2 講:Python 程式環境
Python 為直譯式 (Interpreted) 動態型別語言;由 Guido van Rossum 於 1989 年聖誕節開發;Python 3.x 不保證向下相容 Python 2.x。
代表 Julia + Python + R 三種資料科學主力語言,並向天文學家伽利略 (Galileo) 發現木星衛星筆記致敬。
三種儲存格:Code (程式碼)、Markdown (排版說明)、Raw NBConvert (未格式化純文字)。
Shift + Enter: 執行當前 Cell 並跳到下一個。
Ctrl + Enter: 執行當前 Cell 但保留游標在此 Cell。
Esc 後按 M (轉Markdown), Y (轉Code), B (下方新增), DD (刪除)。
使用 #%% 將 Python 腳本分割成儲存格單元並以 Ctrl+Enter 逐塊執行。
🐍 第 3 講:Python 語法與陷阱
a[start:stop:step],取出的元素索引為 start <= index < stop。若 step < 0 則反向反轉。
b = a:只複製記憶體指標,修改 b[0] 會同時連動 a[0]!
b = a.copy() 或 b = a[:]:產生新的清單物件副本,兩者互不影響。
{:>10} 右對齊(寬度10);{:<10} 左對齊;{:^10} 置中。
{:8.2f} 總寬度8、小數點後2位之浮點數;{:08d} 補零。
{:X} 大寫十六進位;{:b} 二進位。
Set 元素不重複且無序。交集 &、聯集 |、差集 -、對稱差集 ^。
Dict 取值用 d.get(key, default),找不到 key 時不會噴 KeyError。
🔢 第 4 講:NumPy 運算與廣播
Rank 0 = Scalar (純量)
Rank 1 = Vector (向量, shape 為 (N,))
Rank 2 = Matrix (矩陣, shape 為 (M, N))
Rank 3+ = Tensor (張量)
A * B:對應元素相乘 (Element-wise multiplication)!
np.dot(A, B) 或 A @ B:真正的線性代數矩陣乘法 (內積)。
從最後一個維度 (後端向前端) 逐一比對:各維度長度完全相等 或 其中一個為 1 才能廣播成功!長度為 1 的維度會自動複製拉伸匹配。
np.arange(start, stop, step):不含 stop!
np.linspace(start, stop, num):預設包含 stop,均勻切成 num 個點。
C 順序:Row-major (列優先);Fortran 順序:Column-major (行優先)。
a.ndim: 維度數;a.size: 元素總數;a.itemsize: 單一元素位元組數;a.nbytes = a.size * a.itemsize。
🐼 第 5 講:Pandas 資料分析
Series:1 維帶標籤 (Index) 陣列。
DataFrame:2 維表格型資料結構 (由多個共用 Index 的 Series 組成)。
整數位置切片 df[0:2]:不包含結束索引 2 (取 row 0, 1)!
文字標籤切片 df['first':'third']:包含結束標籤 'third'!
loc:依據文字標籤 (Label) 選取。
iloc:依據整數位置 (Integer Position, 0-indexed) 選取。
兩 Series 相加時,會依標籤取聯集 (Union);若標籤只存在於其中一方,該位置運算結果為 NaN!
必須使用 & (且)、| (或),且每個條件必須用小括號 () 包裹,例如:df[(df['age'] > 20) & (df['score'] >= 60)]。
共 150 筆樣本,4 個特徵 (萼片長/寬、花瓣長/寬),共 3 類品種 (setosa, versicolor, virginica),每類各 50 筆。
📊 第 6 講:Matplotlib 圖形繪製
色彩: 'k' 黑、'c' 青 (Cyan)、'm' 洋紅 (Magenta)、'b' 藍、'r' 紅、'g' 綠、'y' 黃。
線型: '-' 實線 (預設)、'--' 虛線、':' 點線、'-.' 短劃點線。
plt.figure(figsize=(寬, 高), dpi=解析度),單位為英吋。總像素寬高 = figsize * dpi(例如 (8,6), dpi=200 輸出為 1600×1200 像素)。
指定中文字型:plt.rcParams['font.sans-serif'] = ['DFKai-SB']
避免負號顯示成亂碼:plt.rcParams['axes.unicode_minus'] = False
傳入數值相加不需為 100;搭配 plt.axis('equal') 保持 1:1 正圓;explode=(0, 0.2, ...) 可突出特定切片。
plt.subplot(列數, 欄數, 編號),編號從 1 開始,先水平後垂直排號。
呼叫 fig.tight_layout(pad=2.0) 可自動緊縮邊緣防標籤重疊。
座標軸必須指定 projection='3d';視角使用 ax.view_init(elev, azim),elev 為仰角,azim 為水平方位角。
🤖 第 7 講:機器學習與 Scikit-learn (Part 1)
三部曲:擷取特徵 (準備教材) $\to$ 訓練 (學習過程) $\to$ 判讀 (應用)。
監督式:分類 (離散類別) vs 迴歸 (連續數值)。
非監督式:無標籤,如分群 (Clustering/K-means)。
強化式:與環境互動獎懲學習。
.data 為 2D 特徵矩陣 (Input),.target 為 1D 標籤 (Output)。
train_test_split(x, y, test_size=0.3, random_state=編號):固定 random_state 可重現實驗結果。
四種策略:mean (均值)、median (中位數)、most_frequent (眾數)、constant (常數,搭配 fill_value)。
LabelEncoder:照字典序對應到整數,不增欄位 (有次序者)。
OneHotEncoder:每個類別獨立一欄 (互斥二元 0/1,無次序者)。
MinMaxScaler:正規化到 [0, 1]。
StandardScaler:標準化為均值 0、標準差 1 (加速收斂)。
Normalizer:特徵向量歐式長度 (L2) 調整為 1。
Binarizer:二元化閥值切分。
距離:曼哈頓 ($L_1$), 歐氏 ($L_2$), 切比雪夫 ($L_\infty$), 閔可夫斯基 ($L_p$)。
損失函數:迴歸用 RMSE (大誤差平方重懲);分類用 Cross Entropy (交叉熵)。
激勵函數:二元分類用 Sigmoid;多元分類用 Softmax (機率總和嚴格為 1)。