資料科學基礎-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()
資料分析總結
從直方圖可以看到萼片長度(sepal_length)呈現一個常態分佈,且在發現三種較多的分布區間,分別是4.9
、5.6
、6.3
。
萼片寬度(sepal_width)呈現一個常態分佈,且在 3.0
呈現最多數
花瓣長度(petal_length)在 1.5
區間呈現最多數,2 ~ 3
區間有明顯分割,且在 3 ~ 7
之間呈現一個常態分佈。
花瓣寬度(petal_width)與長度呈現狀態類似,在 0.1
呈現最多數,0.5 ~ 1.0
區間有明顯分割,且其他多集中在在1.3
、1.8
、2.2
。
總體上可以觀察出萼片的長寬都屬於常態分佈,只要較少的數量呈現極端的尺寸
花瓣的長寬則呈現許多區間,而有些區間的參數己乎不存在,最多分佈則集中在最小尺寸上
箱型圖(Box Plot)
箱型圖主要是利用統計學中四分位數的方法來繪製,從箱型圖中可以觀察參數分佈,例如最大值、最小值、平均值、離峰值、四分位數 (Quartile)。
四分位數
- Q1 (第一四分位數):第 25% 的位置
- Q2 (第二四分位數):第 50% 的位置
- Q3 (第三四分位數):第 75% 的位置
- IQR (四分位距):衡量資料中間 50% 的分散程度
箱型圖的組成
箱體 (Box)
- 下邊界 = Q1
- 上邊界 = Q3
- 箱體高度 = IQR (四分位距)
箱體中的線 表示 Q2 (中位數)
鬍鬚 (Whiskers)
延伸到不超過範圍的最大值與最小值
範圍定義:
- 下界
- 上界
離群值 (Outliers) 超出上下界的數據點,通常以小圓點或星號標示
# 每個特徵的箱型圖
plt.figure(figsize=(10, 8))
sns.boxplot(data=df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']])
plt.show()
資料分析總結
在萼片寬度(sepal_width)中發現四個離群值(Outliers),三個離群值在上鬍鬚(Upper Whisker),一個離群值在下鬍鬚(Lower Whisker),以及萼片寬度整體的參數變動範圍不大
而在花瓣長度(petal_length)的參數中,整體的變化區間很大
特徵對關係圖(Pairplot)
特徵對關係圖用於探索數據集中多個特徵之間關係,每個特徵為單變量分布圖,再非對角的特徵關聯,這是一個二維關係,可以用來找出特徵間可能存在集群或分離的關聯。
# 配對圖,視覺化特徵間的關係 sns.pairplot(df, hue="class", diag_kind="hist") plt.show()
資料分析總結
在這個特徵對關係圖(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()
特性:
- +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