数据可视化
Joyful Pandas
Datawhale社区 Joyful Pandas
基本绘图
一维数据
- 数值型
- 直方图 plt.hist()
- 箱线图 plt.boxplot()
- 折线图 plt.plot() # 有序数值型
- 类别型
- 柱状图 plt.bar()
- 饼状图 plt.pie()
动手学数据分析
Datawhale社区 动手学数据分析
2 第二章:数据可视化
开始之前,导入numpy、pandas以及matplotlib包和数据
import numpy as np
import pandas as pd
import matplotlib.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 | 0.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 | 0.0 | PC 17599 | 71.2833 | C85 | C |
2 | 2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0.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 | 0.0 | 113803 | 53.1000 | C123 | S |
4 | 4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0.0 | 0.0 | 373450 | 8.0500 | NaN | S |
2.7 如何让人一眼看懂你的数据?
《Python for Data Analysis》第九章
2.7.1 任务一
跟着书本第九章,了解matplotlib,自己创建一个数据项,对其进行基本可视化
【思考】最基本的可视化图案有哪些?分别适用于那些场景?(比如折线图适合可视化某个属性值随时间变化的走势)
该部分参考内容自datawhale开源内容 fantastic-matplotlib
matplotlib提供了两种最常用的绘图接口
-
显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)
-
依赖pyplot自动创建figure和axes,并绘图
fig, ax = plt.subplots()
ax.plot([1,2,3,4], [1,4,2,3])
plt.show()
plt.plot([1,2,3,4], [1,4,2,3]);
在jupyter notebook中使用matplotlib时会发现,代码运行后自动打印出类似<matplotlib.lines.Line2D at 0x23155916dc0>
这样一段话,这是因为matplotlib的绘图代码默认打印出最后一个对象。如果不想显示这句话,有以下三种方法:
-
在代码块最后加一个分号
;
-
在代码块最后加一句
plt.show()
-
在绘图时将绘图对象显式赋值给一个变量,如将plt.plot([1, 2, 3, 4]) 改成
line =plt.plot([1, 2, 3, 4])
2.7.2 任务二
可视化展示泰坦尼克号数据集中男女中生存人数分布情况(用柱状图试试)。
#代码编写
sex_survived = df.groupby('Sex')['Survived'].sum()
_ = plt.bar(sex_survived.index, sex_survived.values)
【思考】计算出泰坦尼克号数据集中男女中死亡人数,并可视化展示?如何和男女生存人数可视化柱状图结合到一起?看到你的数据可视化,说说你的第一感受(比如:你一眼看出男生存活人数更多,那么性别可能会影响存活率)。
#思考题回答
女性的存活人数远多于男性
2.7.3 任务三
可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图(用柱状图试试)。
#代码编写
# 提示:计算男女中死亡人数 1表示生存,0表示死亡
radio_ss = df.groupby(['Sex','Survived'])['Survived'].count().unstack()
radio_ss
Survived | 0 | 1 |
---|---|---|
Sex | ||
female | 81 | 233 |
male | 468 | 109 |
索引透视:将行索引转换为列索引,
unstack()
:默认将行索引最内侧移动到列索引最内层
radio_ss.plot(kind = 'bar', stacked = True);
【提示】男女这两个数据轴,存活和死亡人数按比例用柱状图表示
2.7.4 任务四
可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况。(用折线图试试)(横轴是不同票价,纵轴是存活人数)
【提示】对于这种统计性质的且用折线表示的数据,你可以考虑将数据排序或者不排序来分别表示。看看你能发现什么?
#代码编写
# 计算不同票价中生存与死亡人数 1表示生存,0表示死亡
df.groupby(['Fare','Survived'])['Survived'].count().unstack().plot(kind = 'line');
2.7.5 任务五
可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况。(用柱状图试试)
#代码编写
# 1表示生存,0表示死亡
df.groupby(['Pclass', 'Survived'])['Survived'].count().unstack().plot(kind = 'bar', stacked = True);
【思考】看到这个前面几个数据可视化,说说你的第一感受和你的总结
#思考题回答
- 票价高、头等舱存活概率高
- 女性存活概率高
2.7.6 任务六
可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况。(不限表达方式)
#代码编写
df.groupby(['Age','Survived'])['Survived'].count().unstack().plot(kind = 'line');
2.7.7 任务七
可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况。(用折线图试试)
#代码编写
df.groupby(['Age','Pclass'])['Age'].count().unstack().plot(kind = 'line');
【思考】上面所有可视化的例子做一个总体的分析,你看看你能不能有自己发现
#思考题回答
- 年轻人的存活概率比较高
- 中年人也有一定的存活率,结合船舱等级—年龄关系,这部分中年人可能是较为富裕、有一定社会地位,存活率也较高
- 在这些人中,女性的存活概率又普遍高于男性
【总结】
对数据可视化有了基本了解,学会了基本图形的绘制。