Python Excel 数据分析实战 Notebook
·
将展示如何使用 pandas 库读取 Excel 文件,进行数据清洗、计算、聚合分析,并使用 seaborn 和 matplotlib 进行可视化。
🛠️ 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. 按产品统计总销售额
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}")
更多推荐



所有评论(0)