ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

影刀RPA新手教程:数据透视与分析报告自动化——Python pandas让数据会说话

影刀RPA新手教程:数据透视与分析报告自动化——Python pandas让数据会说话 影刀RPA新手教程数据透视与分析报告自动化——Python pandas让数据会说话0. 这篇文章解决什么问题采集完数据只是第一步。把数据变成报告才能交付。这篇文章用pandas做数据透视、groupby分组汇总、openpyxl写带样式的Excel并自动画折线图最后飞书发报告。全程代码没有废话。1. 认识影刀 / 安装确认确认影刀已安装数据处理和Python指令集。安装方式指令中心→搜索→勾选→安装。pandas和openpyxl是Python标准生态库影刀Python代码块里import pandas和import openpyxl直接用不用单独装。影刀官网 home.linyan.cloud 有详细的Python环境说明。影刀的Python是内置的3.8环境自带pandas、numpy、openpyxl、requests等常用库。如果缺了什么包在设置→Python环境中手动pip安装。2. 元素定位四合一这篇文章不涉及网页自动化元素定位部分跳过。但如果你需要从网页抓数据做分析报告回顾前面文章的元素定位四种方式XPath/CSS/文本/相对定位。3. 变量与数据类型数据处理核心pandas处理的核心数据类型DataFrame最常用二维表类似Excel表格。影刀数据表格可以直接转DataFrameimportpandasaspd# data_table是影刀的D类型变量数据表格dfpd.DataFrame(data_table)SeriesDataFrame的一列是一个带索引的数组。日期类型转换关键坑df[发布日期]pd.to_datetime(df[发布日期])# 如果读进来是字符串2024-01-15NaN处理df[价格]pd.to_numeric(df[价格],errorscoerce)# 转换失败变NaNdf.dropna(subset[价格],inplaceTrue)# 删掉价格为NaN的行df.fillna({描述:无},inplaceTrue)# 用无填充空描述4. 流程控制分析报告生成流程生成分析报告的流程控制步骤1读取采集到的原始数据Excel 步骤2数据清洗价格标准化、日期格式化、NaN填充 步骤3数据透视分析按维度分组统计 步骤4写入分析结果到Excel带样式 步骤5生成折线图 步骤6通过飞书/邮件发送报告用if判断处理不同维度ifreport_type价格分析:resultdf.groupby(价格区间)[商品数量].sum()elifreport_type平台对比:resultdf.groupby(平台)[均价].mean()elifreport_type趋势分析:resultdf.groupby(日期)[均价].mean().reset_index()5. 网页自动化分析报告的文章不涉及网页自动化但如果你需要把报告上传到网页系统比如企业内部BI平台参考前面文章的网页自动化操作。6. 数据处理pandas完整分析流程读数据importpandasaspd# 读Exceldfpd.read_excel(D:/data/采集结果.xlsx)# 读多个文件合并importglob all_dfs[]forfileinglob.glob(D:/data/采集*/*.xlsx):all_dfs.append(pd.read_excel(file))dfpd.concat(all_dfs,ignore_indexTrue)df.drop_duplicates(subset[商品URL],inplaceTrue)# 去重数据清洗# 1. 价格字段统一为纯数字df[价格]df[价格].str.replace(元,).str.replace(,)df[价格]df[价格].str.replace(,,).str.strip()df[价格]pd.to_numeric(df[价格],errorscoerce)# 2. 日期列转标准格式df[发布日期]pd.to_datetime(df[发布日期])![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/cec244e100d74d028fbb883244f2376e.png#pic_center)# 3. 添加辅助列月份、周数df[月份]df[发布日期].dt.month df[周数]df[发布日期].dt.isocalendar().week数据透视三大用法groupby分组统计# 按成色分组统计均价condition_statsdf.groupby(成色).agg(商品数(标题,count),均价(价格,mean),最低价(价格,min),最高价(价格,max)).round(2)pivot_table交叉表# 成色 × 价格区间交叉透视df[价格区间]pd.cut(df[价格],bins[0,500,1000,2000,3000,5000,10000])pvtpd.pivot_table(df,index成色,columns价格区间,values标题,aggfunccount,fill_value0)时间序列分组# 按周统计新增商品数量weeklydf.groupby(df[发布日期].dt.isocalendar().week.astype(int)).size()weeklyweekly.reset_index(name商品数)7. 鼠标键盘 / 图像自动化分析报告流程不涉及这部分。但如果你的报告需要在固定时间打开指定的Excel发给某人可以用图像识别定位发送按钮。了解即可。8. 进阶技能openpyxl写样式 画图基础写入fromopenpyxlimportWorkbookfromopenpyxl.stylesimportFont,PatternFill,Alignment,Border,Side wbWorkbook()wswb.active ws.title竞品价格分析报告# 写标题行ws[A1]竞品价格分析报告ws[A1].fontFont(name微软雅黑,size16,boldTrue,color1F4E79)ws.merge_cells(A1:E1)设置样式颜色、边框、字体# 表头样式header_fillPatternFill(start_color4472C4,end_color4472C4,fill_typesolid)header_fontFont(name微软雅黑,size11,boldTrue,colorFFFFFF)header_alignAlignment(horizontalcenter,verticalcenter)headers[成色,商品数,均价,最低价,最高价]forcol,headerinenumerate(headers,1):cellws.cell(row2,columncol,valueheader)cell.fillheader_fill cell.fontheader_font cell.alignmentheader_align# 数据行交替颜色thin_borderBorder(leftSide(stylethin),rightSide(stylethin),topSide(stylethin),bottomSide(stylethin))forrow_idx,row_datainenumerate(condition_stats.values,3):forcol_idx,valinzip(range(1,6),row_data):cellws.cell(rowrow_idx,columncol_idx,valueval)cell.borderthin_border cell.alignmentAlignment(horizontalcenter)ifrow_idx%20:cell.fillPatternFill(start_colorD9E2F3,end_colorD9E2F3,fill_typesolid)# 列宽自适应ws.column_dimensions[A].width12ws.column_dimensions[B].width10自动画折线图fromopenpyxl.chartimportLineChart,Reference# 假设B列是商品数A列是成色chartLineChart()chart.title各成色商品数量分布chart.y_axis.title商品数量chart.x_axis.title成色chart.style10# 数据区域B2到B最后一行data_refReference(ws,min_col2,min_row2,max_row2len(condition_stats),max_col2)cats_refReference(ws,min_col1,min_row3,max_row2len(condition_stats))chart.add_data(data_ref,titles_from_dataTrue)chart.set_categories(cats_ref)# 设置线条颜色fromopenpyxl.chart.seriesimportDataPoint chart.series[0].graphicalProperties.line.width25000# 线宽ws.add_chart(chart,A10)# 把图表放在A10位置写入多个Sheetws2wb.create_sheet(价格趋势)ws2[A1]日期ws2[B1]均价foridx,(date,price)inenumerate(zip(weekly.index,weekly.values),2):ws2.cell(rowidx,column1,valuedate)ws2.cell(rowidx,column2,valueprice)wb.save(D:/reports/竞品价格分析报告.xlsx)日期写入坑Windows下用office或wps写入datetime类型会少8小时时区问题。解决方案——转字符串再写入或者用openpyxl写入df[发布日期]df[发布日期].dt.strftime(%Y-%m-%d %H:%M:%S)# 或者importdatetime,pywintypes excel_datepywintypes.Time(row[发布日期].timetuple())这个坑我排查了一下午。报告里的时间全部比实际早了8小时后来才知道office的COM接口用的是UTC时间。9. 平台实战飞书通知 邮件发送飞书机器人群通知importrequests,jsondefsend_feishu_report(webhook_url,report_path,summary):# 发送文本汇总text_msg{msg_type:text,content:{text:f本周竞品分析报告已生成\n{summary}}}requests.post(webhook_url,jsontext_msg)# 发送Excel文件importrequestswithopen(report_path,rb)asf:requests.post(https://open.feishu.cn/open-apis/im/v1/files,headers{Authorization:Bearer xxx},files{file:f})邮件发送importsmtplibfromemail.mime.multipartimportMIMEMultipartfromemail.mime.textimportMIMETextfromemail.mime.baseimportMIMEBasefromemailimportencoders msgMIMEMultipart()msg[Subject]本周竞品价格分析报告msg[From]reportcompany.commsg[To]teamcompany.combodyMIMEText(报告见附件自动生成于str(datetime.now()),plain,utf-8)msg.attach(body)# 附件withopen(D:/reports/竞品价格分析报告.xlsx,rb)asf:attachmentMIMEBase(application,octet-stream)attachment.set_payload(f.read())encoders.encode_base64(attachment)attachment.add_header(Content-Disposition,attachment,filename竞品价格分析报告.xlsx)msg.attach(attachment)smtpsmtplib.SMTP_SSL(smtp.exmail.qq.com,465)smtp.login(reportcompany.com,password)smtp.send_message(msg)smtp.quit()10. 系统联动影刀定时任务 自动报告控制台配置每周一早上8点执行。流程顺序影刀启动 → 读取上周所有采集数据Python代码块用pandas分析再用Python代码块openpyxl生成带图表的报告飞书通知 邮件发送日志打印完成Excel数据表整理技巧影刀数据表格的导出指令可以把采集数据保存为Excel。然后Python代码块读取这个Excel做分析。注意确保导出路径存在不然会报错。对比上周数据importpandasaspd this_weekpd.read_excel(D:/data/本周.xlsx)last_weekpd.read_excel(D:/data/上周.xlsx)# 合并对比comparepd.merge(this_week,last_week,on成色,suffixes(_本周,_上周))compare[均价变化]compare[均价_本周]-compare[均价_上周]compare[变化率](compare[均价变化]/compare[均价_上周]*100).round(1)11. 工程化与规范目录规范D:/RPA/ ├── 数据分析/ │ ├── report_config.json # 报告配置邮件/飞书/webhook等 │ ├── report_template.xlsx # 报告模板 │ ├── output/ # 生成的报告 │ └── scripts/ │ ├── data_clean.py # 数据清洗模块 │ └── report_gen.py # 报告生成模块配置集中管理{report:{title:竞品价格分析周报,output_dir:D:/reports,sheets:[价格分布,趋势分析,对比分析]},feishu_webhook:https://open.feishu.cn/xxx,email:{smtp:smtp.exmail.qq.com,to:teamxxx.com}}12. 速查表 / 常见报错pandas常用操作速查操作代码读Excelpd.read_excel(path)转数字pd.to_numeric(df[col], errorscoerce)分组统计df.groupby(col).agg({a:mean,b:sum})数据透视表pd.pivot_table(df, indexa, columnsb)合并DataFramepd.concat([df1, df2])按条件筛选df[df[价格] 1000]排序df.sort_values(价格, ascendingFalse)写Exceldf.to_excel(path, indexFalse)常见报错报错1KeyError: xxx→ DataFrame里没有这个列名。打印df.columns确认列名。报错2invalid literal for int() with base 10→ 数据类型不对。先用pd.to_numeric(errorscoerce)转换。报错3无法打开Excel文件→ Excel进程残留。任务管理器关掉所有Excel/WPS进程wps.exe和et.exe再跑流程。报错4中文乱码→ 读取Excel时指定编码pd.read_excel(path).apply(lambda x: x.astype(str) if x.dtype object else x)或确保Excel文件是UTF-8。报错5openpyxl图表报错→ 数据引用范围不对。检查Reference的min_row和max_row是否覆盖所有数据行。报错6日期时间少了8小时→ COM接口时区问题。用openpyxl写入或把datetime转str后再写入。报错7NaN出现导致统计不对→ groupby前dropna()或fillna()。报错8merge后数据少了→ 注意howinner交集和howleft左表全保留的区别。做对比分析用howleft避免丢失数据。内容标签pandas数据分析、openpyxl报表、图表生成、飞书通知、自动化报告作者林焱
返回列表