返回目錄
A
洞察數據:從原始資料到商業決策的全流程 - 第 2 章
第二章:資料來源與蒐集策略
發布於 2026-02-23 12:56
# 第二章:資料來源與蒐集策略
資料科學的價值最終取決於 **資料來源的質量、完整性與可持續性**。本章將帶領讀者從企業內部系統到外部資料供應商,探索各種蒐集手段、權限控制、合規審查與成本管理,並結合實際案例說明如何建立可重複、可擴充的資料收集流程。
## 2.1 內部資料來源
| 資料類型 | 典型系統 | 典型結構 | 優點 | 缺點 |
|---|---|---|---|---|
| 交易資料 | ERP、POS、CRM | 關聯式、批次或實時 | 可信度高、結構化 | 更新頻率有限、資料量大需分區 |
| 日誌資料 | 伺服器、應用程式 | NoSQL、文本 | 事件級別細緻、可用於監控 | 需轉換為結構化、處理雜訊 |
| 裝置感測 | IoT、SCADA | 時序資料 | 能捕捉實時運作、預測維護 | 需要資料清洗、標準化 |
### 2.1.1 企業資料倉庫
企業資料倉庫(Data Warehouse)以 OLAP(線上分析處理)為核心,將多個來源的資料整合為一致的維度與事實表。典型的 ETL(Extract‑Transform‑Load)流程可以使用 Talend、Apache NiFi 或自行編寫 Python/SQL 程式。
python
# 以 Python + SQLAlchemy 連接 MySQL 讀取交易資料
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://user:pw@host/db')
query = """
SELECT order_id, customer_id, amount, order_date
FROM orders
WHERE order_date >= '2023-01-01'
"""
orders = pd.read_sql(query, engine)
### 2.1.2 交易系統資料
交易系統(如 ERP、POS)常以日結、週結等批次檔形式輸出。對於需要即時決策的場景,可使用 **資料流平台**(Kafka、Azure Event Hubs)將資料推送至資料湖(Data Lake)或即時資料庫(PostgreSQL + TimescaleDB)。
sql
-- PostgreSQL + TimescaleDB 時序資料寫入
INSERT INTO sales(time, store_id, revenue)
SELECT timestamp, store_id, revenue FROM raw_sales
### 2.1.3 事件日誌
Web 伺服器、應用程式日誌提供用戶行為、系統錯誤等重要訊息。常見格式為 JSON、ELK Stack(Elasticsearch‑Logstash‑Kibana)可實時索引與可視化。
{
"timestamp": "2026‑02‑23T12:45:00Z",
"user_id": "U12345",
"action": "click",
"page": "/product/987"
}
## 2.2 外部 API 介面
外部 API 讓我們能即時取得金融、社群、地理資訊等資料。選擇合適的 API 需要考量授權方式、資料更新頻率、授權成本與資料量限制。
### 2.2.1 RESTful API
python
import requests
url = 'https://api.openweathermap.org/data/2.5/weather'
params = {'q': 'Taipei', 'appid': 'YOUR_API_KEY'}
resp = requests.get(url, params=params)
weather = resp.json()
print(weather['main']['temp'])
### 2.2.2 GraphQL
GraphQL 允許客戶端一次性請求多層次資料,減少重複請求。
python
import requests
query = '''{
user(id: "U12345") {
name
orders { id, total }
}
}'''
resp = requests.post('https://api.example.com/graphql', json={'query': query})
print(resp.json())
## 2.3 網路爬蟲
當資料不在公開 API 或需要自訂抓取時,網路爬蟲是最佳方案。關鍵點在於:
1. **合法性**:遵循 robots.txt、API 服務條款。
2. **效能**:使用非同步或多執行緒爬取。
3. **反制**:IP 封鎖、Captcha 需設計代理或延時。
4. **資料結構化**:用 BeautifulSoup / lxml 將 HTML 轉為 JSON 或 Pandas DataFrame。
python
import requests
from bs4 import BeautifulSoup
import pandas as pd
def fetch_page(url):
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
data = {
'title': soup.title.string,
'price': soup.select_one('.price').text.strip(),
'description': soup.select_one('.desc').text.strip()
}
return data
urls = ['https://shop.example.com/item/1', 'https://shop.example.com/item/2']
rows = [fetch_page(u) for u in urls]
df = pd.DataFrame(rows)
## 2.4 第三方資料供應商
若需要高質量、標準化的行業資料(例如金融信用、社會經濟指標),可以選擇第三方供應商。常見模型包括:
| 供應商 | 主要資料 | 付費模式 | 注意事項 |
|---|---|---|---|
| Bloomberg | 金融市場 | 訂閱 | 資料延遲、授權限制 |
| Nielsen | 消費者行為 | 付費報表 | 需經營商簽約 |
| GfK | 市場調查 | 資料包 | 資料更新頻率慢 |
選擇時需評估授權範圍、資料精度、合規性(GDPR、個資法)。
## 2.5 資料權限與合規
資料安全與合規是任何資料收集流程的前提。常見規範包括:
- **個人資料保護法**(個資法):需取得同意、限制用途。
- **GDPR**:歐盟資料主體權利、數據跨境傳輸。
- **ISO/IEC 27001**:資訊安全管理。
- **公司內部政策**:資料分類、訪問控制、審計紀錄。
### 2.5.1 資料分類
| 等級 | 描述 | 典型範例 |
|---|---|---|
| 公共 | 不含敏感資訊 | 市場報告、公開 API |
| 內部 | 可能包含商業機密 | 銷售日誌、產品規格 |
| 敏感 | 需保護的個人資訊 | 用戶帳號、信用卡號 |
| 非法 | 未授權資料 | 未經同意蒐集的社群貼文 |
### 2.5.2 訪問控制
使用 **基於角色的存取控制(RBAC)** 或 **層級存取控制(ABAC)**,並結合資料標籤。大部分雲端服務(AWS IAM、Azure AD)提供細粒度的存取管理。
yaml
# Terraform 示例:設定 S3 Bucket 的存取控制
resource "aws_s3_bucket_policy" "example" {
bucket = aws_s3_bucket.example.id
policy = jsonencode({
Version = "2012‑10‑17",
Statement = [
{
Effect = "Allow",
Principal = { AWS = "arn:aws:iam::123456789012:role/DataScientist" },
Action = "s3:GetObject",
Resource = "${aws_s3_bucket.example.arn}/*"
}
]
})
}
## 2.6 成本管理
資料蒐集不只是技術問題,亦是商業投資。成本主要來自:
1. **雲端儲存**:資料湖、資料倉庫、檔案存取。
2. **API 呼叫**:限額、速率、授權費。
3. **爬蟲維護**:代理、反制機制、開發人力。
4. **資料清洗**:資料管道的維護與升級。
5. **合規審查**:合規審查、合約談判。
### 2.6.1 成本優化策略
| 方向 | 具體措施 |
|---|---|
| **雲端儲存** | 使用 S3 Glacier / Cold Storage,設置生命周期策略。
| **API 呼叫** | 合併請求、利用批次 API、緩存重複資料。
| **爬蟲** | 部署爬蟲至容器化平台(Docker + Kubernetes),利用容器自動擴容。
| **資料清洗** | 建立資料分類與標準化規則,使用自動化腳本減少人工操作。
| **合規** | 建立資料治理平台(如 Collibra、Alation),自動追蹤授權與存取紀錄。
## 2.7 範例:電商平台客戶行為資料收集流程
> **背景**:A‑Shop(台北市區網路商店)希望收集客戶瀏覽、點擊、加入購物車等行為,並結合第三方社群評論與天氣資料,做為個性化推薦模型的輸入。
1. **日誌蒐集**:使用 ELK 叢集實時收集 Web 伺服器日誌。
2. **API 取得商品庫存**:每 15 分鐘向內部 ERP 發送 REST API 取得庫存狀態。
3. **社群評論抓取**:利用非同步爬蟲從 Facebook 商品貼文中抓取評論與情感分數。
4. **第三方資料**:訂閱 Nielsen 市場報表,獲得競品價格趨勢。
5. **資料倉庫**:使用 Talend 進行 ETL,將日誌、API 與第三方資料寫入 Snowflake。
6. **合規**:資料分類後,所有個人資訊設置**加密**與**匿名化**,並在 IAM 中僅授予資料科學團隊讀取權限。
> **成果**:整合後的資料集約化至 Snowflake 中,資料管道週期僅 3 分鐘,且自動化測試確保資料品質。
## 2.8 實作練習
> **任務**:為一家小型咖啡館設計一個簡易資料蒐集流程,目標是收集每日銷售數據、Wi‑Fi 進入日誌與外部天氣資訊,並將結果寫入 Google BigQuery。
>
> **步驟**
> 1. 編寫 SQL 取出 POS 資料。
> 2. 呼叫 OpenWeather API 取得台北天氣。
> 3. 解析 Wi‑Fi 日誌檔案並轉成 DataFrame。
> 4. 使用 `pandas-gbq` 上傳資料至 BigQuery。
> 5. 設定資料庫訪問權限與加密。
>
> **提示**:確保所有個人資料經過匿名化處理,並記錄每一步的操作紀錄。
## 2.9 閱讀資料
- *《企業資料管理》*,K. W. Kim & S. B. Lee(2024)
- *《資料湖設計與實踐》*,R. V. Chen(2025)
- *《合規性與資料治理》*,M. Hsu(2023)
- *個人資料保護法(個資法)*(第 3‑5 章)
- *General Data Protection Regulation (GDPR)*(第 1‑3 章)
> **結語**:資料來源是資料科學的基礎。唯有透過嚴謹的來源選擇、合規檢查與成本管控,才能在確保資料安全與可重複性的同時,為企業帶來持續的決策優勢。