第二章
- 3 数据可视化
- 3.1 如何让人一眼看懂你的数据?
- 3.1.1 了解matplotlib,自己创建一个数据项,对其进行基本可视化
- 3.1.2 可视化展示泰坦尼克号数据集中男女中生存人数分布情况(用柱状图)
- 3.1.3 可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图(用柱状图试试)
- 3.1.4 可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况(用折线图试试)(横轴是不同票价,纵轴是存活人数)
- 3.1.5 可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况(用柱状图试试)
- 3.1.6 可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况(不限表达方式)
- 3.1.7 可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况(用折线图试试)
3 数据可视化
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
#加载result.csv这个数据
df=pd.read_csv('result.csv')
df.head()
Unnamed: 0 | PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
1 | 1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
3 | 3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S |
4 | 4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
3.1 如何让人一眼看懂你的数据?
《Python for Data Analysis》第九章
3.1.1 了解matplotlib,自己创建一个数据项,对其进行基本可视化
【思考】最基本的可视化图案有哪些?分别适用于那些场景?(比如折线图适合可视化某个属性值随时间变化的走势)
思考回答
可视化图案:条形图、散点图、饼图、折线图(还有一系列高级的图形,例如南丁格尔玫瑰图,雷达图,瀑布图,气泡图,箱线图)
1.条形图主要适合差值较大,肉眼较易观察的数据,用于不同数据之间做对比
2.散点图主要适用于需要分类的数据,展示数据的分布和聚合情况
3.饼图适合统计数据在总和的占比,很好的展示个体数据与总体数据的比较情况
4.折线图适用于有一定关联的数据,受其他特征的影响时数据有波动
3.1.2 可视化展示泰坦尼克号数据集中男女中生存人数分布情况(用柱状图)
a = df['Survived'].groupby(df['Sex']).sum()
a.plot.bar(x="sex",color='orange',title="survived_count")
plt.show()
【思考】计算出泰坦尼克号数据集中男女中死亡人数,并可视化展示?如何和男女生存人数可视化柱状图结合到一起?看到你的数据可视化,说说你的第一感受(比如:你一眼看出男生存活人数更多,那么性别可能会影响存活率)。
3.1.3 可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图(用柱状图试试)
# 提示:计算男女中死亡人数 1表示生存,0表示死亡
#unstack:将数据的行索引转换为列索引
b = df.groupby(['Sex','Survived'])['Survived'].count().unstack()
b
Survived | 0 | 1 |
---|---|---|
Sex | ||
female | 81 | 233 |
male | 468 | 109 |
#kind两个参数“barh”横向,“bar”纵向,"kde"为曲线
b.plot(kind="barh",stacked='True')
plt.show()
3.1.4 可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况(用折线图试试)(横轴是不同票价,纵轴是存活人数)
# 计算不同票价中生存与死亡人数 1表示生存,0表示死亡
c=df.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
c.head()
Fare Survived
8.0500 0 38
7.8958 0 37
13.0000 0 26
7.7500 0 22
26.0000 0 16
Name: Survived, dtype: int64
c.plot()
d=df.groupby(['Fare'])['Survived'].value_counts()
d.plot()
3.1.5 可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况(用柱状图试试)
# 1表示生存,0表示死亡
f=df.groupby('Pclass')['Survived'].value_counts().unstack()
f.plot(title="pclass_survived",kind="bar")
#参考答案
import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=df))
countplot是seaborn库中分类图的一种,作用是使用条形显示每个分箱器中的观察计数
countplot函数中设定的是以x为标签划分统计个数(也就是等级1、2、3),hue是指在x或y标签划分的同时,再以hue标签划分统计个数(survived 0 或 1)
【思考】看到这个前面几个数据可视化,说说你的第一感受和你的总结
思考题回答
通过上面数据可以看出,女性的存活率比男性的要高,而且票价越高,客舱等级越高,相对的存活率也越高。
3.1.6 可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况(不限表达方式)
aspect:每个小图的横轴长度和纵轴的比
内核密度估计 (KDE) 图是一种可视化数据集中观测分布的方法,参数shade填充空白面积
e=sns.FacetGrid(df,hue="Survived",aspect=4)
e.map(sns.kdeplot,'Age',shade= True)
e.set(xlim=(0, df['Age'].max()))
e.add_legend()#绘制图例,在轴外。如图中的survived
3.1.7 可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况(用折线图试试)
df.Age[df.Pclass==1].plot(kind='kde')
df.Age[df.Pclass==2].plot(kind='kde')
df.Age[df.Pclass==3].plot(kind='kde')
plt.xlabel("age")
plt.legend((1,2,3),title='pclass')
【思考】上面所有可视化的例子做一个总体的分析,你看看你能不能有自己发现?
思考题回答
可以看到年龄在0到10这个范围的存活率更大,侧面说明逃生舱上儿童占比较大,年轻个体的死亡人数比存活人数多,70岁的死亡人数明显多于存活人数。仓位等级低的年轻人更多,说明年轻人所花费的票价也低。