Python电商平台数据分析实战:从数据提取到业务决策(附完整代码)

admin4周前API系列39


在电商行业竞争日趋激烈的当下,数据分析已成为企业优化运营策略、提升用户体验、驱动业务增长的核心引擎。从用户行为轨迹到商品销量波动,从订单成交数据到库存周转情况,每一份数据背后都隐藏着影响业务决策的关键信息。本文将以Python为核心工具,从电商数据分析的核心场景出发,带大家完成“数据获取-数据清洗-数据分析-可视化呈现-业务落地”的全流程实战,并分享电商数据分析中的关键技术要点与避坑指南。

一、电商数据分析核心场景与技术栈选型

1.1 核心分析场景

电商数据分析需围绕“人、货、场”三大核心要素展开,常见分析场景包括:
  • 用户分析:用户画像构建、留存率分析、复购率计算、用户行为路径挖掘(如浏览-加购-下单转化);

  • 商品分析:销量TOP商品统计、品类分布分析、商品生命周期判断、库存预警分析;

  • 订单分析:成交金额(GMV)趋势、支付方式占比、订单取消/退款原因分析、区域销售分布;

  • 运营分析:营销活动效果评估(如优惠券使用转化率)、流量来源分析、页面跳转转化率。

1.2 核心技术栈选型

针对电商数据分析的实操需求,推荐轻量、高效的Python技术栈组合,兼顾新手友好性与企业级实用性:
  • 数据提取:SQL(从MySQL/PostgreSQL等电商数据库提取数据)、pandas(读取CSV/Excel等本地数据文件);

  • 数据清洗与处理:pandas、numpy(处理缺失值、异常值、数据格式转换);

  • 数据可视化:matplotlib、seaborn(基础图表)、pyecharts(交互式图表,适配CSDN在线展示);

  • 进阶分析:scikit-learn(用户分群、销量预测等简单机器学习任务)。

基础依赖安装命令:pip install pandas numpy matplotlib seaborn pyecharts sqlalchemy
提示:sqlalchemy用于Python连接MySQL等数据库,若仅分析本地数据文件,可无需安装。

二、实战:电商核心数据全流程分析

本次实战基于某电商平台公开测试数据集(包含用户表、商品表、订单表3张核心表),聚焦“用户复购分析”与“商品销量分析”两大核心场景,完成全流程数据分析。

2.1 步骤1:数据获取(本地文件/数据库)

电商数据通常存储在数据库中,此处提供“本地CSV文件读取”和“MySQL数据库连接读取”两种方式,适配不同数据来源场景。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sqlalchemy import create_engine

# 设置中文字体(解决matplotlib中文乱码问题)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 方式1:读取本地CSV文件(适合小体量测试数据)
df_user = pd.read_csv("user.csv")  # 用户表:user_id(用户ID)、register_time(注册时间)、gender(性别)、city(城市)
df_product = pd.read_csv("product.csv")  # 商品表:product_id(商品ID)、category(品类)、price(单价)、stock(库存)
df_order = pd.read_csv("order.csv")  # 订单表:order_id(订单ID)、user_id(用户ID)、product_id(商品ID)、order_time(下单时间)、pay_amount(支付金额)、pay_status(支付状态)

# 方式2:连接MySQL数据库读取数据(适合企业级海量数据)
# 1. 构建数据库连接
engine = create_engine("mysql+pymysql://用户名:密码@主机IP:端口号/电商数据库名?charset=utf8mb4")
# 2. 执行SQL查询提取数据
sql_user = "SELECT user_id, register_time, gender, city FROM user WHERE register_time > '2024-01-01'"
df_user = pd.read_sql_query(sql_user, engine)
sql_order = "SELECT order_id, user_id, product_id, order_time, pay_amount, pay_status FROM `order` WHERE pay_status = 1"  # 只取已支付订单
df_order = pd.read_sql_query(sql_order, engine)

2.2 步骤2:数据清洗(核心前置步骤)

电商原始数据常存在缺失值、异常值、格式不统一等问题,需先完成清洗才能保证分析结果准确。本次清洗重点处理以下问题:
def data_cleaning():
    # 1. 查看数据基本信息(缺失值、数据类型)
    print("订单表缺失值统计:")
    print(df_order.isnull().sum())
    print("\n订单表数据类型:")
    print(df_order.dtypes)
    
    # 2. 处理缺失值(根据业务场景:订单表核心字段缺失则删除,非核心字段填充)
    df_order_clean = df_order.dropna(subset=["user_id", "order_time", "pay_amount"])  # 删除核心字段缺失的订单
    df_user_clean = df_user.fillna({"gender": "未知", "city": "未知"})  # 填充用户表非核心字段缺失值
    
    # 3. 处理异常值(如支付金额≤0、订单时间异常)
    # 过滤支付金额异常订单(正常订单支付金额>0)
    df_order_clean = df_order_clean[df_order_clean["pay_amount"] > 0]
    # 转换订单时间格式,并过滤时间异常订单(如早于2024年1月1日的测试数据)
    df_order_clean["order_time"] = pd.to_datetime(df_order_clean["order_time"])
    df_order_clean = df_order_clean[df_order_clean["order_time"] > pd.to_datetime("2024-01-01")]
    
    # 4. 数据格式统一(如用户ID转为字符串类型,避免数值型ID误判)
    df_user_clean["user_id"] = df_user_clean["user_id"].astype(str)
    df_order_clean["user_id"] = df_order_clean["user_id"].astype(str)
    df_order_clean["product_id"] = df_order_clean["product_id"].astype(str)
    
    # 5. 合并表数据(关联用户-订单-商品信息,便于后续分析)
    df_merge = pd.merge(df_order_clean, df_user_clean, on="user_id", how="left")
    df_merge = pd.merge(df_merge, df_product, on="product_id", how="left")
    
    print(f"\n清洗前订单数:{len(df_order)}")
    print(f"清洗后订单数:{len(df_order_clean)}")
    return df_merge

# 执行数据清洗
df_analysis = data_cleaning()

2.3 步骤3:核心场景分析(用户复购+商品销量)

3.3.1 场景1:用户复购率分析

复购率是衡量用户忠诚度的核心指标,计算公式:复购用户数/总付费用户数(复购用户定义:下单次数≥2的用户)。
def user_repurchase_analysis(df):
    # 1. 统计每个用户的下单次数
    user_order_count = df.groupby("user_id")["order_id"].nunique().reset_index()
    user_order_count.columns = ["user_id", "order_count"]
    
    # 2. 计算复购用户数和复购率
    total_pay_user = len(user_order_count)  # 总付费用户数
    repurchase_user = len(user_order_count[user_order_count["order_count"] >= 2])  # 复购用户数
    repurchase_rate = repurchase_user / total_pay_user * 100
    
    print(f"总付费用户数:{total_pay_user}")
    print(f"复购用户数:{repurchase_user}")
    print(f"复购率:{repurchase_rate:.2f}%")
    
    # 3. 按月份统计复购率趋势(分析复购率随时间变化)
    df["order_month"] = df["order_time"].dt.to_period("M")  # 提取订单月份
    month_user_stats = []
    for month in df["order_month"].unique():
        month_df = df[df["order_month"] == month]
        month_pay_user = len(month_df["user_id"].unique())
        month_repurchase_user = len(month_df[month_df["user_id"].isin(repurchase_user_list)]["user_id"].unique())
        month_repurchase_rate = month_repurchase_user / month_pay_user * 100 if month_pay_user > 0 else 0
        month_user_stats.append({"月份": str(month), "付费用户数": month_pay_user, "复购用户数": month_repurchase_user, "复购率": month_repurchase_rate})
    
    df_month_repurchase = pd.DataFrame(month_user_stats)
    print("\n各月份复购率统计:")
    print(df_month_repurchase)
    
    return user_order_count, df_month_repurchase

# 提取复购用户列表(用于后续月份趋势分析)
user_order_count, df_month_repurchase = user_repurchase_analysis(df_analysis)
repurchase_user_list = user_order_count[user_order_count["order_count"] >= 2]["user_id"].tolist()

3.3.2 场景2:商品销量与品类分析

分析商品销量TOP10和品类分布,为商品采购、库存优化、营销重点提供数据支撑。
def product_sales_analysis(df):
    # 1. 统计各商品销量(按订单数统计,若需按实际销量需关联订单详情表的购买数量)
    product_sales = df.groupby("product_id")["order_id"].nunique().reset_index()
    product_sales.columns = ["product_id", "sales_count"]
    # 关联商品信息,获取商品品类和单价
    product_sales_detail = pd.merge(product_sales, df[["product_id", "category", "price"]].drop_duplicates(), on="product_id", how="left")
    # 排序获取销量TOP10商品
    top10_product = product_sales_detail.sort_values("sales_count", ascending=False).head(10)
    print("销量TOP10商品:")
    print(top10_product)
    
    # 2. 统计各品类销量和销售额
    category_stats = df.groupby("category").agg({
        "order_id": "nunique",  # 品类订单数
        "pay_amount": "sum"     # 品类销售额
    }).reset_index()
    category_stats.columns = ["品类", "订单数", "销售额"]
    category_stats["销售额占比"] = category_stats["销售额"] / category_stats["销售额"].sum() * 100
    print("\n各品类销量与销售额统计:")
    print(category_stats)
    
    return top10_product, category_stats

top10_product, category_stats = product_sales_analysis(df_analysis)

2.4 步骤4:数据可视化(直观呈现分析结果)

通过图表将分析结果可视化,便于快速解读和汇报。此处制作4个核心图表:复购率趋势图、商品销量TOP10柱状图、品类销售额占比饼图、用户城市分布柱状图。
def data_visualization(df_month_repurchase, top10_product, category_stats, df_analysis):
    # 1. 复购率趋势图
    plt.figure(figsize=(12, 8))
    plt.subplot(2, 2, 1)
    plt.plot(df_month_repurchase["月份"], df_month_repurchase["复购率"], marker="o", color="#1f77b4")
    plt.title("2024年各月份复购率趋势", fontsize=12)
    plt.xlabel("月份")
    plt.ylabel("复购率(%)")
    plt.xticks(rotation=45)
    plt.grid(alpha=0.3)
    
    # 2. 商品销量TOP10柱状图
    plt.subplot(2, 2, 2)
    plt.barh(top10_product["product_id"], top10_product["sales_count"], color="#ff7f0e")
    plt.title("销量TOP10商品", fontsize=12)
    plt.xlabel("销量(订单数)")
    plt.ylabel("商品ID")
    plt.grid(alpha=0.3, axis="x")
    
    # 3. 品类销售额占比饼图
    plt.subplot(2, 2, 3)
    plt.pie(category_stats["销售额"], labels=category_stats["品类"], autopct="%1.1f%%", startangle=90, colors=["#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2"])
    plt.title("各品类销售额占比", fontsize=12)
    plt.axis("equal")  # 保证饼图为正圆形
    
    # 4. 用户城市分布柱状图(取TOP10城市)
    city_user = df_analysis["city"].value_counts().head(10)
    plt.subplot(2, 2, 4)
    plt.bar(city_user.index, city_user.values, color="#bcbd22")
    plt.title("付费用户TOP10城市分布", fontsize=12)
    plt.xlabel("城市")
    plt.ylabel("用户数")
    plt.xticks(rotation=45)
    plt.grid(alpha=0.3, axis="y")
    
    # 调整子图间距,避免重叠
    plt.tight_layout()
    # 保存图片(可直接在CSDN文章中插入)
    plt.savefig("ecommerce_analysis_charts.png", dpi=300, bbox_inches="tight")
    plt.show()

# 执行可视化
data_visualization(df_month_repurchase, top10_product, category_stats, df_analysis)

2.5 步骤5:分析结果解读与业务建议

数据分析的核心价值在于指导业务决策,结合本次分析结果给出具体建议:
  • 复购率优化:若某月份复购率偏低(如2月份),可针对该月付费用户推送专属优惠券、会员积分翻倍等活动,提升用户复购意愿;

  • 商品运营:销量TOP10商品可重点保障库存,设置“爆款专区”提升曝光;销售额占比低的品类可优化商品选型或开展促销活动;

  • 用户运营:付费用户集中的TOP10城市可重点布局本地仓储,提升物流时效;针对“未知”性别/城市的用户,可通过APP弹窗引导完善个人信息,精准推送商品;

  • 库存优化:结合销量趋势预测,提前备货爆款商品,避免缺货;对销量低迷的商品及时清仓,减少库存积压。

三、电商数据分析关键注意事项

3.1 数据口径统一是前提

不同部门对同一指标的定义可能存在差异(如“复购率”可按“30天内复购”“90天内复购”区分),分析前需与业务部门确认统一数据口径,避免分析结果偏差。

3.2 重视数据时效性与安全性

电商数据实时变化,需保证分析数据的时效性(如用近3个月数据替代全年数据);同时,用户手机号、地址等隐私数据需严格脱敏处理,遵守《个人信息保护法》相关规定。

3.3 避免“唯数据论”,结合业务场景解读

数据异常需结合业务场景分析原因(如某商品销量骤降可能是缺货,而非用户需求下降);分析结果需落地到具体可执行的业务动作,避免“为了分析而分析”。

3.4 海量数据的性能优化

若分析数据量达百万级以上,需注意性能优化:① 用SQL先筛选数据(如只取近6个月数据),减少Python处理数据量;② 避免使用循环,优先用pandas向量化操作;③ 必要时使用Spark等大数据框架。

四、进阶学习方向

基础数据分析后,可向以下方向深入,提升电商数据分析的深度和价值:
  • 用户画像与精准营销:结合RFM模型(最近消费、消费频率、消费金额)对用户分群,针对性推送营销活动;

  • 销量预测:使用时间序列模型(ARIMA、LSTM)预测商品销量,优化库存管理;

  • 实时数据分析:基于Flink/Spark Streaming构建实时分析平台,监控订单、流量等核心指标;

  • AB测试:针对营销活动、页面设计等开展AB测试,量化不同方案的效果。

总结

本文通过Python实现了电商平台“数据获取-清洗-分析-可视化-业务落地”的全流程实战,核心在于掌握pandas的数据处理能力和matplotlib的可视化技巧,更重要的是建立“数据驱动业务”的思维。电商数据分析没有固定模板,需根据企业实际业务场景灵活调整分析维度和方法。
建议大家结合本文代码,用自己的数据集动手实践,逐步积累分析经验。如果本文对你有帮助,欢迎点赞、收藏,也欢迎在评论区分享你的电商数据分析心得或问题!
附:本文所用测试数据集可通过 Kaggle(搜索“E-commerce Dataset”)获取,替换代码中的文件路径即可直接运行。


相关文章

自建商城快速搭建商品库:API选型、设计与落地实践

item_get 获得淘宝商品详情item_get_pro 获得淘宝商品详情高级版item_review 获得淘宝商品评论item_fee 获得淘宝商品快递费用item_password 获得淘口令真...

大麦网API实战指南:关键字搜索与详情数据获取全解析

大麦网API实战指南:关键字搜索与详情数据获取全解析

 编辑在票务数据采集、演出信息监控等开发场景中,大麦网作为国内领先的演出票务平台,其数据接口具有极高的应用价值。但需明确的是,大麦网未正式开放公共API,当前开发者使用的接口均来自移动端/网...

借助API搭建反向海淘系统:自动对接淘宝京东1688万亿商品的技术实现

借助API搭建反向海淘系统:自动对接淘宝京东1688万亿商品的技术实现

 编辑引言在全球化与互联网技术深度融合的当下,跨境电商购物模式持续创新。反向海淘,这一海外消费者从中国电商平台选购商品并通过跨境物流送达海外的模式,愈发受到青睐。为达成这一模式的高效运作,搭...

电商平台爬虫实战:4 大核心技术难点与解决方案(附代码示例)

电商平台爬虫实战:4 大核心技术难点与解决方案(附代码示例)

电商平台爬虫实战:4 大核心技术难点与解决方案(附代码示例)在电商行业,爬虫是获取市场数据(竞品价格、用户评价、库存变化)的核心工具,但电商平台的反爬机制、动态数据结构、海量数据处理及合规风险,往往让...

淘宝商品详情API高并发请求的技术实践与优化之道

在电商领域,商品详情页是连接用户与交易的核心枢纽,而支撑详情页展示的商品详情API,更是面临着极致的高并发考验。尤其在双11、618等大促场景下,单款热门商品的详情请求QPS(每秒查询率)可突破数十万...

电商平台数据分析市场洞察:API 技术如何打通数据价值闭环

电商平台数据分析市场洞察:API 技术如何打通数据价值闭环

 编辑在电商行业竞争白热化的当下,市场洞察已从 “可选动作” 变为 “生存必需”。而 API(应用程序编程接口)作为连接电商平台数据层与业务分析层的核心桥梁,正成为实现实时、精准市场洞察的关...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。