(第十二周作业一)案例:如何用Python分析电商用户行为

目录

一、任务背景

二、数据集的获取与解读

2.1 查看数据表

2.2 数据表字段大概的含义(应该是这些意思)

2.3 timestamp 疑云

三、数据清洗

3.1  查看数据表缺失值情况

3.2 对 user_info 做数据清洗

 四、数据分布分析

4.1 用户信息分析

4.2 用户性别分布

4.3 将user_log和user_info合并

4.4 不同性别用户下单行为分析

4.5 不同日期的下单行为分析

4.6 不同时间段的下单行为分析


一、任务背景

阿普尔星球最大的电商网站阿普闪购计划策划一场推广活动,通过发短信的形式,向潜在的用户发送广告和优惠信息,吸引他们来阿普闪购注册并购物。

由于预算以及短信服务商的限制,没有办法对大范围的用户投放,这就需要缩小人群的范围,找出最有可能产生转化的人群。此外,人们的下单行为往往也和时间呈现一定的相关性,什么时候推送营销短信也很重要。

现阶段你作为阿普闪购的数据分析师,这个任务自然就落到了你的肩上,你的目标是:

1.通过数据分析,找到最有可能转化的人群特征(年龄、性别、地域)等;

2.通过数据分析,决定出最有利于转化的营销短信投放时间。

3.通过和多个部门的沟通,最终你从阿普闪购的数据部门申请到了如下数据权限。

4.用户行为表:最近 6 个月的用户行为记录。

5.VIP 会员表:用户 VIP 会员开通情况。

6.用户信息表:用户的相关信息。

二、数据集的获取与解读

2.1 查看数据表

user_behavior_time_resampled.csv、user_info.csv、vip_user.csv 一共三个数据表。

在不知道其数据内容的时候,先用python代码查看一下。

导入所需要的包和表

import pandas as pd
df_user_log = pd.read_csv('../data/user_behavior_time_resampled.csv')
df_vip_user = pd.read_csv('../data/vip_user.csv')
df_user_info = pd.read_csv('../data/user_info.csv')

user_behavior_time_resampled.csv

print(df_user_log.info())
df_user_log.head()

c4a1d5f49e3f4f0e9daf4f7522a5010e.png

 user_info.csv

print(df_user_info.info())
df_user_info.head()

2e8604c1a04540d9b4ea2311f0a62149.png

 vip_user.csv

e23bee3c745249aa9785fe9a6fa3e3e7.png

2.2 数据表字段大概的含义(应该是这些意思)

  • user_id:用户ID,表示购买该商品的用户。
  • item_id:商品ID,表示用户购买的商品。
  • cat_id:商品类别ID,表示该商品所属的类别。
  • seller_id:卖家ID,表示销售该商品的商家。
  • brand_id:品牌ID,表示该商品所属的品牌。
  • time_stamp:时间戳,表示购买该商品的时间。
  • action_type:行为类型,表示用户对该商品的行为(例如购买、评价等)
  • age_range:年龄段,表示用户所属的年龄范围。
  • gender:性别,表示用户的性别。
  • merchant_id:商家ID,表示该商家在电商平台上的唯一标识符。
  • label:标签,表示该商家被分配到的某一特定类别或属性。

通过以上的代码的查阅,我们对这三张数据表有了大概的了解,发现,三张表都有user_id这一个字段,因此,可以着重于从这里入手,做跨表联动分析。

2.3 timestamp 疑云

对于user_behavior_time_resampled.csv这张数据表,发现有俩个相同字段timestamp。

一般解决的方式:发现两个相似字段,和不明确含义的字段,通常的做法是先看一下它的边界(即最大值和最小值)

time_stamp_max = str(df_user_log['time_stamp'].max())
time_stamp_min = str(df_user_log['time_stamp'].min())
print("time_stamp max: " + time_stamp_max, "time_stamp min: " + time_stamp_min)
timestamp_max = str(df_user_log['timestamp'].max())
timestamp_min = str(df_user_log['timestamp'].min())
print("timestamp max: " + timestamp_max, "timestamp min: " + timestamp_min)

521a53fad2284e2dad155df7324a74f7.png

从数据集的描述中,用户行为表是用户 6 个月的行为,那 time_stamp 最大 1112,最小 511 看起来就特别像日期。代表最小日期是 5 月 11 日,最大日期是 11 月 12 日。那既然 time_stamp 是日期,那 timestamp 会不会是具体的时间呢?timestamp 的最大值为 86399 ,而一天最大的秒数为 24*3600 = 86400。两个数字非常接近,那基本可以认定 timestamp 代表的是一天中的第几秒发生了这个行为。

 将期中的time_stamp列名改为date,方便区分

df_user_log.rename(columns={'time_stamp':'date'}, inplace=True)
df_user_log.head()

c09f95c598cc43f5ba52b3a1c4c413e8.png

三、数据清洗

3.1  查看数据表缺失值情况

print(df_user_log.isnull().sum(),'/n')
print('********************************')
print(df_user_info.isnull().sum(),'/n')
print('********************************')
print(df_vip_user.isnull().sum(),'/n')

91e3e23614b346b1ad8b03ec8d076024.png

 小结:从上述结果中可以看出,user_log 表中大概有 1.8 w 条数据缺少品牌 id 的字段,缺失率为0.16%(1.8w/1098w),一般这个数据量级不会影响到数据分布的分析,暂时不处理。

而user_info 由于缺失的数据量较少,所以我们选择直接删掉这些有缺失的记录。

从输出结果来看, vip_user 这个表没有数据缺失,不用清理。

3.2 对 user_info 做数据清洗

# 删除缺失值
print('删除前',df_user_info.shape)
df_user_info = df_user_info.dropna()
print('删除后',df_user_info.shape)
print('********************************')

7e6ee286a76d45e3a40a0abdfe0dfdd5.png

 四、数据分布分析

4.1 用户信息分析

查看一下用户的年龄分布情况

df_user_info['age_range'].value_counts()

d3276738e5b141daa94c55712c239d57.png

可以看到 统计年龄段为3.0和4.0(即25-34岁)用户占非0记录数较多(那个0.0的可能是缺失值,不过由于数据占比较大,先不做处理)。

统计年龄段为3.0和4.0(即25-34岁)用户占非0记录的比例 。

user_ages = df_user_info.loc[df_user_info['age_range'] != 0, 'age_range'] # 年龄非0的记录
user_ages.loc[(user_ages == 3) | (user_ages == 4)].shape[0] / user_ages.shape[0]

 b19f67e613e44977b4abde42f73c59f1.png

可以看到,25~34 岁用户占到了 58% 的比例

4.2 用户性别分布

df_user_info['gender'].value_counts()

 2e917a241c99412fb6eded7710317340.png

结合之前的数据集定义,0 代表女性,1 代表男性,2 代表未知。可以看到,阿普闪购的核心用户群是女性,是男性数量的 2.35 倍。从用户群体的分析上,我们大概已经勾勒出我们的目标用户画像,25~34 岁之间的女性群体。但目前分析的只是注册用户的信息,会不会存在男性虽然注册用户少但是购买力却更强呢?为了验证这个假象,我们就需要结合订单数据来分析。 

4.3 将user_log和user_info合并

df_user_log = df_user_log.merge(df_user_info, how='left', on='user_id')
df_user_log

f138c8fd3c2240ed83928c2875395001.png

4.4 不同性别用户下单行为分析

14ae796b247c4ff68114db9f5b81368c.png

可以看到,女性用户不仅注册用户远超过男性,购买力同样惊人,是男性下单量的 2.9 倍。基本可以确定,我们发送营销信息要聚焦的用户群应该是 25~34 岁的女性。用户群确定了之后,下一步要确定发送的时间。接下来,我们需要分析用户下单的时间特征。

4.5 不同日期的下单行为分析

print(df_user_log.loc[df_user_log['action_type'] == 'order', ['date']].date.value_counts(),'\n')
print(df_user_log.loc[df_user_log['action_type'] == 'order', ['date']].date.value_counts(bins=6),'\n')

c77d54abf3504786a4dd909cab306b79.png

可以看到,用户在 10月中下旬一直到 11 月上旬这个时间段,下单量较为集中。分析完了日期分布后,接下来我们分析一下一天中的时间段的分布。

4.6 不同时间段的下单行为分析

# 增加一列,代表下单时刻(用小时表示)
df_user_log['time_hours_view'] = df_user_log['timestamp'] / 3600  
df_user_log.head()

6cb5a788994d4107b29dc9564c9298b3.png

df_user_log.loc[df_user_log['action_type'] == 'order', ['time_hours_view']].time_hours_view.value_counts(bins=12)

46d9932c192f47e6ad242171556cc6c7.png

 从上述结果可以看到,晚上 8 点到 10 点之间是下单最为密集的,订单量为 94209 单

小结:至此,我们本次短信营销的目标人群和时间就已经基本分析完毕了。我们应该针对 25~34 岁的女性,在 10 月中下旬到 11 月中旬的晚上 8 点到 10 点进行短信的批量发送,这样应该可以收获最好的转化效率。

猜你喜欢

转载自blog.csdn.net/qq_62238325/article/details/131024997
今日推荐