在电商行业竞争日趋激烈的当下,数据分析已成为企业优化运营策略、提升用户体验、驱动业务增长的核心引擎。从用户行为轨迹到商品销量波动,从订单成交数据到库存周转情况,每一份数据背后都隐藏着影响业务决策的关键信息。本文将以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”)获取,替换代码中的文件路径即可直接运行。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐