⑥ 日ARPU分析:表示的是平均每用户收入。ARPU = 总收入/AU得到
df["operation"] = 1 aa = df.groupby(["date","user_id",'behavior_type'])["operation"].count().\ reset_index().rename(columns={"operation":"total"}) aa.head(10) aa1 = aa.groupby("date").apply(lambda x: x[x["behavior_type"]=="4"]["total"].sum()/x["user_id"].nunique()) aa1.head(10) # 绘图如下 x = len(aa1.index.astype(str)) y = aa1.index.astype(str) plt.plot(aa1.values) plt.xticks(range(0,30,7),[y[i] for i in range(0,x,7)],rotation=90) plt.title("每天的活跃用户消费次数") plt.tight_layout() plt.savefig("每天的活跃用户消费次数",dpi=300) plt.show()
结果如下:
绘图如下:
⑦ 付费率PUR = APA/AU,这里用【消费人数 / 活跃用户人数】代替
rate = aa.groupby("date").apply(lambda x: x[x["behavior_type"]=="4"]["total"].count()/x["user_id"].nunique()) rate.head(10) # 绘图如下 x = len(rate.index.astype(str)) y = rate.index.astype(str) plt.plot(rate.values) plt.xticks(range(0,30,7),[y[i] for i in range(0,x,7)],rotation=90) plt.title("付费率分析") plt.tight_layout() plt.savefig("付费率分析",dpi=300) plt.show()
结果如下:
⑧ 复购情况分析(复购率)
re_buy = df[df["behavior_type"]=="4"].groupby("user_id")["date"].apply(lambda x: x.nunique()) print(len(re_buy)) re_buy[re_buy >= 2].count() / re_buy.count()
结果如下:
3)漏斗分析
df_count = df.groupby("behavior_type").size().reset_index().\ rename(columns={"behavior_type":"环节",0:"人数"}) type_dict = { "1":"点击", "2":"收藏", "3":"加入购物车", "4":"支付" } df_count["环节"] = df_count["环节"].map(type_dict) a = df_count.iloc[0]["人数"] b = df_count.iloc[1]["人数"] c = df_count.iloc[2]["人数"] d = df_count.iloc[3]["人数"] funnel = pd.DataFrame({"环节":["点击","收藏及加入购物车","支付"],"人数":[a,b+c,d]}) funnel["总体转化率"] = [i/funnel["人数"][0] for i in funnel["人数"]] funnel["单一转化率"] = np.array([1.0,2.0,3.0]) for i in range(0,len(funnel["人数"])): if i == 0: funnel["单一转化率"][i] = 1.0 else: funnel["单一转化率"][i] = funnel["人数"][i] / funnel["人数"][i-1] # 绘图如下 import plotly.express as px import plotly.graph_objs as go trace = go.Funnel( y = ["点击", "收藏及加入购物车", "购买"], x = [funnel["人数"][0], funnel["人数"][1], funnel["人数"][2]], textinfo = "value+percent initial", marker=dict(color=["deepskyblue", "lightsalmon", "tan"]), connector = {"line": {"color": "royalblue", "dash": "solid", "width": 3}}) data =[trace] fig = go.Figure(data) fig.show()
结果如下:
绘图如下:
结果分析:由于收藏和加入购车都是有购买意向的一种用户行为,切不分先后顺序,因此我们将其合并看作一个阶段。从上面的漏斗图和funnel表可以看出,从浏览到具有购买意向(收藏和加入购物车),只有5%的转化率,但是到了真正到购买的转化率只有1%,再看“单一转化率”,从具有购买意向到真正购买的转化率达到了20%。说明从浏览到进行收藏和加入购物车的阶段,是指标提升的重要环节。
4)客户价值分析(RFM分析)
from datetime import datetime # 最近一次购买距离现在的天数 recent_buy = df[df["behavior_type"]=="4"].groupby("user_id")["date"].\ apply(lambda x:datetime(2014,12,20) - x.sort_values().iloc[-1]).reset_index().\ rename(columns={"date":"recent"}) recent_buy["recent"] = recent_buy["recent"].apply(lambda x: x.days) recent_buy[:10] # 购买次数计算 buy_freq = df[df["behavior_type"]=="4"].groupby("user_id")["date"].count().reset_index().\ rename(columns={"date":"freq"}) buy_freq[:10] # 将上述两列数据,合并起来 rfm = pd.merge(recent_buy,buy_freq,on="user_id") rfm[:10] # 给不同类型打分 r_bins = [0,5,10,15,20,50] f_bins = [1,30,60,90,120,900] rfm["r_score"] = pd.cut(rfm["recent"],bins=r_bins,labels=[5,4,3,2,1],right=False) rfm["f_score"] = pd.cut(rfm["freq"],bins=f_bins,labels=[1,2,3,4,5],right=False) for i in ["r_score","f_score"]: rfm[i] = rfm[i].astype(float) rfm.describe() # 比较各分值与各自均值的大小 rfm["r"] = np.where(rfm["r_score"]>3.943957,"高","低") rfm["f"] = np.where(rfm["f_score"]>1.133356,"高","低") # 将r和f列的字符串合并起来 rfm["value"] = rfm["r"].str[:] + rfm["f"].str[:] rfm.head() # 自定义函数给用户贴标签 def trans_labels(x): if x == "高高": return "重要价值客户" elif x == "低高": return "重要唤回客户" elif x == "高低": return "重要深耕客户" else: return "重要挽回客户" rfm["标签"] = rfm["value"].apply(trans_labels) # 计算出每个标签的用户数量 rfm["标签"].value_counts()
结果如下: