• 3千万电商平台用户大数据分析


    3千万电商平台用户大数据分析

    前文,我们在网站用户行为分析获取了小样本群体的数据,数据集7万。

    这次,我们尝试增加一些数据量。数据样本取自阿里云天池,样本数据超过1亿。

    数据来源

    阿里云天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46

    一:查看数据

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    import seaborn as sns
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    
    df = pd.read_csv('E:/yizhiamumu/UserBehavior.csv',header=None, names=['user_id', 'item_id', 'item_category', 'behavior_type', 'time'],nrows=100000000)
    
    df.info()
    

    打印结果

    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 100000000 entries, 0 to 99999999
    Data columns (total 5 columns):
    user_id      non-null int64
    item_id      non-null int64
    item_category    non-null int64
    behavior_type    non-null object
    time       non-null int64
    dtypes: int64(4), object(1)
    memory usage: 3.7+ GB
    
    
    df.head()
    
        user_id	item_id	item_category	behavior_type	time
    0	1	2268318	2520377	pv	1511544070
    1	1	2333346	2520771	pv	1511561733
    2	1	2576651	149192	pv	1511572885
    3	1	3830808	4181361	pv	1511593493
    4	1	4365585	2520377	pv	1511596146
    
    # 清洗数据
    df.drop_duplicates(subset=['user_id','item_id','time'],keep='first',inplace=True)
    
    
    # 拆分日期数据
    import datetime
    import time
    
    # 数据类型转换 将time列转换为时间格式
    df['time'] = df['time'].apply(lambda unix_ts: datetime.datetime.fromtimestamp(unix_ts))
    df['week']=df['time'].dt.weekday  #date.weekday()返回的0-6代表周一到周日
    df['date'] = pd.to_datetime(df['time'].apply(lambda unix_ts: unix_ts.strftime('%Y-%m-%d')))
    df['day']=df['time'].dt.day
    df['hour']=df['time'].dt.hour
    df.head()
    
    
    	user_id	item_id	item_category	behavior_type	time	week	date	day	hour
    0	1	2268318	2520377	pv	2017-11-25 01:21:10	5	2017-11-25	25	1
    1	1	2333346	2520771	pv	2017-11-25 06:15:33	5	2017-11-25	25	6
    2	1	2576651	149192	pv	2017-11-25 09:21:25	5	2017-11-25	25	9
    3	1	3830808	4181361	pv	2017-11-25 15:04:53	5	2017-11-25	25	15
    4	1	4365585	2520377	pv	2017-11-25 15:49:06	5	2017-11-25	25	15
    

    二:大数据分析

    1 日趋PV UV 数据

    # 1 日趋PV UV 数据
    #pv_daily记录每天用户操作次数,uv_daily记录每天不同的上线用户数量
    pv_daily=df.groupby('date')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
    uv_daily=df.groupby('date')['user_id'].apply(lambda x:x.drop_duplicates().count()).reset_index().rename(columns={'user_id':'uv'})
    fig,axes=plt.subplots(2,1,figsize=(14,10),sharex=True)
    plt.xlabel('DATE',fontsize=24)
    plt.tick_params(labelsize=15)
    pv_daily.plot(x='date',y='pv',ax=axes[0],fontsize=20,color='red',alpha=0.6,marker='*')
    uv_daily.plot(x='date',y='uv',ax=axes[1],fontsize=20,color='red',alpha=0.6,marker='*')
    
    axes[0].set_title('日趋PV、UV数据')
    axes[0].legend(fontsize=20)
    axes[1].legend(fontsize=20)
    
    
    

    png

    # 喵了个喵:极值严重偏颇,事实也证明数据量并不是越大越好。
    

    2 每小时 PV、UV 变化趋势

    
    # 2 每小时 PV、UV 变化趋势
    #pv_hour记录每小时用户操作次数,uv_hour记录每小时不同的上线用户数量
    pv_hour=df.groupby('hour')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
    uv_hour=df.groupby('hour')['user_id'].apply(lambda x:x.drop_duplicates().count()).reset_index().rename(columns={'user_id':'uv'})
    fig,axes=plt.subplots(2,1,figsize=(14,10),sharex=True)
    plt.xlabel('HOUR',fontsize=24)
    plt.tick_params(labelsize=15)
    pv_hour.plot(x='hour',y='pv',ax=axes[0],fontsize=20,linestyle='--',color='red',alpha=0.6,marker='*')
    uv_hour.plot(x='hour',y='uv',ax=axes[1],fontsize=20,linestyle='--',color='red',alpha=0.6,marker='*')
    axes[0].set_title('每小时PV、UV数据')
    axes[0].legend(fontsize=20)
    axes[1].legend(fontsize=20)
    

    png

    3 每周用户活跃时间段数据分析

    
    # 3 每周用户活跃时间段数据分析:
    plt.rcParams['figure.figsize']=(12,8)
    df.groupby('week')['user_id'].count().plot(linestyle='--',color='red',alpha=0.6,marker='*')
    

    png

    4 不同用户行为类型分析

    # 4 不同用户行为类型分析
    pv_behavior = df.groupby(['behavior_type','hour'])['user_id'].count().reset_index().rename(columns={'user_id':'PV'})
    plt.figure(figsize=(14,8))
    plt.rcParams['font.sans-serif']=['SimHei']
    ax=sns.pointplot(x='hour',y='PV',hue='behavior_type',data=pv_behavior,fontsize=20)
    ax.set_title('不同用户行为PV 数据分析',fontsize=25)
    plt.xlabel('Hour',fontsize=18)
    plt.ylabel('PV',fontsize=18)
    plt.tick_params(labelsize=15)
    legend = ax.legend(fontsize=20)
    
    # 喵喵数据:
    # 用户浏览pv, 喜欢fav, 收藏cart,购买buy
    # 对比分析:去除用户浏览pv 数据
    

    png

    5 对比分析

    # 5 对比分析
    # 用户点击PV、收藏fav、加入购物车 cart、下订单buy
    pv_detail=df.groupby(['behavior_type','hour'])['user_id'].count().reset_index().rename(columns={'user_id':'total_pv'})
    fig,axes=plt.subplots(2,1,figsize=(14,10),sharex=True)
    
    sns.pointplot(x='hour',y='total_pv',hue='behavior_type',data=pv_detail,ax=axes[0])
    sns.pointplot(x='hour',y='total_pv',hue='behavior_type',data=pv_detail[pv_detail.behavior_type!='pv'],ax=axes[1])
    axes[0].set_title('不同用户行为PV 数据分析')
    axes[1].set_title('不同用户行为PV 数据分析(去除PV用户)')
    axes[0].legend(fontsize=20)
    axes[1].legend(fontsize=20)
    

    png

    6 用户购买次数分布

    # 6 用户购买次数分布
    df_f=df[df['behavior_type']=='buy'].groupby('user_id')['behavior_type'].count().reset_index().groupby('behavior_type')['user_id'].count()
    df_f.plot(linestyle='--',color='red',alpha=0.6,marker='*')
    
    # 喵喵数据:
    # 可以刺激用户购买欲望:购买次数集中在1-7之间,表明用户复购意愿较强,可继续引导。
    

    png

    7 用户行为数据转化漏斗

    # 7 用户行为数据转化漏斗
    from pyecharts import options as opts
    from pyecharts.charts import Bar,Pie
    from pyecharts.globals import ChartType, SymbolType
    from pyecharts.charts import Funnel
    from pyecharts.charts import Bar 
    
    Funnel_behavior=df.groupby(['behavior_type'])['user_id'].count().reset_index().rename(columns={'user_id':'Count'}).sort_values(by='Count',ascending=False)
    value=Funnel_behavior['Count'].tolist()
    x=Funnel_behavior['behavior_type'].tolist()
    
    c=Funnel()
    c.add('',[list(z) for z in zip(Funnel_behavior['behavior_type'],Funnel_behavior['Count'])],label_opts=opts.LabelOpts(position="inside"))
    c.set_global_opts(title_opts=opts.TitleOpts(title="用户行为转化漏斗"))
    c.render_notebook()
    

    image

    8 每日人均消费次数

    # 8 每日人均消费次数
    
    # ARPPU(average revenue per paying user)是指从每位付费用户身上获得的收入,它反映的是每个付费用户的平均付费额度。
    # ARPPU=总收入/活跃用户付费数量
    # 本数据无金额,用次数代替金额。人均消费次数=消费总次数/消费人数
    data_use_buy=df[df.behavior_type=='buy'].groupby(['date','user_id'])['behavior_type'].count().reset_index().rename(columns={'behavior_type':'total'})
    user_daily_ARPPU=data_use_buy.groupby('date').apply(lambda x:x.total.sum()/x.total.count())
    user_daily_ARPPU.plot(linestyle='--',color='red',alpha=0.6,marker='*')
    plt.title('每日人均消费次数')
    
    # 喵喵数据:
    # 平均每天消费次数在低值区域波动
    

    png

    9 同一时间段用户消费次数分布

    # 9 同一时间段用户消费次数分布
    
    data_user_buy3=df[df.behavior_type=='buy'].groupby(['user_id','date','hour'])['operation'].sum().rename('buy_count')
    sns.distplot(data_user_buy3,color='red')
    print('大多数用户消费:{}次'.format(data_user_buy3.mode()[0]))
    
    大多数用户消费:1次
    

    png

    10 复购率

    # 10 复购率
    #data_rebuy为找出每个用户有消费行为的天数
    data_rebuy = df[df['behavior_type']=='buy'].groupby('user_id')['time'].apply(lambda x :len(x.unique()))
    
    print('复购率:',round(data_rebuy[data_rebuy>=2].count()/data_rebuy.count(),2))
    data_rebuy.
    
    复购率: 0.63
    

    复购时间间隔消费次数分布

    # 复购时间间隔消费次数分布
    data_day_buy=df[df.behavior_type=='buy'].groupby(['user_id','date']).count().reset_index()
    data_user_buy4=data_day_buy.groupby('user_id').date.apply(lambda x:x.sort_values().diff(1).dropna())
    data_user_buy4=data_user_buy4.map(lambda x:x.days)
    plt.rcParams['figure.figsize']=(12,8)
    data_user_buy4.value_counts().plot(kind='bar',color='red')
    
    plt.title('复购时间间隔消费次数分布图')
    plt.xlabel('间隔天数')
    plt.ylabel('间隔')
    

    png

    11 最受欢迎的商品类目与购买率

    # 11 最受欢迎的商品类目与购买率
    ##按“类目item_category ”统计点击量pv
    pvtop=df[df['behavior_type']=='pv']['item_category'].value_counts().sort_values(ascending=False)
    pvtop.name='pv_category'
    
    #按“类目item_category ”统计购买量buy
    buytop=df[df['behavior_type']=='buy']['item_category'].value_counts().sort_values(ascending=False)
    buytop.name = 'buy_category'
    
    # 绘制散点图,合并(匹配 concat ,axis=1,按行拼接):
    cattop=pd.concat([pvtop,buytop],axis=1,sort=False).fillna(0)
    cattop.plot.scatter(x='pv_category',y='buy_category',color='red')  
    
    # 喵了喵:
    # 大部分商品类目转化率不足1%:pv_category / buy_category)。
    

    png

    # 按“商品(item_id)”统计点击量pv
    pv_p_top=df[df['behavior_type']=='pv']['item_id'].value_counts().sort_values(ascending=False)
    pv_p_top.name='pv_product'
    
    #按“商品(item_id)”统计购买量buy
    buy_p_top=df[df['behavior_type']=='buy']['item_id'].value_counts().sort_values(ascending=False)
    buy_p_top.name = 'buy_product'
    
    # 绘制散点图:
    producttop=pd.concat([pv_p_top,buy_p_top],axis=1,sort=False).fillna(0)
    producttop.plot.scatter(x='pv_product',y='buy_product',color='red')  
    
    # 喵喵数据:
    # 最受欢迎的商品浏览量在0-200之间、购买数在0-10之间
    # 考虑提升一下商品的文案、展示等。
    

    png

    根据前文《7万网站用户行为大数据分析》,我们好像找到了KPI 翻倍的方法论:
    
    1)基于RFM模型,及机器学习聚类分析,根据不同类型用户精准运营,运用二八理论将主要资源和精力集中于一类用户,进行个性化推荐;-70%
    
    2)根据时间维度进行有效地拉新促活活动,以及老用户的访问。根据复购率来刺激用户的持续消费,根据留存监控用户的持续用户行为,防止流失并且对用户行为给与一定的刺激;-10%
    
    3)对高价值用户需要提供优惠策略使其保持活跃度,针对不同用户行为人群制定针对性策略从而刺激进一步的用户行为,针对不活跃用户以及大部分的低购买用户采取相应措施刺激或者提高活跃度,引导用户尽量30天以内复购,提高用户活跃度、留存率、付费率。-10%
    
    4)针对一些转化率低的商品,做好价格、图片等因素的改善,提高转化率。-5%
    
    5)还有5%,你知道是什么吗?
    

    欢迎转发、交流小数据。

    欢迎关注:一只阿木木

  • 相关阅读:
    swift 函数
    Javascript中的apply与call详解
    SQL语句中----删除表数据drop、truncate和delete的用法
    jquery对象和DOM对象转换
    js正则函数match、exec、test、search、replace、split使用介绍集合
    JS中类或对象的定义说明
    SQL PROMPT5.3.4.1的一些设置选项
    jQuery 遍历函数
    前端开发面试题
    SQLServer中ISNULL和CONVERT函数
  • 原文地址:https://www.cnblogs.com/yizhiamumu/p/15985531.html
Copyright © 2020-2023  润新知