zoukankan      html  css  js  c++  java
  • 数据分析英国电商——数据分析可视化

    # 订单维度
    # 首先将mydata_finall按订单号进行分组,对商品数量quantity和总价sumcost进行分组求和
    invoiceno_grouped = mydata_finall.groupby('InvoiceNo')[['Quantity','SumCost']].sum()
    invoiceno_grouped.describe()
    # 根据得到的结果可以发现,均单有279件商品,说明订单多以批发为主,订单均值超过均值,
    # 说明订单总体差异较大,存在购买力极强的用户,这些用户应该得到重点关注
    
    
    Quantity    SumCost
    count    19960.000000    19960.000000
    mean    279.179359    533.171884
    std    955.011810    1780.412288
    min    1.000000    0.380000
    25%    69.000000    151.695000
    50%    150.000000    303.300000
    75%    296.000000    493.462500
    max    80995.000000    168469.600000
    
    y = invoiceno_grouped[invoiceno_grouped.Quantity <2000]['Quantity']
    sns.distplot(y,bins = 50,color="b", kde = False)
    plt.title("Quantity Distribtion Of Orders (Below 2000)")
    plt.ylabel('Frequency')
    plt.xlabel("Quantity")
    plt.show()
    
    

    #订单内的商品数量呈现出很典型的长尾分布,大部分订单的商品数量在250件内,商品数量越多,订单数相对越少

    
    
    
    
    

    #绘制订单金额的分布

    
    
    
    x = invoiceno_grouped[invoiceno_grouped.SumCost < 1000]['SumCost']
    sns.distplot(x,bins=100,color='b',kde=False)
    plt.title('SumCost Distribution of Orders(Below 1000)')
    plt.ylabel('Frequency')
    plt.xlabel('SumCost')
    plt.show()

     #可以看到订单额集中在500以内,而350有一个峰值。


    #客户维度

    #由于之前在清洗数据的时候把很多nan替换成0,所以客户id为零的实际不能分析出太多东西,所以仅针对customerid不为0的进行分析

    sales_useful = sales_normal[sales_normal.CustomerID != 0].copy()

    #对客户id和订单编号进行分组,索引会发生变化,所以重设索引,然后对同笔订单的金额和数量进行求和,然后在按照customerid分组展示

    customer_grouped = sales_useful.groupby(['CustomerID','InvoiceNo'])[['Quantity','SumCost']].sum().reset_index()
    #对于groupby的内容使用函数需要使用agg参数,,由于有多个参数,所以我采用了字典
    customer_grouped = customer_grouped.groupby('CustomerID').agg({'InvoiceNo':np.size, 'Quantity':np.sum, 'SumCost':np.sum})
    customer_grouped.describe()

     #通过这个描述性统计我们可以得到人均购买4笔同一种商品,25%的客户买完意见商品以后就没有留存下来,人均购买1187件商品,甚至超过了Q3的购买量,最多购买196915件商品,人均消费4338英镑,也同样超过了Q3,最多消费280206英镑。

    #消费金额分布(分组以后的金额)

    x = customer_grouped[customer_grouped['SumCost']<=5000]['SumCost']
    sns.distplot(x,bins=50,color='b',kde=False)
    plt.title('SumCost Distribution of Customers (Below 5000)')
    plt.ylabel('Frequency')
    plt.xlabel('SumCost')
    plt.show()

     #通过这个图像我们可以发现的订单金额相对集中,大多在1000以内。

    #商品维度

    #商品对应的是stackcode,发现不同客户购买同一商品的价格不一致

    #下边就是要考虑商品的平均价格,商品的平均价格要按照商品来分组,然后求和Quantity和Sumcost,然后再用求和以后的SumCost 除以Quantity

    product_grouped = sales_normal.groupby(['StockCode'])[['Quantity','SumCost']].sum()
    product_grouped['avg_price'] = stock_grouped['SumCost']/stock_grouped['Quantity']
    product_grouped.head()

    #查看价格分布

    x = product_grouped[product_grouped['avg_price']<=100]['avg_price']
    sns.distplot(x,bins=100,kde=False)
    plt.title('avg_price Distribution(avg_price Below 100)')
    plt.ylabel('Frequency') plt.xlabel('avg_price')
    plt.show()

    # 能够看到绝大多数的商品价格在20英镑以内,可知该网站销售的商品大多是价格比较低的

    果然无论是哪个国家的人民都更偏向于低价商品,低价商品在成交量以及成交金额上面都是占据了非常大的部分,而价格较高的商品的销量远低于低价商品,那么可以进一步把平台作为一个走量的平台,就如唯品会。

    #时间维度

    #按照有效订单分组

    time_grouped = sales_useful.groupby('InvoiceNo').agg({'date':np.min, 'Month':np.min,'Quantity':np.sum,'SumCost':np.sum}).reset_index()
    sns.set_style('white')
    month = time_grouped.groupby('Month').agg({'Quantity': np.sum, 'SumCost': np.sum, 'InvoiceNo': np.size}).plot(secondary_y = 'InvoiceNo', x_compat=True, figsize = (12, 4))
    month.set_ylabel('Quantity & SumCost')
    month.right_ax.set_ylabel('Order quantities')
    plt.show()

    #区域维度

    #对于区域维度的处理主要是按照客户id和国家分类,然后在把两张表合并在一起

    #提取客户id和国家关系表
    sales_country = sales_normal.drop_duplicates(subset=['CustomerID','Country'])


    按客户分组,然后计算总金额
    country_grouped = sales_useful.groupby('CustomerID')[['SumCost']].sum()


    两张表合并
    country_grouped = country_grouped.merge(sales_country,on=['CustomerID'])


    合并以后按照国家在分组,计算消费金额和客户总数
    country_grouped = country_grouped.groupby('Country').agg({'SumCost':np.sum, 'CustomerID':np.size})

    country_grouped.head()

    发现这里的sumcost已经变成了sumcost_x,重命名

    country_grouped.rename(columns={'SumCost_x':'SumCost'},inplace=True)
    country_grouped.head()

    为这个数据集添加一个新的字段,即avgamount 即人均消费。avg_amount = sumcost/cutomerid
    country_grouped['avg_amount'] = country_grouped['SumCost']/country_grouped['CustomerID']
    country_grouped.head(30)

    这里可以发现除了英国以外其他国家的购买人数都很少

    我们来按照avg_amount从大到小排列一下

    country_grouped.sort_values(by='avg_amount',ascending=False).head(20)

    能够看到虽然其他国家购买人数较少,但是人均购买量很可观,可以考虑吧筛选出具体的客户id然后取得联习给予适当的优惠和配备专属客服。

    #生命周期

    我们知道一个网站能够长久的生存下去,那么客户的生命周期是一个很重要的因素。

    由于该数据集的统计对象为2010年12月1日至2011年12月9日的全部订单,所以我们就只能统计这一段时间内的消费情况

    首先筛选出id为0的客户

    sales_useful = sales_normal[sales_normal.CustomerID != 0].copy()

    按照客户id分组,然后找到客户第一次购买和最后一次购买的时间差
    #客户第一次购买的时间
    min_date = sales_useful.groupby('CustomerID')[['date']].min()
    #客户最后一次购买的时间
    max_date = sales_useful.groupby('CustomerID')[['date']].max() (max_date - min_date).head(20)
     

    可以看到好多的留存天数很多还是天数是0天,0天代表的是没有留存。

    lifetime = max_date - min_date
    lifetime.describe()

    总共有4338个客户,平均留存时间130days,最小值是0天就是没有留存,前25%是0天说明有4分之一的用户是直接流失掉的,50%是93天,说明平均流失时间为93天,可以考虑在90天左右给予优惠促使客户完成购买然后留存下来,前75%是252天,最多的是留存373天。生命周期呈现两极分化的状态。

    由于这个timedelta的类型不能绘制图形,所以转换成datetime的形式
    life_time['life_time'] = life_time['date'].dt.days
    life_time['life_time'].hist(bins = 20, color = 'c')
    plt.title('Life Time Distribution')
    plt.ylabel('Customer number')
    plt.xlabel('Life time (days)')
    plt.show()

    可以看到绝大多数都是没有留存,可以考虑增加购买初体验。而且发现在350天左右又有了一个新的高峰

    # 将分组增多至100,并拉宽图表的尺寸
    life_time[life_time['life_time'] > 0].life_time.hist(bins = 100, figsize = (12, 6), color = 'c')
    plt.title('Life Time Distribution without One-time Deal Hunters')
    plt.ylabel('Customer number')
    plt.xlabel('Life time (days)')
    plt.show()


    这个图有很多可以讨论的东西,用户会在75-150天左右有一个显著的下滑,那么我觉得可以考虑给这一部分即将流失的用户发放优惠券等,因为可以看到在170天以后的用户就很活跃了,用户粘性也较高,而且在300天以后的客户激增说明这一部分客户是平台的优质客户,要及时和这些客户沟通,询问客户的意见和建议。



    结论:

    1. 订单维度:该电商网站在2010年12月1日-2011年12月9日内共产生有效订单19960笔,笔单价为533.17英镑,人均购买约279件商品,说明用户群体多以批发商为主,且订单交易金额和订单内商品件数,其均值都高于中位数;订单交易金额的均值甚至高于Q3分位数。说明订单总体差异大,存在部分购买力极强的客户
    2. 客户维度:通过这个描述性统计我们可以得到人均购买4笔同一种商品,25%的客户买完意见商品以后就没有留存下来,人均购买1187件商品,甚至超过了Q3的购买量,最多购买196915件商品,人均消费4338英镑,也同样超过了Q3,最多消费280206英镑
    3. 商品维度:能够看到绝大多数的商品价格在20英镑以内,可知该网站销售的商品大多是价格比较低的,且价格越低对应的购买量越高,商品整体是较低价的平民商品
    4. 时间维度:总共有4338个客户,平均留存时间130days,最小值是0天就是没有留存,前25%是0天说明有4分之一的用户是直接流失掉的,50%是93天,说明平均流失时间为93天,可以考虑在90天左右给予优惠促使客户完成购买然后留存下来,前75%是252天,最多的是留存373天。生命周期呈现两极分化的状态。
    5. 区域维度:绝大多数的客户是来自英国本土,其他国家的客户较少,但是却多为优质客户,可以对这些客户进行深挖予以物流上面的支持
     
     


     
     
     
     
     
     
     
     
     
     
     



    
    





    参考:https://www.zhihu.com/people/gao-na-zi/posts

  • 相关阅读:
    我们应该如何防范黑客的攻击? 有哪些棘手问题?
    德国网络安全公司Avira被收购,估值为1.8亿美元
    物联网会成为黑客攻击的目标,智慧城市如何才安全?
    因新型冠状病毒,笔记本电脑销售增长,人们寻求更好的设备进行远程工作
    从电脑维修工到互联网大佬,他是怎么做到的?解读郭盛华最真实的传奇生涯
    企业防御网络风险保护计划的5个步骤
    加载失败图片加样式
    请求接口无权限
    iview button根据条件 disabled可用或者不可用
    vue跨组件传值
  • 原文地址:https://www.cnblogs.com/spp666/p/13524599.html
Copyright © 2011-2022 走看看