亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

本身這樣的事情就應(yīng)該盡量自動(dòng)化,而且我們也用Grafana對(duì)數(shù)據(jù)做了圖表展示,但是領(lǐng)導(dǎo)就是喜歡看報(bào)告,覺(jué)得大屏這種東西是線上看的,報(bào)告是留檔看的,而且讓我們天天出報(bào)告也能讓我們累一點(diǎn)(懂的都懂)。

再說(shuō)自動(dòng)化報(bào)表這個(gè)事情,最好是能夠有一個(gè)連接全局?jǐn)?shù)據(jù)源的引擎來(lái)自動(dòng)生成,對(duì)數(shù)據(jù)有一定分析能力,不過(guò)公司沒(méi)這個(gè)開(kāi)發(fā)能力,而且開(kāi)源項(xiàng)目也調(diào)研過(guò),對(duì)接自研的各個(gè)平臺(tái)也需要開(kāi)發(fā)投入。

綜合來(lái)看,先臨時(shí)做一個(gè)程序解決眼下問(wèn)題會(huì)好點(diǎn)。

環(huán)境分析

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

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

最主要的幾個(gè)問(wèn)題就是上面的三個(gè),各有各的解決方案,本文主要說(shuō)的是可視化繪圖這部分,而這里畫(huà)圖的話就是使用Pyecharts來(lái)做的。

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

先說(shuō)下針對(duì)Prometheus的數(shù)據(jù)處理,Prometheus的查詢接口常用的有query和query_range,按照這樣進(jìn)行封裝,方便獲取數(shù)據(jù)時(shí)直接調(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

當(dāng)執(zhí)行query或者query_range的查詢時(shí),使用對(duì)應(yīng)的方法構(gòu)造查詢語(yǔ)句,然后調(diào)用run進(jìn)行語(yǔ)句運(yùn)行即可,封裝的比較。

Gauge圖

Gauge圖就是儀表盤(pán)圖,這里就不說(shuō)官方示例了,以我的用法來(lái)說(shuō),先通過(guò)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)

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

from pyecharts.charts import Gauge
	gauge1 = (
        Gauge()
        .add(
            # 必要配置
            series_name="內(nèi)存使用率",
            data_pair=[["內(nèi)存使用率", data]],
            # 設(shè)置儀表盤(pán)的條例
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(
                    # 設(shè)置不同區(qū)間的顏色,color中劃分不通區(qū)間的顏色,width為線條粗細(xì)
                    color=[(0.3, "#E9EB2E"), (0.9, "#37a2da"), (1, "#fd666d")], width=10
                )
            ),
            # tooltip的設(shè)置,進(jìn)行顯示的格式化
            tooltip_opts=opts.TooltipOpts(
                is_show=True, formatter=" : {c}%"),
            max_=100,
            min_=0,
            # 設(shè)置相對(duì)位置,橫縱坐標(biāo),當(dāng)使用Grid組合Gauge時(shí)必須設(shè)置,否則圖表會(huì)重合
            center=["25%", "50%"],
            # 儀表盤(pán)內(nèi)的指標(biāo)名稱字體設(shè)置
            title_label_opts=opts.GaugeTitleOpts(
                font_weight="bold",
                font_size=20
            ),
            # 儀表盤(pán)內(nèi)的指標(biāo)數(shù)值的設(shè)置
            detail_label_opts=opts.GaugeDetailOpts(
                formatter="{value}%",
                color="#1267CB",
                font_weight="bold",
                font_size="20",
                offset_center=["0%", "40%"],
            )
        )
        .set_global_opts(
            # Gauge的標(biāo)題設(shè)置
            title_opts=opts.TitleOpts(
                title="內(nèi)存使用率",
            ),
            # 設(shè)置圖例格式
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )

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

Bar圖-橫向

有的時(shí)候在使用條形圖的時(shí)候,需要使用橫向的條形圖,官方的示例比較少,可以這樣設(shè)置:

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

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

效果圖如下:

如何整合進(jìn)Flask中

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

在進(jìn)行圖表初始化的時(shí)候,可以添加InitOpts進(jìn)行圖表大小的設(shè)置:

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

在做模板渲染的時(shí)候,這樣進(jìn)行設(shè)置:

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

在對(duì)應(yīng)的模板view.j2中只需要這樣寫(xiě)就可以:

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

附錄

總結(jié)

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

相關(guān)文章

  • python類繼承與子類實(shí)例初始化用法分析

    python類繼承與子類實(shí)例初始化用法分析

    這篇文章主要介紹了python類繼承與子類實(shí)例初始化用法,實(shí)例分析了Python類的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 基于Python fminunc 的替代方法

    基于Python fminunc 的替代方法

    今天小編就為大家分享一篇基于Python fminunc 的替代方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python+OpenCV實(shí)現(xiàn)圖像拼接

    python+OpenCV實(shí)現(xiàn)圖像拼接

    這篇文章主要為大家詳細(xì)介紹了python+OpenCV實(shí)現(xiàn)圖像拼接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • pandas進(jìn)行數(shù)據(jù)輸入和輸出的方法詳解

    pandas進(jìn)行數(shù)據(jù)輸入和輸出的方法詳解

    這篇文章主要為大家詳細(xì)介紹了pandas進(jìn)行數(shù)據(jù)輸入和輸出的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 解決Python正則表達(dá)式匹配反斜杠''''\''''問(wèn)題

    解決Python正則表達(dá)式匹配反斜杠''''\''''問(wèn)題

    這篇文章主要介紹了Python正則表達(dá)式匹配反斜杠'\'問(wèn)題 ,很多朋友在使用python 正則式的過(guò)程中,經(jīng)常被這個(gè)問(wèn)題困擾,今天小編通過(guò)代碼給大家詳細(xì)介紹,需要的朋友可以參考下
    2019-07-07
  • Python urllib request模塊發(fā)送請(qǐng)求實(shí)現(xiàn)過(guò)程解析

    Python urllib request模塊發(fā)送請(qǐng)求實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Python urllib request模塊發(fā)送請(qǐng)求實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • pycharm 主題theme設(shè)置調(diào)整仿sublime的方法

    pycharm 主題theme設(shè)置調(diào)整仿sublime的方法

    今天小編就為大家分享一篇pycharm 主題theme設(shè)置調(diào)整仿sublime的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python實(shí)現(xiàn)上課點(diǎn)名器系統(tǒng)

    Python實(shí)現(xiàn)上課點(diǎn)名器系統(tǒng)

    今天給大家分享一個(gè)讀者粉絲投稿的,關(guān)于上課點(diǎn)名的實(shí)戰(zhàn)案例,對(duì)Python上課點(diǎn)名器實(shí)現(xiàn)過(guò)程感興趣的朋友,一起來(lái)看看是如何實(shí)現(xiàn)的吧
    2021-10-10
  • Python整型運(yùn)算之布爾型、標(biāo)準(zhǔn)整型、長(zhǎng)整型操作示例

    Python整型運(yùn)算之布爾型、標(biāo)準(zhǔn)整型、長(zhǎng)整型操作示例

    這篇文章主要介紹了Python整型運(yùn)算之布爾型、標(biāo)準(zhǔn)整型、長(zhǎng)整型操作,結(jié)合具體實(shí)例形式分析了Python中布爾型、標(biāo)準(zhǔn)整型、長(zhǎng)整型等相關(guān)運(yùn)算技巧,代碼備有詳盡注釋,需要的朋友可以參考下
    2017-07-07
  • 教你如何用python開(kāi)發(fā)一款數(shù)字推盤(pán)小游戲

    教你如何用python開(kāi)發(fā)一款數(shù)字推盤(pán)小游戲

    這篇文章主要介紹了教你如何用python開(kāi)發(fā)一款數(shù)字推盤(pán)小游戲,文中有非常詳細(xì)的代碼示例,喜對(duì)歡玩小游戲的或者正在學(xué)習(xí)python小游戲開(kāi)發(fā)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論