京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者 | 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
在神经网络模型搭建中,“最后一层是否添加激活函数”是新手常困惑的关键问题——有人照搬中间层的ReLU激活,导致回归任务输出异 ...
2025-12-05在机器学习落地过程中,“模型准确率高但不可解释”“面对数据噪声就失效”是两大核心痛点——金融风控模型若无法解释决策依据, ...
2025-12-05在CDA(Certified Data Analyst)数据分析师的能力模型中,“指标计算”是基础技能,而“指标体系搭建”则是区分新手与资深分析 ...
2025-12-05在回归分析的结果解读中,R方(决定系数)是衡量模型拟合效果的核心指标——它代表因变量的变异中能被自变量解释的比例,取值通 ...
2025-12-04在城市规划、物流配送、文旅分析等场景中,经纬度热力图是解读空间数据的核心工具——它能将零散的GPS坐标(如外卖订单地址、景 ...
2025-12-04在CDA(Certified Data Analyst)数据分析师的指标体系中,“通用指标”与“场景指标”并非相互割裂的两个部分,而是支撑业务分 ...
2025-12-04每到“双十一”,电商平台的销售额会迎来爆发式增长;每逢冬季,北方的天然气消耗量会显著上升;每月的10号左右,工资发放会带动 ...
2025-12-03随着数字化转型的深入,企业面临的数据量呈指数级增长——电商的用户行为日志、物联网的传感器数据、社交平台的图文视频等,这些 ...
2025-12-03在CDA(Certified Data Analyst)数据分析师的工作体系中,“指标”是贯穿始终的核心载体——从“销售额环比增长15%”的业务结论 ...
2025-12-03在神经网络训练中,损失函数的数值变化常被视为模型训练效果的“核心仪表盘”——初学者盯着屏幕上不断下降的损失值满心欢喜,却 ...
2025-12-02在CDA(Certified Data Analyst)数据分析师的日常工作中,“用部分数据推断整体情况”是高频需求——从10万条订单样本中判断全 ...
2025-12-02在数据预处理的纲量统一环节,标准化是消除量纲影响的核心手段——它将不同量级的特征(如“用户年龄”“消费金额”)转化为同一 ...
2025-12-02在数据驱动决策成为企业核心竞争力的今天,A/B测试已从“可选优化工具”升级为“必选验证体系”。它通过控制变量法构建“平行实 ...
2025-12-01在时间序列预测任务中,LSTM(长短期记忆网络)凭借对时序依赖关系的捕捉能力成为主流模型。但很多开发者在实操中会遇到困惑:用 ...
2025-12-01引言:数据时代的“透视镜”与“掘金者” 在数字经济浪潮下,数据已成为企业决策的核心资产,而CDA数据分析师正是挖掘数据价值的 ...
2025-12-01数据分析师的日常,常始于一堆“毫无章法”的数据点:电商后台导出的零散订单记录、APP埋点收集的无序用户行为日志、传感器实时 ...
2025-11-28在MySQL数据库运维中,“query end”是查询执行生命周期的收尾阶段,理论上耗时极短——主要完成结果集封装、资源释放、事务状态 ...
2025-11-28在CDA(Certified Data Analyst)数据分析师的工具包中,透视分析方法是处理表结构数据的“瑞士军刀”——无需复杂代码,仅通过 ...
2025-11-28在统计分析中,数据的分布形态是决定“用什么方法分析、信什么结果”的底层逻辑——它如同数据的“性格”,直接影响着描述统计的 ...
2025-11-27在电商订单查询、用户信息导出等业务场景中,技术人员常面临一个选择:是一次性查询500条数据,还是分5次每次查询100条?这个问 ...
2025-11-27