聊天視窗

洞察數據:從原始資料到商業決策的全流程 - 第 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 章) > **結語**:資料來源是資料科學的基礎。唯有透過嚴謹的來源選擇、合規檢查與成本管控,才能在確保資料安全與可重複性的同時,為企業帶來持續的決策優勢。