教學課程:使用 Databricks 筆記本的 EDA 技術

本教學將引導你了解使用 Python 在 Azure Databricks 筆記本中進行探索性資料分析(EDA)的基礎,從載入資料到透過資料視覺化產生洞見。

本教學課程中使用的筆記本會檢查全球能源和排放數據,並示範如何載入、清理和探索數據。

您可以跟著 範例筆記本 一起操作,或者從頭開始創建您自己的筆記本。

什麼是 EDA?

探勘數據分析 (EDA) 是數據科學程式中的重要初始步驟,涉及分析和可視化數據至:

  • 找出其主要特性。
  • 識別模式和趨勢。
  • 偵測異常狀況。
  • 瞭解變數之間的關聯性。

EDA 提供數據集的深入解析,以利進一步統計分析或模型化的明智決策。

透過 Azure Databricks 筆記本,資料科學家可以使用熟悉的工具進行 EDA。 例如,本教學使用了一些常見的 Python 函式庫來處理和繪製資料,包括:

  • Numpy:數值運算的基礎程式庫,提供陣列、矩陣和各種數學函式的支援,以操作這些數據結構。
  • pandas:建置在 NumPy 之上的強大數據作和分析連結庫,可提供 DataFrame 等數據結構,以有效率地處理結構化數據。
  • Plotly:互動式圖形庫,可讓您建立高品質的互動式視覺效果,以進行數據分析和呈現。
  • Matplotlib:一個用於在Python中建立靜態、動畫及互動視覺化的完整函式庫。

Azure Databricks 也提供內建功能,幫助你在筆記本輸出中探索資料,例如在表格中篩選與搜尋資料,以及放大視覺化。 你也可以用 Genie Code 來幫助你寫 EDA 的程式碼。

開始之前

若要完成本教程,您需要以下項目:

  • 您必須擁有使用現有計算資源或建立新計算資源的許可權。 請參閱 Compute
  • [可選]這個教學說明如何使用 Genie Code 來幫助你產生程式碼。 更多資訊請參見 使用精靈代碼

下載數據集並匯入 CSV 檔案

本教學課程會藉由檢查全球能源和排放數據來示範 EDA 技術。 若要跟著做,請從 Kaggle 下載 Our World in Data 的 能耗數據集。 本教學課程使用 owid-energy-data.csv 檔案。

要將資料集匯入你的 Azure Databricks 工作區:

  1. 在工作區的側邊欄中,單擊 工作區 以瀏覽至工作區瀏覽器。

  2. 將 CSV 檔案 owid-energy-data.csv拖放到您的工作區。

    這會開啟 匯入 對話框。 請注意這裡所列 目標資料夾。 這會設定為工作區瀏覽器中的目前資料夾,並成為匯入的檔案目的地。

  3. 點選 匯入。 檔案應該會出現在工作區的目標資料夾中。

  4. 您稍後需要檔案路徑,才能將檔案載入筆記本。 在工作區瀏覽器中尋找檔案。 若要將檔案路徑複製到剪貼簿,請在檔案名上按下滑鼠右鍵,然後選取 [複製 URL/路徑]>[完整路徑]

建立新的筆記本

若要在使用者主資料夾中建立新的筆記本,請按下提要字段中的 [新增圖示][新增],然後從功能表中選取 [Notebook]。

在頂端,筆記本名稱旁邊,選擇Python作為筆記本的預設語言。

若要深入瞭解如何建立和管理筆記本,請參閱 管理筆記本

將本文中的每個程式代碼範例新增至筆記本中的新儲存格。 或者,使用提供的 範例筆記本 來跟隨本教學課程。

載入 CSV 檔案

在新的筆記本數據格中,載入 CSV 檔案。 若要這樣做,請匯入 numpypandas。 這些都是對資料科學和分析有用的 Python 函式庫。

從數據集建立 pandas DataFrame,以便更輕鬆地處理和視覺效果。 將下列檔案路徑取代為您稍早複製的檔案路徑。

import numpy as np
import pandas as pd # Data processing, CSV file I/O (e.g. pd.read_csv)
df=pd.read_csv('/Workspace/Users/demo@databricks.com/owid-energy-data.csv') # Replace the file path here with the workspace path you copied earlier

執行儲存格。 輸出應該會傳回 pandas DataFrame,包括每個欄位及其類型的列表。

匯入之 DataFrame 的儲存格輸出。

了解數據

了解數據集的基本概念對於任何數據科學專案都至關重要。 它牽涉到熟悉自己手邊數據的結構、類型和品質。

在Azure Databricks筆記本中,你可以使用 display(df) 指令來顯示資料集。

儲存格輸出,將資料集顯示為資料表。

因為數據集有超過 10,000 個數據列,此命令會傳回截斷的數據集。 在每個數據行的左邊,您可以看到數據行的數據類型。 若要深入瞭解,請參閱 格式資料行

使用 pandas 進行數據深入解析

若要有效地了解數據集,請使用下列 pandas 命令:

  • df.shape 命令會傳回 DataFrame 的維度,讓您快速概觀數據列和資料行數目。

    儲存格輸出顯示 df.shape。

  • df.dtypes 命令會提供每個資料行的數據類型,協助您瞭解您所處理的數據種類。 您也可以在結果數據表中看到每個資料行的數據類型。

    顯示 df.dtypes 的儲存格輸出。

  • df.describe() 命令會產生數值數據行的描述性統計數據,例如平均值、標準偏差和百分位數,可協助您識別模式、偵測異常狀況,以及了解數據的分佈。 使用它與 display() 一起,可以以可互動的表格格式查看摘要統計資料。 查看 使用 Databricks 筆記本輸出表格來探索數據。

    顯示 df.describe 的結果。

產生數據概況

備註

在 Databricks Runtime 9.1 LTS 和更新版本中可用。

Azure Databricks 筆記本內建資料分析功能。 使用 Azure Databricks 顯示函式查看 DataFrame 時,你可以從表格輸出產生資料剖面。

# Display the DataFrame, then click "+ > Data Profile" to generate a data profile
display(df)

按下即可從資料表輸出產生資料設定檔。

按一下 +>資料設定檔,位於輸出中 資料表 旁。 這會執行一個新命令,產生 DataFrame 中數據的剖析。

從資料表輸出生成的數據配置檔。

數據配置檔包含數值、字串和日期數據行的摘要統計數據,以及每個數據行值分佈的直方圖。 您也可以以程式設計方式產生數據配置檔;請參閱 summarize 命令 (dbutils.data.summarize)

清除數據

清除數據是 EDA 中的重要步驟,可確保數據集正確、一致且準備好進行有意義的分析。 此程式牽涉到數項重要工作,以確保數據已準備好進行分析,包括:

  • 識別和移除任何重複的數據。
  • 處理遺漏的值,這可能牽涉到以特定值取代它們,或移除受影響的數據列。
  • 透過轉換和轉換來標準化數據類型(例如,將字串轉換成 datetime),以確保一致性。 您可能也想要將資料轉換成更容易使用的格式。

此清除階段是不可或缺的,因為它可改善數據的品質和可靠性,以便更精確且深入的分析。

提示:使用 Genie Code 來協助資料清理任務

你可以使用 Genie Code 來幫助你產生程式碼。 建立一個新程式碼儲存格,點擊右上角 的生成 連結或使用 Genie Code 圖示來開啟 Genie Code。 輸入 Genie Code 查詢。 Genie Code 可以產生 Python 或 SQL 程式碼,或產生文字描述。 如需不同的結果,請點擊 重新產生

例如,試試以下提示,使用精靈代碼來幫助你清理資料:

  • 檢查 df 是否包含任何重複的數據行或數據列。 列印重複項目。 然後,刪除重複專案。
  • 中的日期數據行格式為何? 把它變更為 'YYYY-MM-DD'
  • 我不會使用 XXX 列。 刪除它。

請參閱 Genie Code 的程式設計協助

拿掉重複的數據

檢查數據是否有任何重複的數據列或數據行。 如果是,請將其移除。

提示

用 Genie Code 幫你生成程式碼。

嘗試輸入提示:「檢查 df 是否包含任何重複的數據行或數據列。 列印重複項目。 然後,刪除重複專案。」 Genie Code 可能會產生像下面範例這樣的程式碼。

# Check for duplicate rows
duplicate_rows = df.duplicated().sum()

# Check for duplicate columns
duplicate_columns = df.columns[df.columns.duplicated()].tolist()

# Print the duplicates
print("Duplicate rows count:", duplicate_rows)
print("Duplicate columns:", duplicate_columns)

# Drop duplicate rows
df = df.drop_duplicates()

# Drop duplicate columns
df = df.loc[:, ~df.columns.duplicated()]

在此情況下,數據集沒有任何重複的數據。

處理空值或遺漏值

處理 NaN 或 Null 值的常見方法是以 0 取代它們,以便更容易進行數學處理。

df = df.fillna(0) # Replace all NaN (Not a Number) values with 0

這可確保 DataFrame 中的任何遺漏數據都會取代為 0,這適用於後續的數據分析或處理步驟,其中遺漏值可能會導致問題。

重新格式化日期

日期通常會以不同數據集的各種方式格式化。 它們可能以日期格式、字串或整數表示。

針對此分析,請將 year 數據行視為整數。 下列程式代碼是執行這項作的其中一種方式:

# Ensure the 'year' column is converted to the correct data type (integer for year)
df['year'] = pd.to_datetime(df['year'], format='%Y', errors='coerce').dt.year

# Confirm the changes
df.year.dtype

這可確保 year 欄只包含整數年份值,且任何無效的條目都會被轉換成NaT(不是時間)。

使用 Databricks 筆記本輸出數據表探索數據

Azure Databricks 提供內建功能,幫助你利用輸出資料表探索資料。

在新儲存格中,使用 display(df) 將數據集顯示為數據表。

使用 Databricks 筆記本輸出數據表探索數據。

使用輸出資料表,您可以透過數種方式來探索您的資料:

搜尋特定字串或值的數據

按兩下資料表右上方的搜尋圖示,然後輸入您的搜尋。

在資料表輸出中搜尋一個值。

針對特定條件進行篩選

您可以使用內建資料表篩選來篩選資料列的特定條件。 有數種方式可以建立篩選。 請參閱 篩選結果

提示

使用 Genie Code 來建立篩選器。 按兩下表格右上角的篩選圖示。 輸入您的篩選條件。 Genie Code 會自動為你產生一個篩選器。

使用小幫手篩選數據表輸出。

使用數據集建立視覺效果

在輸出數據表頂端,按兩下 [+>[視覺效果] 以開啟視覺效果編輯器。

使用數據表輸出新增視覺效果。

選取您想要可視化的視覺效果類型和數據行。 編輯器會根據您的設定顯示圖表的預覽。 例如,下圖顯示如何新增多個折線圖,以檢視一段時間內各種可再生能源的耗用量。

使用視覺效果編輯器設定視覺效果。

單擊 儲存 將視覺化新增為單元格輸出中的索引標籤。

請參閱 建立新的視覺效果

利用 Python 函式庫探索並視覺化資料

使用視覺效果探索數據是 EDA 的基本層面。 視覺效果有助於找出數據內的模式、趨勢和關聯性,而這些數據可能並非透過數值分析立即明顯。 使用 Plotly 或 Matplotlib 等連結庫來取得常見的視覺效果技術,包括散佈圖、條形圖、折線圖和直方圖。 這些可視化工具可讓數據科學家識別異常、瞭解數據分佈,以及觀察變數之間的相互關聯。 例如,散佈圖可以凸顯極端值,而時間序列圖表可以顯示趨勢和季節性。

建立一個包含獨特國家的陣列

建立唯一國家/地區的陣列,以檢查數據集中包含的國家/地區。 建立陣列會顯示列為 country的實體。

# Get the unique countries
unique_countries = df['country'].unique()
unique_countries

輸出:

顯示唯一國家陣列的儲存格輸出。

洞見:

country 欄位包含多個實體,包括世界、高收入國家、亞洲及United States,這些實體不一定能直接比較。 依區域篩選數據可能更有用。

假設您想要將調查重點放在 2000 年代溫室氣體排放量最高的 10 個國家/ 地區。 您可以篩選您想要查看的年份數據,以及擁有最大排放量的前10個國家/地區,然後使用繪圖來建立一個折線圖來顯示其隨時間的排放量。

import plotly.express as px

# Filter data to include only years from 2000 to 2022
filtered_data = df[(df['year'] >= 2000) & (df['year'] <= 2022)]

# Get the top 10 countries with the highest emissions in the filtered data
top_countries = filtered_data.groupby('country')['greenhouse_gas_emissions'].sum().nlargest(10).index

# Filter the data for those top countries
top_countries_data = filtered_data[filtered_data['country'].isin(top_countries)]

# Plot emissions trends over time for these countries
fig = px.line(top_countries_data, x='year', y='greenhouse_gas_emissions', color='country',
             title="Greenhouse Gas Emissions Trends for Top 10 Countries (2000 - 2022)")
fig.show()

輸出:

圖表顯示2000至2022年前10名排放者的溫室氣體排放趨勢。

洞見:

溫室氣體排放量從2000年到2022年呈上升趨勢,除了少數相對穩定的國家,在此期間略有下降。

依區域篩選並製作圖表顯示排放物

依區域篩選出數據,並計算每個區域的總排放量。 然後將資料繪製為條形圖:

# Filter out regional entities
regions = ['Africa', 'Asia', 'Europe', 'North America', 'South America', 'Oceania']

# Calculate total emissions for each region
regional_emissions = df[df['country'].isin(regions)].groupby('country')['greenhouse_gas_emissions'].sum()

# Plot the comparison
fig = px.bar(regional_emissions, title="Greenhouse Gas Emissions by Region")
fig.show()

輸出:

圖表顯示依區域的溫室氣體排放量。

Insight

亞洲的溫室氣體排放量最高。 大洋洲、南美洲和非洲的溫室氣體排放量最低。

計算和圖表可再生能源份額增長

建立新的特徵/數據行,將可再生能源份額計算為可再生能源消費與主要能耗的比例。 然後,根據國家的平均可再生能源份額來排名國家。 請為前十名國家繪製其可再生能源在不同时期的佔比變化。

# Calculate the renewable energy share and save it as a new column called "renewable_share"
df['renewable_share'] = df['renewables_consumption'] / df['primary_energy_consumption']

# Rank countries by their average renewable energy share
renewable_ranking = df.groupby('country')['renewable_share'].mean().sort_values(ascending=False)

# Filter for countries leading in renewable energy share
leading_renewable_countries = renewable_ranking.head(10).index
leading_renewable_data = df[df['country'].isin(leading_renewable_countries)]
# filtered_data = df[(df['year'] >= 2000) & (df['year'] <= 2022)]
leading_renewable_data_filter=leading_renewable_data[(leading_renewable_data['year'] >= 2000) & (leading_renewable_data['year'] <= 2022)]
# Plot renewable share over time for top renewable countries
fig = px.line(leading_renewable_data_filter, x='year', y='renewable_share', color='country',
             title="Renewable Energy Share Growth Over Time for Leading Countries")
fig.show()

輸出:

圖表顯示,10個可再生能源領先國家的可再生能源份額增長。

洞見:

挪威和冰島正以可再生能源領先世界,超過半數的消費來自可再生能源。

冰島和瑞典的可再生能源份額增長最大。 所有國家偶爾出現下滑和上升,表明可再生能源份額增長不一定是線性的。 中非在2010年代初曾有所下滑,但在2020年反彈。

散佈圖:展示可再生能源對主要排放者的影響

篩選前10個排放者的數據,然後使用散布圖來查看可再生能源份額與一段時間的溫室氣體排放。

# Select top emitters and calculate renewable share vs. emissions
top_emitters = df.groupby('country')['greenhouse_gas_emissions'].sum().nlargest(10).index
top_emitters_data = df[df['country'].isin(top_emitters)]

# Plot renewable share vs. greenhouse gas emissions over time
fig = px.scatter(top_emitters_data, x='renewable_share', y='greenhouse_gas_emissions',
                color='country', title="Impact of Renewable Energy on Emissions for Top Emitters")
fig.show()

輸出:

圖表顯示可再生能源對最高排放國排放的影響。

洞見:

作為一個國家使用更多的可再生能源,它也有更多的溫室氣體排放,這意味著其總能耗比可再生能源消費更快。 北美是一個例外,因為它的溫室氣體排放量在過去幾年中保持相對不變,因為其可再生能源份額繼續增加。

模型預測全球能耗

逐年匯總全球主要能耗,然後建立自動回歸綜合移動平均(ARIMA)模型,預測未來幾年全球總能耗。 使用 Matplotlib 繪製歷程記錄和預測的能耗。

import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt

# Aggregate global primary energy consumption by year
global_energy = df[df['country'] == 'World'].groupby('year')['primary_energy_consumption'].sum()

# Build an ARIMA model for projection
model = ARIMA(global_energy, order=(1, 1, 1))
model_fit = model.fit()
forecast = model_fit.forecast(steps=10)  # Projecting for 10 years

# Plot historical and forecasted energy consumption
plt.plot(global_energy, label='Historical')
plt.plot(range(global_energy.index[-1] + 1, global_energy.index[-1] + 11), forecast, label='Forecast')
plt.xlabel("Year")
plt.ylabel("Primary Energy Consumption")
plt.title("Projected Global Energy Consumption")
plt.legend()
plt.show()

輸出:

圖表,顯示歷史和全球能源耗用量。

洞見:

此模型預測全球能源消耗將持續上升。

範例筆記本

使用下列筆記本來執行本文中的步驟。 關於如何將筆記本匯入Azure Databricks工作區的說明,請參見 Import a notebook

教學課程:具有全球能源數據的 EDA

取得筆記本

後續步驟

既然您已對數據集執行一些初始探勘數據分析,請嘗試下列後續步驟:

  • 如需其他 EDA 視覺效果範例,請參閱 範例筆記本中的附錄
  • 如果您在進行本教學課程時遇到任何錯誤,請嘗試使用內置偵錯工具逐步檢查您的程式碼。 請參閱 除錯筆記本
  • 與小組共用您的筆記本,以便他們瞭解您的分析。 視您給予的許可權而定,這些許可權可協助開發程序代碼,以進一步分析或新增批注和建議以進一步調查。
  • 完成分析之後,請使用重要視覺效果建立 筆記本儀錶板AI/BI 儀錶板 ,以便與專案關係人共用。