WinClip非官方复现代码学习笔记8

本文详细介绍了项目中utils模块的CSV_utils.py文件,涉及字典、键值对、DataFrame、CSV文件的使用,以及如何将实验结果写入CSV并处理度量数据。
摘要由CSDN通过智能技术生成

一、程序结构展示

上几篇笔记主要介绍了项目中datasets目录下的各个文件的内容及作用,从本篇笔记开始讲解项目中utils下的各个代码,因为_init_.py文件为空,所以本篇笔记从csv_utils.py文件入手开始讲解。

二、代码功能介绍

这段代码是一个用于写入实验结果到CSV文件的Python函数。其中有三个名词需要着重介绍的:

1. 字典

字典(Dictionary)是 Python 中的一种数据结构,用于存储键值对(key-value pairs)。它是一个无序的集合,其中每个元素由一个键(key)和一个对应的值(value)组成。键必须是唯一的且不可变的,通常是字符串或数字,而值可以是任意类型的数据,包括列表、元组、其他字典等。通过键可以快速地查找对应的值,从而实现高效的数据检索和操作。

2. 键值

键值(Key-Value)指的是字典中的每个元素,其中一个键与其对应的值构成一对。通过键来访问值,这种键值对的结构是字典的基本特征。

3. DataFrame

DataFrame是 pandas 库中的一种数据结构,类似于电子表格或关系型数据库中的表格。它是一个二维标记数组,每列可以包含不同类型的数据(整数、浮点数、字符串等),并且可以通过标签或整数索引访问行和列。DataFrame 提供了丰富的方法和函数用于数据操作、筛选、聚合和分析,是进行数据处理和分析的常用工具。

4. CSV文件

CSV(Comma-Separated Values)文件是一种常见的文本文件格式,用于存储表格数据。每行代表表格中的一条记录,每列之间用逗号或其他特定的分隔符(如制表符、分号等)进行分隔。CSV 文件通常不包含行和列的标题,但也可以包含。由于其简单的结构和普遍的可读性,CSV 文件在数据交换和存储中被广泛应用,尤其是在数据分析和机器学习领域。

三、代码逐行注释

import pandas as pd  # pandas是一个提供了丰富苏基本结构和数据分析工具包的python库。
import os  # os是python的内置库,提供了访问操作系统功能的接口。

def write_results(results:dict, cur_class, total_classes, csv_path):  # 函数“write_results”接受四个参数:包含结果的字典、当前类别、所有类别的列表、csv文件路径
    keys = list(results.keys())  # 提取结果字典中的所有键,保存在列表keys中

    if not os.path.exists(csv_path):  # 如果指定的csv文件路径不存在
        df_all = None  # 就创建一个新的dataFrame(类似于表格)命名为df_all,以此来存储所有类别的结果
        for class_name in total_classes:  # 遍历“total_classes”列表
            r = dict()  # 对每个类别初始化一个字典r
            for k in keys:  # 键是结果的键,初始化键值为0.00
                r[k] = 0.00
            df_temp = pd.DataFrame(r, index=[class_name])  # 使用这个字典创建DataFrame“df_temp”

            if df_all is None:
                df_all = df_temp
            else:
                df_all = pd.concat([df_all, df_temp], axis=0) # 通过“pd_concat”的方法将“df_temp”连接到“df_all”中

        df_all.to_csv(csv_path, header=True, float_format='%.2f') # 将df_all文件保存为csv文件

    df = pd.read_csv(csv_path, index_col=0) # 读取CSV文件中的内容到DataFrame“df”中

    for k in keys:
        df.loc[cur_class, k] = results[k]

    df.to_csv(csv_path, header=True, float_format='%.2f')

def save_metric(metrics, total_classes, class_name, dataset, csv_path):# 这个函数接受五个参数:包含度量结果的字典、所有类别的列表、当前类别的名称、数据集名称、CSV文件路径
    if dataset != 'mvtec':  # 如果dataset不是mvtec这个数据集的话
        for indx in range(len(total_classes)):  # 对total_classes列表里面的每个类别名称添加datasets的前缀
            total_classes[indx] = f"{dataset}-{total_classes[indx]}"
        class_name = f"{dataset}-{class_name}"  # 并且为class_name 添加dataset的前缀
    write_results(metrics, class_name, total_classes, csv_path)  # 调用这个函数将度量结果写入csv文件中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值