最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

數(shù)據(jù)可視化Pyecharts的實際使用方式

 更新時間:2024年04月12日 09:56:17   作者:Meepoljd  
這篇文章主要介紹了數(shù)據(jù)可視化Pyecharts的實際使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一個多月前參加公司的一個產(chǎn)品會的時候,有和同事聊到日常巡檢報表的一些東西,現(xiàn)在雖然項目上搭建的有監(jiān)控平臺、數(shù)據(jù)稽核平臺、調(diào)度平臺等業(yè)務系統(tǒng),每天運維人員也做定期的巡檢,但是細想來說這其中有2成左右的工作可能是一個重復性的工作,做完以后要生成巡檢報告,有時候可能還要發(fā)給客戶。這部分工作屬于是做了沒有成績,不做可能出事的活。

本身這樣的事情就應該盡量自動化,而且我們也用Grafana對數(shù)據(jù)做了圖表展示,但是領導就是喜歡看報告,覺得大屏這種東西是線上看的,報告是留檔看的,而且讓我們天天出報告也能讓我們累一點(懂的都懂)。

再說自動化報表這個事情,最好是能夠有一個連接全局數(shù)據(jù)源的引擎來自動生成,對數(shù)據(jù)有一定分析能力,不過公司沒這個開發(fā)能力,而且開源項目也調(diào)研過,對接自研的各個平臺也需要開發(fā)投入。

綜合來看,先臨時做一個程序解決眼下問題會好點。

環(huán)境分析

做之前,先分析下實際環(huán)境上有的各種問題,能想到的大概有這幾個:

  • 數(shù)據(jù)來源不唯一,比如對集群資源進行監(jiān)控的數(shù)據(jù)可能存在Prometheus,其他的可以通過各種后端接口獲取
  • 網(wǎng)絡不一定通,由于網(wǎng)絡限制,沒有一臺服務器能同時訪問所有數(shù)據(jù)源,可能需要考慮數(shù)據(jù)獲取時使用代理
  • 可視化圖形,通過接口獲取的各種數(shù)據(jù),需要自己再畫圖

最主要的幾個問題就是上面的三個,各有各的解決方案,本文主要說的是可視化繪圖這部分,而這里畫圖的話就是使用Pyecharts來做的。

Prometheus數(shù)據(jù)處理

先說下針對Prometheus的數(shù)據(jù)處理,Prometheus的查詢接口常用的有query和query_range,按照這樣進行封裝,方便獲取數(shù)據(jù)時直接調(diào)用,不用再做額外處理:

import sys
import os
import requests

QUERY_ENDPOINT = "query"
QUERY_RANGE_ENDPOINT = "query_range"

class PrometheusQueryAPI:
    """Class Create Prometheus query api"""

    def __init__(self, api, proxy=None) -> None:
        self.api = api
        self.endpoint = "query"
        self.params = {}
        self.result = None
        self.proxy = proxy
        
    def clean(self):
        """清理查詢參數(shù)
        """
        self.params = {}

    def query(self, query, time=None):
        """Create the query"""
        self.params["query"] = query
        if time:
            self.params["time"] = time

        self.endpoint = QUERY_ENDPOINT
        return self
    
    def query_range(self, query, start=None, end=None, step=None):
        """Create the Query range"""
        self.params["query"] = query
        if start:
            self.params["start"] = start
        if end:
            self.params["end"] = end
        if step:
            self.params["step"] = step
        self.endpoint = QUERY_RANGE_ENDPOINT
        return self
    
    def 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

當執(zhí)行query或者query_range的查詢時,使用對應的方法構(gòu)造查詢語句,然后調(diào)用run進行語句運行即可,封裝的比較。

Gauge圖

Gauge圖就是儀表盤圖,這里就不說官方示例了,以我的用法來說,先通過Prometheus獲取數(shù)據(jù):

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)

這里獲取到一個瞬時向量的指標,然后做數(shù)據(jù)類型的轉(zhuǎn)換和處理方便接下來繪圖:

from pyecharts.charts import Gauge
	gauge1 = (
        Gauge()
        .add(
            # 必要配置
            series_name="內(nèi)存使用率",
            data_pair=[["內(nèi)存使用率", data]],
            # 設置儀表盤的條例
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(
                    # 設置不同區(qū)間的顏色,color中劃分不通區(qū)間的顏色,width為線條粗細
                    color=[(0.3, "#E9EB2E"), (0.9, "#37a2da"), (1, "#fd666d")], width=10
                )
            ),
            # tooltip的設置,進行顯示的格式化
            tooltip_opts=opts.TooltipOpts(
                is_show=True, formatter=" : {c}%"),
            max_=100,
            min_=0,
            # 設置相對位置,橫縱坐標,當使用Grid組合Gauge時必須設置,否則圖表會重合
            center=["25%", "50%"],
            # 儀表盤內(nèi)的指標名稱字體設置
            title_label_opts=opts.GaugeTitleOpts(
                font_weight="bold",
                font_size=20
            ),
            # 儀表盤內(nèi)的指標數(shù)值的設置
            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="內(nèi)存使用率",
            ),
            # 設置圖例格式
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )

這里主要需要注意的是進行數(shù)據(jù)的格式化的時候,在TooltipOpts中設置使用" : {c}“這樣的內(nèi)置變量,如果是在GaugeDetailOpts中進行設置,就要使用”{value}"這個內(nèi)置變量。

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,會出現(xiàn)一個完整的分段條可以拖動調(diào)節(jié)
                is_piecewise=True,
                # 設置不同取值區(qū)間的顏色
                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(
            # 設置標記線,如果進行了行列轉(zhuǎn)置,這里的操作就要對X軸進行了而不是Y軸!
            markline_opts=opts.MarkLineOpts(
                data=[
                    opts.MarkLineItem(
                        x=80,
                        name="使用率過高",
                        linestyle_opts=opts.LineStyleOpts(
                            color="red",
                        )
                    )
                ]
            ),
        )
        # 翻轉(zhuǎn)XY軸
        .reversal_axis()
    )

使用reversal_axis()設置XY軸翻轉(zhuǎn),使用VisualMapOpts設置視覺映射,這樣可以根據(jù)自己的需要,對不同區(qū)間的數(shù)據(jù)設置顏色,使用MarkLineOpts可以設置標記線,比如警戒線,尤其要注意的是,當進行行列轉(zhuǎn)置后,警戒線的設置要對X軸的值設置了,不能對原先設置的Y軸進行設置。

效果圖如下:

如何整合進Flask中

很多時候可視化并不只要圖,報告還需要加入一些結(jié)論性的文字,也就是圖文結(jié)合,類似這樣:

在進行圖表初始化的時候,可以添加InitOpts進行圖表大小的設置:

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

在做模板渲染的時候,這樣進行設置:

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

在對應的模板view.j2中只需要這樣寫就可以:

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

附錄

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python實現(xiàn)批量下載文件的示例代碼

    Python實現(xiàn)批量下載文件的示例代碼

    下載文件是我們在日常工作中常常要做的一件事情,當我們需要從互聯(lián)網(wǎng)上批量下載大量文件時,手動一個一個去下載顯然不夠高效,所以本文為大家介紹一下如何利用python批量下載文件吧
    2023-11-11
  • Python一行代碼識別發(fā)票并保存Excel示例詳解

    Python一行代碼識別發(fā)票并保存Excel示例詳解

    這篇文章主要為大家介紹了Python一行代碼識別發(fā)票并保存Excel示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 利用Tensorboard繪制網(wǎng)絡識別準確率和loss曲線實例

    利用Tensorboard繪制網(wǎng)絡識別準確率和loss曲線實例

    今天小編就為大家分享一篇利用Tensorboard繪制網(wǎng)絡識別準確率和loss曲線實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python連接SQL?server數(shù)據(jù)庫并進行簡單查詢的操作詳解

    Python連接SQL?server數(shù)據(jù)庫并進行簡單查詢的操作詳解

    SQL?Server是微軟推出的重量級的數(shù)據(jù)庫,本文將給大家詳細介紹了一下Python連接SQL?server數(shù)據(jù)庫詳細流程,并通過代碼示例給大家講解的非常清除,具有一定的參考價值,需要的朋友可以參考下
    2024-02-02
  • 關于Tensorflow 模型持久化詳解

    關于Tensorflow 模型持久化詳解

    今天小編就為大家分享一篇關于Tensorflow 模型持久化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 使用Python實現(xiàn)首頁通知功能

    使用Python實現(xiàn)首頁通知功能

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)首頁通知功能,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • python中 ? : 三元表達式的使用介紹

    python中 ? : 三元表達式的使用介紹

    剛剛學python的時候,時常糾結(jié)于python中沒有C語言中 ? : 的實現(xiàn),今天終于發(fā)現(xiàn)了兩種python的實現(xiàn)方式
    2013-10-10
  • 利用python批量檢查網(wǎng)站的可用性

    利用python批量檢查網(wǎng)站的可用性

    當大家的站點越來越來越多的時候會發(fā)現(xiàn)管理起來也挺復雜的,所以這篇文章給大家分享下利用python批量檢查網(wǎng)站的可用性的功能,對大家管理網(wǎng)站具有很實用的價值,有需要的朋友可以參考借鑒。
    2016-09-09
  • Python中返回字典鍵的值的values()方法使用

    Python中返回字典鍵的值的values()方法使用

    這篇文章主要介紹了Python中返回字典鍵的值的values()方法使用,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • 利用Python生成隨機驗證碼詳解

    利用Python生成隨機驗證碼詳解

    怎么用python繞驗證碼是個令人頭禿的事情,這篇文章將為大家詳細 介紹如何利用Python生成隨機的驗證碼,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起試試
    2022-01-01

最新評論

临江市| 齐河县| 松江区| 奉新县| 明水县| 玉田县| 项城市| 海丰县| 贡觉县| 祁阳县| SHOW| 巴林左旗| 永胜县| 纳雍县| 阿拉尔市| 宜宾县| 弥渡县| 平谷区| 闽清县| 南充市| 库尔勒市| 泰顺县| 阿拉善盟| 滨海县| 黎城县| 霍州市| 彰武县| 漠河县| 陇西县| 温宿县| 浮山县| 余姚市| 宁河县| 益阳市| 四平市| 定安县| 宜都市| 福安市| 巩留县| 蓬莱市| 丹江口市|