当前位置:首页>python>财务每月花4小时做采购分析?我用Python自动化,4小时→5分钟

财务每月花4小时做采购分析?我用Python自动化,4小时→5分钟

  • 2026-10-11 07:59:06
财务每月花4小时做采购分析?我用Python自动化,4小时→5分钟

一、场景还原:每个财务都懂的痛

每个月月底,尤其是餐饮行业财务小伙伴的噩梦准时到来。

老板要一份采购数据分析报告:哪家供应商供货最多?退货率是否正常?有没有异常采购?同比去年有什么变化?

你打开ERP系统,导出采购汇总表。发现数据有问题:同一供应商有多个名称(其实是同一家),入库数量和收货数量对不上,退货率那列是文本格式没法排序……

你开始手动清洗数据。复制、粘贴、VLOOKUP、条件格式,一个下午过去了。

报告做完了,老板问:"去年同期的数据有吗?对比一下。"

你愣住了。又要重新导出、重新清洗、重新计算……真想把键盘给砸了

这是我真实经历过的工作场景。 一家80+门店的餐饮企业,每月采购金额300-800万,涉及80多家供应商。以前做一份完整的采购数据分析报告,需要4个小时以上。而且每次老板临时要数据,做数据分析,都得重新折腾一遍。


二、方案拆解:Python自动化全流程

2.1 整体思路

核心逻辑很简单:把重复性工作交给代码,人只做判断和决策。

2.2 第一步:原始数据获取

从ERP/供应链系统导出采购汇总表(Excel格式)。关键字段包括:

  • 供应商名称
  • 商品名称
  • 采购数量 / 收货数量
  • 采购金额 / 收货金额
  • 退货数量 / 退货金额
  • 交易日期

注意:不同系统的导出格式不一样,有的日期是文本,有的金额带"元"字,有的供应商名称前后有空格——这些都要在代码里统一处理。

2.3 第二步:Python数据清洗(核心代码)

import pandas as pd# 读取采购数据df = pd.read_excel("采购汇总表.xlsx")# 清洗供应商名称:去空格、统一格式df['供应商名称'] = df['供应商名称'].str.strip()# 统一金额格式:去掉"元"字,转为数值df['收货金额'] = pd.to_numeric(    df['收货金额'].astype(str).str.replace('元',''),     errors='coerce')# 计算退货率df['退货率'] = df['退货数量'] / df['收货数量']# 标记异常:退货率超过5%的标红df['异常标记'] = df['退货率'].apply(lambda x: '⚠️异常' if x > 0.05 else '')

这段代码的实际效果:原来手工清洗数据需要1小时,现在3秒完成,且零错误。

2.4 第三步:多维度分析

这是最有价值的部分。从三个维度拆解:

维度一:供应商集中度分析

# TOP10供应商占比top10 = df.groupby('供应商名称')['收货金额'].sum().nlargest(10)top10_ratio = top10.sum() / df['收货金额'].sum()print(f"TOP10供应商占比:{top10_ratio:.1%}")

实际案例:某餐饮企业TOP10供应商占比53.6%,说明供应商集中度偏高,议价能力受限。

维度二:异常收货/采购差异

# 收货金额 vs 采购金额,差异超过10%的标出df['差异率'] = (df['收货金额'] - df['采购金额']) / df['采购金额']abnormal = df[abs(df['差异率']) > 0.1]

实际发现:某供应商"收货/采购差异+271%",原因是无采购单直接收货,系统数据不同步。

维度三:退货率预警

# 退货率TOP20high_return = df.groupby('供应商名称')['退货率'].mean().nlargest(20)

2.5 第四步:自动生成报告

分析报告有两种输出方式:

方式一:Excel报告(适合存档)

with pd.ExcelWriter("采购数据分析报告.xlsx") as writer:    df.to_excel(writer, sheet_name="明细数据", index=False)    top10.to_excel(writer, sheet_name="TOP10供应商")    abnormal.to_excel(writer, sheet_name="异常差异")

方式二:HTML交互式仪表板(适合汇报)

用Python生成包含Chart.js图表的HTML文件,可以直接在浏览器里筛选、排序、查看图表。老板看的是这个。


三、效果展示:数据对比

指标

手工方式

Python自动化

提升

数据清洗时间

60分钟

3秒

1200倍

报告生成时间

4小时

5分钟

48倍

数据准确率

约95%(人为错误)

100%

+5%

每月可复用性

每次重新做

一键运行

完全自动化

实际节约:每月至少节约20小时,相当于3个工作日。

更重要的是:老板临时要数据的时候,不用再熬夜加班了。 跑一下脚本,5分钟后把HTML报告发过去,专业、美观、数据有深度。


四、核心要点总结

做采购数据分析自动化,关键是这4点:

  1. 数据清洗要彻底
     — 供应商名称统一、金额格式转换、日期解析,这是基础
  2. 异常检测要有阈值
     — 退货率>5%、差异率>10%,这些阈值要根据行业特点设定
  3. 输出要两种格式
     — Excel存档 + HTML汇报,各司其职
  4. 代码要可复用
     — 每个月只需要替换数据源,一键运行出结果

你们公司的采购数据分析,现在是怎么做的?

手工Excel?还是已经有自动化工具了?欢迎留言分享你的做法一起研究探讨。


#餐饮财务#Python自动化#采购数据分析#财务效率#Excel技巧#财务数字化转型


数智财库 · 财务数字化转型实战派每周更新干货,欢迎关注


附录:完整Python脚本框架

import pandas as pdimport matplotlib.pyplot as pltdef analyze_procurement(file_path):    """采购数据分析主函数"""    # 1. 读取数据    df = pd.read_excel(file_path)    # 2. 数据清洗    df['供应商名称'] = df['供应商名称'].str.strip()    # ... 更多清洗步骤    # 3. TOP10供应商分析    top10 = df.groupby('供应商名称')['收货金额'].sum().nlargest(10)    # 4. 异常检测    df['退货率'] = df['退货数量'] / df['收货数量']    abnormal_return = df[df['退货率'] > 0.05]    df['差异率'] = (df['收货金额'] - df['采购金额']) / df['采购金额']    abnormal_diff = df[abs(df['差异率']) > 0.1]    # 5. 输出报告    with pd.ExcelWriter("采购数据分析报告.xlsx") as writer:        df.to_excel(writer, sheet_name="明细数据", index=False)        top10.to_excel(writer, sheet_name="TOP10供应商")        abnormal_return.to_excel(writer, sheet_name="异常退货率")        abnormal_diff.to_excel(writer, sheet_name="异常差异")    return "报告生成完成"# 运行result = analyze_procurement("采购汇总表.xlsx")print(result)

最新文章

随机文章