python数据分析第9天

python数据分析第9天

电商网站用户/订单/活动数据分析项目

商业模式

  1. B2B:商家对商家(企业卖家对企业买家),交易双方都是企业,最典型的案例就是阿里巴巴,汇聚了各行业的供应商,特点是订单量一般较大。
  2. B2C:商家对个人(企业卖家对个人买家),例如:唯品会,聚美优品。
  3. B2B2C:商家对商家对个人,例如:天猫、京东。
  4. C2C:个人(卖家)对个人(买家),例如:淘宝、人人车。
  5. O2O:线上(售卖)到线下(提货),将线下的商务机会与互联网结合,让互联网成为线下交易的平台,让消费者在享受线上优惠价格的同时,又可享受线下贴心的服务,例如:美团、苏宁易购、大众点评。
  6. C2B:个人对商家(个人买家对企业卖家),先有消费者提出需求,后有商家按需求组织生产,例如:尚品宅配。
  7. 其他:ABC(代理-商家-消费者)、F2C(工厂-个人)、B2G(政府采购)、BoB(供应商-运营者-采购商)、SoLoMo(社交-本地化-移动端)……。

核心指标

指标,具备业务含义,能够对业务进行量化的统计数据,有几个要点:

  1. 指标必须是数值,不能是文本、日期等。
  2. 指标都是汇总计算出来的,单个明细数据不是指标。

指标详解

  1. 复购率和回购率

    • 复购率:复购(某段时间有2次及以上购买行为)用户的占比。复购率能反映用户的忠诚度,监测周期一般较长。
    • 回购率:回购率一般监测周期较短,可以反映如短期促销活动对用户的吸引力。
  2. 用户交易常用指标

    • 访问次数(PV):一定时间内某个页面的浏览次数。
    • 访问人数(UV):一定时间内访问某个页面的人数。
    • 加购数:将某款商品加入到购物车的用户数。
    • 收藏数:收藏某款商品的用户数。
    • GMV(总交易额、成交总额):Gross Merchandise Volume,通常称之为“交易流水”。
    • 客单价(ARPU):“$ 总收入 / 总用户数 $”,某些平台也用ARPPU表示客单价。
    • 转化率:“$ 付费用户数 / 访客数 $”。
    • 折扣率:“$ 销售额 / 吊牌总额 ” , 其 中 吊 牌 总 额 为 : “ ”,其中吊牌总额为:“ 吊牌价 \times 销量 $”。
    • 拒退量:拒收和退货的总数量。
    • 拒退额:拒收和退货的总金额。
    • 实际销售额:“$ 销售额 - 拒退额 $”。
  3. 商品管理常用指标

    • SPU数:Standard Product Unit,商品的基本信息。
    • SKU数:Standard Keeping Unit,商品的库存信息。
    • 售卖比:“$ GMV / 备货值 $”,了解商品流转情况,可以用于库存优化。
    • 动销率:“$ 有销量的SKU数 / 在售SKU数 $”。

代码实操

第一部分:订单数据分析
  1. 提取2019年的订单数据
  2. 处理业务流程不符的数据(支付时间早于下单时间、支付时长超过30分钟、订单金额小于0、支付金额小于0)
  3. 处理渠道为空的数据(补充众数)
  4. 处理平台类型字段(去掉多余的空格,保持数据一致)
  5. 添加折扣字段,处理折扣大于1的字段(将支付金额修改为“订单金额*平均折扣”)

  1. 交易总金额(GMV)、总销售额、实际销售额、退货率、客单价
  2. 每月GMV及趋势分析(折线图)
  3. 流量渠道来源拆解GMV占比(饼图)
  4. 周一到周日哪天的下单量最高、每天哪个时段下单量最高(柱状图)
  5. 用户复购率分析
import numpy as np
import pandas as pd

order_df = pd.read_excel('data/excel/某电商网站订单数据.xlsx', index_col='id')
order_df.info()

order_df.head()
order_df.shape

# 1. 提取2019年的订单数据
order_df.drop(index=order_df[order_df.orderTime.dt.year != 2019].index, inplace=True)
order_df.shape

# 1. 提取2019年的订单数据
order_df.drop(index=order_df[order_df.orderTime.dt.year != 2019].index, inplace=True)
order_df.shape

# 删除与业务流程不符的数据(支付时长超过30分钟)
delta = order_df.payTime - order_df.orderTime
order_df.drop(index=order_df[delta.dt.total_seconds() > 1800].index, inplace=True)
order_df.shape

# 删除与业务流程不符的数据(订单金额小于0、支付金额小于0)
order_df.drop(order_df[(order_df.payment < 0) | (order_df.orderAmount < 0)].index, inplace=True)
order_df.shape

# 修改有问题的列名
order_df.rename(columns={
   'chanelID': 'channelID', 'platfromType': 'platformType'}, inplace=True)
order_df.info()

# 3. 处理渠道为空的数据(补充众数)
channel_id = order_df.channelID.mode()[0]
# order_df.fillna(channel_id, inplace=True)
order_df['channelID'] = order_df.channelID.fillna(channel_id)
order_df.info()

# 4. 处理平台类型字段(去掉多余的空格,保持数据一致)
order_df['platformType'] = order_df.platformType.str.replace(r'\s', '', regex=True).str.title()
order_df.head()

# 5. 添加折扣字段,处理折扣大于1的字段(将支付金额修改为“订单金额*平均折扣”)
order_df['discount'] = np.round(order_df.payment / order_df.orderAmount, 2)
order_df

mean_discount = round(order_df[order_df.discount <= 1].discount.mean(), 2)
mean_discount

order_df['payment'] = order_df.payment.where(
    order_df.discount <= 1, np.round(order_df.orderAmount * mean_discount, 2)
)
order_df[order_df.discount > 1]


# 6. 交易总金额(GMV)、总销售额、实际销售额、退货率、客单价(ARPPU)
gmv = order_df.orderAmount.sum()
total_amount = order_df.payment.sum()
total_payment = order_df[order_df.chargeback == '否'].payment.sum()
back_rate = order_df[order_df.chargeback == '是'].orderID.count() / order_df.orderID.count()
arppu = total_payment / order_df.userID.nunique()
print(f'GMV: {
     gmv / 10000:.2f}万元')
print(f'总销售额: {
     total_amount / 10000:.2f}

你可能感兴趣的:(数据分析,python,数据挖掘)