Python算法测试结果自动保存至Excel的实现步骤
本文详解如何利用Python将算法样本测试结果(含误检、漏检、预测及真实标签数)自动计算并导出为.xls格式表格。通过封装专用函数,可一键完成逐行数据记录与全局准确率、检出率等指标统计,适用于模型迭代阶段的批量结果复盘。
算法测试数据自动导出至Excel的原理与准备
在进行算法评估时,通常需要针对每个样本的处理结果进行精细化统计。将每个样本的预测详情与漏检、误检数量直接写入表格,能够实现快速筛查与直观定位,显著降低人工核对成本。该方案主要依赖第三方库xlwt进行底层表格渲染。
第1步:安装操作依赖库
目的:获取能够生成.xls格式文件的Python处理模块。入口:系统终端或集成开发环境的命令行界面。动作:执行包管理器安装命令。参数:xlwt。完成状态:终端提示Successfully installed即表示环境就绪,后续代码即可调用该库的基础类。
pip install xlwt
第2步:初始化工作簿与定义表头
目的:创建符合UTF-8编码规范的空白电子表格,并预设数据列名以便对齐导入。入口:Python脚本顶部引入import xlwt。动作:实例化Workbook对象并添加新工作表,随后通过write(row, col, label=...)方法按行列坐标填充标题。关键参数:行号与列号均从0开始计数,第一行为索引0。完成状态:内存中生成一个包含六列标准表头的空表格结构。
myWorkbook = xlwt.Workbook(encoding='utf-8')
mySheet = myWorkbook.add_sheet('Sheet1')
第3步:编写循环写入与汇总逻辑
目的:将各维度测试数据按样本逐行落盘,并在末尾追加整体统计与核心评估指标。入口:构造统一的数据处理函数入口。动作:遍历输入列表,依次写入文件名与四类核心数值;利用循环结束后的当前索引值向下偏移,插入总计行、指标名称行与计算结果行。重要参数:files(样本名数组)、fps/fns/prs/lbs(对应误检/漏检/预测/标签数数组)、savepath(输出路径)。完成状态:调用函数后指定目录生成带数据的.xls文件,且控制台打印出完整的统计摘要。
def write_result_to_excel(files, fps, fns, prs, lbs, savepath='res.xls'):
# 1. 初始化环境
myWorkbook = xlwt.Workbook(encoding='utf-8')
mySheet = myWorkbook.add_sheet('Sheet1')
# 2. 写入表头
headers = ['样本名称', '目标标签个数', '预测标签个数', '正确预测个数', '错误预测个数', '漏检目标个数']
for col_idx, header in enumerate(headers):
mySheet.write(0, col_idx, label=header)
# 3. 逐行写入样本数据
for i in range(len(files)):
mySheet.write(i + 1, 0, label=files[i])
mySheet.write(i + 1, 1, label=lbs[i])
mySheet.write(i + 1, 2, label=prs[i])
# 正确预测数通常由标签总数减去漏检数推导得出
mySheet.write(i + 1, 3, label=lbs[i] - fns[i])
mySheet.write(i + 1, 4, label=fps[i])
mySheet.write(i + 1, 5, label=fns[i])
# 4. 计算全局总和
fp_sum = sum(fps)
fn_sum = sum(fns)
pr_sum = sum(prs)
lb_sum = sum(lbs)
# 5. 基于脚本设定公式计算核心指标
residual = fn_sum / lb_sum * 100
recall = 100 - residual
error = fp_sum / pr_sum * 100
precision = 100 - error
accuracy = recall * precision / 100
# 6. 追加总计行与指标展示区
total_row_idx = i + 2
mySheet.write(total_row_idx, 0, label='总计')
mySheet.write(total_row_idx, 1, label=lb_sum)
mySheet.write(total_row_idx, 2, label=pr_sum)
mySheet.write(total_row_idx, 3, label=lb_sum - fn_sum)
mySheet.write(total_row_idx, 4, label=fp_sum)
mySheet.write(total_row_idx, 5, label=fn_sum)
mySheet.write(total_row_idx + 1, 1, label='检出率(%)')
mySheet.write(total_row_idx + 1, 2, label='漏检率(%)')
mySheet.write(total_row_idx + 1, 3, label='准确率(%)')
mySheet.write(total_row_idx + 1, 4, label='误检率(%)')
mySheet.write(total_row_idx + 1, 5, label='精度(%)')
mySheet.write(total_row_idx + 2, 1, label=recall)
mySheet.write(total_row_idx + 2, 2, label=residual)
mySheet.write(total_row_idx + 2, 3, label=precision)
mySheet.write(total_row_idx + 2, 4, label=error)
mySheet.write(total_row_idx + 2, 5, label=accuracy)
# 7. 保存文件并打印控制台摘要
myWorkbook.save(savepath)
s = '目标标签个数:{0}\n预测标签个数:{1}\n正确预测个数:{2}\n错误预测个数:{3}\n漏检目标个数:{4}\n'.format(lb_sum, pr_sum, lb_sum-fn_sum, fp_sum, fn_sum)
s += '检出率recall:{0}\n漏检率residual:{1}\n准确率precision:{2}\n误检率error:{3}\n精度accuracy:{4}'.format(recall, residual, precision, error, accuracy)
print(s)
运行验证与排错参考
执行函数后,检查目标文件夹是否成功生成对应后缀的文件,双击打开确认行列对齐无错位且总计区域数值连续。若控制台抛出ModuleNotFoundError,请返回第一步核对xlwt版本匹配情况。由于循环变量i在Python中会保留最后一次迭代值,代码利用i + 2向下定位总计单元格属于合法写法。如需修改默认存储位置或更改工作表名称,直接在函数签名调整savepath参数或调用add_sheet('新名称')即可。
简要总结
上述流程涵盖了从环境准备、表头初始化到批量数据写入与指标自动汇总的完整链路。开发者只需维护长度一致的输入列表,即可将繁杂的算法验证记录转化为结构化报表,大幅提升复盘效率。以上就是利用Python脚本将算法测试结果自动整理并保存至Excel表格的详细内容,更多关于python数据处理与模型评估工具的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













