ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

影刀RPA新手教程:Python matplotlib数据可视化实战——自动生成图表与报告

影刀RPA新手教程:Python matplotlib数据可视化实战——自动生成图表与报告 影刀RPA新手教程Python matplotlib数据可视化实战——自动生成图表与报告一、认识影刀Python模块与matplotlib环境搭建影刀的「Python模块」指令在指令集里搜「Python」就能找到支持传入字符串代码执行也支持调用本地已安装的Python环境生产环境用本地环境更稳定。先在本地装matplotlibpip install matplotlib pillow版本用3.5.x以上低版本的中文显示修复方式不一样下面只讲3.5的写法。影刀调用Python有两种方式「执行Python代码」指令直接写代码「调用Python脚本文件」指令执行.py文件批量画图用脚本文件方式代码好维护。环境检测在影刀里用「执行Python代码」跑import matplotlib; print(matplotlib.__version__)能打印出版本号说明环境OK报错就检查Python是否加到系统PATH里。home.linyan.cloud 上有matplotlib中文显示的完整代码示例直接复制改路径就能用不用自己踩坑试字体路径。二、元素定位从电商网站采集可视化所需数据采集电商数据用「获取元素文本」指令价格数据的定位用XPath//span[contains(class,price)]不同网站class名不同用contains模糊匹配比精确匹配稳。采集到的价格是字符串带¥符号要用「字符串替换」指令把¥和逗号去掉再用「转换为数字」指令转成浮点数不转直接喂给matplotlib会报「输入的不是数值」。销量数据往往在「已售XX件」这种文本里用正则表达式提取数字(\d), 影刀的「正则表达式匹配」指令支持提取分组提取后直接存列表变量。分页采集用「获取元素属性」指令读取「下一页」按钮的href属性为空说明到尾页了这个比「元素是否存在」更准因为下一页按钮一直存在只是变灰。采集到的数据存「列表」变量每个元素是一个字典{商品名:XX,价格:99.9,销量:1234}后面喂给matplotlib直接遍历这个列表就行。三、变量与数据类型组织可视化数据matplotlib画图需要独立的数据列表价格列表、销量列表、商品名列表用「For循环」遍历采集结果分别append到三个列表变量里不要一边采集一边画数据没采集完画图会缺数据。中文字体路径存「字符串」变量Windows下一般用C:/Windows/Fonts/simhei.ttf黑体存到变量里后面注册字体用路径用正斜杠反斜杠在Python字符串里要转义。图表配置标题、X轴名、Y轴名、颜色存「字典」变量键是配置项名称值是配置内容后面传给画图函数时用**config_dict解包改配置不用改函数代码。图片保存路径用「字符串格式化」指令拼接C:/Users/用户名/Desktop/报表/价格趋势_{日期}.png日期用「当前时间」指令获取并格式化成YYYYMMDD每次运行生成不同文件名不会覆盖上次的图表。变量类型踩坑影刀的「数字」变量是Double类型传给matplotlib没问题但如果是从Excel读出来的数字有可能是字符串要先转类型再传不转图表能生成但数据不对。四、流程控制按条件生成不同类型图表用「条件判断」指令判断数据量小于5条数据画饼图没意义扇形太小看不清自动改成画柱状图用「变量赋值」指令改chart_type变量后面统一用这个变量决定画什么图。For循环里每处理完一个类目的数据就画一张图不要等所有数据处理完再画内存占用高matplotlib的plt.close()要每次画完都调用不调用内存会一直涨画到第十几张图就报内存错误。异常捕获用「尝试捕获」包裹整个画图流程捕获到异常后用「写入日志」指令记录是哪个商品、哪个步骤出错然后continue跳过这张图继续画下一张不要因为一个商品数据异常导致整份报告废掉。图表生成成功后用「条件判断」检查文件是否真的生成了用「文件是否存在」指令检查图片路径不存在说明matplotlib保存失败一般是路径权限问题失败则发消息通知自己不要假设只要代码跑了文件就一定存在。流程控制的真实细节matplotlib的plt.show()在影刀Python环境里会卡住因为影刀没有GUI界面要用plt.savefig()直接保存不要调用show()卡住了只能杀进程。五、网页自动化采集电商数据实战价格趋势分析需要历史价格数据用「打开网页」指令打开电商商品页用「等待元素出现」指令等价格元素加载完再抓不等直接抓会拿到空字符串。动态加载的价格日历比如去哪儿网的日历价格要用「执行JavaScript」指令触发日期切换触发后用「等待」指令等2秒让数据加载完再抓对应日期的价格不等待拿到的是旧数据。多个商品的比价分析用「列表循环」遍历商品URL列表每个URL打开后采集价格、销量、评价数存到同一个Excel文件的不同Sheet里后面画图时分别读取不同Sheet的数据。网页自动化的坑电商网站有反爬频繁访问会出验证码用「条件判断」指令检测是否出现验证码出现了用「发送快捷键CtrlW」关标签页等5分钟再继续不要硬刚验证码。采集完数据后用「关闭浏览器」指令关掉所有标签页不关的话下次「打开网页」会新建窗口开多了内存爆掉影刀的浏览器实例不会自动回收。六、数据处理为matplotlib准备干净数据价格数据里的「暂无报价」和「¥咨询价」要过滤掉用「条件判断」指令判断字符串是否包含数字不包含就跳过把脏数据喂给matplotlib会报错或者画出错误的图。销量数据里的「万」要处理1.2万要转成12000用「条件判断」判断是否包含「万」包含就用「字符串替换」去掉「万」再转数字后乘10000不处理直接画图销量差10^4倍。商品名太长的要截断matplotlib的X轴标签如果太长会重叠用「条件判断」判断字符串长度10就用「子字符串」指令截断为前10个字符加...画图前处理好不要依赖matplotlib的自动换行中文自动换行经常失效。数据排序画柱状图前要按数值排序用「列表排序」指令对数据列表排序key参数指定按价格或销量排序不排序柱状图的高低顺序是乱的对比效果很差。数据处理的筛选感同一份数据画出多张图价格趋势、销量对比、品类占比每张图的数据在原数据基础上做不同的过滤和聚合过滤逻辑写清楚不然出来的图自己都看不懂哪个是哪个。七、鼠标键盘图像自动化图表截图与标注生成的图表图片用「截图」指令截Excel里嵌入的图表区域和matplotlib原生图表做对比放在报告里说明数据一致性这个操作用「鼠标移动到元素」→「截图指定区域」两步完成。图表保存路径如果有中文matplotlib saving时会报编码错误解决方式是在Python代码开头加import matplotlib; matplotlib.rcParams[font.sans-serif] [SimHei]这步和中文显示一起做不要分开处理。多张图表合并到一张报告图用「图像操作」指令但不是所有格式都支持PNG可以JPG会失真用Python的PIL库Pillow合并更稳影刀的「执行Python代码」指令可以直接调用PIL。图表标注用「图像识别」指令找到图表里的关键点比如最高销量的柱状图顶部然后用「鼠标点击」在对应位置加标注这个操作用在给领导汇报的图表上标注清楚哪根是哪根。图像自动化的踩坑截图指令的坐标准确性依赖于屏幕分辨率用「获取窗口位置」指令获取Excel窗口的坐标然后算相对坐标截图不要写死绝对坐标换台电脑就截歪了。八、进阶技能matplotlib中文显示问题彻底解决matplotlib中文显示的核心是注册中文字体代码这么写这是真实可用的代码不是demoimportmatplotlib.pyplotaspltimportmatplotlib.font_managerasfm# 注册中文字体黑体font_pathC:/Windows/Fonts/simhei.ttffont_propfm.FontProperties(fnamefont_path)plt.rcParams[font.family]font_prop.get_name()plt.rcParams[axes.unicode_minus]False# 解决负号显示问题字体路径要用正斜杠Windows下反斜杠在Python字符串里要写成\\\\或者直接写正斜杠matplotlib两个都能认。验证中文字体是否生效画一张测试图标题写中文保存后用「图片查看」指令打开能看到中文说明生效了看到方块说明字体路径错了或者字体文件损坏。进阶技巧把字体注册代码封装成一个函数init_chinese_font()每次画图前调用函数放在一个单独的font_helper.py里影刀的「调用Python脚本文件」指令指定这个文件多个脚本复用同一份字体配置。真实踩坑服务器环境无GUI下matplotlib需要指定后端为Agg在导入pyplot之前加import matplotlib; matplotlib.use(Agg)不加会报_tkinter相关错误本地运行没问题上线就挂。九、平台实战生成图表→嵌入Excel→邮件发送完整流程实战场景每天采集竞品价格数据用matplotlib生成价格趋势折线图、销量对比柱状图、品类占比饼图三张图嵌入Excel报告邮件发送给运营总监。第一步采集与画图采集竞品数据→清洗数据→用matplotlib画三张图→保存到C:/报表临时文件/目录文件名带日期避免重复。第二步嵌入Excel用「打开Excel」指令打开报告模板模板里已经设计好了排版用「插入图片」指令把三张图插到指定单元格位置位置用行号和列号指定不要用鼠标点击定位坐标不准。第三步生成PDFExcel报告做好后用「导出为PDF」指令生成PDF版报告PDF比Excel兼容性好手机上也能正常查看图表邮件附件附PDF版。第四步邮件发送用「发送邮件」指令发送报告收件人从配置表读取邮件正文用「字符串格式化」填入今日日期和核心结论比如「今日XX商品价格下降5%」附件挂PDF和Excel两个文件。两个平台Excel邮件打通后每天定时自动生成报告并发出运营总监不用每天催报告了你也不用每天做重复劳动。十、系统联动Excel报告与邮件的无缝对接Excel报告模板用「Excel读取」指令读取配置Sheet里的收件人列表、图表位置配置、颜色主题配置所有可变内容都放配置Sheet改报告样式不用改影刀流程改Excel模板就行。邮件发送失败要用「条件判断」捕获SMTP错误常见错误是授权码过期QQ邮箱和163邮箱的授权码有时间限制捕获到错误后用「发送飞书消息」通知自己更新授权码不要直接忽略。PDF生成的页眉页脚用「PDF操作」指令添加页眉写报告名称页脚写生成日期和「内部资料请勿外传」法律合规要求不做出问题要背锅。系统联动的坑Excel里嵌入matplotlib生成的图片后文件会变大一张图约200KB三张图600KB邮件附件大小超限时用「PDF压缩」指令压缩PDF或者只发PDF不要发Excel原文件。跨系统联调时先小批量测试先采集2个商品的数据生成报告确认图表没问题再全量跑全量跑完发现图表是乱的那天白干了。十一、工程化与规范可视化项目的可维护性图表颜色、字体大小、线条样式存到「配置文件」JSON格式用「读取JSON文件」指令加载配置不要硬编码到Python脚本里运营说「把柱状图颜色改成蓝色」你不用改代码改配置文件重启流程就行。每天生成的图表文件用「日期文件夹」分类存储C:/报表归档/2024-01/价格趋势_20240115.png用「创建文件夹」指令按日期自动创建目录文件多了好找也方便后续回顾趋势。Python脚本版本管理每次改了画图逻辑在脚本文件头部加注释写清楚改了什么比如# 2024-01-15 修复中文显示问题出了问题能快速定位是哪次改动引入的。工程化细节matplotlib生成透明背景的图表用plt.savefig(output.png, transparentTrue)透明背景的图表嵌入PPT更好看白底图表嵌到有色背景的PPT里很难看。定时任务用影刀的「计划任务」配置每天早上8点自动运行运行结果用「发送通知」指令通知自己「今日报告已生成」不用每天手动点运行。十二、速查表与常见报错问题原因解决办法图表中文显示成方块没注册中文字体用font_manager注册simhei.ttf参考第八节代码负号显示成方块rcParams未设置axes.unicode_minus加一行plt.rcParams[axes.unicode_minus] False服务器环境报错_tkinter未指定Agg后端导入pyplot之前加matplotlib.use(Agg)图片保存失败路径含中文或权限不足路径改用英文或用Python的os.path模块处理中文路径折线图线条不显示数据里有None值用列表推导式过滤None[x for x in data if x is not None]饼图百分比显示重叠扇形太小设置pctdistance0.8或者只显示大于5%的扇形柱状图标签重叠X轴标签太长用plt.xticks(rotation45)旋转45度或者截断标签文本内存占用越来越高没调用plt.close()每次保存完图表后调用plt.close(all)释放内存邮件发送失败SMTP授权码过期重新获取邮箱授权码更新到影刀配置里Excel嵌入图片位置偏移用了鼠标点击定位改用「插入图片」指令的行号/列号参数定位内容标签影刀RPA、Python matplotlib、数据可视化、电商数据分析、自动化报告、RPA实战作者林焱。到此为止
返回列表