基于Python的数据分析与可视化:探索性数据分析(EDA)

04-09 5阅读

在现代数据科学领域,探索性数据分析(Exploratory Data Analysis, EDA)是任何数据科学项目中不可或缺的一部分。EDA的目标是通过统计方法和可视化技术来理解数据的结构、特征、模式以及异常点,从而为后续的建模和决策提供依据。本文将介绍如何使用Python进行EDA,并结合实际代码展示其应用。

什么是EDA?

EDA是一种对数据集进行初步检查的方法,目的是发现数据中的趋势、模式和异常值。通过EDA,我们可以回答以下问题:

数据集中有哪些变量?变量之间的关系是什么?数据是否存在缺失值或异常值?数据分布是否符合预期?

EDA通常包括以下几个步骤:

数据清洗:处理缺失值、重复值和异常值。描述性统计分析:计算均值、中位数、标准差等统计量。数据可视化:使用图表直观地展示数据分布和变量间的关系。

接下来,我们将通过一个具体的例子来演示如何使用Python进行EDA。


数据准备

为了演示EDA的过程,我们使用一个公开的数据集——泰坦尼克号乘客数据集(Titanic Dataset)。该数据集包含了泰坦尼克号沉没事件中乘客的相关信息,例如年龄、性别、舱位等级和生存状态等。

首先,我们需要导入必要的库并加载数据集:

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns# 加载数据集data = pd.read_csv('titanic.csv')# 查看前5行数据print(data.head())

输出结果可能类似于以下内容:

   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked0            1         0       3  ...   7.2500   NaN         S1            2         1       1  ...  71.2833   C85         C2            3         1       3  ...   7.9250   NaN         S3            4         1       1  ...  53.1000  C123         S4            5         0       3  ...   8.0500   NaN         S

从输出中可以看到,数据集包含多个变量,如PassengerId(乘客ID)、Survived(是否幸存)、Pclass(舱位等级)等。


数据清洗

在进行深入分析之前,我们需要对数据进行清洗,以确保数据质量。这包括处理缺失值、删除重复值以及转换数据类型。

检查缺失值

# 检查每列的缺失值数量missing_values = data.isnull().sum()print(missing_values)

输出可能如下所示:

PassengerId      0Survived         0Pclass           0Name             0Sex              0Age             177SibSp            0Parch            0Ticket           0Fare             0Cabin          687Embarked         2dtype: int64

从结果中可以看出,AgeCabinEmbarked列存在缺失值。我们需要根据实际情况决定如何处理这些缺失值。

处理缺失值

对于不同的变量,我们可以采用不同的策略来处理缺失值。例如:

对于Age,可以使用中位数填充。对于Cabin,由于缺失值较多,可以选择直接删除该列。对于Embarked,可以使用众数填充。
# 使用中位数填充 Age 列的缺失值data['Age'].fillna(data['Age'].median(), inplace=True)# 删除 Cabin 列data.drop(columns=['Cabin'], inplace=True)# 使用众数填充 Embarked 列的缺失值data['Embarked'].fillna(data['Embarked'].mode()[0], inplace=True)

删除重复值

# 检查是否有重复值if data.duplicated().any():    data.drop_duplicates(inplace=True)

描述性统计分析

描述性统计分析可以帮助我们了解数据的基本特征。我们可以使用pandasdescribe()函数快速生成数值型变量的统计摘要。

# 计算数值型变量的统计摘要summary_stats = data.describe()print(summary_stats)

输出可能如下所示:

       PassengerId    Survived      Pclass         Age       SibSp  \count   891.000000  891.000000  891.000000  891.000000  891.000000   mean    446.000000    0.383838    2.308642   29.699118    0.523008   std     257.353842    0.486592    0.836071   14.526497    1.102743   min       1.000000    0.000000    1.000000    0.420000    0.000000   25%     223.500000    0.000000    2.000000   20.125000    0.000000   50%     446.000000    0.000000    3.000000   28.000000    0.000000   75%     668.500000    1.000000    3.000000   38.000000    1.000000   max     891.000000    1.000000    3.000000   80.000000    8.000000           Parch        Fare  count  891.000000  891.000000  mean     0.381594   32.204208  std      0.806057   49.693429  min      0.000000    0.000000  25%      0.000000    7.910400  50%      0.000000   14.454200  75%      0.000000   31.000000  max      6.000000  512.329200  

从结果中可以看出,Survived列的均值为0.38,表明约38%的乘客幸存下来。


数据可视化

数据可视化是EDA的重要组成部分,它可以帮助我们更直观地理解数据。我们将使用matplotlibseaborn库进行可视化。

单变量分析

年龄分布

# 绘制年龄分布直方图plt.figure(figsize=(8, 6))sns.histplot(data['Age'], bins=30, kde=True, color='blue')plt.title('Age Distribution')plt.xlabel('Age')plt.ylabel('Frequency')plt.show()

生存状态分布

# 绘制生存状态的柱状图plt.figure(figsize=(6, 4))sns.countplot(x='Survived', data=data, palette='Set1')plt.title('Survival Status')plt.xlabel('Survived (0 = No, 1 = Yes)')plt.ylabel('Count')plt.show()

双变量分析

性别与生存状态的关系

# 绘制性别与生存状态的关系图plt.figure(figsize=(8, 6))sns.countplot(x='Sex', hue='Survived', data=data, palette='Set2')plt.title('Survival by Gender')plt.xlabel('Gender')plt.ylabel('Count')plt.legend(title='Survived', labels=['No', 'Yes'])plt.show()

舱位等级与生存状态的关系

# 绘制舱位等级与生存状态的关系图plt.figure(figsize=(8, 6))sns.barplot(x='Pclass', y='Survived', data=data, palette='Set3')plt.title('Survival Rate by Passenger Class')plt.xlabel('Passenger Class')plt.ylabel('Survival Rate')plt.show()

通过上述EDA过程,我们对泰坦尼克号乘客数据集有了更深入的理解。主要发现包括:

年龄分布呈现右偏态,大部分乘客年龄集中在20至40岁之间。约38%的乘客幸存下来。女性乘客的生存率显著高于男性乘客。高舱位等级(如头等舱)的乘客生存率更高。

EDA不仅帮助我们理解数据,还为后续的建模和预测提供了重要线索。通过结合统计分析和可视化技术,我们可以更有效地挖掘数据中的潜在价值。

希望本文能为你提供一些关于如何使用Python进行EDA的启发!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第12900名访客 今日有19篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!