FakeOrange
预计阅读时间:4分钟2秒

数据分析1.2 —— 利用图表分析及探索性分析

学习如何进行图表分析及探索性分析

0
0

1. 概述

  • 目标:通过 MatplotlibPandas 对表格数据进行EDA,生成常见的统计图,如条形图、折线图、箱线图和散点图。
  • 使用工具

2. 环境准备

首先,确保安装了以下Python库:

pip install matplotlib pandas

3. 数据集

本教程使用经典的 Titanic 数据集,你可以从以下链接下载:

数据集简介

Titanic 数据集包含乘客信息,包括他们的生还状态、年龄、性别、船舱等级等。我们将通过EDA探索不同特征之间的关系。

4. 导入库并加载数据

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

import pandas as pd
import matplotlib.pyplot as plt

# 读取Titanic数据集
df = pd.read_csv('train.csv')

# 查看数据的前几行,notebook中使用不要写print 直接 df.head()作为一个cell的结尾直接显示
print(df.head())

例如:

无print

data/78df2c1f-e442-415d-a382-fa7925af0c4b/085d9e64-334f-4a9b-a35a-4d7ea9439ccdimage.png

有print

data/78df2c1f-e442-415d-a382-fa7925af0c4b/376a7496-22b2-49c4-9f36-1dfbe6ba0cd4image.png

代码说明:

  • pd.read_csv:用于读取CSV文件,返回Pandas的DataFrame对象。

5. 基础数据分析

在进行可视化之前,先做一些简单的基础分析来了解数据。

# 查看数据基本信息(数据类型、缺失值等)
print(df.info())

# 查看数据的描述性统计信息(如均值、标准差、最小值、最大值等)
print(df.describe())

# 检查数据中的空值情况,帮助我们了解哪些特征存在缺失数据
print(df.isnull().sum())

6. 使用 Matplotlib 进行可视化分析

6.1 直方图 - 年龄分布

直方图是探索数值型数据分布的常用方法,我们可以用它来查看乘客的年龄分布。

plt.figure(figsize=(8, 6))  # 设置图形大小
plt.hist(df['Age'].dropna(), bins=30, color='blue', alpha=0.7)  # 绘制年龄的直方图,bin为30,alpha为透明度
plt.title('Age Distribution of Titanic Passengers')  # 添加图像的标题
plt.xlabel('Age')  # x轴标签:年龄
plt.ylabel('Frequency')  # y轴标签:频率
plt.grid(True)  # 添加网格线
plt.show()  # 显示图像

代码说明:

  • plt.hist:绘制直方图,bins参数控制箱的数量,alpha控制颜色透明度。
  • dropna():忽略缺失值。

直方图效果展示:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/750dc156-8ba6-4202-acd8-beb5dd039b92image.png

6.2 条形图 - 各类乘客的幸存情况

我们可以通过条形图查看不同性别、船舱等级的乘客生还率。

# 计算按性别分组的幸存率
survival_by_gender = df.groupby('Sex')['Survived'].mean()

plt.figure(figsize=(6, 4))  # 设置图形大小
survival_by_gender.plot(kind='bar', color=['lightblue', 'lightgreen'], alpha=0.7)  # 绘制条形图,指定颜色和透明度
plt.title('Survival Rate by Gender')  # 添加图像的标题
plt.ylabel('Survival Rate')  # y轴标签:幸存率
plt.grid(True)  # 添加网格线
plt.show()  # 显示图像

代码说明:

  • groupby:按性别分组计算生还率。
  • plot(kind='bar'):绘制条形图。

条形图效果展示:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/24dcc1cb-e7ba-4267-98ff-3c2ce476fdfcimage.png

6.3 箱线图 - 年龄与生还情况的关系

箱线图展示数值分布的统计特征(如中位数、四分位数),适合用来查看数值型变量与分类变量的关系。

plt.figure(figsize=(8, 6))  # 设置图形大小
df.boxplot(column='Age', by='Survived', grid=False)  # 绘制箱线图,按幸存状态分组显示年龄分布
plt.title('Age Distribution by Survival Status')  # 添加图像标题
plt.suptitle('')  # 删除默认的子标题
plt.xlabel('Survived')  # x轴标签:是否幸存
plt.ylabel('Age')  # y轴标签:年龄
plt.show()  # 显示图像

代码说明:

  • boxplot:生成箱线图,by参数指定分组依据。

箱线图效果展示:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/88ae2295-7b16-4475-b8e0-a8bc691bd0eaimage.png

6.4 散点图 - 票价与年龄的关系

散点图用来显示两组数值型数据之间的关系,例如票价和年龄之间的关系。

plt.figure(figsize=(8, 6))  # 设置图形大小
plt.scatter(df['Age'], df['Fare'], alpha=0.5, color='purple')  # 绘制散点图,x轴为年龄,y轴为票价,点的透明度为0.5
plt.title('Scatter Plot of Age vs Fare')  # 添加图像标题
plt.xlabel('Age')  # x轴标签:年龄
plt.ylabel('Fare')  # y轴标签:票价
plt.grid(True)  # 添加网格线
plt.show()  # 显示图像

代码说明:

  • plt.scatter:绘制散点图,alpha 控制点的透明度。

散点图效果展示:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/36850a24-20e8-4df3-b3f4-cb29e6da6c71image.png


6.5 折线图 - 不同船舱等级的生还率

折线图展示变量随时间或类别的变化情况。我们可以通过它查看不同船舱等级的生还率。

# 计算不同船舱等级的幸存率
survival_by_class = df.groupby('Pclass')['Survived'].mean()

plt.figure(figsize=(8, 6))  # 设置图形大小
plt.plot(survival_by_class.index, survival_by_class.values, marker='o', color='red', linestyle='--')  # 绘制折线图,添加圆形标记和虚线
plt.title('Survival Rate by Passenger Class')  # 添加图像标题
plt.xlabel('Passenger Class')  # x轴标签:乘客等级
plt.ylabel('Survival Rate')  # y轴标签:幸存率
plt.grid(True)  # 添加网格线
plt.show()  # 显示图像

代码说明:

  • plt.plot:绘制折线图,marker 指定线条上的标记符号,linestyle 控制线条样式。

折线图效果展示:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/64434588-b6fa-4754-89fd-2193f8384ab4image.png


7. 总结

通过上述教程,你可以使用 Matplotlib.pyplot 轻松实现对表格数据的EDA。我们使用了各种可视化技术(如直方图、条形图、箱线图、散点图、折线图)来探索 Titanic 数据集中的年龄分布、生还情况与性别和船舱等级的关系。

通过这些图表,数据的趋势和特征一目了然,为后续的建模提供了重要依据。例如通过观察Passenger Class 与 目标变量生存率Survival Rate的负相关性,我们可以考量其是否作为后续机器学习的输入变量并推测背后原因。又例如,散点途中年龄与票价并无明显趋势,这两个变量从图上看并无相关性,如果这两个变量同时作为线性回归的输入即不用过多顾虑共线性问题。


评论
Copyright Created by DataER | 沪ICP备2024052789号-5 | 沪公网安备31010402336337号