**复习:**回顾学习完第一章,我们对泰坦尼克号数据有了基本的了解,也学到了一些基本的统计方法,第二章中我们学习了数据的清理和重构,使得数据更加的易于理解;今天我们要学习的是第二章第三节:数据可视化,主要给大家介绍一下Python数据可视化库Matplotlib,在本章学习中,你也许会觉得数据很有趣。在打比赛的过程中,数据可视化可以让我们更好的看到每一个关键步骤的结果如何,可以用来优化方案,是一个很有用的技巧。

2 第二章:数据可视化

开始之前,导入numpy、pandas以及matplotlib包和数据

加载所需的库

import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt#加载result.csv这个数据
 df = pd.read_csv(r’result.csv’)

2.7 如何让人一眼看懂你的数据?

《Python for Data Analysis》第九章

2.7.1 任务一:跟着书本第九章,了解matplotlib,自己创建一个数据项,对其进行基本可视化

【思考】最基本的可视化图案有哪些?分别适用于那些场景?(比如折线图适合可视化某个属性值随时间变化的走势)

R数据可视化手册第二版 数据可视化 第二版_R数据可视化手册第二版


R数据可视化手册第二版 数据可视化 第二版_数据可视化_02


R数据可视化手册第二版 数据可视化 第二版_数据可视化_03

#思考回答
#这一部分需要了解可视化图案的的逻辑,知道什么样的图案可以表达什么样的信号

series和dataframe都有用于生成各类图表的plot方法,默认生成折线图
#1.折线图
fare = df['Fare']
plt.plot(fare)
plt.show()

#2.柱状图
#kind = 'bar' 或者 kind = 'barh'
fare = df['Fare']
fare.plot(kind = 'bar')
plt.show()

3.密度图
#kind = 'kde'
2.7.2 任务二:可视化展示泰坦尼克号数据集中男女中生存人数分布情况(用柱状图试试)。
sex_count = df.groupby('Sex').agg({'Survived':'sum'})
# sex_count.plot.bar() 与下面一行功能相同
sex_count.plot(kind = 'bar')
plt.title('survived_count')
plt.show()

R数据可视化手册第二版 数据可视化 第二版_数据_04


结论:可以看出女性存活人数远高于男性。

1.修改轴坐标( xticks(),yticks() ) xticks(locs, [labels], **kwargs) # Set locations and labels
例1.plt.xticks(x) locs参数为数组参数(array_like, optional),表示x-axis的刻度线显示标注的地方,即ticks放置的地方 第二个参数也为数组参数(array_like,
optional),可以不添加该参数,表示在locs数组表示的位置添加的标签,labels不赋值,在这些位置添加的数值即为locs数组中的数。

例2.plt.xticks(x,()) 当赋予labels的值为空时,则在locs决定的位置上虽然会画出ticks,但不会显示任何值。

例3.plt.xticks(x,
(‘Tom’,‘Dick’,‘Harry’,‘Sally’,‘Sue’,‘Lily’,‘Ava’,‘Isla’,‘Rose’,‘Jack’,‘Leo’,‘Charlie’))
对于labels参数,我们可以赋予其任意其它的值,如人名,月份等等。

2.添加图例( legend() ) plt.legend([‘victims’, ‘survivors’])

3.添加标签( xlable(),ylable() ) plt.xlabel(‘x’,fontsize=font_size) plt.ylabel(‘y’,fontsize=font_size)

4.添加标题(title() ) plt.title(pic_name,fontsize=font_size)

2.7.3 任务三:可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图(用柱状图试试)。
# 提示:计算男女中死亡人数 1表示生存,0表示死亡
df.groupby(['Sex', 'Survived']).agg({'Survived': 'count'}).plot(kind='bar')
plt.title('survived_count')
plt.ylabel('count')
plt.show()

R数据可视化手册第二版 数据可视化 第二版_折线图_05

df.groupby(['Sex', 'Survived']).agg({'Survived': 'count'}).unstack().plot(kind='bar')
plt.title('survived_count')
plt.ylabel('count')
plt.show()

R数据可视化手册第二版 数据可视化 第二版_折线图_06

DataFrame.stack : Pivot a level of the column labels (inverse
operation from unstack).
用于转动一层列标签,stack()和unstack()可实现相反操作。
例如.ss = df.groupby([‘Sex’, ‘Survived’]).agg({‘Survived’: ‘count’})
ss1 = df.groupby([‘Sex’, ‘Survived’]).agg({‘Survived’: ‘count’}).unstack() #默认level=-1
ss2 = df.groupby([‘Sex’, ‘Survived’]).agg({‘Survived’: ‘count’}).unstack(level=0)

df.groupby(['Sex', 'Survived']).agg({'Survived': 'count'}).unstack().plot(kind='bar',stacked='True')
这里的参数stacked='True'是堆叠的意思,和函数stack()没有关系
plt.title('survived_count')
plt.ylabel('count')
plt.legend(['victims', 'survivors'])
plt.show()

R数据可视化手册第二版 数据可视化 第二版_折线图_07

【提示】男女这两个数据轴,存活和死亡人数按比例用柱状图表示

2.7.4 任务四:可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况。(用折线图试试)(横轴是不同票价,纵轴是存活人数)

【提示】对于这种统计性质的且用折线表示的数据,你可以考虑将数据排序或者不排序来分别表示。看看你能发现什么?

value_counts()函数
功能:Return a Series containing counts of unique values.

# 计算不同票价中生存与死亡人数 1表示生存,0表示死亡
fare_sur = df.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
print(fare_survived)
# 绘折线图
fig = plt.figure(figsize=(20, 18))
fare_sur.plot(grid=True)
plt.legend()
plt.show()
2.7.5 任务五:可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况。(用柱状图试试)

方法一:

Pclass_sur = df.groupby('Pclass')['Survived'].value_counts().unstack()
# print(Pclass_sur)
Pclass_sur.plot(kind= 'bar')
plt.legend(['victims', 'survivors'])
plt.show()

R数据可视化手册第二版 数据可视化 第二版_R数据可视化手册第二版_08


方法二:

#了解即可,以matplotlib为主。
#seaborn在matplotlib的基础上进行了更高级的API封装,让你能用更少的代码去调用 matplotlib的方法,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。
import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=df)

R数据可视化手册第二版 数据可视化 第二版_折线图_09

.unstack()函数很实用,功能是用于转动列标签。
注意要与plot(stacked=‘True’)里面的参数stacked区分开,这里的功能是堆叠。

2.7.6 任务六:可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况。(不限表达方式)
密度图
df['Age'][df.Survived == 0].plot(kind='kde')
df['Age'][df.Survived == 1].plot(kind='kde')
plt.legend(['victims', 'survivors'])
# plt.axis([0, df['Age'].max(), 0, 0.04])
plt.xlim([0, df['Age'].max()])
plt.show()

R数据可视化手册第二版 数据可视化 第二版_数据_10

修改坐标轴范围:

1.同时修改x轴和y轴的坐标轴范围
plt.axis([xmin, xmax, ymin, ymax])

2.只需要修改x轴或y轴的坐标轴范围
plt.xlim([xmin, xmax])
plt.ylim([ymin, ymax])

直方图
y1 = df['Age'][df.Survived == 0]
plt.hist(y1, len(y1), color='fuchsia', alpha=0.5)#alpha设置透明度,0为完全透明
y2 = df['Age'][df.Survived == 1]
plt.hist(y2, len(y2),alpha=0.5)
plt.xlim([0, df['Age'].max()])
plt.legend(['victims', 'survivors'])
plt.show()

R数据可视化手册第二版 数据可视化 第二版_数据_11

'''seaborn画的密度图,了解即可
用seaborn画的密度图可以加阴影,matplotlib画的密度图不可以加
但是matplotlib可以修改label'''
import seaborn as sns
facet = sns.FacetGrid(df, hue="Survived",aspect=3)
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, df['Age'].max()))
facet.add_legend()

R数据可视化手册第二版 数据可视化 第二版_数据_12

2.7.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))
plt.show()

R数据可视化手册第二版 数据可视化 第二版_数据可视化_13

【思考】上面所有可视化的例子做一个总体的分析,你看看你能不能有自己发现

18-30岁乘客的遇难人数很高,这与3等仓乘客的年龄分布最为相似。

【总结】到这里,我们的可视化就告一段落啦,如果你对数据可视化极其感兴趣,你还可以了解一下其他可视化模块,如:pyecharts,bokeh等。

如果你在工作中使用数据可视化,你必须知道数据可视化最大的作用不是炫酷,而是最快最直观的理解数据要表达什么,你觉得呢?