返回目錄
A
數據洞見:從原始數據到商業決策的機器學習實戰 - 第 2 章
第2章 資料蒐集與整合
發布於 2026-02-28 07:18
# 第2章 資料蒐集與整合
> **學習目標**:\
> 1. 理解資料蒐集的主要來源與方式;\
> 2. 掌握建立統一資料倉儲的流程與工具;\
> 3. 能夠設計可擴充、可維護的資料整合管道。
---
## 2.1 何謂資料蒐集?
資料蒐集(Data Acquisition)是將「業務需求」轉化為「可用數據」的第一步。它不僅僅是把資料從源頭搬運到工作站,而是一個關於資料品質、可追蹤性與治理的完整流程。<br>
> **核心問題**
> - 哪些資料能支持決策?
> - 資料來源的合法性與可用性如何確保?
> - 如何以成本效益最大化資料價值?
## 2.2 資料來源分類
| 類型 | 典型來源 | 特色 | 主要挑戰 |
|------|----------|------|------------|
| **內部系統** | ERP、CRM、POS、BI 報表 | 結構化、規範化 | 版本迭代、權限控制 |
| **外部 API** | Google Maps、社群媒體、金融行情 | 時效性高、API 限流 | 認證機制、網路可靠性 |
| **網路爬蟲** | 商品評論、競爭對手網站 | 非結構化、頻繁變動 | 反爬機制、資料合法性 |
| **物聯網(IoT)** | 感測器、車載數據 | 大量、即時 | 資料吞吐、時間同步 |
| **傳統媒體** | 報紙、期刊、電子書 | 內容豐富、文本 | PDF 解析、版權問題 |
> **實務提示**:在確定資料來源前,先進行「資料治理需求分析」— 風險、合規、成本三方面綜合評估。
## 2.3 資料蒐集流程(Data Acquisition Pipeline)
1. **需求定義**:確定業務指標(KPI)所需的資料指標。
2. **來源評估**:判斷資料的可得性、品質與合法性。
3. **連線設計**:採用批量(Batch)或即時(Streaming)方式。
4. **提取 (Extraction)**:抓取資料並轉存暫存區。
5. **轉換 (Transformation)**:資料清洗、格式轉換、欄位映射。
6. **載入 (Loading)**:將資料寫入資料倉儲或資料湖。
7. **監控與治理**:即時報告、元資料管理、資料血緣追蹤。
> **關鍵術語**:ETL(Extract‑Transform‑Load)與 ELT(Extract‑Load‑Transform)。在大資料環境下,ELT 以資料湖為主,後續在倉儲或分析平台完成轉換。
## 2.4 內部系統的資料抽取
### 2.4.1 從資料庫抽取
sql
-- 以 MySQL 為例,抽取客戶資料
SELECT
customer_id,
name,
email,
signup_date
FROM customers
WHERE signup_date >= '2023-01-01';
### 2.4.2 從 OLAP 系統抽取
使用 **SQL on Hadoop** 或 **Presto** 抽取聚合報表。
sql
SELECT
region,
SUM(sales) AS total_sales,
COUNT(*) AS orders
FROM sales_fact
WHERE order_date BETWEEN '2024-01-01' AND '2024-03-31'
GROUP BY region;
> **實務小技巧**:使用 **CDC(Change Data Capture)** 技術,實時同步變更資料到資料倉儲,降低資料延遲。
## 2.5 外部 API 的資料抓取
### 2.5.1 認證與速率限制
- **OAuth 2.0**:使用 refresh token 交換 access token。<br>
- **API Key**:在 headers 或 query string 送入。<br>
- **速率限制**:使用回退機制(Exponential Backoff)。
### 2.5.2 Python 範例(Requests)
python
import requests
import time
API_URL = "https://api.example.com/v1/data"
HEADERS = {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Accept": "application/json"
}
params = {"date_from": "2024-01-01", "date_to": "2024-01-31"}
while True:
response = requests.get(API_URL, headers=HEADERS, params=params)
if response.status_code == 200:
data = response.json()
# 進行資料寫入或暫存
break
elif response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 60))
time.sleep(retry_after)
else:
response.raise_for_status()
> **實務提示**:在公司環境下,將 API 呼叫包裝成 **Python 包**,並使用 **Airflow** 或 **Prefect** 定義 DAG 進行排程。
## 2.6 網路爬蟲的實作與倫理
| 步驟 | 目的 | 工具 | 需要注意的法規 |
|------|------|------|-----------------|
| **目標設定** | 確定需要爬取的資料 | Selenium, Scrapy | 版權、商業秘密 |
| **robots.txt** | 確認網站允許爬取範圍 | urllib | 遵守網站政策 |
| **請求頻率** | 避免造成伺服器負擔 | time.sleep, RequestRateLimiter | 服務條款 |
| **資料存儲** | 結構化存儲 | PostgreSQL, MongoDB | 資料保護 |
| **數據清洗** | 去除重複、格式化 | Pandas | 資料質量 |
python
import scrapy
class ProductSpider(scrapy.Spider):
name = "product"
start_urls = ["https://example.com/products"]
def parse(self, response):
for product in response.css(".product-item"):
yield {
"id": product.css("::attr(data-id)").get(),
"name": product.css(".name::text").get(),
"price": product.css(".price::text").get(),
}
> **倫理提醒**:確保爬取資料不違反任何版權或隱私條例,必要時取得資料所有者同意。
## 2.7 資料湖 VS 資料倉儲
| 特色 | 資料湖(Data Lake) | 資料倉儲(Data Warehouse) |
|------|--------------------|-----------------------------|
| 資料格式 | 原始(Raw)可存放結構化、半結構化、非結構化 | 結構化(Schema‑on‑Write) |
| 目的 | 事前探索、機器學習 | 報表、BI、決策支援 |
| 技術 | Hadoop, S3, Delta Lake | Snowflake, BigQuery, Redshift |
| 元資料 | 大量元資料管理需求 | 內建模式 |
| 成本 | 较低(按需存儲) | 高(結構化儲存) |
> **實務建議**:先將原始資料存入資料湖,完成清洗、轉換後再載入資料倉儲。這樣可以保持「一次寫入,重複使用」的原則。
## 2.8 資料治理與血緣追蹤
1. **資料標準化**:制定統一的命名規範、資料類型、單位。
2. **元資料管理**:使用 **Data Catalog**(如 Collibra、Alation)記錄資料來源、擁有者、更新頻率。
3. **資料血緣追蹤**:從源頭到最終使用,記錄所有轉換步驟,確保可追溯性。
4. **資料品質指標**:完整度、準確度、一致性、及時性。
5. **安全與合規**:符合 GDPR、CCPA 等隱私規範,設置角色權限、加密傳輸。
## 2.9 案例研究:零售業的資料蒐集與整合
| 步驟 | 需求 | 技術棧 | 成果 |
|------|------|--------|------|
| 1. 需求 | 追蹤客戶購買行為、商品庫存 | 需求討論、KPI 定義 | 具體數據指標確定 |
| 2. 來源 | POS 系統、ERP、第三方物流 API、網站日誌 | MySQL、REST API、ElasticSearch | 多源資料整合 |
| 3. ETL | 使用 Airflow + Python | Airflow DAG、pandas | 定時提取、清洗、載入 |
| 4. 資料湖 | S3 + Delta Lake | Delta Lake | 原始資料備份、探索 |
| 5. 資料倉儲 | Snowflake | Snowflake | 報表、BI |
| 6. 監控 | Datadog + Airflow SLA | 監控腳本 | 即時錯誤告警 |
| 7. 治理 | Collibra | 元資料管理 | 可追溯性、合規 |
> **關鍵洞察**:透過跨部門協作,資料科學團隊能夠在 6 個月內把「客戶流失預測模型」落地,提升客戶留存率 12%。
## 2.10 小結
資料蒐集與整合是數據科學的基礎,任何後續的清理、探索、建模都建立在此之上。掌握多元來源的抓取技巧、合理設計資料管道、重視資料治理與血緣追蹤,才能確保資料品質與合規,為企業創造真正的價值。
---
> **下一章預告**:在第3章「資料清理與前處理」中,我們將深入討論缺失值處理、異常偵測以及資料標準化的實務技巧,進一步把資料從「原始」轉化為「可用」的形式。