作者 | CDA数据分析师
1、Pyecharts 简介
Echarts是一个由百度开源的数据可视化工具,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,Pyecharts诞生了。
Pyecharts最早只适用于工程领域的可视化开发,但是随着其对Jupyter notebook、Jupyter lab等交互式开发工具的支持不断加强,现在也开始被许多数据分析师应用到数据探索中。
1.1 Pyecharts各个版本与Python的对应关系
pyecharts 分为 v0.5.x 和 v1.x 两个大版本,v0.5.x 和 v1.x 间不兼容,v1.x 是一个全新的版本。
注:经Pyecharts开发团队决定,0.5.x 版本将不再进行维护
1.2 Pyecharts v1系列的新特性
pyecharts v1.0.0 停止对 Python2.7,3.4~3.5 版本的支持和维护,仅支持 Python3.6+。如果还不知道什么是 TypeHint 的同学,劝你尽早入坑,官方入坑指南 typing — Support for type hints。
在编程界,早已流传着 动态一时爽,重构火葬场 这样的真知灼见,动态语言类型检查已经成为了一种趋势,Javascript 已经有了 Typescript,Python 也在力推 TypeHint,虽然 Python 的 TypeHint 实际上对于程序的运行并没有任何影响......,但它配合 IDE 和 mypy,或者 pyright 这样的工具可以在开发阶段趁早发现问题。
pyecharts v1.0.0 废除原有的插件机制,包括地图包插件和主题插件,插件的本质是提供 pyecharts 运行所需要的静态资源文件(基本都是 .js 文件),所以现在开放了两种模式提供静态资源文件。
online 模式,使用 pyecharts 官方提供的 assets host,或者部署自己的 remote host。
local 模式,使用自己本地开启的文件服务提供 assets host(离线模式)。
对 JupyterLab 的支持一直是很多开发者关心的功能,毕竟 JupyterLab 号称是下一代的 Notebook。pyecharts 1.0.0 开始支持在 JupyterLab 中渲染图表啦!
#使用JupytrLab需添加如下代码
from pyecharts.globals import CurrentConfig,NotebookType
CurrentConfig,NOTEBOOK_TYPE=NotebookType.JUPYTER_LAB
#除了以上代码,还需在渲染之前执行加载JavaScript脚本的代码,这里以柱状图对象bar为例
bar.load_javascript()
#然后再渲染即可
bar.render_notebook()
所有配置项均 OOP,在新版本的 pyecharts 中,一切皆 Options。配置项种类更多,可操作性更强,可以画出更丰富的图表,pyecharts 官方画廊 pyecharts/pyecharts-gallery。
0.5.X 版本写法
from pyecharts import Bar
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [5, 20, 36, 10, 75, 90]
v2 = [10, 25, 8, 60, 20, 80]
bar = Bar("柱状图数据堆叠示例")
bar.add("商家A", attr, v1, is_stack=True)
bar.add("商家B", attr, v2, is_stack=True)
bar.render()
1.0.0 版本写法,支持链式调用
import pyecharts.options as opts
from pyecharts.charts import Bar
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [5, 20, 36, 10, 75, 90]
v2 = [10, 25, 8, 60, 20, 80]
bar = (
Bar()
.add_xaxis(attr)
.add_yaxis("商家A", v1, stack="stack1")
.add_yaxis("商家B", v2, stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="柱状图数据堆叠示例"))
)
bar.render()
pyecharts 1.0.0 提供两种模式渲染图片,selenium 和 phantomjs,分别需要安装 snapshot-selenium 和 snapshot-phantomjs。
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot
def bar_chart() -> Bar:
c = (
Bar()
.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-测试渲染图片"))
)
return c
def render_chart_by_selenium():
from snapshot_selenium import snapshot
make_snapshot(snapshot, bar_chart().render(), "bar0.png")
def render_chart_by_phantomjs():
from snapshot_phantomjs import snapshot
make_snapshot(snapshot, bar_chart().render(), "bar1.png")
看到新版的种种优势,小伙伴们是不是跃跃欲试了?接下来我们安装并通过一系列代码体验Pyecharts。
1.3 安装 Pyecharts
v1系列版本的Pyecharts仅支持python3.6+ ,即如果你的python是3.6+,则默认会下载最新版的pyecharts。
pip install -i https://pypi.douban.com/simple pyecharts -U #使用国内软件源下载速度会快很多
安装pyecharts v0.5系列版本:
pip install -i https://pypi.douban.com/simple pyecharts==0.5.11
2、Pyecharts绘图
绘图前需要导入相关模块,根据绘制的图形不同,导入的模块会有些许差异
from pyecharts import options as opts #引入配置项入口
from pyecharts.charts import Bar,Line #导入相关图形的构造方法
2.1 pyecharts绘图步骤
pyecharts绘图大致是按以下五个步骤来的
这里以绘制柱形图为例
#1、构造柱形图对象
bar = Bar()
#2、添加x轴数据
bar.add_xaxis(xaxis_data=x_data)
# 添加y轴数据
bar.add_yaxis( "系列名称", #设置系列名称
yaxis_data=y_data, #设置y轴系列数据
...... #更多参数可以查看官网
)
#3、对系列进行配置
bar.set_series_opts( #主要是对图元、文字、
...... #标签、线型、标记点、标记线 等内容进行配置
)
#4、对全局进行配置
bar.set_global_opts( #可配置内容包括:x、y坐标轴;初始化配置;
...... #工具箱配置;标题;区域缩放;图例;
#提示框等参数配置
)
#5、渲染图片
bar.render(path) #将图片渲染为html文件
bar.render_notebook() #直接在jupytr notebook中渲染
基于分类/时间的数据对比,通常需用到比较型图表。用户通过图表轻松识别最大/最小值,查看当前和过去的数据变动情况。
常见场景:哪个地区的收件量最多?今年的收入和去年相比如何?商品的销量在不同地区、时间维度上的差异……
2.2 柱状图的绘制
当数据量少的时候我们使用柱状图就可以了。pyecharts绘制柱状图表灰常简单咯,啥也不说了,上代码。
from example.commons import Faker #调用官方提供的测试数据
from pyecharts import options as opts #配置入口模块
from pyecharts.charts import Bar #柱状图构造方法
bar = Bar()#构造bar对象
bar.add_xaxis(Faker.choose()) #添加x轴数据
bar.add_yaxis("商家A", Faker.values()) #添加一个系列数据,这里是A商家的数据
bar.add_yaxis("商家B", Faker.values()) #添加另一个系列数据
bar.set_global_opts(title_opts=opts.TitleOpts(
title="Bar-基本示例", #设置主标题
subtitle="我是副标题" #设置副标题
))
bar.render_notebook() #在jupyter notebook中渲染
效果图如下:
2.3 条形图
当条目较多,如大于12条,移动端上的柱状图会显得拥挤不堪,更适合用条形图。一般数据条目不超过30条,否则易带来视觉和记忆负担。
bar = Bar().add_xaxis(Faker.choose()+Faker.choose()+Faker.choose()) #将数据生成三份
bar.add_yaxis("", Faker.values()+Faker.values()+Faker.values()) #数据生成三份
bar.set_global_opts(title_opts=opts.TitleOpts(title="条形图"))
bar.reversal_axis() #翻转XY轴,将柱状图转换为条形图
bar.render_notebook()
2.4 折线图
当数据X轴为连续数值(如时间)且我们比较注重观察数据变化趋势时,折线图是非常好的选择。
import pyecharts.options as opts
from pyecharts.charts import Line
line=Line()
line.add_xaxis(["201{}年/{}季度".format(y,z)
for y in range(4)
for z in range(1,5)]) #设置x轴数据
line.add_yaxis(
"电视机销量",
[4.80,4.10,6.00,6.50,5.80,5.20,6.80,7.40,
6.00,5.60,7.50,7.80,6.30,5.90,8.00,8.40]
)#设置y轴数据
line.set_global_opts(
xaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(rotate=-40),
),#设置x轴标签旋转角度
yaxis_opts=opts.AxisOpts(name="销量(单位/千台)"),#设置y轴名称
title_opts=opts.TitleOpts(title="折线图")) #设置图表标题
line.render_notebook() #渲染图表
2.5 南丁格尔-玫瑰图
当对比差异不是很明显的数据时,可以使用南丁格尔玫瑰图,其原理为:扇形的半径和面积是平方的关系,南丁格尔玫瑰图会将数值之间的差异放大,适合对比大小相近的数值。它不适合对比差异较大的数值。
此外,因为圆有周期性,玫瑰图也适于表示周期/时间概念,比如星期、月份。依然建议数据量不超过30条,超出可考虑条形图。
def pie_rosetype():
from pyecharts.charts import Pie
c = (
Pie()
.add(
"",
[list(z) for z in zip(["201{}年/{}季度".format(y,z)
for y in range(2)
for z in range(1,3)], [4.80,4.10,5.80,5.20])],
radius=["0%", "75%"], #设置内径外径
rosetype="radius", #玫瑰图有两种类型
label_opts=opts.LabelOpts(is_show=True),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))
)
return c
pie_rosetype().render_notebook()
2.6 雷达图
对于一些多维的性能数据,如王者荣耀等游戏中的玩家战力信息,常用雷达图表示。指标得分接近圆心,说明处于较差状态,应分析改进;指标得分接近外边线,说明处于理想状态。
from pyecharts import options as opts
from pyecharts.charts import Page, Radar
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
def radar_base() -> Radar:
c = (
Radar()
.add_schema(
schema=[
opts.RadarIndicatorItem(name="KDA", max_=6500),
opts.RadarIndicatorItem(name="输出", max_=16000),
opts.RadarIndicatorItem(name="经济", max_=30000),
opts.RadarIndicatorItem(name="生存", max_=38000),
opts.RadarIndicatorItem(name="推进", max_=52000),
opts.RadarIndicatorItem(name="打野", max_=25000),
]
)
.add("鲁班", v1, #添加系列名称及数据
color="red", #设置边框线的颜色
areastyle_opts = opts.AreaStyleOpts(#设置填充的属性
opacity = 0.5, #透明度
color="red" #填充颜色
),)
.add("后裔", v2,color="blue",
areastyle_opts = opts.AreaStyleOpts(
opacity = 0.5,#透明度
color="blue"
),)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="英雄成长对比"))
)
return c
radar_base().render_notebook()
2.7 饼图
部分相较于整体,一个整体被分成几个部分。这类情况会用到构成型图表,如五大产品的收件量占比、公司利润的来源构成等。
对于参与构成研究的数据不超过9个时,可以使用饼图来绘制,如果超过了建议使用条形图来展示。
def pie_base():
from pyecharts import options as opts
from pyecharts.charts import Page, Pie
v1=["啤酒","可乐","雪碧","咖啡","奶茶"]
v2=[30,19,21,12,18]
c = (
Pie()
.add("", [list(z) for z in zip(v1,v2)])
.set_global_opts(title_opts=opts.TitleOpts(title="销售收入占比"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}%"))#格式化标签输出内容
)
return c
pie_base().render_notebook()
通过分布&联系型图表能看到数据的分布情况,进而找到某些联系,如相关性、异常值和数据集群。
常见使用场景:客户的分布与哪些因素相关、身高与体重的相关性分析等
查看两个变量的关系使用散点图,以贷款业务为例,查看年龄与信用的关系
代码:
def scatter_render():
from pyecharts.charts import Scatter
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
import pandas as pd
df = pd.DataFrame({"年龄":[32,28,23,24,21],
"信用分":[771,751,738,726,725],
"姓名":['小明','小花','小丽','小刚','小红']})
df.sort_values("年龄",inplace=True,ascending=True)# 按年龄对数据做升序排序
c = (
Scatter()
.add_xaxis(df.年龄.values.tolist())
.add_yaxis(
"信用分",
df[["信用分","姓名"]].values.tolist(),#传入信用分与姓名组合,方便js回调函数显示标签
label_opts=opts.LabelOpts(
formatter=JsCode(
"function(params){return params.value[2];}" #通过定义JavaScript回调函数自定义标签
)
)
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Scatter-多维度数据"),
xaxis_opts = opts.AxisOpts(
type_="value",#x轴数据类型是连续型的
min_=20 #x轴范围最小为20
),
yaxis_opts = opts.AxisOpts(
min_=700 #y轴范围最小为700
)
)
)
return c
scatter_render().render_notebook()
我们可以看出,信用分与年龄在图形所显示范围内大致是成正比的。
2.9 绘制组合图
组合图就是将两种不同的图形绘制到同一图表中,我们以数据分析中常常用到的帕累托图为例,展示pyecharts如何绘制组合图。
帕累托法则又称为二八法则,即百分之八十的问题是百分之二十的原因造成的。
帕累托图(Pareto chart)又叫排列图、主次图,是按照发生频率大小顺序绘制的直方图,表示有多少结果是由已确认类型或范畴的原因所造成。
帕累托图在项目管理中主要用来找出产生大多数问题的关键原因来解决大多数问题,是将出现的质量问题按照重要程度依次排列的一种图表,从而可以直观地得出影响质量问题的主要因素。
主要特点:
1、柱形图的数据按数值的降序排列,折线图上的数据有累积百分比数据,并在次坐标轴显示;
2、折线图的起点数值为0%,并且位于柱形图第一个柱子的最左下角;
3、折线图的第二个点位于柱形图第一个柱子的最右上角 ;
4、折线图最后一个点数值为100%,位于整张图形的最右上角
数据:
代码:
def bar_overlap_line():
from pyecharts import options as opts #引入配置项
from pyecharts.charts import Bar,Line
x_data1 = ["产品价格优势不突出","渠道经理服务不到位",
"营销活动频次不够","区域消费市场不景气","其他"]
x_data2 = [*range(6)]
y_data1 = [115,99,59,33,23]
y_data2 = [0,35,65,83,93,100]
#######################################################################
bar = Bar()
#添加x轴数据
bar.add_xaxis(xaxis_data=x_data1)
bar.set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")) #设置x轴系列
bar.add_yaxis( "问题数量(频数)", #设置y轴系列名称
yaxis_data=y_data1, #设置y轴系列数据
category_gap=0, #设置柱的间距
color="blue", #设置柱形的填充颜色
)
bar.extend_axis(
xaxis=opts.AxisOpts( #设置x轴的参数
is_show=False,
position="top",
)
)
bar.extend_axis(
yaxis=opts.AxisOpts(
axistick_opts=opts.AxisTickOpts( #刻度
is_inside=True,
),
axislabel_opts=opts.LabelOpts(formatter="{value}%", #格式化刻度输出
position="right")
)
)
bar.set_global_opts(
xaxis_opts=opts.AxisOpts( #设置x轴的参数
is_show=True, #是否显示坐标轴
),
yaxis_opts=opts.AxisOpts( #设置y轴最大取值范围
max_=320,
),
title_opts=opts.TitleOpts(title="帕累托图")
)
##########################################################################
line =Line()
#添加x轴数据
line.add_xaxis(x_data2)
#添加y轴数据
line.add_yaxis("累计百分比",
y_data2,
xaxis_index=1, #使用次x坐标轴
yaxis_index=1, #使用次y坐标轴
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
)
return bar
bar_overlap_line().render_notebook()
最终效果图如下所示:
以上就是数据分析常
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数字化浪潮中,数据驱动决策已成为企业发展的核心竞争力,数据分析人才的需求持续飙升。世界经济论坛发布的《未来就业报告》, ...
2025-03-28你有没有遇到过这样的情况?流量进来了,转化率却不高,辛辛苦苦拉来的用户,最后大部分都悄无声息地离开了,这时候漏斗分析就非 ...
2025-03-27TensorFlow Datasets(TFDS)是一个用于下载、管理和预处理机器学习数据集的库。它提供了易于使用的API,允许用户从现有集合中 ...
2025-03-26"不谋全局者,不足谋一域。"在数据驱动的商业时代,战略级数据分析能力已成为职场核心竞争力。《CDA二级教材:商业策略数据分析 ...
2025-03-26当你在某宝刷到【猜你喜欢】时,当抖音精准推来你的梦中情猫时,当美团外卖弹窗刚好是你想吃的火锅店…… 恭喜你,你正在被用户 ...
2025-03-26当面试官问起随机森林时,他到底在考察什么? ""请解释随机森林的原理""——这是数据分析岗位面试中的经典问题。但你可能不知道 ...
2025-03-25在数字化浪潮席卷的当下,数据俨然成为企业的命脉,贯穿于业务运作的各个环节。从线上到线下,从平台的交易数据,到门店的运营 ...
2025-03-25在互联网和移动应用领域,DAU(日活跃用户数)是一个耳熟能详的指标。无论是产品经理、运营,还是数据分析师,DAU都是衡量产品 ...
2025-03-24ABtest做的好,产品优化效果差不了!可见ABtest在评估优化策略的效果方面地位还是很高的,那么如何在业务中应用ABtest? 结合企业 ...
2025-03-21在企业数据分析中,指标体系是至关重要的工具。不仅帮助企业统一数据标准、提升数据质量,还能为业务决策提供有力支持。本文将围 ...
2025-03-20解锁数据分析师高薪密码,CDA 脱产就业班助你逆袭! 在数字化浪潮中,数据驱动决策已成为企业发展的核心竞争力,数据分析人才的 ...
2025-03-19在 MySQL 数据库中,查询一张表但是不包含某个字段可以通过以下两种方法实现:使用 SELECT 子句以明确指定想要的字段,或者使 ...
2025-03-17在当今数字化时代,数据成为企业发展的关键驱动力,而用户画像作为数据分析的重要成果,改变了企业理解用户、开展业务的方式。无 ...
2025-03-172025年是智能体(AI Agent)的元年,大模型和智能体的发展比较迅猛。感觉年初的deepseek刚火没多久,这几天Manus又成为媒体头条 ...
2025-03-14以下的文章内容来源于柯家媛老师的专栏,如果您想阅读专栏《小白必备的数据思维课》,点击下方链接 https://edu.cda.cn/goods/sh ...
2025-03-13以下的文章内容来源于刘静老师的专栏,如果您想阅读专栏《10大业务分析模型突破业务瓶颈》,点击下方链接 https://edu.cda.cn/go ...
2025-03-12以下的文章内容来源于柯家媛老师的专栏,如果您想阅读专栏《小白必备的数据思维课》,点击下方链接 https://edu.cda.cn/goods/sh ...
2025-03-11随着数字化转型的加速,企业积累了海量数据,如何从这些数据中挖掘有价值的信息,成为企业提升竞争力的关键。CDA认证考试体系应 ...
2025-03-10推荐学习书籍 《CDA一级教材》在线电子版正式上线CDA网校,为你提供系统、实用、前沿的学习资源,助你轻松迈入数据分析的大门! ...
2025-03-07在数据驱动决策的时代,掌握多样的数据分析方法,就如同拥有了开启宝藏的多把钥匙,能帮助我们从海量数据中挖掘出关键信息,本 ...
2025-03-06