---
# System prepended metadata

title: 社課1-2_Python常用數據工具及技巧

---

輕鬆學習 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)
```