首頁 > 後端開發 > Python教學 > 使用 Python 進行探索性資料分析 (EDA):從資料中揭示洞察

使用 Python 進行探索性資料分析 (EDA):從資料中揭示洞察

Barbara Streisand
發布: 2025-01-03 02:02:37
原創
824 人瀏覽過

EXPLORATORY DATA ANALYSIS (EDA) WITH PYTHON: UNCOVERING INSIGHTS FROM DATA

使用 Python 進行探索性資料分析 (EDA):從資料中揭示洞察。

簡介
探索性資料分析 (EDA) 在資料分析中至關重要,因為它使分析師能夠發現見解並為進一步建模準備資料。在本文中,我們將深入探討 Python 中可用的各種 EDA 技術和工具,以增強您對資料的理解。從清理/處理資料集到視覺化您的發現以及使用 Python 用資料講述故事。

什麼是探索性資料分析?

探索性資料分析(EDA)是一種分析資料集以了解其主要特徵的方法。它涉及總結數據特徵、檢測模式以及透過視覺和統計技術揭示關係。 EDA 有助於獲得見解並提出假設以進行進一步分析。

Python 中的探索性資料分析 (EDA) 採用了各種對於從資料中發現見解至關重要的技術。基本技術之一涉及使用 Matplotlib 和 Seaborn 等庫的資料視覺化。這些工具允許資料科學家創建不同類型的繪圖,包括散點圖、直方圖和箱線圖,這對於理解資料集中的分佈和關係至關重要。

透過視覺化數據,分析師可以識別僅透過數值分析可能不明顯的趨勢、異常值和模式。

EDA 中的另一個關鍵技術是資料清理和操作,主要由 Pandas 函式庫提供支援。這涉及透過處理缺失值、過濾資料和使用聚合函數來總結見解來處理資料集。 「groupby」等功能的應用使用戶能夠將資料劃分為有意義的類別,從而有助於更清晰的分析。此外,結合相關分析等統計方法可以進一步了解變數之間的關係,有助於制定可以在更結構化的分析中進行測試的假設。

如何使用 Python 進行 EDA

第 1 步:匯入 Python 函式庫

使用 python 進行機器學習的第一步是使用函式庫來理解和處理我們的資料。您可以使用此連結在 Kaggle 網站上取得資料集:https://www.kaggle.com/datasets/sukhmanibedi/cars4u
導入我們分析所需的所有庫,例如資料載入、統計分析、視覺化、資料轉換以及合併和連接的庫。

Pandas 和 Numpy 已用於資料運算和數值計算
Matplotlib 和 Seaborn 已被用於資料視覺化。
代碼:
將 pandas 導入為 pd
將 numpy 匯入為 np
將 matplotlib.pyplot 導入為 plt
將seaborn導入為sns
忽略警告
導入警告
warnings.filterwarnings('忽略')

第 2 步:讀取資料集

python Pandas 函式庫提供了多種將資料從映像、.csv、.xlsx、.sql、.pickle、.html、.txt 等檔案載入到 pandas DataFrame 的可能性
大多數數據都以 CSV 檔案的表格格式提供。它既時尚又易於訪問。使用 read_csv() 函數,可以將資料轉換為 pandas DataFrame。
本文以預測二手車價格的數據為例。在此資料集中,我們嘗試分析二手車的價格以及 EDA 如何專注於識別影響汽車價格的因素。我們已將資料儲存在 DataFrame 資料中。
data = pd.read_csv("used_cars.csv")

分析數據

在做出任何推論之前,我們透過檢查資料中的所有變數來聽取資料。
資料理解的主要目標是獲得有關資料的一般見解,其中包括行數和列數、資料中的值、資料類型和資料集中的缺失值。
shape – 形狀將顯示資料集中的觀察數(行)和特徵數(列)
我們的資料集中有 7253 個觀測值和 14 個變數
head() 將顯示資料集的前 5 個觀測值
data.head()

tail() 將顯示資料集的最後 5 個觀測值
data.tail()
info() 有助於了解資料類型和資料的信息,包括每列的記錄數、資料是否為空、資料類型、資料集的記憶體使用量

data.info()
data.info() 顯示變數 Mileage、Engine、Power、Seats、New Price 和 Price 有缺失值。里程、功率等數字變數的資料類型為: float64 和 int64。 Location、Fuel_Type、Transmission 和 Owner Type 等分類變數屬於物件資料類型。

檢查是否重複

nunique() 根據每列中的幾個唯一值和資料描述,我們可以識別資料中的連續列和分類列。重複的數據可以根據進一步分析進行處理或刪除。
data.nunique()

https://www.analyticsvidhya.com/blog/2022/07/step-by-step-exploratory-data-analysis-eda-using-python/

缺失值計算

isnull() 廣泛應用於所有預處理步驟中,用於識別資料中的空值
在我們的範例中,data.isnull().sum() 用於取得每列中缺少的記錄數
data.isnull().sum()

下面的程式碼有助於計算每個欄位中缺失值的百分比
(data.isnull().sum()/(len(data)))*100

New_Price 和 Price 欄位的缺失值百分比分別為 ~86% 和 ~17%。

第 3 步:資料縮減

如果某些欄位或變數無法為我們的分析增加價值,則可以刪除它們。
在我們的資料集中,S.No 欄位只有 ID 值,假設它們沒有任何預測因變數的能力。

刪除 S.No.資料列

data = data.drop(['S.No.'], axis = 1)
data.info()

我們開始特徵工程,因為我們需要添加一些分析所需的欄位。

第四步:特徵工程

特徵工程是指在使用機器學習或統計建模建立預測模型時,使用領域知識從原始資料中選擇和轉換最相關變數的過程。特徵工程的主要目標是從原始資料創建有意義的資料。

第 5 步:建立特徵

我們將使用資料集中的變數 Year 和 Name。如果我們看到樣本數據,「年份」列顯示了汽車的製造年份。
如果採用年份格式,則很難找到汽車的年齡,因為汽車的年齡是汽車價格的影響因素。
推出新欄位「Car_Age」以了解汽車的年齡
從日期時間匯入日期
日期.今天().年
data['Car_Age']=date.today().year-data['年份']
data.head()

因為在我們目前的數據中,汽車名稱並不能很好地預測價格。但我們可以處理此列,以使用品牌和型號名稱提取重要資訊。讓我們拆分名稱並引入新變數“品牌”和“型號”
data['Brand'] = data.Name.str.split().str.get(0)
data['Model'] = data.Name.str.split().str.get(1) data.Name.str.split().str.get(2)
data[['名稱','品牌','型號']]

第 6 步:資料清理/整理
有些變數的名稱不相關且不易理解。有些資料可能存在資料輸入錯誤,有些變數可能需要資料類型轉換。我們需要在數據中解決這個問題。
在範例中,品牌名稱「Isuzu」、「ISUZU」、「Mini」和「Land」看起來不正確。

這個需要修正

印(data.Brand.unique())
print(data.Brand.nunique())
searchfor = ['五十鈴' ,'五十鈴','迷你','陸地']
data[data.Brand.str.contains('|'.join(searchfor))].head(5)
data["Brand"].replace({"ISUZU": "Isuzu", "Mini": "Mini Cooper","Land":"Land Rover"}, inplace=True)
我們已經完成了基礎資料分析、特徵分析和資料清理。

讓我們進入 EDA 流程

了解探索性資料分析的基礎:https://www.analyticsvidhya.com/blog/2021/11/fundamentals-of-exploratory-data-analysis/

第 7 步:EDA 探索性資料分析

探索性資料分析是指借助匯總統計資料和圖形表示對資料進行初步調查以發現模式以檢查假設的關鍵流程。

• EDA 可用於檢查給定資料中的異常值、模式和趨勢。

• EDA 有助於發現資料中有意義的模式。

• EDA 提供對資料集的深入洞察,以解決​​我們的業務問題。

• EDA 提供了估算資料集中缺失值的線索

第 8 步:統計摘要

資訊對數據進行了快速簡單的描述。
可以包括計數、平均值、標準差、中位數、眾數、最小值、最大值、範圍、標準差等

統計摘要給出了一個高層次的想法,以識別資料是否有異常值、資料輸入錯誤、資料的分佈,例如資料是常態分佈還是左/右偏

在Python中,這可以使用describe()來實現
describe() 函數給出資料的所有統計摘要
描述() ; 提供屬於數值資料型態(如 int、float)的資料的統計摘要
data.describe().T

從統計摘要中,我們可以推論出以下結果:
• 年份範圍為 1996 年至 2019 年,範圍較高,表示二手車包含最新型號和舊型號汽車。

• 二手車的平均行駛公里數約為 58,000 公里。此範圍顯示最小值和最大值之間存在巨大差異,因為最大值顯示 650000 KM 顯示了異常值的證據。該記錄可以刪除。

• 里程最小值顯示 0 輛車不會以 0 里程出售。這聽起來像是資料輸入問題。
• 看起來引擎和動力有異常值,且資料右偏。

•一輛車的平均座位數為5個。汽車座椅是價格貢獻的重要特徵。

• 二手車的最高價格是16萬,這對二手車來說是很奇怪的,這麼高的價格。可能有異常值或資料輸入問題。

describe(include='all') 提供所有資料的統計摘要,包括物件、類別等
data.describe(include='all')

在進行 EDA 之前,讓我們將 Numerical 和 calcategories 變數分開以便於分析
cat_cols=data.select_dtypes(include=['object']).columns
num_cols = data.select_dtypes(include=np.number).columns.tolist()
print("分類變數:")
列印(cat_cols)
print("數值變數:")
印出(num_cols)
另外,請閱讀 Excel 和表格中的標準差一文 https://www.analyticsvidhya.com/blog/2024/06/standard-deviation-in-excel/

第 9 步:EDA 單變量分析
透過一次取得一個變數來分析/視覺化資料集:
資料視覺化至關重要;我們必須決定繪製哪些圖表以更好地理解資料。在本文中,我們使用 Matplotlib 和 Seaborn 函式庫來視覺化我們的資料。
Matplotlib 是一個 Python 2D 繪圖庫,用於繪製基本圖表..
Seaborn 也是一個建立在 Matplotlib 之上的 Python 函式庫,它使用短行程式碼從 Pandas 和 Numpy 建立和設計統計圖
可以對分類變數和數值變數進行單變量分析。

可以使用計數圖、長條圖、圓餅圖等來視覺化分類變數。
數值變數可以使用直方圖、箱線圖、密度圖等視覺化

在我們的範例中,我們使用直方圖和箱線圖對連續變數進行了單變量分析。
在下圖中,直方圖和箱線圖用於顯示變數的模式,因為某些變數具有偏度和異常值。

對於 num_cols 中的欄位:
列印(分欄)
print('傾斜:', round(data[col].skew(), 2))
plt.figure(figsize = (15, 4))
plt.subplot(1, 2, 1)
數據[col].hist(grid=False)
plt.ylabel('計數')
plt.subplot(1, 2, 2)
sns.boxplot(x=data[col])
plt.show()

價格和行駛公里數對於要轉換的資料是右偏的,並且在使用計數圖視覺化插補分類變數期間將處理所有異常值。分類變數提供了影響汽車價格的因素模式。
無花果, 軸 = plt.subplots(3, 2, 無花果大小 = (18, 18))
Fig.suptitle('資料集中所有分類變數的長條圖')
sns.countplot(ax = axis[0, 0], x = 'Fuel_Type', data = 資料, color = '藍色',
order = data['Fuel_Type'].value_counts().index);
sns.countplot(ax = axis[0, 1], x = '傳輸', data = 資料, color = '藍色',
order = data['Transmission'].value_counts().index);
sns.countplot(ax =axes[1, 0], x = 'Owner_Type', data = 資料, color = '藍色',
order = data['Owner_Type'].value_counts().index);
sns.countplot(ax =axes[1, 1], x = '位置', data = 資料, color = '藍色',
order = data['Location'].value_counts().index);
sns.countplot(ax =axes[2, 0], x = '品牌', data = 資料, color = '藍色',
order = data['Brand'].head(20).value_counts().index);
sns.countplot(ax = axis[2, 1], x = '模型', data = 資料, color = '藍色',
order = data['Model'].head(20).value_counts().index);
axis[1][1].tick_params(labelrotation=45);
軸[2][0].tick_params(labelrotation=90);
軸[2][1].tick_params(labelrotation=90);

從計數圖中,我們可以得到以下觀察結果
• 孟買的可供購買汽車數量最多,其次是海得拉巴和哥印拜陀
• ~53% 的汽車燃料類型為柴油,這表明柴油汽車提供更高的性能
• ~72% 的汽車配備手排變速箱
• ~82% 的汽車是首次擁有的汽車。這說明大部分買家更願意購買首置車
• ~20% 的車屬於 Maruti 品牌,其次是 19% 的車屬於 Hyundai
• WagonR 在所有可供購買的車款中排名第一。

結論:
探索性資料分析 (EDA) 透過檢測異常值、關鍵模式和變數之間的關係來揭示資料集中的見解和知識。它涉及收集、清理和轉換資料以揭示其屬性。
快樂閱讀,讓我們一起探索資料科學的未來...

以上是使用 Python 進行探索性資料分析 (EDA):從資料中揭示洞察的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板