关注公众号:『AI学习星球
』
算法学习
、4对1辅导
、论文辅导
或核心期刊
可以通过公众号
滴滴我
文章目录
- 背景描述
- 数据说明
- 分析数据
- 相关系数
- 查看各功能属性的分布
- 各功能路径
- 流量排名 TOP10
- 留存率排名 TOP10
背景描述
本数据集是某社交APP一定时间内用户留存的分类示例数据,其中A/B/C/D/E/F六个参数可代表APP内六个不同功能,每一行代表一组有相同行为的用户,Action_1到Action_2记录了由用户数变化所代表的一步留存率。
我们可以使用该数据来分析该APP内用户行为特征,不同参数值变化对留存率的影响等。
数据说明
数据集为1个csv文件,约19万行,包含以下字段:
- A 参数A的变化值,可理解为APP内某一功能(如进入主页面时弹框时长等)
- B 参数B的变化值,理解同A
- C 参数C的变化值,理解同A
- D 参数D的变化值,理解同A
- E 参数E的变化值,理解同A
- F 参数F的变化值,理解同A
- Action_1 进入动作1(如购买会员页面)的用户数
- Action_2 进入动作2(如收银台页面)的用户数*
以下是表的部分数据
项目数据来源:https://www.heywhale.com/home
分析数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from warnings import filterwarnings
filterwarnings("ignore")
df = pd.read_csv("tantan.csv")
df.head()
df.tail()
df.describe()
df.isnull().sum()
df.info()
相关系数
cor = df.corr()
plt.figure(figsize=(8,8))
sns.heatmap(cor,square = True,cmap='vlag',annot = True,linewidths = 0.5)
plt.show()
Action_1-Action_2 ; E-F ; D-F ; B-C ; B-D ;较为相关 ,相关但不代表影响
假设A~F字段均为功能属性,查看其唯一值并查看一下每个属性的分布
# 将A-F列的属性改为字符串类型
s = ['A','B','C','D','E','F']
for i in s:df[i] = df[i].astype('str')
查看A~F字段的唯一值
s = ['A','B','C','D','E','F']
for i in s:print(i,df[i].unique())
查看各功能属性的分布
plt.figure(figsize=(16,16))
columnsnames = ['A','B','C','D','E','F']
n = 0
for i in columnsnames:n +=1plt.subplot(3,2,n)sns.countplot(x = i,data = df)
各功能路径
s = ['A','B','C','D','E','F']
for i in s:df[i] = i+df[i]
from pyecharts import options as opts
from pyecharts.charts import Sankey,Bar,Grid
title = list(df)[:-2]
class_item = {}
for i in title:class_item[i] = df[i].drop_duplicates()nodes = []
for i in title:for j in list(class_item[i]):nodes.append({'name':j})links =[]
for i in range(len(title)):temp0 = list(class_item)for j in list(class_item[temp0[i]]):try:for k in list(class_item[temp0[i+1]]):df1 = df[df[temp0[i]]==j]df2=df1[df1[temp0[i+1]]==k]temp_value= len(df2)if temp_value!=0:links.append({'source':j,'target':k,'value':temp_value})del df1del df2except:continue
p = (Sankey().add('',nodes,links,linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.3),label_opts=opts.LabelOpts(position="right"),node_gap = 5).set_global_opts(title_opts=opts.TitleOpts(title = '各功能路径'))
)
p.render_notebook()
路径图呼应上图的属性分布图,可以看到每个路径的去向
df['path'] = df['A'].str.cat(df[['B','C','D','E','F']].astype(str),sep=" —> ")
result = df.groupby('path').agg(Action_1 = ('Action_1','sum'),Action_2 = ('Action_2','sum'))
result['留存率'] = (result['Action_2']/result['Action_1']).round(2)
流量排名 TOP10
# 流量排名 TOP 10
re1 = result.sort_values(by='Action_1')[-10:]
x_data = re1.index.to_list()
y_data = re1['Action_1'].tolist()grid = Grid()
b = (Bar().add_xaxis(x_data).add_yaxis('',y_data).set_global_opts(title_opts=opts.TitleOpts(title='流量排名 TOP 10')).set_series_opts(label_opts = opts.LabelOpts(is_show=True,position = 'right')).reversal_axis()
)
grid.add(b,grid_opts=opts.GridOpts(pos_left="30%"))
grid.render_notebook()
留存率排名 TOP10
re2 = result.sort_values(by='留存率')[-10:]
x_data = re2.index.to_list()
y_data = re2['留存率'].tolist()grid = Grid()
b = (Bar().add_xaxis(x_data).add_yaxis('',y_data).set_global_opts(title_opts=opts.TitleOpts(title='留存率排名 TOP 10')).set_series_opts(label_opts = opts.LabelOpts(is_show=True,position = 'right')).reversal_axis()
)
grid.add(b,grid_opts=opts.GridOpts(pos_left="30%"))
grid.render_notebook()