資料工程師轉職專題:六都寵物資源分析開發實錄

這是我在參加資料工程師轉職培訓班時開發的專題作品,我的小組一共有五人,剛好大致可分為「資料工程組」3人、「資料分析組」2人,而我就是專注在資料工程方面的開發。經過三個月的學習與開發,這個專題已經趨於完成,所以撰寫此文記錄開發的過程,並分享一些心得給或許也計劃要轉職的夥伴。

目錄

  1. 專題簡介 (Project Overview)
  2. 技術選型 (Technical Stack)
  3. 技術架構 (Architecture Diagram)
  4. 爬蟲 & ETL:資料獲取與挑戰
  5. Airflow 自動化
  6. 雲端部署:VM、Docker 與 CI/CD
  7. 結語

專題概覽與技術選型

1. 專題簡介 (Project Overview)

本專題的最終目的是「分析六都寵物資源的分布情形」,而作為資料工程師的任務就是找到資料滿足這項需求,並且要能夠自動化運行

2. 技術選型 (Technical Stack)

以下是我們選擇的工具和技術。

類別 工具/技術
程式語言 Python
資料庫 MySQL
雲服務 GCP
自動化 Airflow
CI/CD GitHub Action
部署 Docker

資料管線架構與實作

3. 技術架構 (Architecture Diagram)

以下是本專題的技術架構圖,這是一個典型資料管線

技術架構圖

  1. 資料擷取 (Extraction): 透過 Python 程式爬取資料,存入 Data Lake (GCS 及 VM 硬碟)。
  2. 資料轉換 (Transform): 使用 Python 的 Pandas 進行資料清洗與格式統一。
  3. 資料儲存 (Loading): 將清洗後的資料存入 Data Warehouse (MySQL)。
  4. 分析與呈現: 後續分析皆來自 MySQL,最終使用 Tableau 進行視覺化呈現。

4. 爬蟲 & ETL:資料獲取與挑戰

我們資料爬取方式主要有兩種:

  1. 傳統爬蟲: 透過 python requests 爬取網上現有可用資料。
  2. 地圖 API 搜尋: 透過 Google Maps API 搜尋(用於寵物美容、餐廳及用品等無現有資料的類別)。

簡單說明Nearby Search的功能:

指定任意經緯度座標為圓心,並搜尋半徑內是否有符合關鍵字的地標。

看似很方便好用,但它也有兩個關鍵限制:

限制 (Constraint) 解決方案 (Solution)
單次搜尋結果最多 60 筆 (單頁 20 筆,最多三頁)。 無法設定超大半徑一次囊括所有地標,必須進行迭代搜尋
取得的地標資訊較粗略 如需詳細資訊(營業時間、地址等),需額外搭配 Place Search

由於上述限制,所以無法設定一個超大半徑一次囊括所有地標。要使用這個功能來地毯式搜尋的步驟如下:

  1. 劃定目標地區的邊界(包括經緯度資訊)。
  2. 透過程式計算,找出範圍內所有座標點。
  3. 判斷座標點是否在邊界內,若為是,則以該點為圓心進行 Nearby Search。

nearby


自動化與部署:系統建構的關鍵

5. Airflow 自動化

完成爬蟲和 ETL 程式後,我們使用 Airflow 實現自動化執行與排程。

Airflow 的優勢:

  • 允許任何頻率排程
  • 視覺化呈現資料管線(DAG)
  • 實時監控程式執行狀況與結果
  • 具失敗重試機制,可從失敗處重試不必從頭開始

挑戰:

要讓程式在 Airflow 上執行,必須進行一定程度的「改寫」。

  • DAG 結構要求: 必須將原本完整的程式碼拆分成多個小型函式(節點),並符合 Airflow 特定的格式。
  • 參數傳遞的難題: 由於 Airflow 底層並非純 Python,在傳遞變數時需要先進行序列化。這導致許多在 Python 中可以輕易傳遞的物件(如 bs4 的 soup、Path、複雜的 dataframedict)在 Airflow 中會報錯。

編寫時必須不斷思考如何才能將參數傳遞給下一個函式,以及下一個函式又該如何解譯。

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 工具。

部署流程:

  1. 將開發好的程式碼 push 到 GitHub。
  2. 進入 VM 主機。
  3. 將整個專案 clone 下來。

持續更新機制 (CD):

  • 使用 GitHub Action 來處理後續的程式碼更新。
  • 即使不使用 Action,最基本的方式是進入 VM 專案目錄中,執行 git pull 指令,拉取最新程式碼。

備註: 由於專案運行依賴 Airflow 容器,考量時間複雜度,我們略過了 CI 流程,只設置了 CD 工具。

cloud


結語

資料工程的部分大概就是以上內容,後續屬於資料分析和視覺化,比較不是我關注的領域(剛好有組員對資料分析和視覺化較有興趣)我很高興能從頭到尾開發一個專案,這對我來說是非常寶貴的經驗。當然也有一些仍待改進的空間,只能寄望於下次開發時再將其補足。

除了對資料工程更加熟悉,在專案中也接觸了許多跟雲端部署DevOps有關的概念,也讓我非常興奮。建構系統持續強化系統能讓我感到很大的成就感,我想這也是程式開發吸引我的地方吧。


最後編輯於 2025-12-02