1. 实际应用场景与痛点
场景
你是某公司销售经理或数据分析师,每月需要从多个渠道汇总销售数据(Excel/CSV),手动制作报表,包括:
- 月度销售额趋势图
- Top5 产品的业绩完成率(实际 vs 目标)
手动操作耗时、易出错,且图表样式不统一,影响汇报效率。
痛点
- 数据分散在不同文件
- 手动制图效率低
- 业绩完成率计算繁琐
- 报表格式不统一
2. 核心逻辑
1. 导入销售数据(支持 CSV/Excel)
2. 按月汇总销售额,绘制趋势折线图
3. 计算每个产品的业绩完成率(实际销售额 / 目标销售额)
4. 筛选 Top5 产品(按完成率或销售额)
5. 生成可视化报表(Matplotlib/Seaborn)
6. 保存为图片或 PDF
3. 代码模块化设计
sales_report/
│
├── main.py # 主程序入口
├── data_loader.py # 数据加载模块
├── analyzer.py # 数据分析模块
├── visualizer.py # 可视化模块
├── config.py # 配置文件
└── README.md # 使用说明
4. 代码实现(含详细注释)
"config.py"
# 配置参数
DATA_FILE = "sales_data.csv" # 数据文件路径
MONTH_COLUMN = "month" # 月份列名
PRODUCT_COLUMN = "product" # 产品列名
SALES_COLUMN = "actual_sales" # 实际销售额列名
TARGET_COLUMN = "target_sales" # 目标销售额列名
OUTPUT_IMAGE = "monthly_report.png"
"data_loader.py"
import pandas as pd
def load_data(file_path):
"""
加载 CSV 或 Excel 数据
"""
if file_path.endswith('.csv'):
df = pd.read_csv(file_path)
elif file_path.endswith('.xlsx'):
df = pd.read_excel(file_path)
else:
raise ValueError("不支持的文件格式,仅支持 CSV 和 Excel")
return df
"analyzer.py"
import pandas as pd
def monthly_trend(df, month_col, sales_col):
"""
按月汇总销售额
"""
return df.groupby(month_col)[sales_col].sum().sort_index()
def top5_products(df, product_col, actual_col, target_col):
"""
计算 Top5 产品业绩完成率
"""
df['completion_rate'] = df[actual_col] / df[target_col]
top5 = df.nlargest(5, 'completion_rate')[['product', 'completion_rate']]
return top5
"visualizer.py"
import matplotlib.pyplot as plt
import seaborn as sns
def plot_trend(monthly_data, output_path):
"""
绘制月度销售额趋势图
"""
plt.figure(figsize=(10, 5))
sns.lineplot(data=monthly_data)
plt.title("Monthly Sales Trend")
plt.xlabel("Month")
plt.ylabel("Sales")
plt.savefig(output_path)
plt.close()
def plot_top5(top5_df, output_path):
"""
绘制 Top5 产品业绩完成率柱状图
"""
plt.figure(figsize=(8, 5))
sns.barplot(data=top5_df, x='completion_rate', y='product')
plt.title("Top5 Products Completion Rate")
plt.xlabel("Completion Rate")
plt.ylabel("Product")
plt.savefig(output_path)
plt.close()
"main.py"
from data_loader import load_data
from analyzer import monthly_trend, top5_products
from visualizer import plot_trend, plot_top5
from config import *
def main():
print("=== 月度销售报表生成器 ===")
df = load_data(DATA_FILE)
# 分析数据
trend_data = monthly_trend(df, MONTH_COLUMN, SALES_COLUMN)
top5 = top5_products(df, PRODUCT_COLUMN, SALES_COLUMN, TARGET_COLUMN)
# 可视化
plot_trend(trend_data, "trend.png")
plot_top5(top5, "top5.png")
print("✅ 报表生成完成!趋势图: trend.png, Top5: top5.png")
if __name__ == "__main__":
main()
5. README.md
# 月度销售报表生成器
一个轻量级 Python 工具,导入销售数据,自动生成月度销售额趋势图和 Top5 产品业绩完成率报表。
## 功能
- 支持 CSV/Excel 数据导入
- 自动计算月度销售额趋势
- 自动计算 Top5 产品业绩完成率
- 生成可视化图表
## 安装
确保 Python 3.7+ 环境,安装依赖:
bash
pip install pandas matplotlib seaborn openpyxl
## 使用
1. 准备销售数据文件 `sales_data.csv`,包含列:`month`, `product`, `actual_sales`, `target_sales`
2. 运行:
bash
python main.py
3. 查看生成的 `trend.png` 和 `top5.png`
## 配置
修改 `config.py` 可调整数据文件路径和列名。
6. 使用说明
1. 准备销售数据 CSV/Excel,格式示例:
month,product,actual_sales,target_sales
2024-01,A,10000,12000
2024-01,B,15000,15000
...
2. 运行
"main.py"
3. 程序会生成两张图:
-
"trend.png":月度销售额趋势
-
"top5.png":Top5 产品业绩完成率
7. 核心知识点卡片
知识点 说明
Pandas 数据加载、分组、计算
Matplotlib/Seaborn 数据可视化
模块化设计 数据加载、分析、可视化分离
配置化 通过
"config.py" 管理参数
业绩完成率计算 实际/目标,筛选 Top5
文件格式支持 CSV/Excel 自动识别
8. 总结
这个工具解决了销售数据手动分析效率低的痛点,适合企业管理者、销售分析师使用。
它的核心优势是自动化、可视化、易扩展。
未来可以升级:
- 支持多表合并
- 增加 PDF 报告导出
- 接入数据库
- 增加 Web 界面
如果你愿意,可以升级成带 PDF 报告导出 + Web 界面的版本,让它在公司内网直接使用。
利用AI高效解决实际问题,如果你觉得这个工具好用,欢迎关注我!