資料分析流程涉及多個階段,從資料擷取、清理、轉換到視覺化和模型訓練,都需要合適的工具和平台支援。AWS 提供豐富的雲端服務,能有效協助資料分析師完成這些任務。對於資料清理和轉換,Glue DataBrew 提供視覺化介面,簡化操作流程;SageMaker 則提供一系列工具,方便模型訓練和佈署;Athena 則適用於即席查詢和資料探索。此外,Python 和 R 等程式語言,結合 Boto3 和 reticulate 等函式庫,能更彈性地與 AWS 服務互動,進行資料處理和分析。選擇合適的 S3 儲存類別,例如 Glacier 或 Glacier Deep Archive,對於冷資料的長期儲存,能有效降低成本。

資料分析師的需求與 AWS 服務的整合應用

資料分析師經常需要使用新的資料來源來回答新的問題,並且可能需要對這些資料集進行一些資料轉換。在建立這些新洞察的過程中,資料分析師可能會與業務使用者密切合作,以開發所需的報告、視覺化、指標或其他資料。在這個迭代過程中,部分工作可能涉及建立臨時轉換管道來攝取、清理、連線和轉換資料。

一旦可交付成果被最終確定(確定資料來源、轉換等),資料分析師可能會與其資料工程團隊合作,以正式確定管道。這是一種推薦的最佳實踐,以確保所有管道都包含在原始碼控制系統中,是正式佈署流程的一部分等等。因此,資料工程師應與資料分析師密切合作,並始終準備好幫助正式確定資料分析師可能建立的臨時管道,而這些管道已經成為業務依賴的關鍵。

AWS Glue DataBrew 服務的應用

AWS Glue DataBrew 是資料分析師非常流行的 AWS 工具之一。使用 DataBrew,資料分析師可以輕鬆清理新的資料來源,並轉換和連線不同表格中的資料,以建立新的資料集。所有這些都可以在 Glue DataBrew 的視覺介面中完成,無需資料分析師撰寫任何程式碼。

DataBrew 的主要功能

DataBrew 可以連線到許多不同的資料來源,包括 Redshift 和 Snowflake、JDBC 資料函式庫、S3、Glue/Lake Formation 表格,以及其他 Amazon 服務,如 AWS Data Exchange 和 Amazon AppFlow。DataBrew 還包括超過 250 個內建轉換,可供資料分析師輕鬆執行常見的資料清理任務和轉換。

在 AWS 中執行 Python 或 R 程式碼

一些具有進階編碼技能的資料分析師使用 Python 和 R 等流行程式語言來探索和視覺化資料。這些語言包含許多用於統計分析資料集和建立進階視覺化的功能。

Python 程式碼的執行環境

Python 程式碼可以在多個 AWS 服務中執行,包括以下:

  • AWS Lambda:可以在無伺服器環境中執行 Python 程式碼,執行時間最長為 15 分鐘。
  • AWS Glue Python Shell:可以在無伺服器環境中執行 Python 程式碼,執行時間不受限制。
  • Amazon EC2:一個計算服務,您可以在其中安裝 Python 並執行 Python 程式碼。

RStudio 的應用

RStudio 是一個流行的 IDE,用於建立根據 R 程式語言的資料分析專案,也可以透過多個 AWS 服務執行。

  • RStudio 可以在 Amazon EC2 計算例項上執行,使資料分析師能夠建立根據 R 的專案進行資料分析。
  • 如果您正在處理非常大的資料集,RStudio 也可以在 Amazon EMR 上執行,該服務使用多個計算節點來處理大型資料集。

資料科學家和機器學習模型的需求

在過去的十年中,機器學習領域已經顯著擴充套件,大多數大型組織現在都有資料科學團隊,使用機器學習技術來幫助推動組織的目標。資料科學家使用先進的數學概念來開發機器學習模型,這些模型可以用於各種方式,包括識別資料中的非明顯模式、預測未來結果和從非結構化資料中提取元資料。

資料科學家使用的 AWS 工具

資料科學家將使用各種工具,具有許多不同的用途,例如用於開發機器學習模型的工具、用於微調這些模型的工具,以及用於準備訓練機器學習模型的資料的工具。

重點解讀與未來趨勢

隨著資料量的不斷增長,資料分析師和資料科學家對於企業的重要性日益增加。AWS 提供了一系列強大的工具和服務,以滿足這些專業人士的需求,從而使企業能夠更好地利用其資料資產。未來,我們可以預期看到更多創新的應用和解決方案,以進一步提高資料分析和機器學習的能力。

import boto3
import pandas as pd

# 建立 S3 使用者端
s3 = boto3.client('s3')

# 從 S3 中讀取 CSV 檔案
def read_csv_from_s3(bucket_name, file_name):
    obj = s3.get_object(Bucket=bucket_name, Key=file_name)
    df = pd.read_csv(obj['Body'])
    return df

#### 內容解密:
此程式碼片段展示瞭如何使用 Python 和 Boto3 函式庫從 Amazon S3 中讀取 CSV 檔案首先建立了一個 S3 使用者端然後定義了一個函式 `read_csv_from_s3`,該函式接受 S3 的儲存桶名稱和檔案名稱作為引數該函式使用 `get_object` 方法從 S3 中檢索指定的物件並使用 Pandas 的 `read_csv` 方法將 CSV 資料讀入 DataFrame 中
# 安裝必要的程式函式庫
install.packages("reticulate")

# 載入 reticulate 程式函式庫
library(reticulate)

# 使用 reticulate 與 Python 互動
py_run_string("import boto3")
py_run_string("s3 = boto3.client('s3')")

#### 內容解密:
此 R 程式碼片段展示瞭如何使用 reticulate 程式函式庫在 R 環境中與 Python 互動。首先,安裝並載入了 reticulate 程式函式庫。然後,使用 `py_run_string` 函式執行 Python 程式碼,建立了一個 S3 使用者端。這使得 R 使用者能夠利用 Python 的 Boto3 函式庫與 AWS 服務進行互動。

滿足資料科學家與機器學習模型的需求

Amazon SageMaker 工具套件介紹

Amazon SageMaker 是一套協助資料科學家和開發人員建立、訓練和佈署機器學習(ML)模型的工具。在本文中,我們將重點介紹用於資料準備的工具,並在第13章中探討與機器學習和人工智慧相關的其他 AWS 工具。

SageMaker Ground Truth:資料標註服務

大多數機器學習模型依賴於使用標註資料進行訓練。也就是說,需要一個包含我們試圖預測的屬性的資料集來幫助訓練模型。例如,假設資料科學家 Luna 想要建立一個機器學習模型來識別圖片是狗還是貓。為了訓練模型,Luna 需要大量的狗和貓的圖片,並且需要對每張圖片進行標註,以指示它是狗還是貓。

假設 Luna 獲得了一組 10,000 張狗和貓的圖片,但這些圖片未被標註,這意味著它們不能用於訓練模型。並且,Luna 需要花費數週時間來逐一標註這些圖片。

幸運的是,Luna 聽說過 SageMaker Ground Truth,一個完全託管的資料標註服務。Ground Truth 使用自己的機器學習模型自動標註資料,當遇到無法自信標註的資料時,可以將其路由到一組人薪水料標註者進行手動標註。您可以將資料路由到預先選定的資料標註團隊,或利用 Amazon Mechanical Turk 計劃中的 50 萬多名獨立承包商,按照您的指示標註資料。

SageMaker Data Wrangler:資料準備工具

據估計,資料科學家最多可花費 70% 的時間清理和準備原始資料,以用於訓練機器學習模型。為了簡化和加速這一過程,AWS 在 2020 年的 re:Invent 會議上宣佈了 SageMaker Data Wrangler。

在大多陣列織中,資料工程團隊會準備正式的資料集供組織使用。然而,資料科學家所需的特定資料可能不在此儲存函式庫中,可能不是所需的格式,或者可能不包含所需的粒度級別的資料。

Data Wrangler 支援直接從來源擷取資料,包括 Amazon S3、Athena、Redshift 以及 Snowflake 資料倉儲。匯入後,資料科學家可以使用 SageMaker Studio 介面轉換資料,從超過 300 個內建的資料轉換中選擇。Data Wrangler 還支援使用 PySpark 和流行的 Python 函式庫(如 pandas)編寫自定義轉換。

SageMaker Clarify:偏差檢測工具

SageMaker Clarify 是一種用於檢查原始資料以識別將用於訓練機器學習模型的潛在偏差的工具。例如,假設您正在開發一個新的機器學習模型來檢測新客戶的信用風險。如果您的擬議訓練資料集主要包含中年人的資料,那麼所得到的機器學習模型在對年輕人或老年人進行預測時可能不太準確。

SageMaker Clarify 已與 SageMaker Data Wrangler 整合,讓使用者能夠在資料準備過程中評估其資料集的潛在偏差。使用者可以指定要評估偏差的屬性(如性別或年齡),SageMaker Clarify 將使用多個內建演算法來檢測潛在偏差。SageMaker Clarify 還提供了一份視覺報告,詳細介紹了測量結果和識別出的潛在偏差。

使用 AWS Glue DataBrew 建立資料轉換

在本章的實作練習中,我們將使用 AWS Glue DataBrew 建立一個簡單的資料轉換。AWS Glue DataBrew 是一種受歡迎的服務,適用於資料分析師。

設定新的 AWS Glue DataBrew 資料集

首先,我們將存取 Glue DataBrew 控制檯並連線到兩個現有的根據 S3 的資料來源(客戶和地址表):

  1. 登入 AWS 管理控制檯並存取 Glue 服務。
  2. 從左側選單中,點選 Datasets
  3. 點選 Connect new dataset
  4. 為客戶表提供一個 Dataset name(例如 customer-dataset)。
  5. Connect to new dataset 部分,點選左側的 Data Catalog S3 tables。然後,從 Glue 資料函式庫列表中點選 sakila
  6. 從表列表中,點選客戶表的選擇器,然後點選右下角的 Create dataset
  7. 重複步驟 1-6,但這次,將資料集命名為 address-dataset,選擇 Data Catalog S3 tablessakila,然後選擇地址表,並點選 Create dataset

建立新的 Glue DataBrew 專案

現在,讓我們建立一個新的 Glue DataBrew 專案,在其中可以合併客戶和地址表,然後清理資料集:

  1. 在 AWS Glue DataBrew 控制檯中,從左側選單中點選 Projects。然後,點選 Create project
  2. Project name 提供一個名稱(例如 customer-mailing-list)。
  3. Recipe details 下,保持預設的 Create new recipe 不變。
  4. Select a dataset 下,選擇 customer-dataset
  5. Permissions 下,從下拉列表中選擇 Create new IAM role
  6. New IAM role suffix 提供一個合適的字尾,例如 dataengbook
  7. 在右下角,點選 Create project

使用 Plantuml 圖表呈現流程

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title 資料分析師 AWS 服務整合應用

package "AWS 資料分析服務" {
    package "資料處理" {
        component [Glue DataBrew] as databrew
        component [Glue ETL] as glue
        component [Athena] as athena
    }

    package "機器學習" {
        component [SageMaker] as sagemaker
        component [模型訓練] as train
        component [模型佈署] as deploy
    }

    package "儲存與程式" {
        component [S3 儲存類別] as s3
        component [Python/Boto3] as python
        component [R/RStudio] as rstudio
    }
}

databrew --> glue : 視覺化清理
sagemaker --> train : ML 工作流
s3 --> python : 資料存取

note bottom of databrew
  無程式碼
  資料轉換
end note

collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型

note right of feature
  特徵工程包含:
  - 特徵選擇
  - 特徵轉換
  - 降維處理
end note

note right of eval
  評估指標:
  - 準確率/召回率
  - F1 Score
  - AUC-ROC
end note

@enduml

此圖示呈現了使用 AWS Glue DataBrew 建立資料轉換的流程。

程式碼範例與內容解密

import pandas as pd

# 載入客戶和地址資料
customers = pd.read_csv('customers.csv')
addresses = pd.read_csv('addresses.csv')

# 合併客戶和地址資料
merged_data = pd.merge(customers, addresses, on='customer_id')

# 清理資料集
merged_data = merged_data.dropna()  # 移除缺失值

#### 內容解密:
1. 載入客戶和地址資料使用 pandas 的 `read_csv` 方法載入客戶和地址的 CSV 檔案
2. 合併客戶和地址資料使用 pandas 的 `merge` 方法根據 `customer_id` 合併客戶和地址資料
3. 清理資料集使用 pandas 的 `dropna` 方法移除缺失值以清理資料集

本章節介紹了 Amazon SageMaker 的工具套件,包括 SageMaker Ground Truth、SageMaker Data Wrangler 和 SageMaker Clarify,並提供了使用 AWS Glue DataBrew 建立資料轉換的實作練習。透過這些工具和練習,讀者可以更好地理解如何滿足資料科學家和機器學習模型的需求。

使用AWS Glue DataBrew建立資料轉換的實作練習

建立新的Glue DataBrew專案

在進行資料轉換之前,需要先建立一個新的Glue DataBrew專案。請注意,Glue DataBrew專案會產生每30分鐘1美元的費用,但新客戶前40個session是免費的。具體價格請參考AWS官方網站。

建立Glue DataBrew配方

在互動式專案session中,可以建立一個配方(recipe),也就是對資料進行轉換的步驟。這個配方將用於將客戶資料表和地址資料表結合,並進行一些必要的轉換,以建立一個郵寄清單供行銷團隊使用。

步驟如下:

  1. 在右側的配方面板中點選Add step
  2. 選擇Join multiple datasets,並選取address-dataset
  3. 選擇Left join,並指定address_id作為join key。
  4. 選擇需要的欄位,包括客戶ID、名字、姓氏、電子郵件、地址、區域和郵政編碼。
  5. 點選Finish

進行資料轉換

在建立好配方後,需要進行一些資料轉換,包括將名字和姓氏轉換為首字母大寫,將電子郵件地址轉換為小寫。

程式碼處理與解密:

import pandas as pd

# 假設df是客戶資料表的DataFrame
df = pd.read_csv('customer_data.csv')

# 將名字和姓氏轉換為首字母大寫
df['first_name'] = df['first_name'].str.title()
df['last_name'] = df['last_name'].str.title()

# 將電子郵件地址轉換為小寫
df['email'] = df['email'].str.lower()

#### 內容解密:
# 上述程式碼使用了pandas函式庫來處理資料。
# `str.title()`函式將字串轉換為首字母大寫,其餘字母小寫。
# `str.lower()`函式將字串轉換為小寫。

建立Glue DataBrew任務

在完成配方後,需要建立一個Glue DataBrew任務來執行這個配方,並將結果輸出到Amazon S3。

步驟如下:

  1. 在AWS Glue DataBrew控制檯中,點選左側選單中的Jobs
  2. 點選Create job,並輸入任務名稱。
  3. 選擇專案,並指定輸出設定,包括輸出到Amazon S3、檔案型別為CSV等。
  4. 指定S3儲存位置和許可權。
  5. 點選Create and run job

驗證結果

任務執行完成後,可以在S3控制檯中檢視輸出檔案,並下載CSV檔案來驗證結果。

將資料載入資料市集

雖然資料湖能夠支援大量的分析工作,但仍有許多使用案例需要資料工程師將資料載入外部的資料倉儲或資料市集,以供特定的資料消費者使用。

正如我們在第2章《用於分析的資料管理架構》中所討論的,資料湖是跨多個業務線的單一真實來源,而資料市集則包含特定使用者群體感興趣的資料子集。資料市集可以是關聯式資料函式庫、資料倉儲或其他型別的資料儲存。

資料市集有兩個主要用途。首先,它們提供了一個包含資料湖中部分資料的資料函式庫,針對特定型別的查詢(例如特定業務功能)進行了最佳化。此外,它們還提供了一個效能更高、延遲更低的查詢引擎,這通常是某些分析使用案例(如為商業智慧應用程式提供支援)所必需的。

使用資料倉儲/資料市集擴充套件分析功能

像Amazon Athena這樣的工具(我們將在第11章《使用Amazon Athena進行即席查詢》中進行探討)允許我們直接在資料湖中的資料上執行SQL查詢。雖然這使我們能夠查詢存在於Amazon S3上的非常大的資料集,但這些查詢的效能通常低於在本地於運算引擎的高速磁碟上的資料上執行查詢的效能。

並非所有查詢都需要這種高效能,我們可以將查詢和資料分為三類別。讓我們來看看。

冷資料

這是很少被存取,但出於合規性和治理要求,或歷史資料需要長期儲存以供未來研究和開發(例如用於訓練機器學習模型)的資料。

例如,銀行網站的日誌。除非發生違規行為,或客戶要求查詢帳戶存取歷史,否則這些資料在一段時間後可能不再需要被查詢。

另一個例子是工廠中一系列感測器的詳細資料。這些資料在30天后可能不會被主動查詢,但我們希望保留這些資料,以便在未來的機器學習專案中使用豐富的歷史資料來訓練模型。

在AWS中,冷資料可以儲存在Amazon S3服務中,該服務根據您的需求提供不同類別的儲存。以下類別的S3儲存通常用於冷資料,而S3生命週期規則可用於在一定時間後自動將資料移至這些類別。例如,您可以將某些資料集從暖儲存移至以下冷儲存類別:

  • Amazon S3 Glacier(S3 Glacier):此儲存類別適用於需要長期儲存且可能每年存取幾次的資料,且不需要立即存取。從S3 Glacier檢索資料需要幾分鐘到幾小時(根據檢索速度的不同,價格也有所不同)。S3 Glacier中的資料無法直接使用Amazon Athena或Glue作業查詢,必須先檢索並儲存在常規儲存類別中,然後才能被查詢。
  • Amazon S3 Glacier Deep Archive(S3 Glacier Deep Archive):此儲存類別是長期保留資料的最低成本儲存,適用於每年可能檢索一次或兩次的資料。此儲存類別中的資料可以在12小時內檢索。

選擇適合您資料的S3儲存類別非常重要。將不常存取的冷資料儲存在Glacier類別以外的儲存中意味著您為該儲存支付的費用超過了所需的費用,這並不節儉。透過將冷資料儲存在適當的儲存類別中,可以實作顯著的成本文約。

暖資料

暖資料是相對經常被存取,但不需要極低延遲檢索的資料。這是需要按需查詢的資料,例如每天ETL作業中使用的資料,或用於即席查詢和資料探索的資料。

這種資料的一個例子是每天被攝入原始資料湖區域的資料,例如來自SAP或其他交易資料函式庫系統的資料。這些資料每天都會被我們的ETL作業處理,並將資料寫入轉換區域。