当前位置:首页>python>第12课:用Python搭建全自动月度经营分析系统

第12课:用Python搭建全自动月度经营分析系统

  • 2026-09-08 18:10:46
第12课:用Python搭建全自动月度经营分析系统

大家好,我是小居。

01 为什么你需要这个系统?

我们学习Python的终极目标,是用技术解放生产力。大家是否经历过这些场景?

  • 面对50MB的Excel文件,卡顿到怀疑人生;

  • 手动清洗数据、调整格式,耗费大量眼力;

  • 制作透视表时公式出错,返工重来;

  • 老板临时提问下月销量,只能凭经验估算。

传统流程耗时3天 → 本系统只需3分钟。

我们将整合前11课技能(Pandas数据清洗、Matplotlib可视化、Sklearn预测模型),打造一套自动化分析流水线,助大家高效决策。


02 系统架构:模块化设计,清晰可控

我们不必畏惧“系统”一词,它本质就是一条数据处理流水线:


03 实战四步法

Step 1 数据准备

环境配置:

pip install pandas matplotlib scikit-learn openpyxl

数据生成:通过generate_data.py创建模拟数据集(含销售/客户表)

import pandas as pdimport numpy as npfrom datetime import datetime, timedeltaimport osimport matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegression# ==========================================# 0. 全局配置与目录检查# ==========================================DATA_DIR = 'data'OUTPUT_DIR = 'output'# 自动创建不存在的文件夹,防止报错for dir_path in [DATA_DIR, OUTPUT_DIR]:ifnot os.path.exists(dir_path):        os.makedirs(dir_path)        print(f"已创建目录: {dir_path}")# 设置绘图风格plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False# 用来正常显示负号# ==========================================# 1. 数据生成模块# ==========================================defgenerate_data():    print("正在生成模拟数据...")    np.random.seed(42)    dates = [datetime(2023, 1, 1) + timedelta(days=i) for i in range(365)]# 生成销售数据    df_sales = pd.DataFrame({'订单日期': np.random.choice(dates, 1000),'产品': np.random.choice(['手机', '电脑', '平板', '耳机'], 1000),'销量': np.random.randint(1, 50, 1000),'单价': np.random.choice([2999, 5999, 3999, 299], 1000),'客户ID': np.random.randint(1001, 1050, 1000)    })    df_sales['销售额'] = df_sales['销量'] * df_sales['单价']# 生成客户数据    df_cust = pd.DataFrame({'客户ID': range(1001, 1051),'客户等级': np.random.choice(['VIP', '普通', '潜在'], 50),'地区': np.random.choice(['华东', '华南', '华北', '西部'], 50)    })# 保存数据    df_sales.to_csv(f'{DATA_DIR}/sales_data.csv', index=False, encoding='utf-8-sig')    df_cust.to_csv(f'{DATA_DIR}/customer_data.csv', index=False, encoding='utf-8-sig')    print("模拟数据已生成!")

代码功能:

  • 智能清洗:自动处理日期格式、空值,合并多表数据

  • 客户分层:基于消费额自动划分高价值/一般客户(RFM简化版)

  • 预测模型:用线性回归实现销量趋势外推

  • 一键出报:自动生成带图表的Excel(含3个Sheet页)

Step 2 核心代码解析

在PyCharm中新建main.py,这是我们的核心武器。我会把代码拆解,每一行都有注释,直接复制进去就能跑。

第一步:数据读取与清洗

# ==========================================# 2. 数据加载与清洗# ==========================================defload_and_clean():    print("正在读取数据...")try:        df_sales = pd.read_csv(f'{DATA_DIR}/sales_data.csv')        df_cust = pd.read_csv(f'{DATA_DIR}/customer_data.csv')except FileNotFoundError:        print("未找到数据文件,正在重新生成...")        generate_data()        df_sales = pd.read_csv(f'{DATA_DIR}/sales_data.csv')        df_cust = pd.read_csv(f'{DATA_DIR}/customer_data.csv')# 数据清洗    df_sales['订单日期'] = pd.to_datetime(df_sales['订单日期'])    df_sales.dropna(subset=['销售额', '销量'], inplace=True)# 合并表    df_all = pd.merge(df_sales, df_cust, on='客户ID', how='left')    print(f"数据加载完成,有效行数:{len(df_all)}")return df_all

第二步:核心经营分析这里我们做两个最老板最关心的分析:月度趋势和客户分层。

# ==========================================# 3. 业务分析# ==========================================defanalyze_business(df):    print("正在分析业务数据...")# 按月聚合    df['月份'] = df['订单日期'].dt.to_period('M')    monthly_sales = df.groupby('月份')['销售额'].sum().reset_index()    monthly_sales['月份_str'] = monthly_sales['月份'].astype(str)# 客户分层    customer_value = df.groupby('客户ID')['销售额'].sum().reset_index()    customer_value.rename(columns={'销售额': '总消费额'}, inplace=True)    avg_val = customer_value['总消费额'].mean()    customer_value['客户分层'] = customer_value['总消费额'].apply(lambda x: '高价值'if x > avg_val * 1.5else'一般'    )return monthly_sales, customer_value

第三步:销量预测别觉得预测很高深,用线性回归就能做一个简单的趋势外推。

# ==========================================# 4. 销量预测# ==========================================defpredict_next_month(monthly_sales):    print("正在预测下个月销量...")# 准备数据    X = np.array(range(len(monthly_sales))).reshape(-1, 1)    y = monthly_sales['销售额'].values# 训练    model = LinearRegression()    model.fit(X, y)# 预测    next_month_idx = len(monthly_sales)    next_month_val = model.predict([[next_month_idx]])[0]    print(f"预测下个月销售额约为: {next_month_val:,.2f} 元")return next_month_val

第四步:生成报表与图表最后一步,把结果存回Excel,并画出好看的图。

# ==========================================# 5. 生成报告与绘图# ==========================================defgenerate_report(monthly_sales, customer_value, prediction):    print("正在生成报告...")# 1. 绘图:月度销售趋势    plt.figure(figsize=(10, 6))# 绘制历史数据    plt.plot(monthly_sales['月份_str'], monthly_sales['销售额'], marker='o', label='历史数据')# 绘制预测点# 这里为了演示,我们简单地把预测点放在x轴的最后位置# 实际项目中可能需要计算下个月的具体日期字符串    plt.scatter([len(monthly_sales) - 1], [prediction], color='red', label='预测点', zorder=5)    plt.text(len(monthly_sales) - 1, prediction, f' 预测值: {prediction / 10000:.1f}w', color='red')    plt.title('月度销售趋势及预测')    plt.xlabel('月份')    plt.ylabel('销售额')    plt.legend()    plt.savefig(f'{OUTPUT_DIR}/trend_chart.png', dpi=300) # 增加dpi使图片更清晰    plt.close()# 2. 绘图:客户分层    plt.figure(figsize=(6, 6))    counts = customer_value['客户分层'].value_counts()    plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=140)    plt.title('客户价值分层占比')    plt.savefig(f'{OUTPUT_DIR}/customer_pie.png', dpi=300)    plt.close()# 3. 写入Excelwith pd.ExcelWriter(f'{OUTPUT_DIR}/月度经营分析报告.xlsx') as writer:        monthly_sales.to_excel(writer, sheet_name='月度汇总', index=False)        customer_value.to_excel(writer, sheet_name='客户分层', index=False)        summary = pd.DataFrame({'指标': ['下月预测销售额'], '数值': [prediction]})        summary.to_excel(writer, sheet_name='预测结论', index=False)    print(f"报告生成完毕!请查看 '{OUTPUT_DIR}' 文件夹。")# ==========================================# 主程序入口# ==========================================if __name__ == '__main__':# 1. 检查数据是否存在,不存在则生成ifnot os.path.exists(f'{DATA_DIR}/sales_data.csv'):        generate_data()# 2. 执行全流程    df_raw = load_and_clean()    df_monthly, df_customer = analyze_business(df_raw)    pred_val = predict_next_month(df_monthly)    generate_report(df_monthly, df_customer, pred_val)

运行结果:

输出物示例:

  • 月度经营分析报告.xlsx:含月度汇总/客户分层/预测结论

  • trend_chart.png:带预测线的销售趋势图

  • customer_pie.png:客户价值分布饼图


04 进阶方向

可以自己试试跑跑看:

  • 自动邮件推送:集成smtplib发送报告给团队

  • 异常检测:当销量波动>20%时触发预警

  • 定时任务:通过Windows计划任务每月1日自动运行

核心:从“手工操作”到系统驱动决策,让数据真正赋能业务。

喜欢小居的文章:关注、点赞、转发。

有问题评论区留言,需要代码后台“机器学习12”。

最新文章

随机文章