共用方式為


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

本教學課程會引導您在 Azure Databricks 筆記本中使用 Python 進行探勘數據分析的基本概念,從載入數據到透過數據視覺效果產生見解。

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

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

什麼是 EDA?

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

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

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

使用 Azure Databricks 筆記本,數據科學家可以使用熟悉的工具來執行 EDA。 例如,本教學課程使用一些常見的 Python 連結庫來處理和繪製數據,包括:

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

Azure Databricks 也提供內建功能,可協助您探索筆記本輸出中的數據,例如篩選和搜尋數據表中的數據,以及放大視覺效果。 您也可以使用 Databricks Assistant 來協助您撰寫 EDA 的程式代碼。

開始之前

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

  • 您必須擁有使用現有計算資源或建立新計算資源的許可權。 請參閱 Compute
  • [選擇性]本教學課程說明如何使用小幫手來協助您產生程序代碼。 請參閱 使用 Databricks Assistant 以獲取更詳細的資訊。

下載數據集並匯入 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),以確保一致性。 您可能也想要將資料轉換成更容易使用的格式。

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

秘訣:使用 Databricks Assistant 協助處理數據清理工作

您可以使用 Databricks Assistant 來協助您產生程式代碼。 建立新的程式碼單元,然後按下 產生 連結,或使用右上方的助手圖示開啟助手。 輸入給助理的查詢。 助理可能會產生 Python 或 SQL 程式代碼,或產生文字描述。 如需不同的結果,請點擊 重新產生

例如,請嘗試下列提示以使用小幫手來協助您清除數據:

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

請參閱 從 Databricks Assistant取得程式碼撰寫說明。

拿掉重複的數據

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

提示

使用助理為您產生程序代碼。

嘗試輸入提示:「檢查 df 是否包含任何重複的數據行或數據列。 列印重複項目。 然後,刪除重複專案。」 小幫手可能會產生類似下列範例的程序代碼。

# 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 筆記本輸出數據表探索數據。

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

搜尋特定字串或值的數據

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

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

針對特定條件進行篩選

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

提示

使用 Databricks Assistant 建立篩選。 按兩下表格右上角的篩選圖示。 輸入您的篩選條件。 Databricks Assistant 會自動為您產生篩選。

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

使用數據集建立視覺效果

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

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

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

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

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

請參閱 建立新的視覺效果

使用 Python 連結庫探索和可視化數據

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

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

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

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

輸出:

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

洞見:

數據列 country 包含各種實體,包括世界、高收入國家、亞洲和美國,這些實體並不總是直接具有可比性。 依區域篩選數據可能更有用。

假設您想要將調查重點放在 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 工作區的指示,請參閱 匯入筆記本

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

取得筆記本

後續步驟

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

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