Olist巴西电商数据分析(一)

Olist巴西电商数据分析

下篇指路:https://blog.csdn.net/jlycd/article/details/114001930

文章目录

项目背景

本项目是来自kaggle上的数据集案例,记录了巴西电商平台Olist 2016,2018的真实业务数据数据,包含以下的内容。

Olist巴西电商数据分析(一)

; 分析目标

1.通过用户,商家,产品,销售四个维度分析该平台的总体经营状况和所处阶段
2.发现平台存在的问题,分析原因,给出相应的建议
3.对于异常指标的变化,分析原因
4.对未来的工作给出总体方向,目标和合理化建议

搭建数据分析架构

Olist巴西电商数据分析(一)

主要通过用户,商家,产品,销售四个维度来展开分析各项指标。
使用到的工具主要有python,excel,tableau等

; 数据分析

用户维度

主要分析的方向有用户的地区分布,用户支付方式,分期偏好,下单时间等行为偏好,以及基于RFM模型将用户进行分层
数据导入处理

import numpy as np
import pandas as pd
payments=pd.read_csv('olist_order_payments_dataset.csv')
customers=pd.read_csv('olist_customers_dataset.csv')
orders=pd.read_csv('olist_orders_dataset.csv')
orders.isnull().sum()
payments.isnull().sum()
customers.isnull().sum()

由于缺失值仅在order_approved_at,order_delivered_carrier_date,order_delivered_customer_date这三个列出现,而这三列与我们分析工作关系不大,所以可以忽略。

po=pd.merge(payments,orders,how='left',on='order_id')
pc=pd.merge(po,customers,how='left',on='customer_id')
state=pd.DataFrame(pc['customer_unique_id'].groupby([pc['customer_state']]).count())

Olist巴西电商数据分析(一)

Olist巴西电商数据分析(一)
Olist巴西电商数据分析(一)
该平台的用户大多数来自于SP比例高达42%,其次是RJ和MG。这可能与巴西人口密度分布有关,当然也与平台在其他地区程度的普及程度,当地人购物方式有着很大的关系。
p_type_c=pd.DataFrame(pc['customer_unique_id'].groupby([pc['payment_type'],pc['customer_state']]).count())
p_type=pd.DataFrame(pc['customer_unique_id'].groupby(pc['payment_type']).count())

Olist巴西电商数据分析(一)
可以看出74%的用户都选择用信用卡的方式来支付占绝大多数,19%的用户选择boleto的方式,说明这两种方式在该平台是主流的支付方式。
Olist巴西电商数据分析(一)
Olist巴西电商数据分析(一)
以上两张图对比较热门的两个支付方式用户的地区分布进行了统计,这与该平台的用户地区分布人数基本上成正比,所以可以判断出对于olist平台用户支付方式与地区分布关系不大。
p_inst=pd.DataFrame(pc['customer_unique_id'].groupby([pc['payment_installments']]).count())

Olist巴西电商数据分析(一)
可以看出达到半数用户不选择分期付款的方式,而选择分期付款的用户大部分选择分2,3期的方式来进行。有将近半数的用户选择分期付款这种方式来进行支付,一定程度上说明该平台是比较推荐分期付款的方式。
cc=pd.DataFrame(pc['order_id'].groupby([pc['customer_unique_id']]).count())

pc['month']=pd.DataFrame(pd.DatetimeIndex(pc['order_purchase_timestamp']).month)
pc['time']=pd.DatetimeIndex(pc['order_purchase_timestamp']).hour
ho=pd.DataFrame(pc['order_id'].groupby([pc['time']]).count())

Olist巴西电商数据分析(一)
用户下单时间基本上聚集在10点到22点,这与人们作息时间基本一致,在这个时间段下单量基本平均,说明用户会在日常空闲时间打开该网站进行浏览购买,而不是特定时间段(如非工作时段)。
用户分层
利用RFM模型对用户价值进行量化,依据用户的最后一次购买时间,使用频率,花费金额来给用户打分,并将用户分为以下几类:
Olist巴西电商数据分析(一)
r=pc.groupby('customer_unique_id')['order_purchase_timestamp'].max().reset_index()
r['R']=(pd.to_datetime('2018-10-18')-r['order_purchase_timestamp']).dt.days
r=r[['customer_unique_id','R']]
pc['date']=pc['order_purchase_timestamp'].astype(str).str[:10]
dup=pc.groupby(['customer_unique_id','date'])['order_purchase_timestamp'].count().reset_index()
f=dup.groupby('customer_unique_id')['order_purchase_timestamp'].count().reset_index()
f.columns=['customer_unique_id','F']
summ=pc.groupby('customer_unique_id')['payment_value'].sum().reset_index()
summ.columns=['customer_unique_id','payment_value']
comm=pd.merge(summ,f,left_on='customer_unique_id',right_on='customer_unique_id',how='inner')
comm['M']=comm['payment_value']/comm['F']
rfm=pd.merge(r,comm,on='customer_unique_id',how='inner')
rfm['R_SCORE']=pd.cut(rfm['R'],5,labels=[5,4,3,2,1],right=False).astype(float)
rfm['F_SCORE']=pd.cut(rfm['F'],bins=[1,2,3,4,5,100000],labels=[1,2,3,4,5],right=False).astype(float)
rfm['M_SCORE']=pd.cut(rfm['M'],5,labels=[1,2,3,4,5],right=False).astype(float)
rfm['r_aboveavg']=(rfm['R_SCORE']>rfm['R_SCORE'].mean())*1
rfm['f_aboveavg']=(rfm['F_SCORE']>rfm['F_SCORE'].mean())*1
rfm['m_aboveavg']=(rfm['M_SCORE']>rfm['M_SCORE'].mean())*1
rfm['SCORE']=(rfm['r_aboveavg']*100)+(rfm['f_aboveavg']*10)+(rfm['m_aboveavg']*1)
def transform_l(x):
    if x==111:
        label='important_value_customer'
    elif x==110:
        label='consume_potential_customers'
    elif x==101:
        label='frequently_cultivate_customers'
    elif x==100:
        label='new_customers'
    elif x==11:
        label='important_value_loss_early_warning_customers'
    elif x==10:
        label='general_customers'
    elif x==1:
        label='high_consumption_comebake_customers'
    elif x==0:
        label='lost_customers'
    return label
rfm['type']=rfm['SCORE'].apply(transform_l)

经过RFM模型的分类处理之后,再来统计每一类用户的数量和创造的价值来进行分析

Olist巴西电商数据分析(一)
Olist巴西电商数据分析(一)

Olist巴西电商数据分析(一)
该平台大部分用户都是新用户和流失用户,重要价值用户和频率深耕用户数量极少。用户的流失率较高,缺少一般维持用户这一现状对平台的维持和运营及其不利,但是新用户数量较多说明了近期的拉新工作很有进展,接下来用怎样的手段让新用户留存,提高留存率的工作至关重要。
用过将用户分层的方式,不仅可以统计出平台的运营所处的阶段水平,还可以对每一层的用户进行更详细的用户画像研究,从而针对不同类型的用户的行为和价值对产品做出提升和改进。

商家维度

从商家的地区分布,交易量,销售额,平均评分和商家送货时间(这里指的是从买家下单一直到收到货的时间)。再用随机森林算法分析商家的得到的评分与哪些特征相关,相关的程度是多少。
代码步骤与上面基本相同,都是用groupby()进行分组计数求和,将得到的结果可视化分析。

Olist巴西电商数据分析(一)

Olist巴西电商数据分析(一)
商家大多数来自于SP,占到了百分之70以上,商家的地区分布比例与用户的地区分布不完全相同,主要体现在来自SP的商家比例远多于用户比例,说明这个地区可能不仅人口密度较高,商业贸易也比较发达。
Olist巴西电商数据分析(一)
Olist巴西电商数据分析(一)
大部分商家的年销量都比较低在20单以内,极少数的商家的订单量达到了几百上千个,商家普遍的交易量都不高。
Olist巴西电商数据分析(一)

从商家的销售额来看,大多数的商家交易额都在5000以内,5000以上的商家进展到总体的百分之十八,而最大值也不过是两万多。这与之前的交易量占比分布情况基本相似,这说明该平台的商品都比较平价,想要提高的使用价值获得更高的收益必须要提高交易量,不仅要增加用户数量,还要促进用户持续购买,增加用户的下单频率。

Olist巴西电商数据分析(一)
送货时间大致呈正态分布,大多数的送货时间集中在5-16天的范围内,均值为10左右,该平台的用户基本上可以在10天左右收到商品。
Olist巴西电商数据分析(一)
商家的平均评分多数在3.75-5这个区间,比较符合实际,说明该平台从商品到商家服务等方面属于相对完善的程度,整个流程的实现基本没有问题。
评分相关
利用随机森林分析商家的地区,交易量,交易额,送货时间这四个特征与商家评分的相关性。
from sklearn.preprocessing import LabelEncoder
s['seller_city']=LabelEncoder().fit_transform(s['seller_city'])
Xtrain, Xtest, Ytrain, Ytest = train_test_split(data,target,test_size=0.3)
rfc = RandomForestClassifier()
rfc = rfc.fit(Xtrain,Ytrain.astype('int'))
score_r = rfc.score(Xtest,Ytest)
score_r

结果

Olist巴西电商数据分析(一)
拟合程度较好,达到了0.99.

四个feature分别为商家的地区,交易量,交易额,送货时间。结果说明就这四个特征而言,与评分关系最大的特征是商家的送货时间,其次是商家所在的地区。这能说明这些特征与评分结果的相关性程度,但并不能作为充分必要条件。
比如,作为商家尽快发货和选择比较快捷的快递方式在一定程度上能提高用户的评分,但是不起绝对性作用。交易量与交易额反映了商家的经营状况和经验程度但是与获得的评分并没有很明确的因果关系。影响评分的因素除此之外还有很多,站在消费者的角度上说商品的质量和耐用性会显得更为重要。

未完待续。。。

Original: https://blog.csdn.net/jlycd/article/details/113887419
Author: 0/404
Title: Olist巴西电商数据分析(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/753106/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球