【数据分析】(task4)数据可视化

note

  • matplotlib的四个容器:
    • Figure:顶层级,用来容纳子 Axes,一组具体绘图元素和画布(canvas)。 画板。
    • Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成。 子图。
    • Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素。 子图的坐标轴、网格
    • Tick:axis的下属层级,用来处理所有和刻度有关的元素。 坐标轴的刻度。
  • 通过matplotlib.plot函数可以绘制曲线(折线),每个plot函数对应一条曲线。

一、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

猜你喜欢

转载自blog.csdn.net/qq_35812205/article/details/128739813