返回目錄
A
洞察數據:從數據科學家到策略決策者的轉型指南 - 第 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 資料倉庫**:兩者互補,視企業需求選擇。
掌握上述基礎建設後,你將能夠為後續的資料清洗、探索分析與建模打下堅實基礎,進一步邁向策略決策的高峰。