探索性數據分析(EDA)是了解數據集的關鍵步驟。在EDA中可以執行各種步驟,下文中會我會介紹 4 個主要步驟。其中數據集來自帕爾默群島企鵝數據。數據分析優質社群,等你加入哦~
一、仔細檢查數據
這一步的目的是找出數據集的變量和範圍。它回答諸如"此數據集是否足夠大?"或“它包含多少個特征或行?"等問題。加載數據集後,使用 head() 函數檢查前五行将是了解數據集結構的良好開端,具體操作如下所示。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
#Loading the dataset
penguins_size = pd.read_csv('penguins_size.csv', sep = ",")
penguins_size.head()
print("Shape is: ", penguins_size.shape)
從這裡得出數據集的範圍為(344,7),這意味着存在7個特征和344行,這表示數據集不夠大。為了可視化特征的數據類型,可以使用 info() 函數,如下所示。結果顯示,物種、島嶼和性别是目标,其餘特征是浮動變量。使用 dtypes 也是了解列的數據類型的一種替代方法。
penguins_size.info()
penguins_size.dtypes
二、數據清理
查找缺失值、删除重複項等是探索性數據分析的關鍵步驟。這些值可能會導緻我們的模型最終得出錯誤的結論。僅調查 isnull()是不夠的。例如,在包含心率特征的數據集中,該特征的值不能為 0。在這種情況下,0 也是一個缺失值,需要處理。
有多種方法可以處理數據的缺失值,例如删除包含缺失值的行(如果數據集足夠大并且缺失值的數量不是太多,這是一個選項),插補方法(特征的平均值/中位數)等。
penguins_size.isnull().sum()
如上所示,除島嶼和物種外的所有特征在此數據集中都包含缺失值。因為數據集非常小,所以我選擇将浮點特征的缺失值與相應特征的均值相結合。
penguins_size.value_counts(["sex"])
penguins_size['sex'] = penguins_size['sex'].fillna('MALE')
對于企鵝的性别,在檢查了雌性和雄性值的計數後,将考慮最常見的值,在這種情況下,缺失值将用 "MALE" 進行估算。如上所示,另一個值為".",必須将其歸因或丢棄。在所有缺失值被插補或删除後,我們再次使用 isna () 函數進行檢查,确定沒有遺漏值。
penguins_size.drop(axis = 0, inplace = True, index = 336)
penguins_size.isna().sum()
最後,對于這個部分,需要檢查是否存在任何重複行。
duplicated = penguins_size.duplicated()
print(duplicated.sum())
三、統計洞察
這也是理解數據的一部分。處理缺失值後,可以使用 describe() 函數來獲取數據的平均值、最大值、最小值和标準偏差等信息。此方法還可用于檢測缺失值,例如,如果特征值的最小值在不應為 0 的地方為 0,則 describe()函數有助于處理缺失值。
penguins_size.describe()
通過使用 value_counts() 函數,可以計算對象的唯一值。此外,每個物種的體重平均值可以通過使用 groupby()函數找到。 對于連續特征,此函數在分類和觀察數據方面非常有用。
penguins_size['species'].value_counts()
# Find body mass mean for each species.
mean_bodymass = penguins_size.groupby('species')['body_mass_g'].mean()
mean_bodymass
四、數據可視化
為了更好地可視化數據集,可以使用各種繪圖技術,在下文中簡單介紹幾個。有些圖在可視化分類數據方面效果更好,有些圖則更适合數值數據的可視化。
• 箱形圖
通過顯示數據分布來檢查異常值或理解分類特征與連續特征之間關系的好方法。
如下圖所示,由于沒有數據點分别高于或低于最大值和最小值,因此未檢測到異常值。此外,可以很容易地找到數據點的中位數,因為通過框内的水平線代表的就是中位數。
#Relationship of the culmen length and sex of the penguins.
fig = plt.figure(figsize=(5,8))
ax= sns.boxplot(x = penguins_size.sex, y=penguins_size['culmen_length_mm'],orient="v", palette = "cividis")
plt.title('Culmen_length_mm')
plt.show()
• 直方圖
直方圖用于描述頻率分布。
#Shows us frequency distribution.
fig,axs = plt.subplots(1,4,figsize=(20,6))
axs[0].hist(penguins_size.culmen_depth_mm)
axs[0].set_title('culmen_depth_mm')
axs[0].set_ylabel('Frequency')
axs[1].hist(penguins_size.culmen_length_mm)
axs[1].set_title('culmen_length_mm')
axs[2].hist(penguins_size.flipper_length_mm)
axs[2].set_title('flipper_length_mm')
axs[3].hist(penguins_size.body_mass_g)
axs[3].set_title('body_mass_g')
plt.show()
此外,kdeplot 是可視化數據分布的另一種方法。此圖實際上類似于直方圖,但不是将值放入條柱中,而是繪制一條曲線。
#Used for visualizing the probability density of a continuous var.
sns.kdeplot(penguins_size.flipper_length_mm,color='Cyan')
plt.show()
• 條形圖
在條形圖中,x 軸表示分類變量, y 軸表示數值變量。這就是為什麼條形圖描繪了這兩個變量之間的關系。
plt.figure(figsize=(8,5))
colors = ["cyan","lightblue", "darkblue"]
sns.barplot(x =penguins_size['island'],
y = penguins_size['body_mass_g'], palette = colors)
plt.title('Body Mass of Penguins for different Islands')
plt.show()
通過使用 pandas 函數交叉表,可以分析兩個或多個變量之間的關系。作為說明,下面的條形圖強調了生活在特定島嶼中的特定物種的企鵝數量之間的關系。
pd.crosstab(penguins_size['island'], penguins_size['species']).plot.bar(color=('DarkBlue', 'LightBlue', 'Teal'))
plt.tight_layout()
• 小提琴圖
小提琴圖描述的是數據集的概率密度。由于兩個不同的類别可能具有相同的平均值,在這種情況下觀察小提琴圖會更有用。
在下面的小提琴圖中,夢幻島企鵝體重的平均值在3000到4000克之間,而在比斯科島企鵝體重的平均值大約在4500到5500克之間。
sns.violinplot(x = 'island',y = 'body_mass_g',data = penguins_size, palette="YlOrRd_r")
plt.title('Violin plot')
想要完整代碼的同學可以留言獲取哦~
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!