在資料工程領域,建構穩健的 ETL 資料管線至關重要。Python 以其簡潔易學的語法和豐富的函式庫,成為建構 ETL 管線的熱門選擇。本文將探討使用 Python 建立 ETL 資料管線的基礎環境,包含開發環境的設定、版本控制、套件管理,以及 Python 的核心語法和物件導向程式設計概念,幫助讀者建立乾淨、可重現的開發環境,為後續的 ETL 開發奠定堅實基礎。有效管理專案依賴和版本控制,能避免模組不相容性對生產環境造成的影響,確保資料管線的穩定執行。

使用Python建立ETL資料管線的基礎環境

在生產環境中,無論是單一資料管線還是多個重疊的系統,資料環境管理的基本原則都保持一致。本章節將探討Python程式語言的基礎原理,以及如何利用套件管理應用程式來建立乾淨、靈活且可重現的開發環境。

Python基礎與開發環境的重要性

Python是一種功能強大的工具,可用於開發高度自訂且強大的資料轉換生態系統。我們將引導您完成一步一步的教學,介紹如何安裝和建立基本的Git追蹤開發環境,以避免未來模組不相容性對資料管線在生產環境中的成功佈署產生影響。

Python基礎

Python是一種高階、解釋型程式語言,以其簡潔的語法和豐富的函式庫而聞名。它的主要特點包括:

  • 簡單易學:Python的語法簡潔明瞭,易於學習和使用。
  • 強大的函式庫支援:Python擁有豐富的函式庫和框架,可以滿足各種不同的開發需求。
  • 跨平台相容性:Python可以在多種作業系統上執行,包括Windows、macOS和Linux。

使用Python屬性建立應用程式基礎

在Python中,屬性和方法是用於定義類別行為的基本元素。屬性是用於儲存資料的變數,而方法則是用於執行特定操作的函式。正確使用屬性和方法可以幫助您建立結構清晰、易於維護的應用程式。

class DataPipeline:
    def __init__(self, name):
        self.name = name
        self.status = "initialized"

    def start(self):
        self.status = "running"
        print(f"Data pipeline {self.name} has started.")

    def stop(self):
        self.status = "stopped"
        print(f"Data pipeline {self.name} has stopped.")

# 建立資料管線例項
pipeline = DataPipeline("ETL_Pipeline")
pipeline.start()
pipeline.stop()

#### 內容解密:

  • DataPipeline 類別定義了一個資料管線的基本結構,包括名稱和狀態屬性。
  • startstop 方法分別用於啟動和停止資料管線,並更新其狀態。
  • 透過建立 DataPipeline 例項並呼叫其方法,可以控制資料管線的生命週期。

有效開發環境的關鍵屬性

一個有效的開發環境應該具備以下關鍵屬性:

  1. 版本控制:使用Git等版本控制系統來追蹤程式碼變更。
  2. 套件管理:利用pip或pipenv等套件管理工具來管理專案依賴。
  3. 整合開發環境(IDE):選擇適合的IDE,如PyCharm,以提高開發效率。

下載和安裝本地IDE

PyCharm是一種流行的Python IDE,提供豐富的功能,如程式碼自動完成、偵錯和專案管理。您可以從官方網站下載並安裝PyCharm Community或Professional版本。

建立和複製Git追蹤的儲存函式庫到IDE

  1. 在GitHub或GitLab上建立新的儲存函式庫。
  2. 使用Git命令列工具或IDE內建的Git支援來複製儲存函式庫到本地環境。
  3. 在IDE中開啟專案並開始工作。
git clone https://github.com/your-username/your-repo-name.git

#### 內容解密:

  • 使用 git clone 命令將遠端儲存函式庫複製到本地環境。
  • 在IDE中開啟複製的專案,即可開始進行開發工作。

使用模組管理系統(MMS)管理專案套件和迴圈依賴

pipenv是一種流行的MMS,可以幫助您管理專案依賴並避免迴圈依賴問題。

  1. 安裝pipenv:pip install pipenv
  2. 在專案根目錄下執行 pipenv install 以建立虛擬環境並安裝依賴。
pipenv install requests

#### 內容解密:

  • pipenv install 命令用於建立虛擬環境並安裝指定的套件。
  • 使用 pipenv 可以有效管理專案依賴,避免不同專案間的套件版本衝突。

Python基礎與開發環境

介紹Python基礎

由於Python是設計資料管道的語言,因此瞭解Python的核心基礎至關重要。Python是一種通用、動態型別的程式語言,具有高度的靈活性,可用於指令碼編寫、物件導向、程式式或函式式程式設計。

Python資料結構概述

Python原生支援多種資料結構,包括:

  • 清單(List):類別似一維動態陣列,可包含不同或相同的元素,以逗號分隔。清單是可變且有序的,使用[]表示。

    sample_list = [1, "another", "list", "a", [3,4]]
    print(sample_list[0])  # 1
    print(sample_list[1])  # "another"
    print(sample_list[-1])  # [3,4]
    print(sample_list[1:4])  # ["another", "list", "a"]
    print(sample_list[:4])  # [1, "another", "list", "a"]
    print(sample_list[3:])  # ["a", [3,4]]
    

    內容解密:

    • sample_list是一個包含不同型別元素的清單。
    • 使用索引可以存取清單中的元素,第一個元素的索引為0,最後一個元素的索引為-1。
    • 清單切片可以用來取得清單中的部分元素。
  • 字典(Dictionary):類別似雜湊表,使用鍵值對儲存資料,以大括號{}表示。字典鍵是唯一的,可以是任何不可變的Python資料型別。

    sample_dict = {"Key1": "Value1", 2: 3, "Age": 23}
    print(sample_dict["Age"])  # 23
    print(sample_dict[2])  # 3
    

    內容解密:

    • sample_dict是一個包含鍵值對的字典。
    • 使用鍵可以存取字典中的值。
  • 元組(Tuple):有序的元素集合,類別似清單,但不可變,使用小括號()表示。

    sample_tuple = (1, "2", "brij")
    print(sample_tuple[0])  # 1
    

    內容解密:

    • sample_tuple是一個包含不同型別元素的元組。
    • 使用索引可以存取元組中的元素。
  • 集合(Set):無序、不重複的元素集合,使用大括號{}表示。

    sample_set = {5, 9}
    sample_set.add(4)
    print(sample_set)  # {5, 9, 4}
    sample_set.remove(9)
    print(sample_set)  # {5, 4}
    

    內容解密:

    • sample_set是一個包含不重複元素的集合。
    • 使用add方法可以新增元素,使用remove方法可以移除元素。

Python條件陳述式

條件陳述式允許根據特定條件執行特定的程式碼區塊。

num = 9
if num == 0:
    print("This is a Zero")
elif num % 3 == 0:
    print("Number is divisible by 3")
else:
    print("Number is not divisible by 3")

內容解密:

  • 使用ifelifelse關鍵字來建立條件陳述式。
  • num % 3 == 0檢查數字是否能被3整除。

Python迴圈技巧

迴圈用於重複執行程式碼區塊,直到滿足特定條件或達到固定次數的迭代。

  • for迴圈:用於遍歷序列,如字串、清單、集合等。
    numbers = [7, 4, 3, 5, 8, 9, 8, 6, 14]
    even_numbers = [num for num in numbers if num % 2 == 0]
    print(even_numbers)  
    

    內容解密:

    • 使用for迴圈遍歷numbers清單。
    • 使用列表推導式建立一個新的清單,包含原始清單中的偶數。
圖示說明:
  • 此圖示展示了Python程式的基本流程,包括條件判斷和迴圈。
  • 程式從開始到結束,根據條件判斷執行不同的程式碼區塊。
  • 在迴圈中,程式碼區塊會被重複執行,直到滿足結束條件。

Python基礎介紹

Python是一種功能強大的程式語言,支援多種程式設計正規化,包括物件導向程式設計。在本章中,我們將介紹Python的基礎知識,包括迴圈、函式和物件導向程式設計。

迴圈

迴圈是Python中的一個重要概念,用於重複執行一段程式碼。Python中有兩種主要的迴圈:for迴圈和while迴圈。

for迴圈

for迴圈用於遍歷序列,如列表或元組。以下是一個使用for迴圈的範例:

numbers = [1, 2, 3, 4, 5]
even_numbers = []

for num in numbers:
    if num % 2 == 0:
        even_numbers.append(num)

print("偶數列表:", even_numbers)

while迴圈

while迴圈用於在滿足特定條件時重複執行一段程式碼。以下是一個使用while迴圈的範例:

count = 0
while count < 11:
    print("目前數字:", count)
    count += 1
print("while迴圈終止。")

函式

函式是Python中的一個重要概念,用於封裝可重複使用的程式碼。以下是一個定義函式的範例:

def div_of_numbers(num1, num2):
    """此函式傳回num1除以num2的結果"""
    if num2 == 0:
        return 'num2為零。'
    else:
        return num1 / num2

print(div_of_numbers(8, 0))
print(div_of_numbers(8, 4))

內容解密:

  1. def div_of_numbers(num1, num2): 定義了一個名為div_of_numbers的函式,接受兩個引數num1num2
  2. if num2 == 0: 檢查num2是否為零,以避免除以零的錯誤。
  3. return num1 / num2 傳回num1除以num2的結果。

物件導向程式設計

Python是一種支援物件導向程式設計的語言。以下是一個定義類別的範例:

class DataPipeline:
    first_tool = "AirFlow"

datapipeline = DataPipeline()

繼承

繼承是物件導向程式設計中的一個重要概念,允許開發者建立新的類別,繼承現有類別的屬性和行為。以下是一個使用繼承的範例:

# 父類別
class DataPipelineBook:
    def __init__(self):
        print("這本文在市場上很熱門")
        self.pages = 300

    def what_is_this(self):
        print("書籍")

    def get_pages(self):
        return self.pages

# 子類別
class PythonDataPipelineBook(DataPipelineBook):
    def __init__(self):
        super().__init__()
        print("使用Python建立資料管道")

    def what_technology_is_used(self):
        return "Python"

pipeline = PythonDataPipelineBook()
pipeline.what_is_this()
pipeline.what_technology_is_used()

內容解密:

  1. class DataPipelineBook: 定義了一個名為DataPipelineBook的父類別。
  2. class PythonDataPipelineBook(DataPipelineBook): 定義了一個名為PythonDataPipelineBook的子類別,繼承自DataPipelineBook
  3. super().__init__() 呼叫了父類別的建構函式。
  4. pipeline.what_is_this()pipeline.what_technology_is_used() 呼叫了子類別的方法。

Python 與開發環境基礎

Python 類別與物件導向程式設計

首先,我們來探討 Python 中的物件導向程式設計(OOP)。在物件導向程式設計中,類別是建立物件的藍圖或範本。類別定義了物件的屬性和方法。

class PythonDataPipelineBook:
    def __init__(self):
        pass

    def what_technology_is_used(self):
        print("Python is used.")

class ETLPipeline(PythonDataPipelineBook):
    def __init__(self):
        super().__init__()

    def what_is_this(self):
        print("This is an ETL Pipeline.")

pipeline = ETLPipeline()
pipeline.what_is_this()  # 輸出:This is an ETL Pipeline.
pipeline.what_technology_is_used()  # 輸出:Python is used.

內容解密:

  1. PythonDataPipelineBook 是一個基礎類別,定義了一個方法 what_technology_is_used
  2. ETLPipeline 繼承自 PythonDataPipelineBook,並且定義了自己的方法 what_is_this
  3. 使用 super().__init__() 呼叫基礎類別的建構函式。
  4. 建立 ETLPipeline 的例項並呼叫其方法。

Python 中的檔案操作

Python 提供了簡單而強大的檔案操作方法,包括開啟、讀取、寫入和追加。

# 開啟檔案
f = open("test_file.txt", "w")
f.write("This is test data.")
f.close()

# 使用上下文管理器開啟檔案
with open("test_file.txt", "w") as f:
    f.write("This is test data.")

內容解密:

  1. 使用 open() 函式開啟檔案,可以指定模式(如 “w” 表示寫入)。
  2. 使用 write() 方法將資料寫入檔案。
  3. 使用 close() 方法關閉檔案。
  4. 使用上下文管理器(with 陳述式)可以自動關閉檔案。

建立 Python 開發環境

在開始 Python 專案之前,建立一個乾淨、可重現的開發環境至關重要。這包括版本控制、IDE、依賴管理等。

版本控制與 Git

Git 是一種分散式版本控制系統,用於追蹤程式碼變更和管理程式碼函式庫。

# 初始化 Git 倉函式庫
git init

# 新增檔案到 Git 倉函式庫
git add .

# 提交變更
git commit -m "Initial commit"

# 將變更推播到遠端倉函式庫
git push origin main

內容解密:

  1. 使用 git init 初始化 Git 倉函式庫。
  2. 使用 git add 將檔案新增到 Git 倉函式庫。
  3. 使用 git commit 提交變更。
  4. 使用 git push 將變更推播到遠端倉函式庫(如 GitHub)。

為何使用 GitHub?

GitHub 是最流行的 Git 倉函式庫託管平台,提供了豐富的功能,如 Pull Request、程式碼審查等。