用户行为分析(Python)

一、前述

电商、互联网、金融这三驾马车是对数据分析应用最为广泛的行业,同时也占据了就业市场上绝大多数的数据分析岗位,只因日常业务产生的海量数据蕴含着无尽的价值。
本次就通过电商角度,选取阿里天池项目中的淘宝App用户行为数据利用Python进行数据分析。

二、理解需求

1. 明确分析目标及其方向

通过对用户关键行为的埋点获取的日志数据,包含用户、商品、行为、时间等信息,而看似简单的几个维度,通过数据分析手段,便能从不同角度挖掘蕴含的价值。
本次主要通过以下四个方向探索淘宝用户行为:

1.1 用户行为时间模型

PV、UV随时间变化。
留存率模型。

1.2 用户消费行为分析

各周期内消费次数统计。
各行为转化模型。
复购率模型。
回购率模型。

1.3 用户价值分析

RFM模型。
各价值类别用户分布、购买力等。

1.4 商品分析

商品和行为关系。
TOP商品分析。

三、理解数据

数据中包含了淘宝App由2019年11月28日至2019年12月3日之间,有行为的随机用户的所有行为(行为包括点击、购买、加购、收藏)。由user_id(用户ID)、goods_id (商品ID)、cat(商品类目ID)、behavior(行为类型)、time(时间戳)、sex(性别)、addr(城市)、device(访问设备)、price(商品单价)、amount(商品销量)组成,并以逗号分隔。

1.数据处理

用户行为分析(Python)_第1张图片
源数据如图

1.1 数据信息

******************** 基本信息
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 757565 entries, 0 to 757564
Data columns (total 10 columns):
user_id     757565 non-null int64
goods_id    757565 non-null int64
cat         757565 non-null int64
behavior    757565 non-null object
time        757565 non-null int64
sex         757565 non-null int64
addr        757565 non-null object
device      757565 non-null object
price       757565 non-null float64
amount      757565 non-null int64
dtypes: float64(1), int64(6), object(3)
memory usage: 57.8+ MB
None
******************** 空值
user_id     0
goods_id    0
cat         0
behavior    0
time        0
sex         0
addr        0
device      0
price       0
amount      0
dtype: int64
******************** 行为项
pv      679668
cart     42714
fav      20601
buy      14582
Name: behavior, dtype: int64
******************** 重复值
False    757565
dtype: int64

数据很干净,只是有些数据类型需要转换,之后随用随改吧。

1.2 添加时间相关列

df["time"]=df["time"].apply(lambda x:datetime.datetime.fromtimestamp(x))
df['date'] = df['time'].dt.date
df['week'] = df['time'].dt.dayofweek+1
df['hour'] = df['time'].dt.hour

在这里插入图片描述

四、数据分析及可视化

1. 用户行为时间模型

1.1 pv uv每日变化趋势

pv、uv 按天分析,观察其访问走势

puv_pivot = pd.pivot_table(df, index=['date'], values=['user_id'], aggfunc='count')
uv = df[['user_id','date']].drop_duplicates()['date'].value_counts()
puv_pivot = puv_pivot.join(uv)
puv_pivot.columns = ['pv','uv']
puv_pivot['avg_pv'] = puv_pivot['pv']/puv_pivot['uv']

用户行为分析(Python)_第2张图片

grid = Grid()
bar = Bar()
grid.theme = ThemeType.PURPLE_PASSION
line = Line()
line.add_xaxis([str(i)[:10] for i in puv_pivot.index.tolist()])
line.add_yaxis("pv", puv_pivot["pv"].tolist(), label_opts=opts.LabelOpts(is_show=False))
line.extend_axis(yaxis=opts.AxisOpts(type_="value",name="uv人数",position="right", axislabel_opts=opts.LabelOpts(formatter="{value}")))
line.set_global_opts(yaxis_opts=opts.AxisOpts(
                                            name="pv人数",
                                            type_="value",
                                            axislabel_opts=opts.LabelOpts(formatter="{value}")
                                            ), 
                    xaxis_opts=opts.AxisOpts(name="",axislabel_opts={
   "rotate":45}), 
                    title_opts=opts.TitleOpts("pv uv 变化趋势"),
                    tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
                   ) # 交叉指向工具
line.add_xaxis([str(i)[:10] for i in puv_pivot.index.tolist()])
line.add_yaxis("uv", puv_pivot["uv"],yaxis_index = 1,label_opts=opts.LabelOpts(is_show=False))
line.render_notebook()

用户行为分析(Python)_第3张图片
可以发现,PV与UV的每日变化趋势大致相同:工作日维持在低值,12月2日PV与UV有较大幅度地提升,检索可知正值“双十二”前夕,各类预热活动促进用户访问增长。

1.2 各行为变化

behavior_pivot = pd.pivot_table(df,index='date',columns='behavior',values='user_id',aggfunc='count')

用户行为分析(Python)_第4张图片
构图方式同 pv uv每日变化趋势 ,这里只展示可视化结果
用户行为分析(Python)_第5张图片
由于浏览量与其他行为不在同一个量级,故将浏览量置于次坐标轴展示。从变化趋势来看,12月第一天迎来了各类行为的峰值。

1.3 各时段访问量

gp_hour = df.groupby('hour')['user_id'].count()
line = (
        Line()
        .add_xaxis(gp_hour.index.tolist())
        .add_yaxis("访问量", gp_hour.values.tolist(),label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
            title_opts=opts.TitleOpts(title="各时段访问量"),
            tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
            yaxis_opts=opts.AxisOpts(name="访问量

你可能感兴趣的:(练习,数据分析)