輕鬆學習 Python |從基礎到應用,成為初級資料分析師 # Python常用數據工具及技巧 使用套件:Pandas、Numpy ## Pandas套件 [Link](https://colab.research.google.com/drive/1EwanBuLmgsrdUO5_QmU-PH0u25cyY37H#scrollTo=fGoqyDBYuoLt) Pandas 的主要功能 ### 1. 讀取與寫出資料(I/O 操作) 支援多種資料格式,如 CSV、Excel、JSON、SQL 等。 ``` import pandas as pd df = pd.read_csv("/content/sample_data/california_housing_train.csv") print(df.head()) ``` ### 2. 資料清洗與整理 例如:處理缺失值、刪除欄位、合併資料、資料轉換等。 ``` # 處理缺失值 df = df.dropna() # 移除有缺失值的列 # 或 df = df.fillna(0) # 將缺失值填 0 ``` ### 3. 資料篩選(Filtering) 可以根據條件選取資料。 例:選出分數大於 80 的學生 ``` df[df["score"] > 80] ``` ### 4. 統計與描述統計 常用於快速了解資料。 例:取得平均值、標準差 ``` df["score"].mean() df.describe() # 整體統計摘要 ``` ### 5. 資料分組(GroupBy) 常用於計算分類的統計數據,例如每個班級平均分數。 例:按「班級」分組後計算平均分數 ``` df.groupby("class")["score"].mean() ``` ### 6. 合併與串接資料(Merge / Join / Concatenate) 類似 SQL 的 join 操作。 例:依照 id 合併兩個表格 ``` merged = pd.merge(df1, df2, on="id") ``` ### 7. 資料轉換(Pivot Table、Reshape) 可進行資料透視、寬表與長表轉換。 例:建立樞紐分析表 ``` df.pivot_table(values="score", index="class", columns="gender", aggfunc="mean") ``` ### 8. 時間序列處理 Pandas 對日期時間處理非常強大,可以做重采樣、滑動平均等。 例:將資料按月統計 ``` df.resample("M").sum() ``` ## NumPy 的主要功能 [Link](https://colab.research.google.com/drive/1EJnqEWMJrrmi7-kPfX48viDu_WObUmRG#scrollTo=bgoc194c_hIo) ### 1. 高效能多維陣列(ndarray) NumPy 的陣列比 Python list 更快、佔用記憶體更小。 ``` #例:建立陣列 import numpy as np a = np.array([1, 2, 3]) b = np.array([[1, 2], [3, 4]]) ``` ### 2. 向量化運算(Vectorization) 可直接對整個陣列做運算,不必寫 for 迴圈。 ``` 例:陣列加法 a = np.array([1, 2, 3]) a * 2 # → array([2, 4, 6]) ``` ### 3. 統計與數學運算 NumPy 有大量內建函式可對陣列做統計。 ``` 例:平均、總和、標準差 arr = np.array([1, 2, 3, 4]) arr.mean() # 2.5 arr.sum() # 10 arr.std() # 標準差 ``` ## QUIZ 題目: A:早餐50元, 中餐120元, 晚餐80元 B:早餐70元, 中餐60元, 晚餐150元 誰的總餐費超過260元? ``` import pandas as pd import numpy as np data = { 'A': [50, 120, 80], 'B': [70, 60, 150], } df = pd.DataFrame(data, index=['早餐', '中餐', '晚餐']) print("--- 原始資料 ---") print(df) ``` total_expense = df.___() who_exceeds = total_expense[total_expense > 250] Answer: ``` total_expense = df.sum() who_exceeds = total_expense[total_expense > 250] print("\n--- 餐費超過 250 元的人 ---") print(who_exceeds) ```