将展示如何使用 pandas 库读取 Excel 文件,进行数据清洗、计算、聚合分析,并使用 seabornmatplotlib 进行可视化。

🛠️ 0. 准备工作:安装必要的库

如果你在本地运行,请确保终端中安装了以下库:

pip install pandas openpyxl matplotlib seaborn

📝 1. 生成模拟数据 (可跳过)

如果你已经有 sales_data.xlsx 文件,请跳过此单元格。这里我们创建一个包含日期、产品、地区、销量和单价的模拟销售数据。

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

# 设置随机种子以保证结果可复现
np.random.seed(42)

# 生成 100 条模拟数据
n_rows = 100
dates = [datetime(2023, 1, 1) + timedelta(days=np.random.randint(0, 60)) for _ in range(n_rows)]
products = np.random.choice(['笔记本电脑', '鼠标', '键盘', '显示器', '耳机'], n_rows)
regions = np.random.choice(['北京', '上海', '广州', '深圳'], n_rows)
quantities = np.random.randint(1, 20, n_rows)
prices = {
    '笔记本电脑': 5000,
    '鼠标': 100,
    '键盘': 300,
    '显示器': 1500,
    '耳机': 200
}
unit_prices = [prices[p] for p in products]

# 创建 DataFrame
df_dummy = pd.DataFrame({
    '订单日期': dates,
    '产品名称': products,
    '销售区域': regions,
    '销售数量': quantities,
    '单价': unit_prices
})

# 保存为 Excel 文件
file_name = 'sales_data.xlsx'
df_dummy.to_excel(file_name, index=False)
print(f"✅ 模拟数据已生成并保存为: {file_name}")

📥 2. 导入库并读取数据

这里我们将读取 Excel 文件。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 设置绘图风格和中文字体(防止乱码)
sns.set(style="whitegrid")
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

# 读取 Excel 数据
try:
    df = pd.read_excel('sales_data.xlsx')
    print("✅ 数据读取成功!")
except FileNotFoundError:
    print("❌ 未找到文件,请先运行上面的代码生成数据。")

# 显示前 5 行数据
display(df.head())

🔍 3. 数据概览与检查

在分析之前,我们需要了解数据的基本结构和是否有缺失值。

print("--- 数据基本信息 ---")
df.info()

print("\n--- 缺失值检查 ---")
print(df.isnull().sum())

print("\n--- 数据统计描述 ---")
display(df.describe())

🧹 4. 数据处理与计算

我们需要计算一个新的列:“销售总额” (销售数量 * 单价)。

# 计算销售总额
df['销售总额'] = df['销售数量'] * df['单价']

# 提取月份用于后续分析
df['月份'] = df['订单日期'].dt.strftime('%Y-%m')

# 查看处理后的数据
display(df.head())

📈 5. 数据分析与聚合

我们要回答几个业务问题:

  1. 哪个产品卖得最好(按销售额)?
  2. 哪个地区的销量最高?
  3. 每天的销售趋势如何?
# 1. 按产品统计总销售额
product_sales = df.groupby('产品名称')['销售总额'].sum().sort_values(ascending=False).reset_index()
print("--- 各产品销售总额 ---")
display(product_sales)

# 2. 按区域统计平均销售额
region_stats = df.groupby('销售区域')['销售总额'].agg(['sum', 'mean', 'count']).reset_index()
print("\n--- 各区域销售统计 ---")
display(region_stats)

📊 6. 数据可视化

使用图表让数据更直观。

# 创建画布
plt.figure(figsize=(15, 10))

# 图 1: 各产品销售总额 (柱状图)
plt.subplot(2, 2, 1)
sns.barplot(x='产品名称', y='销售总额', data=product_sales, palette='viridis')
plt.title('各产品销售总额排名')
plt.ylabel('销售金额 (元)')

# 图 2: 各区域销售数量分布 (箱线图)
plt.subplot(2, 2, 2)
sns.boxplot(x='销售区域', y='销售数量', data=df, palette='Set2')
plt.title('各区域单笔订单销量分布')

# 图 3: 每日销售趋势 (折线图)
plt.subplot(2, 1, 2)
# 先按日期聚合
daily_sales = df.groupby('订单日期')['销售总额'].sum().reset_index()
sns.lineplot(x='订单日期', y='销售总额', data=daily_sales, marker='o', color='b')
plt.title('每日销售总额趋势')
plt.xlabel('日期')
plt.ylabel('销售金额')

# 调整布局
plt.tight_layout()
plt.show()

📤 7. 导出分析结果

最后,我们将分析后的汇总数据保存到一个新的 Excel 文件中,不同的分析结果放在不同的 Sheet 页。

output_file = 'analysis_report.xlsx'

with pd.ExcelWriter(output_file) as writer:
    # 保存原始处理后的数据
    df.to_excel(writer, sheet_name='清洗后明细数据', index=False)
    
    # 保存产品分析结果
    product_sales.to_excel(writer, sheet_name='产品销售排行', index=False)
    
    # 保存区域分析结果
    region_stats.to_excel(writer, sheet_name='区域销售统计', index=False)

print(f"✅ 分析报告已保存至: {output_file}")

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐