r036_logo
資料科學
2025-04-21

資料科學基礎-2:探索性資料分析 (Exploratory Data Analysis)

探索性資料分析 (Exploratory Data Analysis)?

EDA 的主要目的是幫助在做出任何分析之前,先查看與了解數據。它可以幫助識別資料中的規律特性,檢測異常值或異常事件,找到變數之間的有趣關係 [1]。

目標:

  • 理解資料的結構與特性
  • 找出資料中的模式、趨勢與異常
  • 總結分析一些有意義的資訊

環境套件

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns

Pandas 前處理

使用 pandas 將 CSV 檔案讀取並轉換成 DataFrame,並且指定欄位名稱,方便後續資料操作與分析

columns = ["sepal_length", "sepal_width", "petal_length", "petal_width", "class"] df = pd.read_csv("../Dataset/iris/iris.data", header=None, names=columns) print("Pandas DataFrame 物件型態", type(df)) print(df.head())

從 DataFrame 確認集料集狀況

Pandas DataFrame 物件型態 <class 'pandas.core.frame.DataFrame'> sepal_length sepal_width petal_length petal_width class 0 5.1 3.5 1.4 0.2 Iris-setosa 1 4.9 3.0 1.4 0.2 Iris-setosa 2 4.7 3.2 1.3 0.2 Iris-setosa 3 4.6 3.1 1.5 0.2 Iris-setosa 4 5.0 3.6 1.4 0.2 Iris-setosa

直方圖 (Histogram)

直方圖針對四種特徵值的分佈狀態,x軸為特徵的數值,y軸則是該參數的數量,以視覺化方式呈現。

直方圖特性:

  • 是否呈現常態分佈(鐘型)
  • 是否有偏態(左偏、右偏)
  • 數值範圍
# 每個特徵的直方圖 df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']].hist(bins=20, figsize=(10, 8)) plt.tight_layout() plt.show()

iris_Histogram 重構節點 Renode

資料分析總結

從直方圖可以看到萼片長度(sepal_length)呈現一個常態分佈,且在發現三種較多的分布區間,分別是4.95.66.3

萼片寬度(sepal_width)呈現一個常態分佈,且在 3.0 呈現最多數

花瓣長度(petal_length)在 1.5 區間呈現最多數,2 ~ 3 區間有明顯分割,且在 3 ~ 7 之間呈現一個常態分佈。

花瓣寬度(petal_width)與長度呈現狀態類似,在 0.1 呈現最多數,0.5 ~ 1.0 區間有明顯分割,且其他多集中在在1.31.82.2

總體上可以觀察出萼片的長寬都屬於常態分佈,只要較少的數量呈現極端的尺寸

花瓣的長寬則呈現許多區間,而有些區間的參數己乎不存在,最多分佈則集中在最小尺寸上

箱型圖(Box Plot)

箱型圖主要是利用統計學中四分位數的方法來繪製,從箱型圖中可以觀察參數分佈,例如最大值、最小值、平均值、離峰值、四分位數 (Quartile)。

四分位數

  • Q1 (第一四分位數):第 25% 的位置
  • Q2 (第二四分位數):第 50% 的位置
  • Q3 (第三四分位數):第 75% 的位置
  • IQR (四分位距):衡量資料中間 50% 的分散程度 IQR=Q3Q1IQR = Q3 - Q1

箱型圖的組成

箱體 (Box)

  • 下邊界 = Q1
  • 上邊界 = Q3
  • 箱體高度 = IQR (四分位距)

箱體中的線 表示 Q2 (中位數)

鬍鬚 (Whiskers) 延伸到不超過範圍的最大值與最小值
範圍定義:
- 下界 Q11.5×IQRQ1 - 1.5 \times IQR
- 上界 Q3+1.5×IQRQ3 + 1.5 \times IQR

離群值 (Outliers) 超出上下界的數據點,通常以小圓點或星號標示

# 每個特徵的箱型圖 plt.figure(figsize=(10, 8)) sns.boxplot(data=df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]) plt.show()

iris_BoxPlot 重構節點 Renode

資料分析總結

在萼片寬度(sepal_width)中發現四個離群值(Outliers),三個離群值在上鬍鬚(Upper Whisker),一個離群值在下鬍鬚(Lower Whisker),以及萼片寬度整體的參數變動範圍不大

而在花瓣長度(petal_length)的參數中,整體的變化區間很大

特徵對關係圖(Pairplot)

特徵對關係圖用於探索數據集中多個特徵之間關係,每個特徵為單變量分布圖,再非對角的特徵關聯,這是一個二維關係,可以用來找出特徵間可能存在集群或分離的關聯。

# 配對圖,視覺化特徵間的關係 sns.pairplot(df, hue="class", diag_kind="hist") plt.show()

iris_Pairplot 重構節點 Renode

資料分析總結

在這個特徵對關係圖(Pairplot)中除了有四個特徵之外,還有iris不同品種類型的顏色區分,有助於區分不同的關係

第一組特徵比對

從萼片寬度(sepal_width)與花瓣寬度(petal_width)的關聯中,對於不同品種的鳶尾花中呈現「明顯分隔」的情況,並且對比上述的箱型圖可以發現,萼片寬度(sepal_width)的離群點三個>4 的值,在這邊呈現在藍色類別標籤,也就是 iris-setosa 品種,可以從這樣的離群值中,判斷這個品種是否存在某種異常特點。

相關矩陣熱圖 (Correlation Matrix Heat map)

使用顏色來表示變數間的相關性強度(strong correlation),顯示強正相關(strong positive correlation)與強負相關(strong negative correlation),能夠迅速理解哪些特徵之間的關係。

# 相關矩陣 correlation = df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']].corr() plt.figure(figsize=(8, 6)) sns.heatmap(correlation, annot=True, cmap="coolwarm", fmt=".2f") plt.show()

iris_CorrelationMatrixHeatmap 重構節點 Renode

特性:

  • +1 表示完全正相關:當一個變數增加時,另一個變數也會隨之增加。
  • 1 表示完全負相關:當一個變數增加時,另一個變數會減少。
  • 0 表示無相關:兩個變數之間沒有線性關係。

資料分析總結

相關矩陣熱圖中表明,花瓣寬度(petal_width)與花瓣長度(petal_length)呈現強正相關高達0.96 ,這表明花瓣長寬的關聯性是非常明顯的正成長。

相比之下,萼片(sepal)長寬與花瓣(peta)長寬卻呈現 -0.42-0.36 的負相關,這表明兩者間存在較低的負向關聯。

這樣從相關矩陣熱圖中得知,萼片與花瓣兩者的長寬成長無關連,這很直關表示萼片與花辦成長參數的關係。

參考文獻

[1] What Is Exploratory Data Analysis (EDA)? (n.d.). IBM. https://www.ibm.com/think/topics/exploratory-data-analysis