zoukankan      html  css  js  c++  java
  • pandas 数据可视化之折线图

    官网地址:https://openpyxl.readthedocs.io/en/stable/charts/line.html#id1

    openpyxl+pandas

    # coding=utf-8
    import pandas as pd
    import time
    from openpyxl import Workbook
    from openpyxl.chart import (
        LineChart,
        Reference,
    )
    from openpyxl.chart.axis import DateAxis
    
    
    def cpu_info(csv_path="./datas-permon/CPU_20200111005156.csv"):
        df = pd.read_csv(csv_path)    #dtype={'timeStamp':str}
        df['timeStamp'] = df['timeStamp'].apply(lambda x:time.strftime('%Y%m%d%H%M%S'
                                                                       ,time.localtime(int(str(x)[:10]))))
        user=df.loc[df.label=="192.168.110.151 CPU user"][["label","timeStamp","elapsed"]]
        iowait=df.loc[df.label=="192.168.110.151 CPU iowait"][["label","timeStamp","elapsed"]]
        idle=df.loc[df.label=="192.168.110.151 CPU idle"][["label","timeStamp","elapsed"]]
        it=df["timeStamp"].drop_duplicates().values.tolist()
        t=[ str(i) for i in it]
        u=user["elapsed"].values.tolist()
        io=iowait["elapsed"].values.tolist()
        idl=idle["elapsed"].values.tolist()
        rows=list(zip(t,u,io,idl))
        rows.insert(0,["timeStamp","user","iowait","idle"])
        return rows
    
    
    def mem_info(csv_path="./datas-permon/Meminfo_20200111005156.csv"):
        df=pd.read_csv(csv_path)
        df['timeStamp'] = df['timeStamp'].apply(lambda x:time.strftime('%Y%m%d%H%M%S'
                                                                       ,time.localtime(int(str(x)[:10]))))
        total=df.loc[df.label=="192.168.110.151 Memory total"][["label","timeStamp","elapsed"]]
        used=df.loc[df.label=="192.168.110.151 Memory used"][["label","timeStamp","elapsed"]]
        free=df.loc[df.label=="192.168.110.151 Memory free"][["label","timeStamp","elapsed"]]
        tol=total["elapsed"]/1024/1024/1024
        us=used["elapsed"]/1024/1024/1024
        fr=free["elapsed"]/1024/1024/1024
        it = df["timeStamp"].drop_duplicates().values.tolist()
        t = [str(i) for i in it]
        to=tol.values.tolist()
        f=fr.values.tolist()
        u=us.values.tolist()
        rows=list(zip(t,to,u,f))
        rows.insert(0,["timestamp","total","used","free"])
        return rows
    
    
    def network_info(csv_path="./datas-permon/NetIO_20200111005156.csv"):
        df=pd.read_csv(csv_path)
        df['timeStamp'] = df['timeStamp'].apply(lambda x:time.strftime('%Y%m%d%H%M%S'
                                                                       ,time.localtime(int(str(x)[:10]))))
        send=df.loc[df.label=="192.168.110.151 Network I/O bytessent"][["label","timeStamp","elapsed"]]
        recv=df.loc[df.label=="192.168.110.151 Network I/O bytesrecv"][["label","timeStamp","elapsed"]]
        elapsed_send=send["elapsed"].values.tolist()
        elapsed_recv=recv["elapsed"].values.tolist()
        it = df["timeStamp"].drop_duplicates().values.tolist()
        t = [str(i) for i in it]
        rows=list(zip(t,elapsed_send,elapsed_recv))
        rows.insert(0,["timeStamp","sentBytes","recvBytes"])
        return rows
    
    
    def performance_util(configurations):
        wb = Workbook()
        for configuration in configurations:
            rows = configuration["rows"]
            sheet = configuration["sheet_name"]
            label_max=configuration["label"]
            ws = wb.create_sheet(sheet, index=configuration["index"])
            for row in rows:
                ws.append(row)
            data = Reference(ws, min_col=2, min_row=1, max_col=label_max, max_row=len(rows)-1) # max_row=7
            # Chart with date axis
            c2 = LineChart()
            c2.title = "Date Axis"
            c2.style = 7
            c2.y_axis.title = "Size"
            c2.y_axis.crossAx = 500
            c2.x_axis = DateAxis(crossAx=100)
            c2.x_axis.number_format = '%Y%m%d%H%M%S'
            # c2.x_axis.majorTimeUnit = "days"
            c2.x_axis.title = "Date"
            c2.height = 16
            c2.width = 28
            c2.add_data(data, titles_from_data=True)
            dates = Reference(ws, min_col=1, min_row=2, max_row=len(rows)-1) # max_row=7
            c2.set_categories(dates)
            ws.add_chart(c2, "F1")
        wb.save("line_permon.xlsx")
    
    
    if __name__ == '__main__':
        cpu_dict={"rows":cpu_info(),"sheet_name":"CPU","index":0,"label":4}
        mem_dict={"rows":mem_info(),"sheet_name":"Mem","index":1,"label":4}
        network_dict = {"rows": network_info(), "sheet_name": "NetWork", "index": 2,"label":3}
        performance_util([cpu_dict,mem_dict,network_dict])
        # network_info()
    

      效果图:

     mem:

    network:

  • 相关阅读:
    第十一单元 beego验证
    第九单元 ORM
    第六单元 go操作redis
    第五单元 go操作mysql
    第四单元 参数配置
    springboot使用外置tomcat
    ⚡ 第二.三章顺序表与链表⚡
    c语言程序设计题 译密码
    翁恺 java进阶第一周作业
    Java 构造素数表的两种方法
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/12183226.html
Copyright © 2011-2022 走看看