基于Python的数据分析与可视化:探索性数据分析(EDA)
在现代数据科学领域,探索性数据分析(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
从结果中可以看出,Age
、Cabin
和Embarked
列存在缺失值。我们需要根据实际情况决定如何处理这些缺失值。
处理缺失值
对于不同的变量,我们可以采用不同的策略来处理缺失值。例如:
对于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)
描述性统计分析
描述性统计分析可以帮助我们了解数据的基本特征。我们可以使用pandas
的describe()
函数快速生成数值型变量的统计摘要。
# 计算数值型变量的统计摘要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的重要组成部分,它可以帮助我们更直观地理解数据。我们将使用matplotlib
和seaborn
库进行可视化。
单变量分析
年龄分布
# 绘制年龄分布直方图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的启发!