竞赛电商数据分析

竞赛电商数据分析
数据来源京东竞赛,数据实在太多了,只取了行为表的最后7天的数据,即2018-04-09——2018-04-15的数据,分析思路来自于一本书——《硅谷增长黑客实记》,整篇分析分为4个大的部分,1.基本的描述性统计分析,2.用户留存的探索,(包括天然使用周期的平均值作为留存的单位),3.RFM模型,4.用户漏斗
这次代码放的会少一些,主要阐述分析思路
1.导包

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns 
import math
import datetime
from datetime import datetime
import timefrom sklearn.linear_model 
import LinearRegression
from sklearn.cluster import KMeans
from pyecharts import Funnel

matplotlib.rcParams['font.family']='kaiti'
df=pd.read_csv('G:/行为表7.csv',delimiter=',',encoding='utf-8')

1.1可视化的函数
只放了一部分,可视化代码都是反复调用和修改部分参数,参考意义不大。

def show(df):    
# print(df)    
plt.subplot(121)    
# df.plot(kind='bar')       
sns.barplot(x=df.index,y=df.values,palette='deep')
plt.title('rfm')    
# plt.xlabel('环节')    
plt.xticks(range(len(df.index)),df.index)    
for a,b in zip(range(len(df.index)),df.values):
        plt.text(a,b,b,va='bottom',ha='center')    
# plt.ylabel('数量')    
plt.subplot(122)    
# pf.plot(kind='bar')    
plt.title('浏览-加购物车-下单-关注')
# sns.lineplot(x='天数',y='用户留存人数',palette='rocket',data=df)    
# plt.title('hour-type分布')    
# # plt.xlabel('环节')    
# plt.ylabel('数量')    
# # sns.pointplot(x='date',y='user_id',hue='type',data=df,linestyles='--')    
# plt.xticks(range(len(df['天数'])),df['天数'])    
# for a,b in zip(range(len(df['天数'])),df['用户留存人数']):    
#     plt.text(a,b,b,va='bottom',ha='center')    
# fig = plt.figure()    
# plt.title('用户留存曲线')    
# ax = fig.add_subplot(111)    
# ax.bar(df['天数'],df['用户留存人数'])

1.2用户行为漏斗
这个也是反复调用了该函数,修改部分参数
有一个问题,pip install pyecharts 后,发现不会用最新版的,回退到0.19,发现不能显示数字百分比。

def user_func(m,n,q,p):    
	user1=pd.DataFrame([m,n,q,p],columns=['人数'])    
	print(user1)    
	# print(m,n)    
	# user1['转化率']=[1.0,round(31574/2729852.0,2)]    
	# user1['转化率']=[1.0,round(452356/2729852.0,2),round(126705/452356,2)]    
	# show(user1)    
	# user1['转化率']=[1.0,round(6021/2729852.0,3),round(1028/6021,2)]    
	# user1['转化率']=[1.0,round(32602/2729852.0,3),round(1317/32602,2)]    
	user1['转化率']=[1.0,round(519411/2729852.0,3),round(145473/519411,2),round(25920/145473,2)]    # print(user1)    
	show(user1)   
	    
	attrs=user1['环节'].tolist()    
	print(attrs)    
	attr_values=user1['转化率'].tolist()    
	print(attr_values)    
	funnel1=Funnel("浏览-加购物车-关注-下单", width=600, height=400, title_pos='center')
	    funnel1.add("商品交易行环节",       
	    # 指定图例名称            
	    attr=attrs,                
	    # 指定属性名称            
	    value=attr_values,        
	    # 指定属性所对应的值            
	    is_label_show=True,        
	    # 指定标签是否显示            
	    label_formatter='{b} {c}%',    
	    # 指定标签显示的格式            
	    label_pos="outside",        
	    # 指定标签的位置            
	    legend_orient='vertical',  
	    # 指定图例的方向            
	    legend_pos='left',         
	    # 指定图例的位置            
	    is_legend_show=True)       
	    # 指定图例是否显示   
	funnel1.render()

1.3RFM

def ppf_func(x):    
level=x.apply(lambda x:'1' if x>=1 else '0')    
label=level.R+level.F    
d={        
'01':'超级用户',        
'00':'核心用户',        
'11':'一般用户',        
'10':'消极用户'    
}    
result=d[label]    
# print(result)    
return result

1.4 数据清洗和指标的构建

d={'1':'浏览',    '2':'下单',    '3':'关注',    '4':'评论',    '5':'加购物车'    }
df['type']=df['type'].astype(str).replace(d)
df=df.drop('Unnamed: 0',axis=1)
df=df.drop('module_id',axis=1)
df['action_time']=pd.to_datetime(df['action_time'])
df['date']=df['action_time'].dt.date
#print(df['date'])
df['week']=df['action_time'].dt.weekday_name
df['hour']=df['action_time'].dt.hour
# print(df['week'])
df['order']=1
# print(df)

至此,外调的函数已经完成进入主题。
2.基本描述性统计分析

    df_skim=df[df['type']=='浏览']['user_id'].count()
    df_concern=df[df['type']=='关注']['user_id'].count()    
    df_car=df[df['type']=='加购物车']['user_id'].count()    
    df_buy=df[df['type']=='下单']['user_id'].count()
    df_entirty=pd.DataFrame([df_skim,df_concern,df_car,df_buy],columns=['人数'])
    df_entirty['环节']=['浏览','关注','加购物车','下单']
    # print(df_entirty)    
    # show(df_entirty)

在这里插入图片描述
由上图可以知道,整体流量更多偏向于浏览,浏览占大头将近80%,其次是购物车,再然后是下单,最后是关注,关注较少相比于其他流量而言。

df_date_type=df.groupby(by=['date','type'],as_index=False)['user_id'].count()
df_week_type=df.groupby(by=['week','type'],as_index=False)['user_id'].count()
df_hour_type=df.groupby(by=['hour','type'],as_index=False)['user_id'].count()
 # show(df_hour_type)    
 # print(df_week_type)    
 # show(df_week_type)    
 # print(df.head())    
print(df_date_type[df_date_type.user_id==df_date_type[df_date_type['type']=='浏览']['user_id'].max()])
#2018-04-10 浏览 415211 
print(df_date_type[df_date_type.user_id==df_date_type[df_date_type['type']=='加购物车']['user_id'].max()])
#2018-04-09 加购物车 83095
print(df_date_type[df_date_type.user_id==df_date_type[df_date_type['type']=='下单']['user_id'].max()])
#2018-04-10 下单 33267
print(df_date_type[df_date_type.user_id==df_date_type[df_date_type['type']=='关注']['user_id'].max()])
#2018-04-09 关注 6444

2.2 按日期分布
在这里插入图片描述

由结果可知,在2018-04-10 浏览量 415211最大, 2018-04-09 加购物车 83095 最大,2018-04-10 下单 33267 最大,2018-04-09 关注 6444 最多,可以看出在4月9和4月10号的时候,流量都较大,推测是活动营销,或者周末。

  1.   date type  user_id
    

8 2018-04-10 浏览 415211
date type user_id
2 2018-04-09 加购物车 83095
date type user_id
5 2018-04-10 下单 33267
date type user_id
1 2018-04-09 关注 6444

2.3 一周分布
在这里插入图片描述
week type user_id
28 Tuesday 浏览 415211
week type user_id
7 Monday 加购物车 83095
week type user_id
25 Tuesday 下单 33267
week type user_id
6 Monday 关注 6444
结果表示;主要是集中在星期一星期二,那可能与周末的猜想无关,之前考虑是因为周末的话,流量会大一些,如此说来,可能因素就偏向于营销活动多一些。
2.4按小时分布
在这里插入图片描述
对于流量随小时变化,有两个峰值,早上的10:00-11:00和晚上的21:00-22:00,过了晚上0:00,迅速下滑,最终在凌晨3:00-4:00,达到波谷,事实上,的确很少有人在这个时候逛京东和淘宝,对于下单曲线来说变化幅度基本上与浏览曲线相同,可以看出推出转化率是比较低的,后面进行验证,整体来说是符合行业规律的,在波峰两个黄金时间段,运营应该采取相应的措施,给客户的产品推荐可以适度增大,刺激用户消费,使转化率增大。
2.5热销产品&&优质客户

 df_user_id=df_buy_sum.groupby(by='user_id')['order'].sum().sort_values(ascending=False)[:10]    
 # print(df_user_id)    
 # show(df_user_id)    
 df_sku_id=df_buy_sum.groupby(by='sku_id')['order'].sum().sort_values(ascending=False)[:10]

在这里插入图片描述
只统计了7天的数据,时间比较少,简单的放出一些热销产品和在这7天消费次数较多的用户,用作展示。
至此,基本的描述性展示结束
3.1用户留存的探索
关于此次用户留存的探索,思路来自于拜读过的硅谷增长黑客实记,那对于此次分析,我想了半天,最终还是觉得应该选择用户下单为衡量用户留存的指标,可能这个用户留存的结果不是很理想,但依旧是真实的,第二次购买则视为用户留下来了,对于周期而言,一周?一个月?一天?空口无凭,毕竟只有7天的数据,落地想法是计算天然使用周期(用户第二次进行关键行为所隔的时间的平均值)作为用户留存的x轴单位,
先来看一下天然使用周期的计算

def user_anaylize(df):
    #绘制留存曲线,首先要知道该产品的天然使用周期作为单位    
    #此次的天然使用周期,选择第二次进行关键行为的平均值作为天然使用周期    
    #先看一下复购情况    # df['action_time']=df['action_time'].str[:13]    
    # print(df[df['type']=='下单'>=2])    
    pf=df[df['type']=='下单']    
    print(pf.count())    
    bf=pf.groupby(by='user_id')['order'].count()    
    mf=bf[bf.values>=2]    
    print(mf)    
    pf=pf[pf.user_id.isin(mf.index)]    
    print(pf)    
    pf_time=pf.groupby(by='user_id')['action_time'].min()
    
    print(pf_time)    
    pf_time2=pf[(pf['user_id'].isin(pf_time.index)) & (~pf['action_time'].isin(pf_time.values))]    
    pf_time2_2=pf_time2.groupby(by='user_id')['action_time'].min()
    print(pf_time2_2)
    a=pd.merge(left=pf_time,right=pf_time2_2,how="inner",on='user_id')
    print((a['action_time_y']-a['action_time_x']).mean(axis=0))

之前代码写的很乱,最后想到了一个很清奇的思路,有点取巧;先取数据里所有下单的记录,根据order可以获得两次购买以上的记录,pf.isin()取到这些行,布尔索引取到每个用户下单的时间最小值,最巧的是,取到相同的user_id,和isin(~pf_time.values)——取反即不取这些行,就可以取到第二次下单的时间,两个表用merge相连,主键为user_id,可以获得时间间隔,再取均值即可

  1. Name: action_time, Length: 9893, dtype: datetime64[ns]
    1 days 06:22:29.621550
    最终结果是一天为单位
    3.2 绘制曲线
first_time=datetime.date(datetime.strptime('2018-04-09','%Y-%m-%d'))

df_first_day_buy=df[(df['date']==first_time)&(df['type']=='下单')]
df_first_day_buy_survive=df_first_day_buy['user_id'].nunique()
df_first_day_buy_survive_percent=df_first_day_buy['user_id'].nunique()/df_first_day_buy['user_id'].nunique()
print('激活人数',df_first_day_buy_survive,'留存率',df_first_day_buy_survive_percent)

two_day_survive=datetime.date(datetime.strptime('2018-04-10','%Y-%m-%d'))
df_two_day_buy=df[(df['date']==two_day_survive)&(df['type']=='下单')]
df_two_day_buy_survive=pd.merge(df_first_day_buy['user_id'],df_two_day_buy['user_id']).nunique()
df_two_day_buy_survive_percent=pd.merge(df_first_day_buy['user_id'],df_two_day_buy['user_id']).nunique()/df_first_day_buy['user_id'].unique().size
print('次日留存人数',df_two_day_buy_survive,'留存率',df_two_day_buy_survive_percent)

three_day_survive=datetime.date(datetime.strptime('2018-04-12','%Y-%m-%d'))
df_three_day_buy=df[(df['date']==three_day_survive)&(df['type']=='下单')]
df_three_day_buy_survive=pd.merge(df_first_day_buy['user_id'],df_three_day_buy['user_id']).nunique()
df_three_day_buy_survive_percent=pd.merge(df_first_day_buy['user_id'],df_three_day_buy['user_id']).nunique()/df_first_day_buy['user_id'].unique().size
print('3天后留存人数',df_four_day_buy_survive,'留存率',df_four_day_buy_survive_percent)

six_day_survive=datetime.date(datetime.strptime('2018-04-15','%Y-%m-%d'))
df_six_day_buy=df[(df['date']==six_day_survive)&(df['type']=='下单')]
df_six_day_buy_survive=pd.merge(df_first_day_buy['user_id'],df_six_day_buy['user_id']).nunique()
df_six_day_buy_survive_percent=pd.merge(df_first_day_buy['user_id'],df_six_day_buy['user_id']).nunique()/df_first_day_buy['user_id'].unique().size
print('6天后留存人数',df_six_day_buy_survive,'留存率',df_six_day_buy_survive_percent)

df_survive_curve=pd.DataFrame([df_first_day_buy_survive,df_two_day_buy_survive['user_id'],df_four_day_buy_survive['user_id'],df_six_day_buy_survive['user_id']],columns=['用户留存人数'])    
df_survive_curve['用户留存比例']=[df_first_day_buy_survive_percent,df_two_day_buy_survive_percent['user_id'],df_four_day_buy_survive_percent['user_id'],df_six_day_buy_survive_percent['user_id']]
df_survive_curve['天数']=['首日','次日后','3天后','6天后']    
# print(df_survive_curve)    
# print(df_two_day_buy_survive.values)    
# show(df_survive_curve)    
# return df
  1. 激活人数 28215 留存率 1.0
    次日天后留存人数 user_id 443
    dtype: int64 留存率 user_id 0.015701
    dtype: float64
    3天后留存人数 user_id 335
    dtype: int64 留存率 user_id 0.011873
    dtype: float64
    6天后留存人数 user_id 236
    dtype: int64 留存率 user_id 0.008364
    dtype: float64

有点不忍直视,留存太低了,我开始怀疑一开始的北极星指标是不是选错了。不过也是情有可原,首先数据的时间维度不够长,一般来说,同期群分析,应该横向追踪60天的用户,然后取得他们的两次购买的平均时间,这样是比较合理的,落地来讲,7天的数据取的时候已经很大了,要是在公司还可以考虑分布式,在我这肯定是不行的。话说回来,本次目的当然主要还是学以致用才这样做。
取了首日,次日,三天后,六天后的留存人数。
激活人数代表首次下载的人,用户留存曲线,斜率坡度太陡了,第一次购买后,复购率是比较低,在接下来的3天和6天后变化不明显,
新用户引导流程的改善可以有效提高整体曲线的高度。复购率的增加,1是考虑产品问题,产品的改善可以有效减缓坡度.2.售后的问题,很多东西卖了,被当作一锤子买卖肯定是不行的,良好的售后也是关键,(这里的售后可以理解为 邀请用户关注,用户评论,用户分享,在一个公司初期,用户推荐是增长方向不错的路子)当然这只是一个方向,目的还是增加用户黏度,对平台进行推广。
在这里插入图片描述

4.1rfm模型

pf=df.copy()    
pf[pf['type']=='下单']    
print(pf.nunique())    ppf=pf.pivot_table(index='user_id',values=['order','action_time'],aggfunc={'order':'count','action_time':'max'})
    # print(ppf)    
    ppf.rename(columns={'action_time':'R','order':'F'},inplace=True)
    ppf['R']=(pd.to_datetime(ppf['R'].mean()-ppf['R']).dt.hour)
    ppf['label']=ppf[['R','F']].apply(lambda x: x-x.mean()).apply(ppf_func,axis=1)
    ppf_result=ppf['label'].value_counts()    show(ppf_result)

在这里插入图片描述

1.核心用户 191140
消极用户 148342
超级用户 58872
一般用户 37158
Na

这里没有金额的字段,就先搭建一个RF模型,取的是下单的人数,主要是对已经下单的用户分层,方便制定客户忠诚度计划,书上讲的是分为3种,超级用户,核心用户,消极用户,0,1 排列组合有4种,我就大致分为四种。如图所示,消极用户占了一大部分34%,这种情况属于买了一次之后就不再购物了,这也侧面反映出次日用户留存非常低,对于用户下单后的服务不到位。没有金钱,做出来的结果可能不准,这个不准影响的是核心用户和一般用户,进一步讲就是F,R 优先级的问题,是F购买次数多更好,还是时间越近越好。每个公司都有不同的指标体系,因此不做分析。且文章开篇已经声明,主要是学以致用,贵在探索嘛。
5.1 用户行为转化漏斗

def busindess_analy(df):    
	df_skim=df[df['type']=='浏览']    
	df_buy=df[df['type']=='下单']    
	df_car=df[df['type']=='加购物车']    
	df_concern=df[df['type']=='关注']    
	#skim_buy
	df_skim_buy=pd.merge(left=df_skim,right=df_buy,how='inner',on=['user_id','sku_id'])    
	# print(df_skim_buy)    
	df_skim_buy_not_car_concern=set(df_car['user_id'])|set(df_concern['user_id'])
	# print(df_skim_buy)
	df_skim_buy=df_skim_buy[(~df_skim_buy.user_id.isin(df_skim_buy_not_car_concern))&(df_skim_buy.action_time_x<=df_skim_buy.action_time_y)]
	# print(df_skim_buy.count()/df_skim.count())    
	# user_func(df_skim.count(),df_skim_buy.count())
	    
	# df_skim_car_buy    
	# print(df_skim.count())
	df_skim_car=pd.merge(left=df_skim,right=df_car,how='inner',on=['user_id','sku_id'],suffixes=("_skim", "_car"))     
	df_skim_car_not_concern=set(df_concern.user_id)
	df_skim_car=df_skim_car[(~df_skim_car['user_id'].isin(df_skim_car_not_concern)&(df_skim_car.action_time_skim<=df_skim_car.action_time_car))]
	# print(df_skim_car.count())    
	# print(df_skim_car)
	df_skim_car=df_skim_car[['user_id','sku_id','action_time_car','type_car']]
	 #0.17
	df_skim_car_buy=pd.merge(left=df_skim_car,right=df_buy,how='inner',on=['user_id','sku_id'])
	
        df_skim_car_buy=df_skim_car_buy[df_skim_car_buy.action_time_car<=df_skim_car_buy.action_time]
        # print(df_skim_car_buy.count())    
        # 0.35    
        # skim_buy_concern    
        # print(df_skim.count())    
        # 2729852
        df_skim_buy_concern=pd.merge(left=df_skim,right=df_buy,how='inner',on=['user_id','sku_id'],suffixes=("_skim", "_buy"))    
        df_buy_concern_not_car=set(df_car['user_id'])
        df_skim_buy_concern=df_skim_buy_concern[(~df_skim_buy_concern.user_id.isin(df_buy_concern_not_car)&(df_skim_buy_concern.action_time_skim<=df_skim_buy_concern.action_time_buy))]
        # print(df_skim_buy_concern.count())    
        # print(df_skim_buy_concern.count())    
        # 33017    
        # 1.2%
        df_skim_buy_concern=df_skim_buy_concern[['user_id','sku_id','action_time_buy','type_buy']]
        df_concern_after_buy=pd.merge(left=df_skim_buy_concern,right=df_concern,how='inner',on=['user_id','sku_id'])
        # df_concern_after_buy=df_concern_after_buy[df_concern_after_buy.action_x]    
        # print(df_concern_after_buy.count())
        
        # 944 2%    
        # skim_car_buy_concern    
        print(df_skim.count())
        df_skim1_car=pd.merge(left=df_skim,right=df_car,how='inner',on=['user_id','sku_id'],suffixes=("_skim", "_car"))
        df_skim1_car=df_skim1_car[df_skim1_car.action_time_skim<=df_skim1_car.action_time_car]
        df_skim1_car=df_skim1_car[['user_id','sku_id','action_time_car','type_car']]
        print(df_skim1_car.count())    
        # 567689 20%
        df_skim1_car_buy=pd.merge(left=df_skim1_car,right=df_buy,how='inner',on=['user_id','sku_id'])
        df_skim1_car_buy=df_skim1_car_buy[df_skim1_car_buy.action_time_car<=df_skim1_car_buy.action_time]
        print(df_skim1_car_buy.count())    
        #203711 35%
        df_skim1_car_buy=df_skim1_car_buy[['user_id','sku_id','action_time','type']]
        df_skim1_car_buy_concern=pd.merge(left=df_skim1_car_buy,right=df_concern,how='inner',on=['user_id','sku_id'],suffixes=("_buy", "_cocern"))
        df_skim1_car_buy_concern=df_skim1_car_buy_concern[df_skim1_car_buy_concern.action_time_buy<=df_skim1_car_buy_concern.action_time_cocern]    print(df_skim1_car_buy_concern)    
        # 884 1%
 busindess_analy(df)

5.1 浏览-下单

  1.     人数  环节         转化率
    

0 2729852 浏览 100.000000
1 31621 下单 1.2在这里插入图片描述

5.3浏览-加购物车-下单

  1.    人数    环节    转化率
    

0 2729852 浏览 100.0
1 475434 加购物车 17.0
2 170807 下单 36.0

在这里插入图片描述
5.4浏览-下单-关注

  1.  人数  环节  转化率
    

0 2729852 浏览 100
1 33017 下单 1.2
2 944 关注 3.0

在这里插入图片描述

5.4浏览-加购物车-下单-关注

  1. 人数    环节    转化率
    

0 2729852 浏览 100.0
1 567689 加购物车 20.8
2 203711 下单 36.0
3 884 关注 1.0

在这里插入图片描述
分析:

这里为什么没有取用户数量作为分析的指标而是选择用户行为来做呢?在我看来是这样,用户是具有不确定性的,但用户行为是有迹可循的,我们可以通过观察一群用户的用户行为来侧面反映出他是怎样的目标客户,着往往比去猜测用户心理管用的多,落地来讲,一周的数据没有太多的用户涌入,[user_id].unique()是很小的,更别说要从多维度去分析,所以选取用户行为,通过每一个用户在这个平台上不同的记录,按照 type={浏览-加购物车-下单-关注}进行分析更为恰当

整体思路是按照用户生命旅程进行的,在我这里我的想法是浏览-加购物车-下单-关注。一般来说一个公司都有相当成熟的用户旅程,可供选择的路径比较确定,而不是像现在这样我想,我认为。

分别取了每一部分行为的转化率,核心是下单**。分为4部分;1.浏览-下单。2.浏览-加购物车-下单。3.浏览-下单-关注。4.浏览-加购物车-下单-关注
第一部分:浏览-下单,
第二部分:.浏览-加购物车-下单
第三部分:浏览-下单-关注
第四部分:浏览-加购物车-下单-关注
**可以看出,用户浏览后直接下单,转化率是非常低的,也验证了之前的猜想,而相对于通过加购物车这一项后,转化率为36%,观察5.3和5.5 可知,转化率基本维持不变36%,综上所述,

1.在这里可以推测是否是渠道引流时广告的效应与该平台实际受众不符,导致客户流失,在这里最好呢,是去对引流方面做一个细致的排查,看看是哪里的渠道引流质量差,再采取相应的调整策略,引入更多的目标客户。
2.用户浏览后直接下单,转化率1%,添加购物车这一项的用户,40%下单,说明在加购物车之后的用户流程问题不是很大,考虑,是否客户引导不到位,当一个客户进来该平台之后,引导不到位,可能使得用户热情流失,进而流失客户,导致转化率低下,建议是尽可能简化指导步骤,这里可以采取AB测试,试用不同的引导机制,看看结果如何,具体的方案,肯定是要和运营部门进行协作。

3.关注太少 5.4和5.5都表示了用户在下单之后基本没有关注,这里没有对评论进行统计,推测可能评论数量跟关注相挂钩,之前也提到了用户流失比较严重,在用户留存曲线里就能看到,大部分人在第一次购买之后就流失掉了,不要觉得关注和评论不重要,用户的评论和关注都会牵扯到用户推荐的问题,而这种用户成本是最低的。解决方案
1:可以采取某宝的收藏加评论即送5元现金类似的营销策略,这可以促进对于整个平台的推广。
2:平台应对于商家的售后服务进行关注,减少客户流失。
3.建立完整的详细的用户召回机制,采用多种渠道召回,这里采用AB测试,选择比较好的渠道进行召回
**
至此分析结束
总结
此次数据分析呢更多是偏向于业务方面,比起之数据分析前可有可无的建议要显得中肯许多,这得益于那本书,有了初步的商业分析思维,代码部分,漏斗那块是参考网络,公众号,主要是我取不出来想要的数据,无力吐槽。highlight:用户留存探索,代码部分是我在一个晚上冒出来的突发奇想,比较取巧不过确实能用。rfm想取时间的中位数,半天取不出来,最后取了均值反倒成了,还想着试一下K-means算法,最后散点图画出来就作罢了,感兴趣可以试一下。还有漏斗的百分比,网上流传的采用的pyecharts都不一样,最后无奈,只能把数据贴在上面了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值