資料工程師轉職專題:六都寵物資源分析開發實錄
目錄
- 專題簡介 (Project Overview)
- 技術選型 (Technical Stack)
- 技術架構 (Architecture Diagram)
- 爬蟲 & ETL:資料獲取與挑戰
- Airflow 自動化
- 雲端部署:VM、Docker 與 CI/CD
- 結語
專題概覽與技術選型
1. 專題簡介 (Project Overview)
本專題的最終目的是「分析六都寵物資源的分布情形」,而作為資料工程師的任務就是找到資料滿足這項需求,並且要能夠自動化運行。
2. 技術選型 (Technical Stack)
以下是我們選擇的工具和技術。
| 類別 | 工具/技術 |
|---|---|
| 程式語言 | Python |
| 資料庫 | MySQL |
| 雲服務 | GCP |
| 自動化 | Airflow |
| CI/CD | GitHub Action |
| 部署 | Docker |
資料管線架構與實作
3. 技術架構 (Architecture Diagram)
以下是本專題的技術架構圖,這是一個典型資料管線

- 資料擷取 (Extraction): 透過 Python 程式爬取資料,存入 Data Lake (GCS 及 VM 硬碟)。
- 資料轉換 (Transform): 使用 Python 的 Pandas 進行資料清洗與格式統一。
- 資料儲存 (Loading): 將清洗後的資料存入 Data Warehouse (MySQL)。
- 分析與呈現: 後續分析皆來自 MySQL,最終使用 Tableau 進行視覺化呈現。
4. 爬蟲 & ETL:資料獲取與挑戰
我們資料爬取方式主要有兩種:
- 傳統爬蟲: 透過
python requests爬取網上現有可用資料。 - 地圖 API 搜尋: 透過
Google Maps API搜尋(用於寵物美容、餐廳及用品等無現有資料的類別)。
Google Maps API:Nearby Search
簡單說明Nearby Search的功能:
指定任意經緯度座標為圓心,並搜尋半徑內是否有符合關鍵字的地標。
看似很方便好用,但它也有兩個關鍵限制:
| 限制 (Constraint) | 解決方案 (Solution) |
|---|---|
| 單次搜尋結果最多 60 筆 (單頁 20 筆,最多三頁)。 | 無法設定超大半徑一次囊括所有地標,必須進行迭代搜尋。 |
| 取得的地標資訊較粗略。 | 如需詳細資訊(營業時間、地址等),需額外搭配 Place Search。 |
由於上述限制,所以無法設定一個超大半徑一次囊括所有地標。要使用這個功能來地毯式搜尋的步驟如下:
- 劃定目標地區的邊界(包括經緯度資訊)。
- 透過程式計算,找出範圍內所有座標點。
- 判斷座標點是否在邊界內,若為是,則以該點為圓心進行 Nearby Search。

自動化與部署:系統建構的關鍵
5. Airflow 自動化
完成爬蟲和 ETL 程式後,我們使用 Airflow 實現自動化執行與排程。
Airflow 的優勢:
- 允許任何頻率排程
- 視覺化呈現資料管線(DAG)
- 實時監控程式執行狀況與結果
- 具失敗重試機制,可從失敗處重試不必從頭開始
挑戰:
要讓程式在 Airflow 上執行,必須進行一定程度的「改寫」。
- DAG 結構要求: 必須將原本完整的程式碼拆分成多個小型函式(節點),並符合 Airflow 特定的格式。
- 參數傳遞的難題: 由於 Airflow 底層並非純 Python,在傳遞變數時需要先進行序列化。這導致許多在 Python 中可以輕易傳遞的物件(如
bs4的 soup、Path、複雜的dataframe或dict)在 Airflow 中會報錯。
編寫時必須不斷思考如何才能將參數傳遞給下一個函式,以及下一個函式又該如何解譯。

6. 雲端部署:VM、Docker 與 CI/CD
部署的核心是雲端VM(Virtual Machine,虛擬機),可以將其視為一台存在於網路上的電腦,它沒有螢幕、鍵盤滑鼠,你也摸不到它,只能透過終端機的方式進入它、操作它。雖然使用體驗與實體PC非常不同,但它真的能夠下載檔案、安裝軟體、執行程式,而且它24小時不用關機。
由於VM環境通常是Linux系統,而且結構一定跟我們的Windows/Mac不一樣,所以究竟如何將專案部進VM,且確保其能正常運行,就需要花點功夫。
VM的特性:
| 優點 (Pros) | 缺點/挑戰 (Cons/Challenges) |
|---|---|
| 24 小時不關機,適合持續運行服務。 | 通常為 Linux 系統,操作需透過終端機。 |
| 可透過網路連線操作。 | 環境結構與本地 Windows/Mac 系統不同,部署需確保程式兼容性。 |
| 可安裝各種工具、軟體。 |
Docker 容器:提供一致的運行環境
Docker 容器提供一個虛擬、乾淨且一致的環境來運行程式。
- 一致性: 確保在本地 PC 上運行的程式,在 VM 中也能 95% 正確執行。
- 可攜性: 可以建立 Image 來保存設定好的環境。
- 快速建立: 只要能安裝 Docker,就能快速建立所需的運行環境。
CI/CD 工具:GitHub 的應用
為了解決將檔案/程式碼搬到 VM 中的問題,我們使用 GitHub 作為 CI/CD 工具。
部署流程:
- 將開發好的程式碼
push到 GitHub。 - 進入 VM 主機。
- 將整個專案
clone下來。
持續更新機制 (CD):
- 使用 GitHub Action 來處理後續的程式碼更新。
- 即使不使用 Action,最基本的方式是進入 VM 專案目錄中,執行
git pull指令,拉取最新程式碼。
備註: 由於專案運行依賴 Airflow 容器,考量時間複雜度,我們略過了 CI 流程,只設置了 CD 工具。

結語
資料工程的部分大概就是以上內容,後續屬於資料分析和視覺化,比較不是我關注的領域(剛好有組員對資料分析和視覺化較有興趣)我很高興能從頭到尾開發一個專案,這對我來說是非常寶貴的經驗。當然也有一些仍待改進的空間,只能寄望於下次開發時再將其補足。
除了對資料工程更加熟悉,在專案中也接觸了許多跟雲端部署、DevOps有關的概念,也讓我非常興奮。建構系統和持續強化系統能讓我感到很大的成就感,我想這也是程式開發吸引我的地方吧。
最後編輯於 2025-12-02