聊天視窗

洞察數據:從數據科學家到策略決策者的轉型指南 - 第 2 章

第2章:數據基礎建設

發布於 2026-03-01 00:01

# 第2章:數據基礎建設 本章將帶你踏上數據工程師與策略決策者之間的橋樑,深入了解數據來源、存取權限、資料庫設計與資料湖概念。這些基礎建設是整個數據科學流程的根基,若基礎不牢,任何後續分析與模型都可能失真。以下將以實務案例與可操作工具說明。 ## 2.1 數據來源 | 類別 | 具體來源 | 典型資料結構 | 常見挑戰 | |------|----------|--------------|-----------| | 內部 | ERP、CRM、交易系統 | 事務型資料、關聯式資料 | 資料質量、資料一致性 | | 外部 | 公開 API、第三方平台、社群媒體 | JSON、CSV、API 回應 | 授權、資料更新頻率 | ### 2.1.1 內部數據 內部數據通常是企業最有價值的資產,例如客戶訂單、庫存、財務報表。關鍵在於如何把不同系統的資料抽取、清洗、整合成一個一致的資料流。 #### 實作示例:從 MySQL 抽取訂單資料 ```sql SELECT o.order_id, o.order_date, c.customer_id, c.customer_name, SUM(od.quantity * od.unit_price) AS total_amount FROM orders o JOIN customers c ON o.customer_id = c.customer_id JOIN order_details od ON o.order_id = od.order_id GROUP BY o.order_id, o.order_date, c.customer_id, c.customer_name; ``` ### 2.1.2 外部數據 外部數據往往以 API 或資料訂閱的方式提供,資料格式多為 JSON。利用自動化腳本定期拉取,並以資料湖形式存放。 #### 範例:使用 Python 抓取 Twitter API ```python import requests import json token = "YOUR_BEARER_TOKEN" url = "https://api.twitter.com/2/tweets/search/recent" headers = {"Authorization": f"Bearer {token}"} params = {"query": "#AI", "max_results": 10} response = requests.get(url, headers=headers, params=params) print(json.dumps(response.json(), indent=2)) ``` ## 2.2 存取權限與資料治理 有效的權限管理能確保資料安全,同時滿足合規需求。以下提供三層權限模型: 1. **資料層級**:根據資料類型(敏感、非敏感)設置存取權。 2. **功能層級**:決定使用者能做的操作(查詢、寫入、管理)。 3. **環境層級**:區分開發、測試、正式環境的權限。 ### 角色定義範例 | 角色 | 主要權限 | |------|----------| | 資料工程師 | 建表、ETL 任務管理 | | 數據分析師 | 查詢、報表產生 | | 業務決策者 | 查看儀表板、設定 KPI | ### SQL 實作:授權 ```sql -- 建立資料庫角色 CREATE ROLE analytics_role; GRANT SELECT ON ALL TABLES IN SCHEMA public TO analytics_role; -- 將使用者加入角色 ALTER USER alice WITH ROLE analytics_role; ``` ## 2.3 資料庫設計原則 ### 2.3.1 正規化 vs 非正規化 | 目標 | 正規化 | 非正規化 | |------|--------|----------| | 數據一致性 | 高 | 低 | | 查詢效率 | 低 | 高 | | 資料維護 | 複雜 | 簡單 | > **實務建議**:對於 OLTP(事務處理)系統,採用 3NF 正規化;對於 OLAP(分析)或資料湖,根據需求適度非正規化,以提升查詢效能。 ### 2.3.2 OLTP vs OLAP | 特色 | OLTP | OLAP | |------|------|------| | 主旨 | 事務處理 | 數據分析 | | 儲存結構 | 行式 | 列式 | | 查詢模式 | 單筆查詢 | 聚合、切片 | ### 實作範例:PostgreSQL OLAP 列式擴充 ```sql -- 安裝擴充套件 CREATE EXTENSION IF NOT EXISTS cstore_fdw; -- 建立外部表 CREATE FOREIGN TABLE sales_cstore ( order_id BIGINT, order_date DATE, customer_id BIGINT, total_amount NUMERIC(12,2) ) SERVER cstore_fdw OPTIONS (filename 'sales.cstore'); ``` ## 2.4 資料湖與資料倉庫 ### 2.4.1 資料湖概念 資料湖是一種以原始格式存放所有結構化、非結構化資料的儲存層,透過「Schema‑on‑Read」原則在查詢時才定義結構,提供高度彈性。 ### 2.4.2 資料湖與資料倉庫的比較表 | 特性 | 資料湖 | 資料倉庫 | |------|--------|----------| | 資料格式 | 原始、非結構化 | 結構化 | | 存取方式 | Schema‑on‑Read | Schema‑on‑Write | | 目標 | 數據探索、機器學習 | 報表、BI | | 成本 | 低(雲儲存) | 高(數據清洗、索引) | > **關鍵取捨**:若企業重視機器學習與快速資料探索,建議先建立資料湖,再依需求構建資料倉庫。 ## 小結 - **數據來源**:內部資料結合外部資料,使用抽取、轉換、載入 (ETL) 或資料湖方案。 - **權限與治理**:三層權限模型、角色定義、SQL 授權示例。 - **資料庫設計**:根據使用場景選擇正規化程度與儲存方式。 - **資料湖 vs 資料倉庫**:兩者互補,視企業需求選擇。 掌握上述基礎建設後,你將能夠為後續的資料清洗、探索分析與建模打下堅實基礎,進一步邁向策略決策的高峰。