python 画多盘的写放大曲线方法

在服务器测试中我们经常会遇见客户要求画出每个SSD的WAF曲线,也就是写放大,通常的做法就是我们每隔10分钟记录一下每个SSD的host写入量和nand写入量,下面我们介绍一下python处理多盘的WAF的做法
如图所示 假设这是一个记录多盘的写入量信息的表格
在这里插入图片描述我们最终的目的是生成对应的每个SSD的WAF的图品,那么该如何简单快速的实现呢?
第一步,就是把第一列的disk分组。这里让pandan帮忙处理

import pandas as pd
from matplotlib import pyplot as plt

# 读取CSV文件
df = pd.read_excel('waaaf.xls')
# 按照 disk 列分组
grouped = df.groupby('disk')

# 创建一个字典来存储每个 disk 的 WAF 值
waf_dict = {}

# 计算每个 disk 的 WAF 值
for name, group in grouped:
    waf_values = []
    print('----------', name)

结果如下:

C:\Users\13737\AppData\Local\Programs\Python\Python312\python.exe D:/python_pro/chap1/waf.py
---------- nvme0
---------- nvme1
---------- nvme2

进程已结束,退出代码为 0

第二步,就是把每个disk的WAF计算出来,并且存放在字典里

import pandas as pd
from matplotlib import pyplot as plt

# 读取CSV文件
df = pd.read_excel('waaaf.xls')
# 按照 disk 列分组
grouped = df.groupby('disk')

# 创建一个字典来存储每个 disk 的 WAF 值
waf_dict = {}

# 计算每个 disk 的 WAF 值
for name, group in grouped:
    waf_values = []

    # 按照索引计算相邻行的 WAF
    for i in range(1, len(group)):
        # 当前行和前一行的 nand 和 host 值
        nand_diff = group.iloc[i]['nand'] - group.iloc[i - 1]['nand']
        host_diff = group.iloc[i]['host'] - group.iloc[i - 1]['host']

        # 计算 WAF
        if host_diff != 0:
            waf = nand_diff / host_diff
            formatted_waf = format(waf, '.2f')
            waf_values.append(formatted_waf)

    # 将 WAF 值存储到字典中
    waf_dict[name] = waf_values

# 打印 WAF 值
for disk, wafs in waf_dict.items():
    print(f"Disk: {disk}")
    print(f"WAF Values: {wafs}")

运行结果如下:

Disk: nvme0
WAF Values: ['1.11', '0.45', '1.14', '2.67', '1.00']
Disk: nvme1
WAF Values: ['0.50', '0.55', '1.44', '1.78', '9.50']
Disk: nvme2
WAF Values: ['0.60', '1.75', '0.85', '2.00', '1.87']

第三步,就是把这个字典生成对应的每个SSD的CSV文件

import pandas as pd
from matplotlib import pyplot as plt

# 读取CSV文件
df = pd.read_excel('waaaf.xls')
# 按照 disk 列分组
grouped = df.groupby('disk')

# 创建一个字典来存储每个 disk 的 WAF 值
waf_dict = {}

# 计算每个 disk 的 WAF 值
for name, group in grouped:
    waf_values = []

    # 按照索引计算相邻行的 WAF
    for i in range(1, len(group)):
        # 当前行和前一行的 nand 和 host 值
        nand_diff = group.iloc[i]['nand'] - group.iloc[i - 1]['nand']
        host_diff = group.iloc[i]['host'] - group.iloc[i - 1]['host']

        # 计算 WAF
        if host_diff != 0:
            waf = nand_diff / host_diff
            formatted_waf = format(waf, '.2f')
            waf_values.append(formatted_waf)

    # 将 WAF 值存储到字典中
    waf_dict[name] = waf_values

# 打印 WAF 值
for disk, wafs in waf_dict.items():
    print(f"Disk: {disk}")
    print(f"WAF Values: {wafs}")
    for disk_waf in wafs:
        print(disk_waf)
        with open(f'{disk}.csv', 'a') as file:
            file.write(f'{str(disk_waf)}\n')

运行会生成对应的每个SSD的CSV文件
在这里插入图片描述第四步把每个对应CSV表格转化成图片就可以啦

import pandas as pd
from matplotlib import pyplot as plt

# 读取CSV文件
df = pd.read_excel('waaaf.xls')
# 按照 disk 列分组
grouped = df.groupby('disk')

# 创建一个字典来存储每个 disk 的 WAF 值
waf_dict = {}

# 计算每个 disk 的 WAF 值
for name, group in grouped:
    waf_values = []

    # 按照索引计算相邻行的 WAF
    for i in range(1, len(group)):
        # 当前行和前一行的 nand 和 host 值
        nand_diff = group.iloc[i]['nand'] - group.iloc[i - 1]['nand']
        host_diff = group.iloc[i]['host'] - group.iloc[i - 1]['host']

        # 计算 WAF
        if host_diff != 0:
            waf = nand_diff / host_diff
            formatted_waf = format(waf, '.2f')
            waf_values.append(formatted_waf)

    # 将 WAF 值存储到字典中
    waf_dict[name] = waf_values

# 打印 WAF 值
for disk, wafs in waf_dict.items():
    print(f"Disk: {disk}")
    print(f"WAF Values: {wafs}")
    for disk_waf in wafs:
        print(disk_waf)
        with open(f'{disk}.csv', 'a') as file:
            file.write(f'{str(disk_waf)}\n')
for disk in waf_dict.keys():
    data = pd.read_csv(f"{disk}.csv")
    fig = plt.figure(figsize=(10, 6), dpi=300)
    y1 = data.iloc[:, 0]
    plt.xlabel(u'time (10min)', size=10)
    plt.ylabel("WAF")
    plt.plot(y1, label='WAF')
    plt.title(f"{disk}_waf")
    plt.grid(alpha=0.4)
    plt.xlim(xmin=0)
    plt.ylim(ymin=0)
    plt.savefig(str(disk) + ".png")

图片如下:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

要通过Python画出loss曲线,可以按照以下步骤进行操作: 1. 首先,导入所需的包,包括numpy和matplotlib.pyplot等。读取包含训练结果的txt文件,假设有两个模型的训练记录文件。 2. 根据文件中的数据,提取出训练步数和对应的loss值作为绘图的x和y坐标。 3. 创建一个图像对象和子图对象,用于绘制整体的loss曲线。 4. 使用绘图函数(如plot)画出整体的loss曲线,并设置曲线的颜色、线型和标签等。 5. 可选地,添加图例、设置坐标轴标签和标题等。 6. 如果需要显示部分放大曲线,可以使用inset_axes函数创建一个小图,并在小图中绘制放大区域的曲线。 7. 将绘制好的曲线保存为图片文件,可以使用savefig函数。 8. 最后,使用show函数显示图像。 以上就是通过Python画出loss曲线方法,可以根据具体的需求和数据进行相应的调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [如何通过python画loss曲线 & 点线颜色及点线型设置说明(超实用)](https://blog.csdn.net/weixin_40293250/article/details/107029595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [如何通过python画loss曲线方法](https://download.csdn.net/download/weixin_38655682/12862294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值