首页 >后端开发 >Python教程 >使用 Python 进行探索性数据分析 (EDA):从数据中揭示洞察

使用 Python 进行探索性数据分析 (EDA):从数据中揭示洞察

Barbara Streisand
Barbara Streisand原创
2025-01-03 02:02:37827浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn