聊天視窗

數據科學實戰:從問題到洞見 - 第 3 章

第3章:數據蒐集與資料治理

發布於 2026-03-05 10:52

# 第3章:數據蒐集與資料治理 本章聚焦於 **資料來源的選擇、資料管道的建構以及資料治理與合規的落地**。數據科學專案往往被「資料不完整」或「資料質量低下」所拖累,因此建立健全的資料蒐集機制與治理框架,是確保模型穩健與可持續發展的基礎。 ## 3.1 資料來源與選擇 | 來源類型 | 主要特點 | 常見使用場景 | 風險與挑戰 | | -------- | -------- | ------------- | ------------- | | 內部資料 | 完全掌握、易於取得 | 交易紀錄、客戶資料、業務系統 | 需要跨部門協作、資料品質不一 | | 外部資料 | 先前未被擁有的新資訊 | 公共開放資料、第三方 API、社群媒體 | 合規、版權、更新頻率不確定 | | 雙向資料 | 內外部結合,擴充視角 | 物流、供應鏈、行銷活動 | 整合成本高、格式不一致 | > **選擇建議**:先確定 *業務價值*,再考慮 *可取得性* 與 *合規性*。在不影響資料完整性的前提下,盡量使用內部資料;外部資料應作為補充,並在資料治理框架內評估可信度。 ## 3.2 建構資料管道(ETL / ELT) > **ETL**:Extract → Transform → Load;適用於 **批次處理**,資料量較大時可先儲存至資料湖,再做轉換。 > **ELT**:Extract → Load → Transform;適用於 **大數據平台**(如 Spark、Databricks),先將原始資料載入,再在資料倉儲內進行轉換。 ### 3.2.1 典型資料管道架構 mermaid flowchart TD A[資料來源] --> B[資料收集層] B --> C[資料湖 / Data Lakehouse] C --> D[資料處理層] D --> E[資料倉儲 / Data Warehouse] E --> F[BI / 報表 / 研究] ### 3.2.2 實作工具 | 階段 | 工具 | 用途 | | ---- | ---- | ---- | | 提取 | **Python + Requests / BeautifulSoup**、**Scrapy**、**Airbyte**、**Fivetran** | 取得 Web / API 資料 | | 轉換 | **Pandas / Dask**、**Spark**、**dbt** | 資料清洗、轉型 | | 載入 | **Snowflake / BigQuery / Redshift**、**Delta Lake** | 儲存於資料倉儲 | | 編排 | **Airflow / Prefect / Dagster** | 管道排程、監控 | ## 3.3 API 與 Web Scraping ### 3.3.1 API 使用 - **RESTful**:JSON、XML; - **GraphQL**:一次查詢多個實體; - **WebSocket**:實時資料流。 python import requests url = 'https://api.example.com/v1/users' headers = {'Authorization': 'Bearer YOUR_TOKEN'} response = requests.get(url, headers=headers) users = response.json() **最佳實踐**: 1. **速率限制**:遵守 `X-RateLimit-*` header; 2. **錯誤重試**:使用 `tenacity`; 3. **版本控制**:避免直接調用 `v1`,改用 `v2` 或 `preview`。 ### 3.3.2 Web Scraping - **BeautifulSoup**:簡易靜態頁面; - **Selenium / Playwright**:動態頁面; - **Scrapy**:大規模抓取。 python from bs4 import BeautifulSoup import requests url = 'https://www.example.com/products' page = requests.get(url) soup = BeautifulSoup(page.content, 'html.parser') for item in soup.select('.product'): name = item.select_one('.name').text.strip() price = item.select_one('.price').text.strip() print(name, price) > **注意**:尊重 robots.txt、避免對網站造成負載;若資料受版權保護,請先取得授權。 ## 3.4 資料庫設計 ### 3.4.1 交易型資料庫(OLTP) - **關聯式**:MySQL、PostgreSQL、SQL Server。適用於日常交易、資料一致性要求高的情境。 - **結構化**:採用正規化,減少重複。 sql CREATE TABLE orders ( order_id BIGINT PRIMARY KEY, customer_id BIGINT NOT NULL, order_date TIMESTAMP NOT NULL, total_amount NUMERIC(12,2) NOT NULL, status VARCHAR(20) NOT NULL ); ### 3.4.2 資料倉儲(OLAP) - **星型/雪花型**:結合維度表與事實表,利於查詢。 - **分區與聚簇**:提高大表查詢效能。 sql CREATE TABLE sales_fact ( sale_id BIGINT PRIMARY KEY, product_id BIGINT, customer_id BIGINT, sale_date DATE, quantity INT, revenue NUMERIC(12,2) ) PARTITION BY RANGE (sale_date); ### 3.4.3 資料湖 (Data Lake) - **原始資料**:保留原始 JSON、CSV、Parquet; - **湖座 (Lakehouse)**:如 Delta Lake,提供 ACID 交易與版本控制。 ## 3.5 資料治理、合規與隱私 | 原則 | 內容 | 具體實踐 | | ---- | ---- | -------- | | **資料品質** | 準確性、完整性、一致性 | **Great Expectations**、**Data Quality Dashboards** | | **資料可追溯** | 來源、轉換、存儲 | **Metadata Catalog**(Amundsen、DataHub) | | **資料安全** | 權限、審計 | **Lakehouse ACLs**、**Snowflake RBAC** | | **隱私合規** | GDPR、CCPA、HIPAA | **Pseudonymisation**、**Data Masking**、**Consent Management** | ### 3.5.1 典型治理流程 1. **資料字典**:定義欄位、資料型別、範圍。 2. **資料質量規則**:缺失率、唯一性、正規化檢查。 3. **審計追蹤**:使用 `audit_log` 表記錄 CRUD 動作。 4. **資料保留策略**:根據法規設定保留期限與刪除流程。 > **案例**:某醫療保險公司將所有病歷資料加密後存入 Delta Lake,並使用 **OpenPolicyAgent (OPA)** 控制訪問權限,確保僅授權醫師可查閱特定病歷。 ## 3.6 工具與流程實踐 | 分類 | 工具 | 主要功能 | | ---- | ---- | -------- | | **資料收集** | Airbyte、Fivetran、Python SDK | 連結多種資料來源 | | **資料處理** | Apache Spark、Pandas、dbt | 批次轉換、增量更新 | | **資料治理** | Great Expectations、Amundsen、DataHub | 資料品質檢測、元資料管理 | | **資料安全** | Apache Ranger、Snowflake RBAC | 權限控制、審計 | | **流程編排** | Airflow、Prefect、Dagster | 排程、監控 | ### 3.6.1 CI/CD 於資料管道 利用 **GitHub Actions** 或 **GitLab CI**,將資料管道程式碼推送至版本控制,透過自動化測試與部署,確保變更不破壞既有資料流。 yaml # .github/workflows/data-pipeline.yml name: Data Pipeline CI on: push: branches: [main] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install dependencies run: pip install -r requirements.txt - name: Run tests run: pytest tests/ ## 3.7 案例與挑戰 ### 案例 1:零售業客流預測 - **來源**:POS 系統(內部)、社群媒體、天氣 API(外部)。 - **管道**:Airbyte 將 POS 資料同步至 Snowflake;Airflow 排程天氣資料抓取;Spark 進行時間序列特徵擴充。 | **治理**:使用 Great Expectations 檢查 POS 資料完整度;資料庫採用 Snowflake RBAC 控制敏感資訊。 | **挑戰**:時區不一致、資料延遲、API 認證失效。 ### 案例 2:金融風控信用評分 - **來源**:信用局(外部)、交易紀錄(內部)。 - **管道**:Fivetran 連結外部 API,Spark 進行特徵工程,Model 在 SageMaker 執行。 | **治理**:使用 Amundsen 建立資料線圖;使用 OPA 實作「僅風控團隊可存取信用分數」策略。 | **挑戰**:合規審核頻繁、資料更新速率高、模型漂移監控。 ## 小結 - **資料蒐集** 不是單純「抓資料」,而是**對業務價值**、**合規性**與**可維護性**三重考量的平衡。 - 建構**可重複、可監控的資料管道**,並嵌入**資料治理**,能讓模型訓練與部署更具可持續性。 - **工具選擇** 應隨專案規模與技術棧調整;在大規模時可考慮 Spark、Delta Lake;小型則可用 Pandas + Airflow。 - **資料治理** 不是一次性工程,而是**持續迭代**,同時需要組織文化與政策的支援。 > **實戰建議**:先從最關鍵的資料來源做「資料品質金字塔」驗證,確保每一步都有可測試的品質指標;再逐步擴展至整體管道,形成可追溯、可治理的資料生態。