第二章:数据可视化
开始之前,导入numpy、pandas包和数据
# 加载所需的库
#导入result.csv这个文件
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
text = pd.read_csv(r'result.csv')
text.head()
2.7 如何让人一眼看懂你的数据?
《Python for Data Analysis》第九章
2.7.1 任务一:跟着书本第九章,了解matplotlib,自己创建一个数据项,对其进行基本可视化
【思考】最基本的可视化图案有哪些?分别适用于那些场景?(比如折线图适合可视化某个属性值随时间变化的走势)
【回答】1、柱状图:适合离散的特征值,用于对比多个维度的数值差别,不同的系列指标进行不同的对比区分。
2、雷达图:用以显示独立的数据系列之间,以及某个特定的系列与其他系列的整体之间的关系,必须拥有相同的指标
3、散点图:显示若干数据系列中各数值之间的关系,类似于xy轴,判断两变量之间是否存在某种关联,或者发现数据的分步或者聚合情况
4、树状图:用于表示各个节点之间的上下级关系,同时还能展示每个节点的的值
5、直方图和密度图:适合数值型,可以直观的体现特征变量的分布情况
6、饼图:能够直观的显示出分类数据的占比情况
参考链接:https://blog.csdn.net/jessicaiu/article/details/83780673
2.7.2 任务二:可视化展示泰坦尼克号数据集中男女中生存人数分布情况(用柱状图试试)。
suvived_sex = text.groupby('Sex')['Survived'].sum()
suvived_sex.plot.bar()
plt.title('suvived_sex')
plt.ylabel('Count')
【思考】计算出泰坦尼克号数据集中男女中死亡人数,并可视化展示?如何和男女生存人数可视化柱状图结合到一起?看到你的数据可视化,说说你的第一感受(比如:你一眼看出男生存活人数更多,那么性别可能会影响存活率)。
【回答】
# 计算出泰坦尼克号数据集中男女中死亡人数,并可视化展示
died_sex=text.Sex[text.Survived==0].value_counts(ascending=True)
# sum_sex=text['Sex'].value_counts(ascending=True)
# died_sex=sum_sex-suvived_sex
died_sex.plot.bar()
plt.title('died_sex')
plt.xlabel('Sex')
plt.ylabel('Count')
count_sex = text.groupby('Sex')['Survived'].value_counts(sort=False)
count_sex
count_sex.plot.bar()
plt.ylabel('Count')
通过数据可视化可以得出,女性存活人数相较于男性要多,性别可能是影响存活的因素
2.7.3 任务三:可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图(用柱状图试试)。
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.title('survived_count')
plt.ylabel('Count')
比上图更直观地展现出存活男女的比例
2.7.4 任务四:可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况。(用折线图试试)(横轴是不同票价,纵轴是存活人数
#数据排序
fare_survived = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
fare_survived
fig = plt.figure(figsize=(20, 18))
fare_survived.plot(grid=True)
plt.legend()
Fare Survived
8.0500 0 38
7.8958 0 37
13.0000 0 26
7.7500 0 22
26.0000 0 16
..
20.2500 1 1
0 1
18.7875 1 1
0 1
15.0500 0 1
Name: Survived, Length: 330, dtype: int64
#排序之前
fare_survived = text.groupby(['Fare'])['Survived'].value_counts()
fare_survived
fig = plt.figure(figsize=(20, 18))
fare_survived.plot(grid=True)
plt.legend()
2.7.5 任务五:可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况。(用柱状图试试)
pclass_survived = text.groupby(['Pclass'])['Survived'].value_counts()
pclass_survived
pclass_survived.unstack().plot.bar()
plt.ylabel('Count')
#另一种方法用seaborn catplot画图
sns.catplot(x="Pclass", hue="Survived", kind="count", data=text)
【思考】看到这个前面几个数据可视化,说说你的第一感受和你的总结
【回答】一等舱的存活率更高
2.7.6 任务六:可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况。(不限表达方式)
facet = sns.FacetGrid(text, hue="Survived",aspect=3) # 先sns.FacetGrid画出轮廓,子集变量为"Survived",横纵轴比为3
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, text['Age'].max()))
facet.add_legend()
从图中可以看出,0-10岁的儿童获救率更高,高于成人,60-80岁的老人存活率较低,可以推测出老人可能因为行动不便,难以获得求生机会
2.7.7 任务七:可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况。(用折线图试试)
age_facet = sns.FacetGrid(text, hue="Pclass",aspect=1.5)
age_facet.map(sns.kdeplot,'Age')
age_facet.add_legend()
age_facet.set_ylabels('Density')
参考链接:https://blog.csdn.net/weixin_42398658/article/details/82960379
【思考】上面所有可视化的例子做一个总体的分析,你看看你能不能有自己发现
【回答】1、女性存活率高于男性
2、头等舱存活率高
3、0-10岁存活率高于60岁以上的
【总结】可视化要结合数据的特点和目标来选择合适的图。比如说连续型的,如年龄、费用可以选择折线图;研究相互关系可以考虑用散点图,可以直观看出线性关系;涉及男女比例的可以选用柱状图。