专栏首页A2DataDay5.五种拓展图形绘制

Day5.五种拓展图形绘制

昨天的课程中我们学习绘制五种常见的图形,今天的课程同样使用Matplotlib和Seaborn进行画图,包括箱线图,热力图,雷达图,二元变量分布和成对关系。

箱线图

箱线图(boxplot)又称盒式图,可以显示数据的分散情况,由五个数值点组成:最大值(max)-上界、最小值(min)-下界、中位数(median)和上下四分位数(Q1, Q3)。它可以帮我们分析出数据的差异性、离散程度和异常值等。

# 数据准备
# ⽣成0-1之间的10*4维度数据(10行,4列的数组)
import numpy as np
data = np.random.normal(size=(10,4))
lables = ['A', 'B', 'C', 'D']

# ⽤Matplotlib画箱线图
# boxplot(x,labels=None)函数,x代表绘图数据,labels是缺省值,可以为箱线图添加标签。
import matplotlib.pyplot as plt
plt.boxplot(data, labels=lables) #注意单词labels和lables
plt.show()

# ⽤Seaborn画箱线图
# boxplot(x=None,y=None,data=None)函数。data为DataFrame类型,x、y是data中的变量。
import seaborn as sns
import pandas as pd
df = pd.DataFrame(data, columns=lables)
sns.boxplot(data=df)
plt.show()

运行结果:

热力图

热力图(heat map)是一种矩阵表示方法,其中矩阵中的元素值用颜色来代表,不同的颜色代表不同大小的值。通过颜色的深浅就能直观地知道某个位置上数值的大小。另外也可以某个位置上的颜色与其他位置颜色进行比较,是一种非常直观的多元变量分析方法。

一般使用Sarborn中的sns.heatmap(data)函数绘制,我们使用Seaborn中自带的数据集flights,该数据集记录了1949年到1960年期间,每个月的航班乘客的数量。

# 数据准备
import seaborn as sns
flights = sns.load_dataset("flights")
data = flights.pivot('year', 'month', 'passengers')
# pivot函数可以重塑表格,year是列索引代表y轴,month是行索引代表x轴,passengers是单元格中的值

# 用Seaborn画图
sns.heatmap(data)
plt.show()

运行结果:

雷达图

雷达图(radar chart)是以从同一点开始的轴上表示的三个或多个变量的图表的形式,也是显示一对多关系的方法。在雷达图中,一个变量相对于另一个变量的显著性清晰可见。

如果我们制作一张影响购买手机的因素分析图,我们通过收集问卷采访顾客对品牌,价格,外观,硬件,拍照,电量几个方面进行打分,将统计好的因素比重用雷达图表示出来。这里使用Matplotlib进行画图,首先设置两个数组:items和scores,它们分别保存了购买因素的名称和分数。

雷达图的边框是⼀个圆形,需要计算每个坐标的角度,然后对这些数值进行设置。当画完最后⼀个点后,需要与第⼀个点连线。

因为需要计算角度,所以我们要准备angles数组;又因为需要设定统计结果的数值,所以我们要设定scores数组。并且需要在原有angles和scores数组上增加⼀位,也就是添加数组的第一个元素。

# 数据准备
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi']  # 显示中文字体•
items = np.array([u"品牌", u"价格", u"外观", u"硬件", u"拍照", u"电量"]) # u:unicode
scores= [88, 92, 70, 78, 79, 82]

# 画图数据准备,⻆度、score和angles的状态值
angles=np.linspace(0, 2*np.pi, len(items), endpoint=False)  #分割圆周长
scores=np.concatenate((scores,[scores[0]]))
# concatenate:拼接,在原有的score和angles上加一
angles=np.concatenate((angles,[angles[0]]))

# ⽤Matplotlib画蜘蛛图
fig = plt.figure() # 创建一个空白画布对象,添加子图可以将画板分成一行一列,形成一个绘图区
ax = fig.add_subplot(111, polar=True) #设置字画布,极坐标系:True
ax.plot(angles, scores, 'o-',linewidth=2) #连线
ax.fill(angles, scores, alpha=0.25) #上色
ax.set_thetagrids(angles * 180/np.pi, items) #写上标签
plt.show()

运行结果:

二元变量分布

如果我们想要看两个变量之间的关系,就需要用到二元变量分布。二元变量分布有多种呈现方式,之前讲解的散点图就是一种二元变量分布。

在Seaborn里,使用二元变量分布非常方便,直接用sns.jointplot(x, y, data=None, kind)函数即可。kind表示不同的视图类型:“kind=‘scatter’”代表散点图,“kind=‘kde’”代表核密度图,“kind=‘hex’ ”代表Hexbin图,它代表的是有六边形的单元画出的二维直方图的模拟。

我们在演示中使用Seaborn自带的数据集tips,这个数据集记录了不同顾客在餐厅的消费账单及小费情况。代码中total_bill保存了客户的账单金额,tip是该客户给出的小费金额。我们可以用Seaborn中的jointplot来探索这两个变量之间的关系。

# 数据准备
import seaborn as sns
tips = sns.load_dataset("tips")
print(tips.head(10)) # head将表格中的第一行取作列名,然后取10行数据

# ⽤Seaborn画二元变量分布图(散点图,核密度图,Hexbin图)
sns.jointplot(x="total_bill", y="tip", data=tips, kind='scatter')
sns.jointplot(x="total_bill", y="tip", data=tips, kind='kde')
sns.jointplot(x="total_bill", y="tip", data=tips, kind='hex')
plt.show()

运行结果:

核密度图:

Hexbin图:

成对关系

如果想要探索数据集中的多个成对双变量的分布,可以直接采⽤sns.pairplot()函数。它会同时展示出DataFrame中每对变量的关系,另外在对角线上,能看到每个变量本身作为单变量的分布情况。pairplot()是探索性分析中的常用函数,可以很快帮我们理解变量对之间的关系。

我们使用Seaborn中自带的iris鸢尾花数据集。鸢尾花可以分成Setosa、Versicolour和Virginica三个品种,在这个数据集中,针对每⼀个品种,都有50个数据,每个数据中包括了4个属性,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。通过这些数据,可以预测出鸢尾花卉属于三个品种中的哪一种。

# 数据准备
import seaborn as sns
iris = sns.load_dataset('iris')
# 用Seaborn画成对关系
sns.pairplot(iris)
plt.show()

⽤Seaborn中的pairplot函数来对数据集中的多个双变量的关系进行探索,如下图所示:

从图上可以看出,⼀共有 sepal_length、sepal_width、petal_length和petal_width4个变量,它们分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。这张图相当于这4个变量两两之间的关系。第一行第一列中的图代表的是花萼长度自身的分布图,右侧的第一行第二列的这张图代表的是花萼长度与花萼宽度这两个变量之间的关系。

04

小作业

1、Seaborn数据集中自带了car_crashes数据集,这是一个国外车祸的数据集,对这个数据集进行成对关系的探索。并用Seaborn画二元变量(x="total,y="speeding")分布图,如果想要画散点图,核密度图,Hexbin图该怎样写.

本文分享自微信公众号 - DataScience(DataScienceTeam),作者:花酱学姐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL 窗口函数之头尾函数

    注意:当函数后无指定分区及排序字段,即 over() 括号内容为空,则会出现上面的结果。

    DataScience
  • 趣搭-嗒集群

    将jdk-7u25-linux-i586.tar.gz 分别传到每台机器的/TMP下

    DataScience
  • Day4.五种常见图形的绘制

    昨天的课程中我们了解了常用的物种图形:散点图,折线图,柱状图,直方图,饼图。今天我们一起用Matplotlib和Seaborn来画出它们。

    DataScience
  • 聊聊kafka consumer offset lag increase异常

    本文主要解析一下遇到的一个kafka consumer offset lag不断增大的异常。

    codecraft
  • 艾伦·图灵传

    本书是公认的图灵最权威传记。艾伦·图灵是现代计算机科学之父,在24岁时奠定了计算机的理论基础。二战期间,他为盟军破译密码,为结束战争做出巨大贡献。战后,他开创性...

    用户3157710
  • 你可能没有实现一个正确的atoi函数

    我们都知道,atoi函数用于将一个字符串转换成整数。atoi函数看起来似乎很容易实现,你甚至可以很快写出一个版本,但是是否符合要求呢?

    编程珠玑
  • 翻译qmake文档(四) Building Common Project Types

    本章原英文文档:http://qt-project.org/doc/qt-5/qmake-common-projects.html 构建常见的项目类型     ...

    lpxxn
  • 设计模式 | 建造者模式及典型应用

    建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。

    小旋锋
  • 高级信管 | 网络标准与网络协议

    _______的任务是:根据系统说明书规定的功能要求,考虑实际条件,具体设计实现逻辑模型的技术方案。

    小团子
  • 在线生成精美简历源码分享

    游魂

扫码关注云+社区

领取腾讯云代金券