第76篇 Python在数据分析中的应用:面试官问“实验数据怎么分析的”,别只说Excel 上篇聊了自动化测试。今天说一个几乎每天都会用到的技能——用Python分析机器人的实验数据。先讲个场景。你做了一个抓取机器人跑了100次抓取实验每次记录了物体位置、抓取姿态、是否成功、耗时等数据。现在老板问你抓取成功率多少不同物体的成功率有差异吗耗时和成功率有关系吗如果你用Excel打开CSV手动筛选、手动统计——100次还行1000次呢而且下次实验又要重新来一遍。用Python做数据分析写一次脚本以后每次实验数据丢进去报告自动出来。这就是效率差距。实验日志的格式和读取机器人实验日志通常有几种格式。最常见的是CSV——每行一次实验记录每列一个字段。比如timestamp,object,position_x,position_y,grasp_angle,success,cycle_time 2024-03-15 10:23:01,cube,0.45,0.12,30.5,1,2.3 2024-03-15 10:23:05,cylinder,-0.32,0.08,45.2,0,3.1 2024-03-15 10:23:09,cube,0.51,-0.15,15.8,1,2.1用pandas读取一行代码import pandas as pd df pd.read_csv(experiment_log.csv) print(df.head()) print(f总共 {len(df)} 次实验)还有一种是ROS2的bag文件需要用rosbags库解析。实际工作中bag文件通常先导出成CSV再做分析——可以用ros2 bag命令行工具也可以用Python脚本批量处理。统计分析从原始数据到有意义的结论数据读进来之后最重要的是统计分析。基础统计# 总体成功率 success_rate df[success].mean() print(f抓取成功率: {success_rate*100:.1f}%) # 按物体类型分组统计 grouped df.groupby(object).agg( success_rate(success, mean), avg_time(cycle_time, mean), count(success, count) ) print(grouped)这段代码做的事情是按物体类型分组分别计算成功率、平均耗时和实验次数。输出结果一目了然——cube的成功率可能95%cylinder可能只有70%因为圆柱体容易滑。更深入的分析可以看相关性# 抓取角度和成功率的关系 angle_success df.groupby( pd.cut(df[grasp_angle], bins[0, 15, 30, 45, 60, 90]) )[success].mean() # 耗时和成功率的关系 import scipy.stats as stats corr, p_value stats.pointbiserialr(df[success], df[cycle_time]) print(f耗时与成功率的相關性: r{corr:.3f}, p{p_value:.4f})这种分析能告诉你抓取角度在什么范围内成功率最高耗时和成功率有没有相关性这些结论直接影响算法优化方向。数据可视化让结论一目了然统计分析完了需要用图表展示。前面第73篇聊过Matplotlib基础这里结合数据分析场景画两张实用的图import matplotlib.pyplot as plt fig, axes plt.subplots(1, 2, figsize(12, 4)) # 左不同物体的成功率对比 by_object df.groupby(object)[success].mean() by_object.plot(kindbar, axaxes[0], color[#4C72B0, #55A868, #C44E52]) axes[0].set_title(抓取成功率对比) axes[0].set_ylabel(成功率) for i, v in enumerate(by_object.values): axes[0].text(i, v 0.02, f{v*100:.1f}%, hacenter) # 右成功/失败实验的耗时分布 axes[1].hist(df[df[success]1][cycle_time], bins20, alpha0.7, label成功) axes[1].hist(df[df[success]0][cycle_time], bins20, alpha0.7, label失败) axes[1].set_xlabel(耗时 (s)) axes[1].legend() axes[1].set_title(耗时分布) plt.tight_layout() plt.savefig(analysis.png, dpi150)左图看不同物体的成功率差异右图看成功和失败实验的耗时分布有没有区别。这两张图在面试汇报里非常好用——一眼就能看出问题在哪。自动化报告生成数据分析的最终产出是报告。手动复制粘贴图表太原始了Python可以自动化。最实用的方式是用Jupyter Notebook——分析代码、图表、文字说明都在一个文件里导出成PDF就是完整的实验报告。也可以用python-docx生成Word格式。核心逻辑很简单def generate_report(csv_path, output_dir): df pd.read_csv(csv_path) summary { 总实验次数: len(df), 成功率: f{df[success].mean()*100:.1f}%, 平均耗时: f{df[cycle_time].mean():.2f}s, } by_object df.groupby(object)[success].mean() # 生成图表... plt.savefig(f{output_dir}/report.png, dpi150) return summary每次实验完跑一次报告自动生成。加上日期、实验参数、环境信息就是标准化的报告模板。面试中怎么聊数据分析面试官问数据分析想考察的不是你会不会用pandas——这个太基础了。他想看的是你能不能从数据里发现问题、得出结论、指导优化。一个好的回答思路先说你做了什么实验收集了什么数据。然后说你怎么分析的——用了什么统计方法、画了什么图。最后说你从数据里发现了什么——比如发现抓取角度大于45度时成功率显著下降于是调整了抓取策略成功率从75%提升到了90%。这种数据驱动优化的思路比我调了调参数效果变好了有说服力得多。数据分析在机器人项目中的实际应用机器人项目中经常需要分析大量实验数据比如传感器日志、性能指标等。Python的pandas库在这方面非常强大。一个典型的场景是从ROS bag中提取数据用pandas做统计分析然后生成报告。面试时如果能举出具体例子比如用pandas分析了100次导航实验的成功率和耗时分布会比泛泛而谈有说服力得多。另外用matplotlib画实验对比图时注意配色方案的选择。色盲友好的配色在正式报告中很重要推荐用seaborn的默认主题几行代码就能让图表专业度提升一个档次。给正在准备面试的你建议你做一个完整的数据分析练习设计一个实验可以是仿真的跑几十次记录数据用pandas做统计分析用matplotlib画三四种图最后写一段结论。整个过程不超过两小时但面试的时候你能讲出一个完整的故事。下篇聊PyTorch快速入门——机器人领域越来越离不开深度学习了解基本的PyTorch用法很有必要。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第75篇 Python在机器人测试中的应用——自动化测试脚本编写下一篇预告第77篇 Python在深度学习中的应用——PyTorch快速入门有任何问题欢迎评论区留言我会尽量回复。