数据治理 | 老生常谈的Pandas绘图还能这么玩?
Part1前言
之前的文章中,我们详细地介绍了使用 Pandas 绘制柱状图和折线图的方法,仅使用一两行核心代码就可以绘制一个精美的柱状图或者折线图。为了呈现各种各样的数据分布,数据分析图形也变得十分多样化,本期文章我们将会介绍另外两种常见的数据可视化图形——饼图和散点图。
本文中所有 Python 代码均在集成开发环境 Visual Studio Code (VScode) 中使用交互式开发环境 Jupyter Notebook 编写和运行。
Part2饼图
饼图是数据分析中最常用常用的图形之一,能够直观地展示数据占比情况,帮助用户以最快的速度了解数据分布情况。而使用 Pandas 绘制饼图是一件简单且有趣的事情,绘制图形之前,我们需要先准备数据。使用 Pandas 读取数据【电子商务专题数据库企业规模(注册资金)分布情况】并统计各个注册资金区间企业数量,代码如下:
公众号对话框内发送关键词“20220513”,即可获取“电子商务专题数据库企业规模(注册资金)分布情况(截至2020年04月).xlsx”
import pandas as pd
data = pd.read_excel('电子商务专题数据库企业规模(注册资金)分布情况(截至2020年04月).xlsx')
data.head(8) # 输出查看前 8 行数据
该表按照注册资金统计了各个省份的企业数量,共分为四个级别。我们希望使用饼图直观展示全国范围内这四个规模的企业各占多大的比例。绘图的前提是处理数据,我们根据注册资金字段对企业数量做聚合操作,计算得到这四个级别企业的数量。代码如下:
df = data[['企业规模(注册资金)', '企业数量']]\
.groupby('企业规模(注册资金)').sum()
df # 此时`企业规模(注册资金)`是数据索引
接下来我们使用 Pandas 绘制出企业规模(注册资金)分布图。上一篇文章我们有讲到,Pandas 的绘图功能是通过借用 matplotlib 模块的功能实现的,所以绘图前需要导入 matplotlib 模块并做好相关设置:
# 导入 matplotlib 模块
import matplotlib.pyplot as plt
# 设置字体为楷体
plt.rcParams['font.sans-serif'] = ['KaiTi']
# 设置字体大小
plt.rcParams['font.size'] = 5
# 设置使负号'-'正常显示
plt.rcParams['axes.unicode_minus'] = False
# 调整生成的图的尺寸
plt.rcParams['figure.figsize'] = (3, 3)
# 每英寸点数,用于调整图像清晰度
plt.rcParams['figure.dpi'] = 300
接下来就可以绘图了,使用之前处理好的数据绘制饼图,Pandas 中绘制饼图的函数是df.plot.pie()
, 绘图代码如下:
# y 参数是唯一不可缺失参数,表示绘图指标数据,
# 而 x 参数默认是数据索引,表示绘图指标
df.plot.pie(y='企业数量', ylabel='')
饼图的绘制非常简单,准备好数据之后,仅使用一行代码即可生成一个美观简洁的饼图。
有利必有弊,饼图绘制虽然简单,但是上图这样的结果可能并不是我们期望的图形。比如说,上图右上角的图例遮挡了一部分“饼”,或者我们希望每一个扇形区域都有对应的百分比;不喜欢这个主题颜色等等。这时我们可以通过其他参数来设置饼图的一些细节,具体的参数和含义请看下面的代码:
df.plot.pie(
y='企业数量',
ylabel='', # 数据标签,对应上图中最左侧的‘企业数量’,这里设置为空
figsize=(3,3), # 饼图的大小比例
autopct='%.2f%%', # 扇形区域比例的百分比格式,保留两位小数
radius = 1, # 饼图的半径,与 labeldistance 等其他参数形成对照
labeldistance=1.1, # 标签(如‘1-100万’)距离圆心的距离,与半径对照
startangle = 0, # 逆时针旋转角度,初始角度必然从圆心正右方
# 沿逆时针开始画‘饼’
legend=False, # 是否显示图例
colormap='summer', # 主题颜色
shadow=False, # 是否显示阴影
rotatelabels=False, # 标签文字的角度是否与圆半径垂直,适用于标签较密集情况
explode=(0, 0, 0.1, 0),# 设置突出显示,与饼图半径对照,该饼图共四个扇
# 形区域,则传入四个数字,分别代表各扇形凸出的距离
# 这里表示第三个扇形区域凸出 0.1(半径为1)
title='全国电子商务企业规模(注册资金)分布情况(截止2020年04月)', # 饼图的标题,可以不设置
# colors=['skyblue', 'green', 'gray', 'yellow'], # 自定义扇形区域颜色,
# 若传入该参数,则主题颜色参数 colormap 会失效,这里不使用该参数
)
以上代码介绍了绘制饼图常用的一些参数,使用这些参数我们可以随心所欲的设置饼图的各种样式,下图则是使用以上参数绘制出的饼图:
上面介绍的参数中,有一个参数 colormap
可能会让人摸不着头脑,这个控制主题颜色的参数中所有主题的名称都是一些特定词语,我们可以访问 matplotlib 官方提供的 colormap 色谱[1]来查看这些主题的颜色和名称并在饼图中使用他们。内含数十种精美颜色组合,部分色谱如下图所示:
Part3散点图
散点图适用于显示数据之间的关系,常用于判断两变量之间是否存在某种关联,类似于自变量因变量。我们虚构一份某地房价,房租(合租)与租客数量的数据来绘制一个房价与房租之间关系的散点图。
data = data = pd.DataFrame(
{'房价':[5000, 10000, 15000, 23000, 29000, 35000, 41000],
'房租':[400, 700, 850, 1400, 2100, 2300, 2900],
'租客数量':[2438, 7289, 26837, 18886, 15936, 11937, 9074]}
)
data
Pandas 中绘制散点图的函数是 df.plot.scatter()
。与绘制饼图类似,绘制散点图同样有许多参数用来控制散点图的细节,绘制散点图的代码以及各参数,参数含义如下:
data.plot.scatter(
x='房价', # 自变量,X轴变量
y='房租', # 因变量,y轴变量
s=2, # 散点的大小
color='blue', # 散点的颜色
marker='o', # 散点的样式,例如'*','<','^','x'等等,字母 o 表示圆形
alpha=1 # 散点的透明度,从0到1,从完全透明到完全不透明
)
另外,上面的介绍的参数中,参数 s 不仅可以指定散点的大小为同一值,还可以根据其他字段或者数字序列来控制每一个散点的大小,如此一来就可以使用散点的大小来可视化第三个变量,这样的散点图被称为气泡图。下面我们就使用散点的大小来表示租客数量的多少。代码以及气泡图如下:
data.plot.scatter(x='房价',
y='房租',
# 数值太大,缩小 1000 倍后会气泡大小比较合适
s=[i/1000 for i in data['租客数量']],
color='skyblue',
)
Part4总结
本文我们介绍了如何使用 Pandas 绘制饼图和散点图,在有数据支持的前提下,绘制以上两种数据分析图形非常容易。同时,通过设置参数来“DIY”图形也是一件十分有趣的事情。
公众号对话框内发送关键词“20220513”,即可获取文中“电子商务专题数据库企业规模(注册资金)分布情况(截至2020年04月).xlsx”
友情链接
[1]colormap 色谱链接:: https://matplotlib.org/2.0.2/examples/color/colormaps_reference.html
我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块(点击标题即可跳转至相应合集):
星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文 | 《社科领域大数据治理实务手册》
欢迎扫描👇二维码添加关注