note
- matplotlib的四个容器:
- Figure:顶层级,用来容纳子 Axes,一组具体绘图元素和画布(canvas)。 画板。
- Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成。 子图。
- Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素。 子图的坐标轴、网格
- Tick:axis的下属层级,用来处理所有和刻度有关的元素。 坐标轴的刻度。
- 通过
matplotlib.plot
函数可以绘制曲线(折线),每个plot
函数对应一条曲线。
文章目录
- note
- 一、matplotlib基础使用
- 二、任务
- 2.1 男女中生存人数分布情况
- 2.2 男女中生存人与死亡人数的比例图
- 2.3 不同票价的人生存和死亡人数分布情况
- 2.5 不同仓位等级的人生存和死亡人员的分布情况
- 2.6 不同年龄的人生存与死亡人数分布情况
- 2.7 不同仓位等级的人年龄分布情况
- 三、其他数据可视化模块
- 时间安排
- Reference
一、matplotlib基础使用
(1)primitives 和 container的区别和联系:分别用于控制可视化图表中的哪些要素
相当于:container是画板,primitives是画板上的画;
primitive是基本要素,它包含一些我们要在绘图区作图用到的标准图形对象,如曲线Line2D,文字text,矩形Rectangle,图像image等。
container是容器,即用来装基本要素的地方,包括图形figure、坐标系Axes和坐标轴Axis。
(2)四个容器的联系和区别是么?他们分别控制一张图表的哪些要素?
- Figure:顶层级,用来容纳子 Axes,一组具体绘图元素和画布(canvas)。 画板。
- Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成。 子图。
- Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素。 子图的坐标轴、网格
- Tick:axis的下属层级,用来处理所有和刻度有关的元素。 坐标轴的刻度。
最简单的设置图片的宽度和高度方式:
plt.figure(figsize=(n, n))
二、任务
2.1 男女中生存人数分布情况
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
text = pd.read_csv(r'result.csv')
# text.columns
# Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
# 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
# dtype='object')
text.head()
sex = text.groupby('Sex')['Survived'].sum()
sex.plot.bar()
plt.title('survived_count')
plt.show()
根据性别groupby分组然后sum统计Survived
列。
2.2 男女中生存人与死亡人数的比例图
stack
是将列属性转为行索引,而unstack
则是相反,将花括号结构转为常规的初始化结构。
# 提示:计算男女中死亡人数 1表示生存,0表示死亡
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
# unstack的作用
plt.title('survived_count')
plt.ylabel('count')
分析:上图显示女性群体中存活比例,比男性群体存活比例高;船上男性人数是女性的将近2倍。
2.3 不同票价的人生存和死亡人数分布情况
# 计算不同票价中生存与死亡人数 1表示生存,0表示死亡
fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
# 排序后绘折线图
fig = plt.figure(figsize=(4, 4))
# fig = plt.figure(figsize=(20, 18))
fare_sur.plot(grid=True)
plt.legend()
plt.show()
可以看到是先统计每个票价对应的生存人数得到fare_sur
,然后绘制折线图。
如果我们没有排序sort_values
,柱状图:
fare_sur1 = text.groupby(['Fare'])['Survived'].value_counts()
fig = plt.figure(figsize=(4, 4))
# fig = plt.figure(figsize=(20, 18))
fare_sur1.plot(grid=True)
plt.legend()
plt.show()
2.5 不同仓位等级的人生存和死亡人员的分布情况
和上面一样操作,先分组:
# 1表示生存,0表示死亡
pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()
pclass_sur
这里可以使用seaborn
库进行可视化,从下图可视化图,看出第三类仓位的遇难人数非常多,第一类仓位的存活人数比遇难人数更多;第一类高级仓位也是三个仓位中,唯一一个仓位是存活人数更多的。
官网对
seaborn.countplot
的解释:seaborn.countplot(x =无,y =无,hue =无,数据=无,顺序=无,hue_order =无,orient =无,color =无,palette = None,饱和度= 0.75,dodge = True,ax = None,* * kwargs )
countplot
是seaborn库中分类图的一种,能使用条形现实每个分箱器中的观察计数。countplot
的参数hue
标签可以继续划分,进行统计个数。
import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=text)
2.6 不同年龄的人生存与死亡人数分布情况
seaborn.FaceGrid
函数的基本流程:使用数据集和用于构造网络的变量来初始化对象,通过FacetGrid.map
将一个or多个绘图函数应用于每个子集FacetGrid.map_dataframe()
,然后进行更改轴标签or添加图例等操作:
fg = (
sns.FacetGrid(data = Totaldata, hue = 'label' , col = 'index', row = 'row', height = 2.5, aspect = 1.25)
.map(probscale.probplot, 'y', marker='.', markersize=0.005, )
.set_axis_labels(x_var='X', y_var = 'Y')
.add_legend()
)
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()
分析:从上图中看出遇难群体中,24岁人群是众数;存活群体中,28岁人群是众数;在60-80岁的高龄群体中,看出遇难人数比存活人数更多,也有可能是这群老人逃生不方便;在0-14岁小孩群体中,存活人数相对比遇难人数多得多,看出在船上逃生很多人把生存机会优先让给小孩了。
2.7 不同仓位等级的人年龄分布情况
通过matplotlib.plot
函数可以绘制曲线(折线),每个plot
函数对应一条曲线。
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")
三、其他数据可视化模块
可以继续尝试pyecharts,bokeh等模块。
时间安排
任务 | 任务内容 | 时间 | 完成情况 |
---|---|---|---|
- | 1月16日周一开始 | ||
Task01: | 数据加载及探索性数据分析(第一章第1,2,3节)(2天) | 16-17日周二 | 完成 |
Task02: | 数据清洗及特征处理(第二章第1节)(2天) | 18-19日周四 | 完成 |
Task03: | 数据重构(第二章第2,3节)(2天) | 20-21日周六 | 完成 |
Task04: | 数据可视化(第二章第4节)(2天) | 22-23日周一 | 完成 |
Task05: | 数据建模及模型评估(第三章第1,2节)(3天) | 24-26日周四 |
Reference
[1] https://github.com/datawhalechina/hands-on-data-analysis
[2] https://github.com/yizhen20133868/Plot-Pictures-Tutorial-for-Paper
[3] matplotlib之折线图(代码+解析)
[4] http://seaborn.pydata.org/api.html