Python电商销售数据分析实战:从预处理到可视化报告生成

Noah
Noah
发布时间:2026-10-12| 3人浏览过
原创

本文分享一个基于Python的电商平台销售数据分析实战项目。内容涵盖数据预处理、探索性分析、深度挖掘及可视化报告生成。通过Pandas、NumPy、Matplotlib等工具,解析销售趋势、用户行为及产品表现,为业务决策提供数据支持,适合后端开发者巩固数据分析技能。

前言

近期在钻研 Rust 语言的同时,我也在持续强化 Python 的数据分析能力。作为一名从后端开发转向 Rust 的初学者,我深刻体会到数据分析是一项核心技能,无论在后端架构还是其他技术领域中,它都能发挥关键作用。

在此,我分享一个 Python 数据分析的完整实战案例,希望能为同样处于起步阶段的开发者提供借鉴。

项目背景

本案例旨在对某电商平台的销售数据进行深入剖析,重点考察销售走势、用户行为特征以及各类产品的市场表现,从而为业务层面的决策提供坚实的数据支撑。

数据准备

首先,我们需要构建或获取数据集。此处采用一份模拟的电商销售数据,主要包含以下字段信息:

  • order_id:订单ID
  • customer_id:客户ID
  • order_date:订单日期
  • product_id:产品ID
  • product_name:产品名称
  • category:产品类别
  • price:产品价格
  • quantity:购买数量
  • total_amount:订单总金额
  • payment_method:支付方式
  • shipping_address:收货地址

环境搭建

为了完成分析任务,我们需要安装以下核心库:

  • pandas:用于高效的数据处理与分析
  • numpy:用于高性能的数值计算
  • matplotlib:用于基础的数据可视化绘图
  • seaborn:用于更美观的高级统计可视化
  • jupyter:用于交互式的数据探索与展示

可通过以下命令进行安装:

pip install pandas numpy matplotlib seaborn jupyter

数据分析流程

1. 数据加载和预处理

第一步,加载原始数据并执行必要的清洗与预处理操作:

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

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# 加载数据
df = pd.read_csv('sales_data.csv')

# 查看数据基本信息
print(df.info())

# 查看数据前几行
print(df.head())

# 检查缺失值
print(df.isnull().sum())

# 处理缺失值
df = df.dropna()

# 转换数据类型
df['order_date'] = pd.to_datetime(df['order_date'])

# 添加新列
df['year'] = df['order_date'].dt.year
df['month'] = df['order_date'].dt.month
df['day'] = df['order_date'].dt.day

2. 数据探索性分析

随后,开展探索性数据分析(EDA),以掌握数据的基本统计特征和分布情况:

# 统计描述
print(df.describe())

# 销售趋势分析
sales_by_date = df.groupby('order_date')['total_amount'].sum()

plt.figure(figsize=(12, 6))
sales_by_date.plot()
plt.title('每日销售趋势')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.show()

# 月度销售趋势
sales_by_month = df.groupby(['year', 'month'])['total_amount'].sum().reset_index()
sales_by_month['date'] = pd.to_datetime(sales_by_month[['year', 'month']].assign(day=1))

plt.figure(figsize=(12, 6))
sns.lineplot(x='date', y='total_amount', data=sales_by_month)
plt.title('月度销售趋势')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.show()

# 产品类别销售分析
sales_by_category = df.groupby('category')['total_amount'].sum().sort_values(ascending=False)

plt.figure(figsize=(12, 6))
sales_by_category.plot(kind='bar')
plt.title('各产品类别销售额')
plt.xlabel('产品类别')
plt.ylabel('销售额')
plt.xticks(rotation=45)
plt.show()

# 产品销售分析
top_10_products = df.groupby('product_name')['total_amount'].sum().sort_values(ascending=False).head(10)

plt.figure(figsize=(12, 6))
top_10_products.plot(kind='bar')
plt.title('销售额前10的产品')
plt.xlabel('产品名称')
plt.ylabel('销售额')
plt.xticks(rotation=45)
plt.show()

# 支付方式分析
payment_method_count = df.groupby('payment_method')['order_id'].count()

plt.figure(figsize=(10, 6))
plt.pie(payment_method_count, labels=payment_method_count.index, autopct='%1.1f%%')
plt.title('支付方式分布')
plt.show()

# 客户购买行为分析
customer_purchase = df.groupby('customer_id')['total_amount'].agg(['count', 'sum', 'mean']).rename(columns={'count': '购买次数', 'sum': '总消费', 'mean': '平均消费'})

plt.figure(figsize=(12, 6))
sns.histplot(customer_purchase['购买次数'], bins=20)
plt.title('客户购买次数分布')
plt.xlabel('购买次数')
plt.ylabel('客户数')
plt.show()

plt.figure(figsize=(12, 6))
sns.histplot(customer_purchase['总消费'], bins=20)
plt.title('客户总消费分布')
plt.xlabel('总消费')
plt.ylabel('客户数')
plt.show()

3. 数据深度分析

在此基础上,进行更深层次的挖掘,旨在揭示数据背后隐藏的模式与规律:

# 客户价值分析
# 计算客户生命周期价值 (CLV)
# 这里简化计算,使用总消费作为CLV
customer_clv = df.groupby('customer_id')['total_amount'].sum().sort_values(ascending=False)

# 客户分层
top_20_percent = int(len(customer_clv) * 0.2)
top_customers = customer_clv.head(top_20_percent)
print(f"前20%客户数量: {top_20_percent}")
print(f"前20%客户消费占比: {top_customers.sum() / customer_clv.sum():.2f}")

# 产品关联分析
# 计算产品之间的关联度
from itertools import combinations
from collections import defaultdict

# 构建购物篮
baskets = df.groupby('order_id')['product_name'].apply(list).tolist()

# 计算产品对的出现次数
product_pairs = defaultdict(int)
for basket in baskets:
    if len(basket) >= 2:
        for pair in combinations(set(basket), 2):
            product_pairs[tuple(sorted(pair))] += 1

# 转换为DataFrame
product_pairs_df = pd.DataFrame.from_dict(product_pairs, orient='index', columns=['count']).reset_index()
product_pairs_df[['product1', 'product2']] = pd.DataFrame(product_pairs_df['index'].tolist(), index=product_pairs_df.index)
product_pairs_df = product_pairs_df.drop('index', axis=1)
product_pairs_df = product_pairs_df.sort_values('count', ascending=False)

print("产品关联度前10:")
print(product_pairs_df.head(10))

# 销售预测
# 使用移动平均法进行销售预测
from statsmodels.tsa.holtwinters import SimpleExpSmoothing

# 准备数据
sales_series = sales_by_date

# 拟合模型
model = SimpleExpSmoothing(sales_series).fit(smoothing_level=0.6, optimized=False)

# 预测未来7天
forecast = model.forecast(7)

# 可视化预测结果
plt.figure(figsize=(12, 6))
plt.plot(sales_series.index, sales_series.values, label='实际销售额')
plt.plot(forecast.index, forecast.values, label='预测销售额', linestyle='--')
plt.title('销售额预测')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.legend()
plt.show()

4. 数据可视化和报告

最后,将分析结论转化为直观的可视化图表,并整合生成一份完整的分析报告:

# 生成综合分析报告
import io
from PIL import Image

# 创建一个HTML报告
report_html = """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>电商销售数据分析报告</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        h1 { color: #333; }
        h2 { color: #555; }
        .section { margin-bottom: 30px; }
        .chart { margin: 20px 0; }
        table { border-collapse: collapse; width: 100%; margin: 20px 0; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <h1>电商销售数据分析报告</h1>
    
    <div class="section">
        <h2>1. 数据概览</h2>
        <p>本次分析基于电商平台的销售数据,包含订单信息、客户信息、产品信息等。</p>
        <p>数据量:{total_orders} 条订单记录</p>
        <p>时间范围:{start_date} 至 {end_date}</p>
        <p>总销售额:¥{total_sales:.2f}</p>
        <p>客户数量:{total_customers} 位</p>
        <p>产品种类:{total_products} 种</p>
    </div>
    
    <div class="section">
        <h2>2. 销售趋势分析</h2>
        <p>从销售趋势图可以看出,销售额呈现[上升/下降/稳定]趋势。</p>
        <div class="chart">
            <img src="data:image/png;base64,{sales_trend_chart}" alt="销售趋势图">
        </div>
    </div>
    
    <div class="section">
        <h2>3. 产品分析</h2>
        <p>销售额最高的产品类别是 {top_category},占总销售额的 {top_category_percent:.2f}%。</p>
        <p>销售额最高的产品是 {top_product},销售额为 ¥{top_product_sales:.2f}。</p>
        <div class="chart">
            <img src="data:image/png;base64,{category_chart}" alt="产品类别销售图">
        </div>
        <div class="chart">
            <img src="data:image/png;base64,{product_chart}" alt="产品销售图">
        </div>
    </div>
    
    <div class="section">
        <h2>4. 客户分析</h2>
        <p>前20%的客户贡献了 {top_customer_percent:.2f}% 的销售额,体现了帕累托法则(80/20法则)。</p>
        <div class="chart">
            <img src="data:image/png;base64,{customer_chart}" alt="客户消费分布图">
        </div>
    </div>
    
    <div class="section">
        <h2>5. 支付方式分析</h2>
        <p>最常用的支付方式是 {top_payment_method},占比 {top_payment_percent:.2f}%。</p>
        <div class="chart">
            <img src="data:image/png;base64,{payment_chart}" alt="支付方式分布图">
        </div>
    </div>
    
    <div class="section">
        <h2>6. 产品关联分析</h2>
        <p>最常一起购买的产品组合是:</p>
        <table>
            <tr>
                <th>产品1</th>
                <th>产品2</th>
                <th>共同购买次数</th>
            </tr>
            {product_pairs_table}
        </table>
    </div>
    
    <div class="section">
        <h2>7. 销售预测</h2>
        <p>基于历史数据,预测未来7天的销售额:</p>
        <div class="chart">
            <img src="data:image/png;base64,{forecast_chart}" alt="销售预测图">
        </div>
    </div>
    
    <div class="section">
        <h2>8. 结论与建议</h2>
        <p>1. <strong>销售策略</strong>:重点关注销售额高的产品类别和产品,加大促销力度。</p>
        <p>2. <strong>客户策略</strong>:针对高价值客户,提供个性化服务和专属优惠,提高客户忠诚度。</p>
        <p>3. <strong>产品策略</strong>:基于产品关联分析,优化产品布局和推荐系统,提高交叉销售。</p>
        <p>4. <strong>库存管理</strong>:根据销售趋势和预测,合理安排库存,避免积压和缺货。</p>
        <p>5. <strong>支付方式</strong>:优化支付流程,支持更多便捷的支付方式,提高转化率。</p>
    </div>
</body>
</html>
"""

# 生成图表并转换为base64
import base64

# 销售趋势图
plt.figure(figsize=(12, 6))
sales_by_date.plot()
plt.title('每日销售趋势')
plt.xlabel('日期')
plt.ylabel('销售额')
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
sales_trend_chart = base64.b64encode(buf.read()).decode('utf-8')
plt.close()

# 产品类别销售图
plt.figure(figsize=(12, 6))
sales_by_category.plot(kind='bar')
plt.title('各产品类别销售额')
plt.xlabel('产品类别')
plt.ylabel('销售额')
plt.xticks(rotation=45)
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
category_chart = base64.b64encode(buf.read()).decode('utf-8')
plt.close()

# 产品销售图
plt.figure(figsize=(12, 6))
top_10_products.plot(kind='bar')
plt.title('销售额前10的产品')
plt.xlabel('产品名称')
plt.ylabel('销售额')
plt.xticks(rotation=45)
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
product_chart = base64.b64encode(buf.read()).decode('utf-8')
plt.close()

# 客户消费分布图
plt.figure(figsize=(12, 6))
sns.histplot(customer_purchase['总消费'], bins=20)
plt.title('客户总消费分布')
plt.xlabel('总消费')
plt.ylabel('客户数')
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
customer_chart = base64.b64encode(buf.read()).decode('utf-8')
plt.close()

# 支付方式分布图
plt.figure(figsize=(10, 6))
plt.pie(payment_method_count, labels=payment_method_count.index, autopct='%1.1f%%')
plt.title('支付方式分布')
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
payment_chart = base64.b64encode(buf.read()).decode('utf-8')
plt.close()

# 销售预测图
plt.figure(figsize=(12, 6))
plt.plot(sales_series.index, sales_series.values, label='实际销售额')
plt.plot(forecast.index, forecast.values, label='预测销售额', linestyle='--')
plt.title('销售额预测')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.legend()
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
forecast_chart = base64.b64encode(buf.read()).decode('utf-8')
plt.close()

# 产品关联表
product_pairs_table = ''
for _, row in product_pairs_df.head(10).iterrows():
    product_pairs_table += f"<tr><td>{row['product1']}</td><td>{row['product2']}</td><td>{row['count']}</td></tr>"

# 填充报告数据
total_orders = len(df)
start_date = df['order_date'].min().strftime('%Y-%m-%d')
end_date = df['order_date'].max().strftime('%Y-%m-%d')
total_sales = df['total_amount'].sum()
total_customers = df['customer_id'].nunique()
total_products = df['product_name'].nunique()
top_category = sales_by_category.index[0]
top_category_percent = (sales_by_category.iloc[0] / total_sales) * 100
top_product = top_10_products.index[0]
top_product_sales = top_10_products.iloc[0]
top_customer_percent = (top_customers.sum() / customer_clv.sum()) * 100
top_payment_method = payment_method_count.idxmax()
top_payment_percent = (payment_method_count.max() / payment_method_count.sum()) * 100

# 生成最终报告
final_report = report_html.format(
    total_orders=total_orders,
    start_date=start_date,
    end_date=end_date,
    total_sales=total_sales,
    total_customers=total_customers,
    total_products=total_products,
    top_category=top_category,
    top_category_percent=top_category_percent,
    top_product=top_product,
    top_product_sales=top_product_sales,
    top_customer_percent=top_customer_percent,
    top_payment_method=top_payment_method,
    top_payment_percent=top_payment_percent,
    sales_trend_chart=sales_trend_chart,
    category_chart=category_chart,
    product_chart=product_chart,
    customer_chart=customer_chart,
    payment_chart=payment_chart,
    product_pairs_table=product_pairs_table,
    forecast_chart=forecast_chart
)

# 保存报告
with open('sales_analysis_report.html', 'w', encoding='utf-8') as f:
    f.write(final_report)

print("分析报告已生成:sales_analysis_report.html")

项目总结

通过本实战项目,我们掌握了利用 Python 进行数据分析的全流程,具体包括:

  1. 数据加载和预处理:利用 pandas 读取数据,处理缺失值,并转换相关数据类型。

  2. 数据探索性分析:借助 pandas 进行基础统计,结合 matplotlib 和 seaborn 实现数据可视化。

  3. 数据深度分析:执行客户价值评估、产品关联规则挖掘及销售趋势预测。

  4. 生成分析报告:将分析结果封装为 HTML 格式报告,便于查看与分享。

技术栈总结

  • 数据处理:pandas, numpy
  • 数据可视化:matplotlib, seaborn
  • 时间序列分析:statsmodels
  • 报告生成:HTML, base64

后续优化方向

  1. 数据质量:进一步提升数据清洗标准,更细致地处理异常值和重复记录。

  2. 分析深度:引入更高级的分析算法,例如聚类分析、分类模型等。

  3. 模型优化:尝试使用更复杂的预测模型,如 ARIMA、LSTM 等时间序列或深度学习模型。

  4. 交互性:利用 dash 或 streamlit 框架构建交互式数据分析应用,提升用户体验。

  5. 实时分析:搭建实时数据处理管道,实现对销售状况的实时监控与预警。

结论

Python 是进行数据分析的理想语言,其丰富的库生态和工具链能够支持快速、高效的数据处理与分析。作为一名从后端转向 Rust 的初学者,我坚信数据分析是一项至关重要的技能,它不仅在后端开发中不可或缺,在其他技术领域同样具有广泛的应用价值。

通过本次实战项目,我不仅巩固了 Python 数据分析的核心技能,也对数据驱动决策的理念有了更深刻的理解。我相信,在未来的工作中,这些技能将助力我更好地解决实际问题,做出更为明智的业务决策。

至此,关于 Python 项目实战:电商平台销售数据分析的文章介绍完毕。如需了解更多 Python 电商平台数据分析相关内容,欢迎搜索本站往期文章或继续浏览后续文章,希望大家今后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。