淘宝用户行为分析

淘宝用户行为分析

淘宝是中国深受欢迎的电商平台,经常网购的人少不了逛逛淘宝,随便看看有什么想买的或者有目的想买什么,在逛淘宝的过程中,我们会留下足迹。通过这些足迹,也就是用户的行为,我们可以对这些行为进行分析挖掘。

使用的工具是Python,主要用到了Pandas,Matplotlib,Seaborn和Pyeacharts这几个包。

数据来源于阿里云天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46

1 提出问题

本文主要围绕这几个点展开:

  1. 每天的浏览量(PV)
  2. 每天的访客量(UV)
  3. 每天的人均访问量
  4. 用户行为的转化漏斗
  5. 从时间的维度分析用户行为

2 数据读取与数据探索

2.1 数据说明

数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。

数据主要包括5个字段,用户ID,商品ID,商品类目ID,行为类型,时间戳。一共有100,150,807条记录。

列名称 说明
用户ID 整数类型,序列化后的用户ID
商品ID 整数类型,序列化后的商品ID
商品类目ID 整数类型,序列化后的商品所属类目ID
行为类型 字符串,枚举类型,包括('pv', 'buy', 'cart', 'fav')
时间戳 行为发生的时间戳

2.2 数据读取

总共的数据有1亿左右,虽然pandas可以处理这么多的数据,但是电脑配置不够,所以这里只取了1千万条数据。使用pandas读取数据只需要几秒钟的时间,Excel大半天都打不开。

df = pd.read_csv('UserBehavior.csv', header=None, names=['用户ID', '商品ID', '商品类目ID', '行为类型', '时间戳'], nrows=10000000)

2.3 数据探索

查看数据信息

df.info()

1千万的数据大小有381.5M,要是全部数据大小差不多有4G

查看是否有缺失值

df.isnull().any()

没有缺失值,数据还是挺干净的。

查看数据的总体情况

df.describe()

时间戳最小值存在负值,这个是有问题,在数据清洗阶段,需要清洗。

查看前5行的数据

df.head(5)

3 数据清洗

由于数据还是比较干净,这里对时间进行处理就好了。

start_time = datetime.datetime(2017,11,25)
end_time = datetime.datetime(2017,12,4)
start_ts = time.mktime(start_time.timetuple())
end_ts = time.mktime(end_time.timetuple())

df = df[(int(start_ts) <= df['时间戳']) & (df['时间戳'] <= int(end_ts))]

数据在2017年11月25日至2017年12月3日之间,在这个区间之外的不要,负值自然也就排除掉了。

4 数据分析

4.1 每天的流量

df['时间'] = df['时间戳'].apply(lambda unix_ts: datetime.datetime.fromtimestamp(unix_ts))
df['日期'] = pd.to_datetime(df['时间'].apply(lambda unix_ts: unix_ts.strftime('%Y-%m-%d')))
s_flow = df[df['行为类型'] == 'pv'].groupby(['日期'])['行为类型'].count()

plt.figure(figsize=(10, 6))
plt.subplot(1, 1, 1)
plt.plot(s_flow)
plt.xlabel('日期', fontsize=16)
plt.ylabel('浏览量', fontsize=16)
plt.tick_params(labelsize=12)
plt.xticks(s_flow.index, rotation=30)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
plt.grid(axis='x')
plt.title('每天浏览量折线图', fontsize=18)
plt.show()

![

![

从图中可以看出,点击量在11月25日到12月1日这7天中,访问量在70000左右,12月2日和12月3日这两天浏览量显然高于其他几天,虽然这两天是星期六和星期日,但是不能直接判定是周末的原因,因为11月25日和11月26日这两天也是周末,浏览量只是略高,具体需要进一步分析。

4.2 每天的访客数

s_pv = df[df['行为类型'] == 'pv'].drop_duplicates(subset=['日期', '用户ID']).groupby(['日期'])['用户ID'].count()

plt.figure(figsize=(10, 6))
plt.subplot(1, 1, 1)
plt.plot(s_pv)
plt.xlabel('日期', fontsize=16)
plt.ylabel('访客数', fontsize=16)
plt.tick_params(labelsize=12)
plt.xticks(s_pv.index, rotation=30)
plt.yticks(range(0, 110000, 10000))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
plt.grid(axis='x')
plt.title('每天访客数折线图', fontsize=18)
plt.show()

12月2日和12月3日的访客数高于前面一个星期,这两天访问量增加,可能是这两天有活动,带来的访问量。浏览量的增加不一定是访客数的增加,具体的情况还需要进一步进行分析。

4.3 人均浏览量

s_mpv = s_flow / s_pv

plt.figure(figsize=(10, 6))
plt.subplot(1, 1, 1)
plt.plot(s_mpv)
plt.xlabel('日期', fontsize=16)
plt.ylabel('平均流量', fontsize=16)
plt.tick_params(labelsize=12)
plt.xticks(s_mpv.index, rotation=30)
plt.yticks(range(0, 18, 2))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
plt.grid(axis='x')
plt.title('每天人均浏览量折线图', fontsize=18)
plt.show()

每天的人均浏览量在13-14之间,一直都是在这个水平,所以可以确定,浏览量的增加就是新增的访问量带来的。

4.4 转化率

pv = df[df['行为类型'] == 'pv']['用户ID'].count()
cart = df[df['行为类型'] == 'cart']['用户ID'].count()
fav = df[df['行为类型'] == 'fav']['用户ID'].count()
buy = df[df['行为类型'] == 'buy']['用户ID'].count()

attr = ["购买:%.2f%%" % (buy / pv * 100), "收藏或加入购物车: %.2f%%" % ((fav+cart) / pv * 100),"点击量:100%"]
value = [18, 36, 54]
funnel = Funnel("转化率", width=600, height=400, title_pos='center')
funnel.add(
    "商品",
    attr,
    value,
    is_label_show=True,
    label_pos="inside",
    label_text_color="#fff",
    is_legend_show = False
)
funnel

用户点击后收藏或加购物车的概率为9.51% ,而最后真正购买的只有 2.23%,购买转化率比较低,存在的增长空间。

4.5 从时间维度分析用户行为

4.5.1 一天中的用户行为

df['时间段'] = df['时间'].apply(lambda unix_ts: unix_ts.hour)
s_hour = df.groupby(['行为类型', '时间段'])['行为类型'].count()

plt.figure(figsize=(12, 8))
s_hour['pv'].plot(color='r', label='点击')
plt.legend(fontsize=16, loc='upper right')
plt.xticks(s_hour['pv'].index, ['0时','1时','2时','3时','4时','5时','6时','7时','8时','9时','10时','11时','12时','13时','14时','15时','16时','17时','18时','19时','20时','21时','22时','23时'], fontsize=12)
plt.yticks(range(100000, 1000000, 100000), fontsize=14)
plt.grid(b='False')
plt.xlabel('')
plt.twinx()
s_hour['fav'].plot(color='b', label='收藏')
s_hour['cart'].plot(color='k', label='加入购物车')
s_hour['buy'].plot(color='g', label='购买')
plt.xlabel('')
plt.xticks(s_hour['pv'].index, ['0时','1时','2时','3时','4时','5时','6时','7时','8时','9时','10时','11时','12时','13时','14时','15时','16时','17时','18时','19时','20时','21时','22时','23时'], fontsize=12)
plt.yticks(range(10000, 110000, 10000), fontsize=14)
plt.grid(b='False')
plt.legend(fontsize=16, loc='upper left')
plt.title('一天中用户行为分布折线图', fontsize=18)

4种行为的趋势都是一样的,主要用户活跃主要集中在10-23点,在19-23这5个小时达到顶峰,有活动可以集中在这个时间段,这个时间段用户活跃度是最高的。凌晨的那段时间大部分人处于睡眠状态,活跃度低是意料之中的。

4.5.2 一周中的用户行为

df['星期'] = df['时间'].apply(lambda unix_ts: unix_ts.weekday())
s_weekday = df['2017-11-27' <= df['时间']].groupby(['行为类型', '星期'])['行为类型'].count()

plt.figure(figsize=(12, 8))
s_weekday['pv'].plot(color='r', label='点击')
plt.legend(fontsize=16, loc='upper right')
plt.xticks(s_weekday['pv'].index, ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'], fontsize=16)
plt.yticks(range(900000, 1400000, 100000), fontsize=14)
plt.grid(b='False')
plt.xlabel('')
plt.twinx()
s_weekday['fav'].plot(color='b', label='收藏')
s_weekday['cart'].plot(color='k', label='加入购物车')
s_weekday['buy'].plot(color='g', label='购买')
plt.xlabel('')
plt.xticks(s_weekday['pv'].index, ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'], fontsize=16)
plt.yticks(range(20000, 110000, 10000), fontsize=14)
plt.grid(b='False')
plt.legend(fontsize=16, loc='upper left')
plt.title('一周中用户行为分布折线图', fontsize=18)

数据中一共9天,除去两天,剩下是一个完整的星期。我们从图中可以看出,星期六和星期日这两天活跃度明显增高,那么是不是可以就可以得出结论:周末休息,使用淘宝的人数增加。合情合理,周末人们都有时间,但是前面在每天的浏览量分析那里,我们知道了前面两天也是周末,但是浏览量跟后面5个工作日差距不大。并不能得出周末用户活跃度大这个结果,在这个数据集中看不出来。

结论

  1. 2017-12-02和2017-12-03浏览量骤然上升,对比上一个周末,新增的访问量是明显,说明这两天的活动是有效果的。
  2. 最终的转化率只有2.23%,用户点击后收藏或加购物车的转化率在9.51% ,可用通过活动进一步促进用户的购买。
  3. 从时间看,用户主要活跃在白天的时间和晚上,从10点-23点,顶峰是在19点-23点。但是周末活跃度高,并不能得出结论是周末的原因。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容