共用方式為


教學課程第 2 部分:使用 Microsoft Fabric 筆記本探索和可視化數據

在本教學課程中,您將瞭解如何進行探勘數據分析(EDA),以檢查和調查數據,同時透過使用數據視覺效果技術來摘要其重要特性。

您將使用 seaborn,這是 Python 數據視覺效果連結庫,提供高階介面,可在數據框架和陣列上建置視覺效果。 如需 的詳細資訊 seaborn,請參閱 Seaborn:統計數據視覺效果

您也將使用 以筆記本為基礎的工具 Data Wrangler,其可提供沉浸式體驗,以進行探勘數據分析和清除。

本教學課程的主要步驟如下:

  1. 讀取從 Lakehouse 中差異數據表儲存的數據。
  2. 將 Spark DataFrame 轉換成 Pandas DataFrame,Python 視覺效果連結庫支援此連結庫。
  3. 使用 Data Wrangler 執行初始數據清理和轉換。
  4. 使用 seaborn執行探勘數據分析。

必要條件

這是教學課程系列的第 2 部分。 若要完成本教學課程,請先完成:

在筆記本中跟著

2-explore-cleanse-data.ipynb 是本教學課程隨附的筆記本。

若要開啟本教學課程隨附的筆記本,請遵循準備系統以進行數據科學教學課程中的指示,將筆記本匯入您的工作區。

如果您想要複製並貼上此頁面中的程式碼,您可以 建立新的筆記本

開始執行程序代碼之前,請務必將 Lakehouse 附加至筆記本

重要

附加您在第 1 部分中使用的相同 Lakehouse。

從 Lakehouse 讀取原始數據

Lakehouse 的 [檔案 ] 區段讀取原始數據。 您已在上一個筆記本中上傳此數據。 在執行此程式代碼之前,請確定您已將第1部分中使用的相同Lakehouse附加至此筆記本。

df = (
    spark.read.option("header", True)
    .option("inferSchema", True)
    .csv("Files/churn/raw/churn.csv")
    .cache()
)

從數據集建立 pandas DataFrame

將spark DataFrame轉換成 pandas DataFrame,以方便處理和視覺效果。

df = df.toPandas()

顯示原始數據

使用 display探索原始數據,執行一些基本統計數據並顯示圖表檢視。 請注意,您必須先匯入必要的連結庫,例如 NumpyPnadasSeabornMatplotlib ,以進行數據分析和視覺效果。

import seaborn as sns
sns.set_theme(style="whitegrid", palette="tab10", rc = {'figure.figsize':(9,6)})
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
from matplotlib import rc, rcParams
import numpy as np
import pandas as pd
import itertools
display(df, summary=True)

使用 Data Wrangler 執行初始數據清理

若要探索及轉換筆記本中的任何 pandas 數據框架,請直接從筆記本啟動 Data Wrangler。

注意

當筆記本核心忙碌時,無法開啟數據 Wrangler。 數據格執行必須在啟動 Data Wrangler 之前完成。

  1. 在 [筆記本] 功能區 [數據] 索引標籤下,選取 [ 啟動數據 Wrangler]。 您會看到可供編輯的已啟動 pandas DataFrame 清單。
  2. 選取您想要在 Data Wrangler 中開啟的 DataFrame。 由於此筆記本只包含一個 DataFrame,請 df選取 df

此螢幕快照顯示如何從筆記本啟動數據整頓器。

Data Wrangler 會啟動併產生數據的描述性概觀。 中間的數據表會顯示每個數據行。 數據表 旁的 [摘要 ] 面板會顯示DataFrame的相關信息。 當您在數據表中選取數據行時,摘要會更新與所選數據行的相關信息。 在某些情況下,顯示和摘要的數據將會是 DataFrame 的截斷檢視。 發生這種情況時,您會在摘要窗格中看到警告影像。 將滑鼠停留在此警告上方,以檢視說明情況的文字。

顯示數據整頓概觀的螢幕快照。

您所做的每項作業都可以在點擊時套用,即時更新數據顯示,併產生程式碼,以重複使用的函式形式儲存回筆記本。

本節的其餘部分會逐步引導您完成使用 Data Wrangler 執行數據清理的步驟。

卸除重複的數據列

在左面板上是一份作業清單(例如尋找和取代、格式公式數值),您可以在數據集上執行。

  1. 展開 [ 尋找並取代 ],然後選取 [ 卸除重複的數據列]。

    此螢幕快照顯示尋找和取代下方的重複數據列。

  2. 此時會出現一個面板,讓您選取要比較的數據行清單,以定義重複的數據列。 選取 [RowNumber ] 和 [CustomerId]。

    中間面板中是這項作業結果的預覽。 預覽版底下是執行作業的程序代碼。 在此實例中,數據似乎不會變更。 但是,由於您正在查看截斷的檢視,所以仍套用作業是個好主意。

    顯示卸除 Data Wrangler 中重複數據列的螢幕快照。

  3. 選取 [套用 ] (位於側邊或底部),以移至下一個步驟。

卸除遺漏數據的數據列

使用 Data Wrangler 卸除所有數據行遺漏數據的數據列。

  1. [尋找並取代] 中選取 [卸除遺漏的值]。

  2. 選擇 [從 [目標] 資料行選取 [全部]。

    顯示卸除 Data Wrangler 中遺漏數據列的螢幕快照。

  3. 選取 [ 套用 ] 以移至下一個步驟。

卸除資料行

使用 Data Wrangler 卸除您不需要的數據行。

  1. 展開 [ 架構] ,然後選取 [ 卸除數據行]。

  2. 選取 [RowNumber]、 [CustomerId]、[ 姓氏]。 這些數據行會在預覽中以紅色顯示,以顯示程式代碼已變更的數據行(在此案例中為已卸除。

    顯示卸除 Data Wrangler 中數據行的螢幕快照。

  3. 選取 [ 套用 ] 以移至下一個步驟。

將程式代碼新增至筆記本

每次選取 [ 套用] 時,會在左下方的 [清除步驟] 面板中建立新的步驟 。 在面板底部,針對所有步驟選取 [預覽程序代碼],以檢視所有個別步驟的組合。

選取 左上方的 [將程序代碼新增至筆記本 ],以關閉Data Wrangler並自動新增程序代碼。 將 程式代碼新增至筆記本 會將程式代碼包裝在函式中,然後呼叫 函式。

此螢幕快照顯示預覽程序代碼,以及存取新增至筆記本的位置。

提示

在您手動執行新儲存格之前,將不會套用 Data Wrangler 所產生的程式代碼。

如果您未使用 Data Wrangler,您可以改用下一個程式代碼單元格。

此程式代碼類似於 Data Wrangler 所產生的程式代碼,但會將 自變數 inplace=True 新增至每個產生的步驟。 藉由設定 inplace=True,pandas 會覆寫原始 DataFrame,而不是產生新的 DataFrame 做為輸出。

# Modified version of code generated by Data Wrangler 
# Modification is to add in-place=True to each step

# Define a new function that include all above Data Wrangler operations
def clean_data(df):
    # Drop rows with missing data across all columns
    df.dropna(inplace=True)
    # Drop duplicate rows in columns: 'RowNumber', 'CustomerId'
    df.drop_duplicates(subset=['RowNumber', 'CustomerId'], inplace=True)
    # Drop columns: 'RowNumber', 'CustomerId', 'Surname'
    df.drop(columns=['RowNumber', 'CustomerId', 'Surname'], inplace=True)
    return df

df_clean = clean_data(df.copy())
df_clean.head()

探索資料

顯示已清除數據的一些摘要和視覺效果。

判斷類別、數值和目標屬性

使用此程式代碼來判斷類別、數值和目標屬性。

# Determine the dependent (target) attribute
dependent_variable_name = "Exited"
print(dependent_variable_name)
# Determine the categorical attributes
categorical_variables = [col for col in df_clean.columns if col in "O"
                        or df_clean[col].nunique() <=5
                        and col not in "Exited"]
print(categorical_variables)
# Determine the numerical attributes
numeric_variables = [col for col in df_clean.columns if df_clean[col].dtype != "object"
                        and df_clean[col].nunique() >5]
print(numeric_variables)

五個數位摘要

使用方塊繪圖顯示數值屬性的五個數位摘要(最小值、第一分位數、中位數、第三分位數、最大分數)。

df_num_cols = df_clean[numeric_variables]
sns.set(font_scale = 0.7) 
fig, axes = plt.subplots(nrows = 2, ncols = 3, gridspec_kw =  dict(hspace=0.3), figsize = (17,8))
fig.tight_layout()
for ax,col in zip(axes.flatten(), df_num_cols.columns):
    sns.boxplot(x = df_num_cols[col], color='green', ax = ax)
fig.delaxes(axes[1,2])

圖表顯示五個數位摘要。

已結束和無選客戶的散發

顯示已結束的客戶與無選客戶在類別屬性之間的分佈。

attr_list = ['Geography', 'Gender', 'HasCrCard', 'IsActiveMember', 'NumOfProducts', 'Tenure']
fig, axarr = plt.subplots(2, 3, figsize=(15, 4))
for ind, item in enumerate (attr_list):
    sns.countplot(x = item, hue = 'Exited', data = df_clean, ax = axarr[ind%2][ind//2])
fig.subplots_adjust(hspace=0.7)

圖表顯示已結束和無選客戶的條形圖。

數值屬性的分佈

使用直方圖顯示數值屬性的頻率分佈。

columns = df_num_cols.columns[: len(df_num_cols.columns)]
fig = plt.figure()
fig.set_size_inches(18, 8)
length = len(columns)
for i,j in itertools.zip_longest(columns, range(length)):
    plt.subplot((length // 2), 3, j+1)
    plt.subplots_adjust(wspace = 0.2, hspace = 0.5)
    df_num_cols[i].hist(bins = 20, edgecolor = 'black')
    plt.title(i)
plt.show()

圖表顯示數值屬性的分佈。

執行特徵工程

執行特徵工程,根據目前屬性產生新的屬性:

df_clean["NewTenure"] = df_clean["Tenure"]/df_clean["Age"]
df_clean["NewCreditsScore"] = pd.qcut(df_clean['CreditScore'], 6, labels = [1, 2, 3, 4, 5, 6])
df_clean["NewAgeScore"] = pd.qcut(df_clean['Age'], 8, labels = [1, 2, 3, 4, 5, 6, 7, 8])
df_clean["NewBalanceScore"] = pd.qcut(df_clean['Balance'].rank(method="first"), 5, labels = [1, 2, 3, 4, 5])
df_clean["NewEstSalaryScore"] = pd.qcut(df_clean['EstimatedSalary'], 10, labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

使用 Data Wrangler 執行單熱編碼

數據 Wrangler 也可以用來執行單熱編碼。 若要這樣做,請重新開啟Data Wrangler。 這次,請選取 df_clean 數據。

  1. 展開 [公式] ,然後選取 [單熱編碼]。
  2. 此時會出現一個面板,讓您選取要執行單熱編碼的數據行清單。 選取 [地理位置] 和 [性別]。

您可以複製產生的程式代碼、關閉 Data Wrangler 以返回筆記本,然後貼到新的數據格中。 或者,選取 左上方的 [將程序代碼新增至筆記本 ],以關閉Data Wrangler並自動新增程序代碼。

如果您未使用 Data Wrangler,您可以改用下一個程式代碼數據格:

# This is the same code that Data Wrangler will generate
 
import pandas as pd
 
def clean_data(df_clean):
    # One-hot encode columns: 'Geography', 'Gender'
    df_clean = pd.get_dummies(df_clean, columns=['Geography', 'Gender'])
    return df_clean
 
df_clean_1 = clean_data(df_clean.copy())
df_clean_1.head()

探勘數據分析的觀察摘要

  • 大多數客戶來自法國,與西班牙和德國相比,而西班牙的流失率最低,與法國和德國相比。
  • 大部分的客戶都有信用卡。
  • 有客戶年齡和信用分數分別高於 60 和 400 以下,但不能被視為極端值。
  • 很少有客戶擁有兩個以上的銀行產品。
  • 未使用中的客戶流失率較高。
  • 性別和任期年似乎不會影響客戶關閉銀行賬戶的決定。

建立已清除數據的差異數據表

您將在本系列的下一個筆記本中使用此數據。

table_name = "df_clean"
# Create Spark DataFrame from pandas
sparkDF=spark.createDataFrame(df_clean_1) 
sparkDF.write.mode("overwrite").format("delta").save(f"Tables/{table_name}")
print(f"Spark dataframe saved to delta table: {table_name}")

後續步驟

使用此數據定型和註冊機器學習模型: