python axes.titlesize_Python高潜用户分析

一、数据来源

本文的数据主要包含两部分,一部分是用户行为数据,另一部分是用户信息数据,数据文件可从如下地址获取:

提取码:bfdw

二、分析思路

三、分析过程

3.1 定义高潜用户

本文定义高潜用户具有如下特征:必须有购买行为

对一个商品购买和其他交互行为(浏览、点击和收藏等)时间差大于1天

3.2 读取数据

本文使用Jupyter Notebook来对数据进行处理和分析,首先导入后续分析需要的第三方库及一些常用设置:

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

# 设置风格

sns.set(style='white', font_scale=1.2)

%matplotlib inline

plt.rcParams["font.sans-serif"] = "SimHei"

plt.rcParams['axes.titlesize'] = 20

plt.rcParams['axes.unicode_minus']=False

import warnings

warnings.filterwarnings("ignore")

该数据集包含5000多万条行为数据,直接用pandas的readcsv(filename)读取会导致程序崩溃,这里采用get_chunk的方法来分块读取文件。

# 每个csv中大概有100多万条数据,我们采取数据分块读取

def read_actionData(filepath,size=10000):

'''filepath:文件路径size:数据行数'''

# 使用迭代器的方式读取数据

df = pd.read_csv(filepath, header=0,iterator=True)

# 保存数据块的列表,保存单个csv的数据

chunks = []

loop = True

while loop:

try:

chunk = df.get_chunk(size)[["user_id","sku_id","type","time","cate"]]

chunks.append(chunk)

except StopIteration:

loop = False

print("Iteration is stopped")

df_ac = pd.concat(chunks,ignore_index=True)

return df_ac

# 将多个数据表合并在一起

import os

fileDir = r"D:\数据源"

df_ac = []

df_ac.append(read_actionData(filepath=os.path.join(fileDir,"Data_Action_201602.csv")))

df_ac.append(read_actionData(filepath=os.path.join(fileDir,"Data_Action_201603.csv")))

df_ac.append(read_actionData(filepath=os.path.join(fileDir,"Data_Action_201604.csv")))

df_ac=pd.concat(df_ac,ignore_index=True)

读取完毕后,可以看到该数据集中包含50601736条行为数据,五个字段:

3.3 获得高潜用户

本文中以品类4(cate=4)为例来进行分析,得到品类4的高潜用户。

3.3.1 获得购买品类4的用户最后一次购买时间

1)type这个字段中4表示购买行为,首先得到有过购买行为的所有数据,购买行为的数据有48252条

df_ac_type = df_ac[df_ac["type"]==4]

df_ac_type.shape

# 返回结果(48252,5)

2)进一步筛选购买了品类4的数据,有9326条

df_ac_cate = df_ac_type[df_ac_type["cate"]==4]

df_ac_cate.shape

# 返回结果(9326,5)

3)获得购买品类4的用户最后一次的购买时间,有7466位不同的用户

def last_time(user):

return user["time"].max()

df_usr_buy_time = df_ac_cate.groupby(by="user_id").apply(last_time)

df_usr_buy_time

3.3.2 获得购买品类4的用户第一次交互时间

1)获取品类4的所有数据,有11088350条

df_ac_allcate = df_ac[df_ac["cate"] == 4]

df_ac_allcate.shape

# 返回结果(11088350,5)

2)获得购买品类4的用户行为数据,有3959454条

df_all_buy_ac = pd.merge(df_usr_buy_time.to_frame(),df_ac_allcate,on="user_id")

df_all_buy_ac.shape

# 返回结果(3959454,6)

3)获得购买品类4的用户第一次交互时间

def first_time(user):

return user["time"].min()

df_usr_ac_firsttime = df_all_buy_ac.groupby("user_id").apply(first_time)

df_usr_ac_firsttime

3.3.3 得到购买品类4的高潜用户

计算购买品类4的用户最后一次购买时间与第一次交互时间的天数,天数大于1的用户即为高潜用户,得到高潜用户数据5949条。

df = pd.merge(df_usr_buy_time.to_frame(),df_usr_ac_firsttime.to_frame(),on="user_id")

df.columns = ["buy_time","ac_time"]

df["days"] = (df["buy_time"].astype("datetime64")-df["ac_time"].astype("datetime64")).dt.days

high_dive = df[df["days"]>1]

high_dive

3.4 高潜用户分析

3.4.1 获得高潜客户的客户信息

将上面得到的高潜客户行为数据与高潜客户的信息数据表进行连接。

user_table = pd.read_csv(os.path.join(fileDir,"user_table.csv"))

user_table_high = pd.merge(user_table,high_dive,on="user_id")

user_table_high

3.4.2 高潜客户等级分布

user_lv_count = user_table_high.groupby("user_lv_cd")[["user_id"]].count()

user_lv_count.columns = ["count"]

user_lv_count

pie_labels = user_lv_count.index.to_list()

f, ax = plt.subplots(figsize=(6,6))

plt.pie(user_lv_count,labels=pie_labels,autopct="%.1f%%",startangle=90,textprops={'fontsize': 12})

plt.title('高潜客户等级占比')

品类4的高潜客户中级别为5的客户接近60%,级别为4的客户占30%左右。

3.4.3 高潜客户的年龄段分布

user_age_count = user_table_high.groupby("age")[["user_id"]].count()

user_age_count.columns = ["count"]

user_age_count.reset_index(inplace=True)

user_age_count

# 绘制柱形图

fig = plt.figure(figsize=(10,6))

sns.barplot(x="age",y="count",data=user_age_count,orient='v',color="dodgerblue")

plt.title('高潜客户年龄分布')

该数据中年龄数据为脱敏数据,此处仅作为分析思路。

3.4.4 购买数量分布

首先查看购买数量的最小值和最大值,这里直接用describe方法查看:

user_table_high[["buy_num"]].describe()

设置不同的购买次数区间,计算不同购买次数的用户数和占比,得到90%的用户购买次数在4次以下。

buy_num_groups = pd.cut(user_table_high["buy_num"],bins=[0,1,2,3,4,5,10,20,30,40,50])

buy_num_groups_count = user_table_high.groupby(buy_num_groups)[["user_id"]].count()

buy_num_groups_count["rate"] =["%.3f%%" %(100*value) for value in buy_num_groups_count["user_id"]/buy_num_groups_count["user_id"].sum()]

buy_num_groups_count

3.4.5 高潜用户周一到周日购买该商品数量对比

1)获得高潜客户购买该商品的记录

df_buy_high = df_ac_cate[df_ac_cate["user_id"].isin(high_dive.index.tolist())]

2)计算购买时间在一周中的哪一天

df_buy_high["time"] = df_buy_high["time"].astype("datetime64")

df_buy_high["weekday"] = df_buy_high["time"].apply(lambda x:x.weekday()+1)

df_buy_high

3)计算每个用户周一到周日的购买数量

df_buy_high_count = df_buy_high.groupby("weekday")[["user_id"]].count()

df_buy_high_count.columns = ["count"]

df_buy_high_count.reset_index(inplace=True)

df_buy_high_count

# 绘制柱形图

fig = plt.figure(figsize=(10,6))

sns.barplot(x="weekday",y="count",data=df_buy_high_count,orient='v',color="dodgerblue")

plt.title('高潜客户周一到周日的购买数量')

3.4.6 高潜用户各环节转化

本数据中用户行为包含浏览、加购、删购、收藏和购买等,将加购、删购和收藏进行合并,得到加购或收藏的次数,绘制从浏览-加购或收藏-购买的漏斗转化情况。

action_data = user_table_high[["browse_num","addcart_num","delcart_num","favor_num","buy_num"]].sum()

action_data

funnel_data = pd.DataFrame()

funnel_data["action"] = ["browse","addcart or favor","buy"]

funnel_data["count"] = [action_data["browse_num"], action_data["addcart_num"]-action_data["delcart_num"]+action_data["favor_num"],action_data["buy_num"]]

# funnel_data["rate"] = funnel_data["count"]/funnel_data["count"][0]

funnel_data["rate"] = ["%1.4f" %value for value in funnel_data["count"]/funnel_data["count"][0]]

funnel_data

from pyecharts import options as opts

from pyecharts.charts import Funnel

x_data = funnel_data["action"].tolist()

print(x_data)

y_data = funnel_data["rate"].tolist()

print(y_data)

data = [[x_data[i], float(y_data[i])*100] for i in range(len(x_data))]

print(data)

f = Funnel(init_opts=opts.InitOpts(width="800px", height="600px"))

f.add(series_name="高潜用户行为数",

data_pair=data,

label_opts=opts.LabelOpts(is_show=True,formatter="{b}:{c}%", position="outside")

)

f.set_global_opts(title_opts=opts.TitleOpts(title="高潜用户漏斗图",pos_left="center"),

legend_opts=opts.LegendOpts(pos_left="left",pos_top="middle",orient="vertical"))

f.render_notebook()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值