【数据可视化】Pyecharts的实际使用

Pyecharts的实际使用

  • 前言
  • 正文
    • 环境分析
    • Prometheus数据处理
    • Gauge图
    • Bar图-横向
    • 如何整合进Flask中
  • 附录

前言

一个多月前参加公司的一个产品会的时候,有和同事聊到日常巡检报表的一些东西,现在虽然项目上搭建的有监控平台、数据稽核平台、调度平台等业务系统,每天运维人员也做定期的巡检,但是细想来说这其中有2成左右的工作可能是一个重复性的工作,做完以后要生成巡检报告,有时候可能还要发给客户。这部分工作属于是做了没有成绩,不做可能出事的活。

本身这样的事情就应该尽量自动化,而且我们也用Grafana对数据做了图表展示,但是领导就是喜欢看报告,觉得大屏这种东西是线上看的,报告是留档看的,而且让我们天天出报告也能让我们累一点(懂的都懂)。

再说自动化报表这个事情,最好是能够有一个连接全局数据源的引擎来自动生成,对数据有一定分析能力,不过公司没这个开发能力,而且开源项目也调研过,对接自研的各个平台也需要开发投入。

综合来看,先临时做一个程序解决眼下问题会好点。

正文

环境分析

做之前,先分析下实际环境上有的各种问题,能想到的大概有这几个:

  • 数据来源不唯一,比如对集群资源进行监控的数据可能存在Prometheus,其他的可以通过各种后端接口获取
  • 网络不一定通,由于网络限制,没有一台服务器能同时访问所有数据源,可能需要考虑数据获取时使用代理
  • 可视化图形,通过接口获取的各种数据,需要自己再画图

最主要的几个问题就是上面的三个,各有各的解决方案,本文主要说的是可视化绘图这部分,而这里画图的话就是使用Pyecharts来做的。

Prometheus数据处理

先说下针对Prometheus的数据处理,Prometheus的查询接口常用的有query和query_range,按照这样进行封装,方便获取数据时直接调用,不用再做额外处理:

import sys
import os
import requestsQUERY_ENDPOINT = "query"
QUERY_RANGE_ENDPOINT = "query_range"class PrometheusQueryAPI:"""Class Create Prometheus query api"""def __init__(self, api, proxy=None) -> None:self.api = apiself.endpoint = "query"self.params = {}self.result = Noneself.proxy = proxydef clean(self):"""清理查询参数"""self.params = {}def query(self, query, time=None):"""Create the query"""self.params["query"] = queryif time:self.params["time"] = timeself.endpoint = QUERY_ENDPOINTreturn selfdef query_range(self, query, start=None, end=None, step=None):"""Create the Query range"""self.params["query"] = queryif start:self.params["start"] = startif end:self.params["end"] = endif step:self.params["step"] = stepself.endpoint = QUERY_RANGE_ENDPOINTreturn selfdef run(self):"""Run the prometheus query"""url = os.path.join(self.api, self.endpoint)if sys.platform.startswith('win'):url = url.replace('\\', '/')res = requests.get(url=url, params=self.params,proxies=self.proxy, timeout=30)self.result = res.json()self.clean()return self

当执行query或者query_range的查询时,使用对应的方法构造查询语句,然后调用run进行语句运行即可,封装的比较。

Gauge图

Gauge图就是仪表盘图,这里就不说官方示例了,以我的用法来说,先通过Prometheus获取数据:

p = prometheus.PrometheusQueryAPI(PROMETHEUS, proxy=PROXY)
p.query("yarn_exporter_allocateMem/(yarn_exporter_availableMem+yarn_exporter_allocateMem)")
p.run()
data = round(float(p.result["data"]["result"][0]["value"][1])*100, 2)

这里获取到一个瞬时向量的指标,然后做数据类型的转换和处理方便接下来绘图:

from pyecharts.charts import Gaugegauge1 = (Gauge().add(# 必要配置series_name="内存使用率",data_pair=[["内存使用率", data]],# 设置仪表盘的条例axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(# 设置不同区间的颜色,color中划分不通区间的颜色,width为线条粗细color=[(0.3, "#E9EB2E"), (0.9, "#37a2da"), (1, "#fd666d")], width=10)),# tooltip的设置,进行显示的格式化tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{b} : {c}%"),max_=100,min_=0,# 设置相对位置,横纵坐标,当使用Grid组合Gauge时必须设置,否则图表会重合center=["25%", "50%"],# 仪表盘内的指标名称字体设置title_label_opts=opts.GaugeTitleOpts(font_weight="bold",font_size=20),# 仪表盘内的指标数值的设置detail_label_opts=opts.GaugeDetailOpts(formatter="{value}%",color="#1267CB",font_weight="bold",font_size="20",offset_center=["0%", "40%"],)).set_global_opts(# Gauge的标题设置title_opts=opts.TitleOpts(title="内存使用率",),# 设置图例格式legend_opts=opts.LegendOpts(is_show=False),))

image-20231219165324027

这里主要需要注意的是进行数据的格式化的时候,在TooltipOpts中设置使用"{b} : {c}“这样的内置变量,如果是在GaugeDetailOpts中进行设置,就要使用”{value}"这个内置变量。

Bar图-横向

有的时候在使用条形图的时候,需要使用横向的条形图,官方的示例比较少,可以这样设置:

    bar = (Bar(init_opts=opts.InitOpts(width="850px", height="800px")).add_xaxis(xaxis_data=province).add_yaxis("HDFS", values).set_global_opts(title_opts=opts.TitleOpts(title="HDFS使用情况"),visualmap_opts=opts.VisualMapOpts(min_=0,max_=100,# 组件映射维度dimension=0,# 是否为分段型,如果设置为False,会出现一个完整的分段条可以拖动调节is_piecewise=True,# 设置不同取值区间的颜色range_color=["#00EC00", "#00A600","#FFD306", "#FF8000", "#FF2D2D"],orient="horizontal",pos_top="0%", pos_left="40%"),legend_opts=opts.LegendOpts(is_show=False),xaxis_opts=opts.AxisOpts(max_=100)).set_series_opts(# 设置标记线,如果进行了行列转置,这里的操作就要对X轴进行了而不是Y轴!markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(x=80,name="使用率过高",linestyle_opts=opts.LineStyleOpts(color="red",))]),)# 翻转XY轴.reversal_axis())

使用reversal_axis()设置XY轴翻转,使用VisualMapOpts设置视觉映射,这样可以根据自己的需要,对不同区间的数据设置颜色,使用MarkLineOpts可以设置标记线,比如警戒线,尤其要注意的是,当进行行列转置后,警戒线的设置要对X轴的值设置了,不能对原先设置的Y轴进行设置。效果图如下:

image-20231219172234202

如何整合进Flask中

很多时候可视化并不只要图,报告还需要加入一些结论性的文字,也就是图文结合,类似这样:

image-20231219170401022

在进行图表初始化的时候,可以添加InitOpts进行图表大小的设置:

Bar(opts.InitOpts(width="850px", height="800px")
)

在做模板渲染的时候,这样进行设置:

	return render_template("view.j2", data=bar.render_embed())

在对应的模板view.j2中只需要这样写就可以:

<div>{{ data|safe }}</div>

附录

Echarts官网:Apache ECharts

PyEcharts文档:简介 - pyecharts - A Python Echarts Plotting Library built with love.

PyEcharts示例:中文简介 - Document (pyecharts.org)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/232571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb 学生信息管理系统

介绍 ServletMysqlJdbcjQuery 实现学生信息管理系统 学生 班级 教师 系统设置 登陆 软件架构 软件架构说明 基于ServletMysqlJdbcjQuery 实现学生信息的增删改查功能 文件目录声明 src/dao 数据库的增删改查功能src/filter 网页的过滤拦截功能src/model 登陆的实体对象信息…

Gazebo11更新安装

ROS Melodic版本安装的是Gazebo9&#xff0c;Gazebo 最新版本是11 dpkg -l | grep gazebo 出现的是 gazebo9 相关的插件&#xff0c;需要卸载全部插件。 sudo apt-get remove gazebo9 gazebo9-common gazebo9-plugin-base libgazebo9:amd64 libgazebo9-dev:amd64 ros-melodic…

从账户取款和存款的操作

public class Account {private double balance;public Account(double balance){super();this.balancebalance;}public Account(){super();}public void withdraw(double money) throws NotFullBalanceException{//取款if(money<balance){balance - money;}else{throw new …

flink 读取 apache paimon表,查看source的延迟时间 消费堆积情况

paimon source查看消费的数据延迟了多久 如果没有延迟 则显示0 官方文档 Metrics | Apache Paimon

Ring Co-XOR encryption based reversible data hiding for 3D mesh model

期刊&#xff1a;Signal Processing 作者&#xff1a;Lingfeng Qu et al. -- 摘要&#xff1a; 加密域可逆数据隐藏被广泛应用于云存储数字媒体的内容安全、隐私保护和便捷管理。然而&#xff0c;RDH-ED技术在三维网格模型载体中的应用研究仍处于起步阶段。为解决现有针对三…

美化Pandas数据图表

二、数据条显示 Excel条件格式里&#xff0c;有一个数据条显示方式&#xff0c;用以可视化表达数据大小。 Pandas Style方法中也有数据条的表达形式&#xff0c;用df.style.bar来实现。 还是用前面人口数据的例子&#xff0c;我们来看下如何操作数据条。 import pandas as …

初探 Reactor、Proactor 线程模型与 BIO、AIO、NIO

1 前言 工作中或者是技术上经常会遇到 I/O 、线程模型相关的问题&#xff0c;以及同步、异步、阻塞、非阻塞等各种基础问题&#xff0c;之前上学时候的概念认知总是模糊的&#xff0c;一知半解。趁这次了解希望能够更加深入的去了解这方面的知识&#xff0c;于是有了接下来这篇…

(7)nacos集群搭建方法-有状态负载

前期准备 1.准备好nacos镜像文件,上传至镜像仓库: 2.创建自己集群下-命名空间下的有状态负载: 3.填写工作负载名称、设置实例数量、选择自己的命名空间: 4.选择镜像(目前最新的是2.2.3):

yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)

要在YOLOv5中添加测距和测速功能&#xff0c;您需要了解以下两个部分的原理&#xff1a; 单目测距算法 单目测距是使用单个摄像头来估计场景中物体的距离。常见的单目测距算法包括基于视差的方法&#xff08;如立体匹配&#xff09;和基于深度学习的方法&#xff08;如神经网…

[自动化运维工具]ansible简单介绍和常用模块

ansible 源操作主机功能 自动化运维&#xff08;playbook剧本yaml&#xff09; 是基于python开发的一个配置管理和应用部署工具&#xff0c;在自动化运维中&#xff0c;现在还是异军突起 ansible能批量配置&#xff0c;部署&#xff0c;管理上千台主机&#xff0c;类似于xshell…

使用vite搭建项目时,在启动vite后,浏览器显示页面:找不到localhost的网页

现象 在使用前端工具vite&#xff08;版本5&#xff09;&#xff0c;搭建vue3项目时&#xff0c;启动vite&#xff0c;浏览器显示页面&#xff1a;找不到localhost的网页, 起初怀疑是 未加参数 --host0.0.0.0,导致&#xff0c;后加上该参数后问题依旧 解决 将index.html页面…

中国的下一个风口:低代码开发

“中国的下一个风口是什么&#xff1f;低代码&#xff1f;你赞同吗&#xff1f;” 可以肯定的是&#xff0c;企业想站上未来产业的风口&#xff0c;”数字化“是必经之路。而低代码是企业向制高点突进的手段。产业的风口&#xff0c;就是产业发展的趋势&#xff0c;只有尽力站上…

Makefile的使用

在Linux中使用 make 命令来编译程序&#xff0c;特别是大程序&#xff1b;而 make 命令所执行的动作 依赖于 Makefile 文件。以下是最简单的Makefile文件&#xff1a; 首先&#xff0c;包含如下文件&#xff1a; Makefile文件内容如下所示&#xff1a; 然后&#xff0c;直接执行…

【程序】STM32 读取光栅_编码器_光栅传感器_7针OLED

文章目录 源代码工程编码器基础程序参考资料 源代码工程 源代码工程打开获取&#xff1a; http://dt2.8tupian.net/2/28880a55b6666.pg3这里做了四倍细分&#xff0c;在屏幕上显示 速度、路程、方向。 接线方法&#xff1a; 单片机--------------串口模块 单片机的5V-------…

天猫数据分析-天猫查数据软件-11月天猫平台饮料市场品牌及店铺销量销额数据分析

今年以来&#xff0c;饮料是快消品行业中少数保持稳定增长的品类之一。 11月份&#xff0c;饮料市场同样呈现较好的增长态势。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年11月份&#xff0c;天猫平台上饮料市场的销量为2700万&#xff0c;环比增长约42%&#xf…

水经微图Web新版发布

水经微图Web新版已经上线&#xff0c;在该版本中主要新增了态势箭头标绘、文本要素标注和显示网页气泡等功能。 在本文中&#xff0c;我们将为大家分享新增的功能项&#xff0c;以及原有功能作的一些优化等。 当前版本 当前版本号为&#xff1a;1.4.0-beta 如果你发现该版…

linux 操作系统(二)

1、linux用户和权限 1.1、用户分类&#xff1a; 在linux中的用户可以分为两类&#xff0c;一类是root用户&#xff0c;root用户拥有linux操作系统的最大的权限&#xff0c;另外一类就是普通用户&#xff0c;相比于root用户&#xff0c;普通用户的权限受到一定的限制&#xff0…

zookeeper:启动后占用8080端口问题解决

ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务。它为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分布式同步、组服务等。 我们经常在运行zookeeper服务时&#xff0c;不需要配置服务端口&#xff0c;…

电脑风扇控制软件Macs Fan Control mac支持多个型号

Macs Fan Control mac是一款专门为 Mac 用户设计的软件&#xff0c;它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度&#xff0c;以提高设备的散热效果&#xff0c;减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温…

C#中的协变和逆变

这两个都是只能使用在接口和委托上 个人理解&#xff1a; 协变&#xff1a;出参&#xff0c;让基类使用范围变大&#xff0c;将父类/基类当作子类一样使用 --为什么这样规定呢&#xff1f; 我的理解&#xff1a;真正实现的是子类&#xff0c;子类拥有所有的方法&#xff0c;却…