【动手学数据分析】 Task04 - 数据可视化

一、matplotlib 库

信息可视化能帮我们找出异常值、进行必要的数据转换、判断选用哪种相关模型,同时也需要数据可交互。

matplotlib是一个用于绘制高质量图表的第三方包,其衍生出了多个数据可视化工具,如 seaborn。综合使用pandas,matplotlib和seaborn 可绘制出较多静态图。

1.1 使用 matplotlib 绘制图像

绘制一个[0, 9]的线图

import matplotlib,pyplot as plt
import numpy as np

# 绘制一个简单的线图
data = np.arange(10)
plt.plot(data)

简单的线图

1.2 Figure和Subplot

matplotlib的图像都位于Figure对象中,使用plt.figure()创建新的对象:

fig = plt.figure()

# 不能使用空Figure绘图,必须用add_subplot创建一个或多个subplot(子图表)
# 绘制2*2的图像
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)

# 此时执行绘图命令,使用的是最后一个用过的subplot(没有则新建),即ax3
plt.plot(np.random.randn(50).cumsum(), 'k--')
# "k--"是⼀个线型选项,⽤于告诉matplotlib绘制⿊⾊虚线图

在这里插入图片描述

1.3 使用 pandas 和 seaborn 绘图

使用matplotlib绘图就相当于 组装零件:图表类型、图例、标题、刻度标签以及其他注解型信息。绘制图像可借助 pandas 和 seaborn 来实现:pandas 自带的方法可简化从DataFrame和Series来绘制图形;Seaborn简化了许多常⻅可视类型的创建。

二、可视化泰坦尼克号数据(分析存活率)

2.1 导入数据

# 导入模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 读入数据
text = pd.read_csv(r'result.csv')

在这里插入图片描述

2.2 分析性别对存活率的影响

sex = text.groupby('Sex')['Survived'].sum()
sex.plot.bar()
plt.title('survived_count')
plt.show()

在这里插入图片描述

  • 女性存活人数高于男性,需要加入总人数来进一步分析存活率
# 计算男女中死亡人数,1-生存,0-死亡
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.title('survived_count')
plt.ylabel('count')

在这里插入图片描述

  • 从上图可看出,女性存活率明显高于男性

2.3 分析不同票价的人的生存率

① 折线图

# 计算不同票价中生存与死亡人数 1表示生存,0表示死亡
# 未排序的折线图
fare_sur = text.groupby(['Fare'])['Survived'].value_counts()
fig = plt.figure(figsize=(20, 18))
fare_sur.plot(grid=True)
plt.legend()
plt.show()

未排序

# 计算不同票价中生存与死亡人数 1表示生存,0表示死亡
fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)

# 绘制按存活人数排序后的折线图
fig = plt.figure(figsize=(20, 10))
fare_sur.plot(grid=True)
plt.legend()
plt.show()

折线图

  • 此处使用排序后的折线图能更好地看出存活人数随票价的 变化趋势

② 柱状图

# 按照舱位等级和存活类型分类
# 1-生存,0-死亡
pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()

import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=text)

柱状图

  • 使用条形统计图分类展示,可以清晰观察到同一类别下多种状态之间和不同类别之间数值的 对比
  • 从结果上来看,舱位等级越低的乘客越不容易存活

2.4 不同年龄段存活的分布情况

核密度估计(kernel density estimation)1,对应seaborn的 kdeplot() 函数

import seaborn as sns

facet = sns.FacetGrid(text, hue="Survived",aspect=3)
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, text['Age'].max()))
facet.add_legend()

在这里插入图片描述

2.5 不同舱位等级的人年龄分布情况

text.Age[text.Pclass == 1].plot(kind='kde')
text.Age[text.Pclass == 2].plot(kind='kde')
text.Age[text.Pclass == 3].plot(kind='kde')
plt.xlabel("age")
plt.legend((1,2,3),loc="best")

在这里插入图片描述

  • 三等舱大多数是二十几岁的青年,头等舱是三十到四十岁的中年
  • 年龄越大,高级舱位人数越多:随着年龄的增长,舱位等级在提升

三、总结

数据可视化的作用是让人较快较直观地理解数据要表达的含义,因此对应不同的数据和不同的需求来说,要适当选择对应的统计图,例如折线图适用于展示事物发展的趋势,条形图适用于和数据大小的对比等等。但是这不是绝对的,它们都能展示数据的分布情况,一切以需求为准。


  1. 什么是核密度估计?如何感性认识?- 知乎 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beta Lemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值