一、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")
- 三等舱大多数是二十几岁的青年,头等舱是三十到四十岁的中年
- 年龄越大,高级舱位人数越多:随着年龄的增长,舱位等级在提升
三、总结
数据可视化的作用是让人较快较直观地理解数据要表达的含义,因此对应不同的数据和不同的需求来说,要适当选择对应的统计图,例如折线图适用于展示事物发展的趋势,条形图适用于和数据大小的对比等等。但是这不是绝对的,它们都能展示数据的分布情况,一切以需求为准。