电商用户行为分析(一)

电商用户行为分析

数据集使用了阿里巴巴提供的一个淘宝用户行为数据集–UserBehavior是,用于隐式反馈推荐问题的研究。该数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。由用户ID、商品ID、商品类目ID、行为类型和时间戳组成。

电商用户行为分析(一)
我将记录自己对这个数据集的简单分析,通过使用pandas和mysql对数据做处理,使用pyplot来进行可视化。(由于该数据集过于庞大,设备的性能有限,本次实验中仅使用前10000000条数据)
下面是分析思路:
电商用户行为分析(一)

; 1.数据的清洗

首先导入一些我们会用到的包

import pandas as pd
from collections import Counter
from datetime import datetime
import matplotlib.pyplot as plt
import pymysql

先将数据导入,转换成一个df,由于数据本身是不带列名的,这里我们自己设置

df = pd.read_csv(r"2.csv")
df.columns = ['user_id', 'item_id', 'category_id', 'behavior_type', 'timestamp']

处理数据的重复值和缺失值

print(df.duplicated().sum())
df.drop_duplicates(inplace=True)
print(df.duplicated().sum())
print(df.isnull().sum())

可以看出是没有缺失值的,只需要删除5条重复值即可

电商用户行为分析(一)
下面我们对这个时间戳进行转换
df['timestamp'] = pd.to_datetime(df['timestamp'], unit="s")
df["timestamp"] = df["timestamp"].astype(str)
df1 = df["timestamp"].str.split(" ", 2, True)
df1.columns = ["date", "time"]
df = df.drop("timestamp", axis=1).join(df1)
df = df.sort_values(['date'])
print(df)

电商用户行为分析(一)
处理完后可以发现还是有很多不在正确时间段内的数据,我们将其删除
df = df.drop(df[(df.date < '2017-11-25') | (df.date > '2017-12-04')].index)
print(df)

电商用户行为分析(一)
至此基本完成了数据的预处理,下面我们将数据导入mysql中
首先在MySQL中创建一个表,表结构如下:
电商用户行为分析(一)

接下来使用pandas提供的to_sql来进行处理

conn = create_engine("mysql+pymysql://root:123456@localhost:3306/demo?charset=utf8")
df.to_sql(name="ubd", con=conn, index=False)

结果pychram一直在运行,但是数据缺无法导入,我猜想可能是我的设备性能的问题,于是自己写了一个分批导入

conn = create_engine("mysql+pymysql://root:123456@localhost:3306/demo?charset=utf8")
df.to_sql(name="ubd", con=conn, index=False)
for i in range(100000, 10000000+1, 100000):
df1 = df[i - 100000:i]
print('开始')
df1.to_sql(name="ubd", con=conn, index=False, if_exists='append')
print('完成' + str((i / 10000000)*100) + '%')

成功将数据导入

电商用户行为分析(一)
对比查询一下记录数也没有错误
电商用户行为分析(一)

电商用户行为分析(一)

2.数据分析

将数据导入完成后,就可以开始进行数据的分析了,我们需要从不同的角度去分析,找到能让营收额提高的策略,首先我们从整体的一个时间上来进行分析,找到用户的活动规律,以此为基础再来探究用户的行为爱好,用户消费价值等等。

2.1时间轴分析

由于数据的时间只有几天,我们就从这几天的维度来分析,找到突出的的日期,再从小时的维度来进行分析。首先我们查看一下在这几天总体的各类事件发生情况和每日的人流量。

电商用户行为分析(一)
下面我们从每一天来看,由于要用到数据可视化,因此再次使用python来访问mysql中的数据,来方便使用了pyplot进行数据可视化
import numpy as np
import matplotlib.pyplot as plt
from pymysql import Connect
import matplotlib.font_manager as fm

conn = Connect(host='localhost', port=3306, user='root', password='123456', database='demo')
cursor = conn.cursor()

sql = '''select date,
count(distinct user_id) as 用户数,
sum(case when behavior_type = 'pv'   then 1 else 0 end ) as 总点击数,
sum(case when behavior_type = 'fav'   then 1 else 0 end ) as 总收藏数,
sum(case when behavior_type = 'cart'   then 1 else 0 end ) as 总加入购物车数,
sum(case when behavior_type = 'buy'   then 1 else 0 end ) as 总购买数
from ubd
group by date;
'''
cursor.execute(sql)
data = cursor.fetchall()
data = np.array(data)

x = [data[i][0] for i in range(data.shape[0])]
y1 = [data[i][1] for i in range(data.shape[0])]
y2 = [int(data[i][2]) for i in range(data.shape[0])]
y3 = [int(data[i][3]) for i in range(data.shape[0])]
y4 = [int(data[i][4]) for i in range(data.shape[0])]
y5 = [int(data[i][5]) for i in range(data.shape[0])]

下面进行数据可视化,首先是每日用户流量趋势

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
myfont = fm.FontProperties(fname=r'C:\WINDOWS\Fonts\simfang.ttf')
colors = ['lightcoral', 'coral', 'darkorange', 'gold', 'palegreen', 'paleturquoise',
          'skyblue', 'plum', 'hotpink', 'pink']

fig1 = plt.figure()
ax1 = fig1.add_subplot(1, 2, 1)
ax1.bar(x, y1, color=colors)
ax1.set_title('每日访客量(柱图)', fontsize=12, fontproperties=myfont)
ax1.set_xticklabels(x, rotation=30)
for i in range(len(x)):
    ax1.text(x=x[i], y=y1[i], s=y1[i], ha='center', size=9)
ax2 = fig1.add_subplot(1, 2, 2)

ax2.plot(x, y1)
ax2.set_title('每日访客量(折线图)', fontsize=12, fontproperties=myfont)
ax2.set_xticklabels(x, rotation=30)
for i in range(len(x)):
    ax2.text(x=x[i], y=y1[i], s=y1[i], ha='center', size=9)
a = [np.mean(np.array(y1)) for i in range(len(x))]

ax2.plot(x, a, '--')
ax2.text(x=x[-1], y=a[-1], s='平均值:' + str(round(a[-1])), color='r', fontproperties=myfont)
plt.show()

电商用户行为分析(一)
额,这里由于之前切片10000000条数据的原因,导致了在12月4日这一天的数据不足,我们在mysql中将其删除,再次进行可视化。
电商用户行为分析(一)
电商用户行为分析(一)
不难看出用户流量在12月01日后发生了飞速上涨,下面我再结合这几日用户的各类行为根据日期变化的趋势来分析。

点击量:(画图的代码就是将y轴变成之前相应的存放列表即可,因此后面的几个行为分析可视化代码就不再贴出)

fig1 = plt.figure()
ax1 = fig1.add_subplot(1, 2, 1)
ax1.bar(x, y2, color=colors)
ax1.set_title('每日点击量(柱图)', fontsize=12, fontproperties=myfont)
ax1.set_xticklabels(x, rotation=30)
for i in range(len(x)):
    ax1.text(x=x[i], y=y2[i], s=y2[i], ha='center', size=9)
ax2 = fig1.add_subplot(1, 2, 2)

ax2.plot(x, y2)
ax2.set_title('每日点击量(折线图)', fontsize=12, fontproperties=myfont)
ax2.set_xticklabels(x, rotation=30)
for i in range(len(x)):
    ax2.text(x=x[i], y=y2[i], s=y2[i], ha='center', size=9)
a = [np.mean(np.array(y2)) for i in range(len(x))]

ax2.plot(x, a, '--')
ax2.text(x=x[-1], y=a[-1], s='平均值:' + str(round(a[-1])), color='r', fontproperties=myfont)
plt.show()

电商用户行为分析(一)
每日收藏量:
电商用户行为分析(一)
每日加入购物车量:
电商用户行为分析(一)
每日购买量:
电商用户行为分析(一)
将这些折线图都整合在一起:
plt.plot(x, y1)
plt.plot(x, [i / 10 for i in y2])
plt.plot(x, y3)
plt.plot(x, y4)
plt.plot(x, y5)
plt.xticks(rotation=30)
plt.legend(['用户数', '点击量', '收藏量', '加入购物车量', '购买量'], frameon=False)
plt.show()

电商用户行为分析(一)

结合以上的图,不难发现在12月02日之前的几天5项指标都是比较平稳没有太大波动的,但是在12月02日,12月03日却远超这几天的平均值,为了找到原因,我们可以百度一下2017年12月02日这几天淘宝有什么活动

电商用户行为分析(一)
电商用户行为分析(一)

由此可知在12月1日到6日淘宝天猫开启了服饰焕新和双十二预热的活动。而且取得很好的成效,使得淘宝在整体的流量上都有了巨大的提升。而且从日历上可以看到12月2,3日也正是周末的日子。

下面我们再从一天中24小时的维度来对这5项指标进行分析:
先将点击量单独拿出来,只是由于它的数量远远超出其他4项指标,放在同一张图中会严重影响到可视化的观感

sql1 = """select hour(time),
COUNT(DISTINCT user_id) as 用户数,
sum(case when behavior_type= 'pv' then 1 else 0 end) as 点击数,
sum(case when behavior_type= 'fav' then 1 else 0 end) as 收藏数,
sum(case when behavior_type= 'cart' then 1 else 0 end) as 加购数,
sum(case when behavior_type= 'buy' then 1 else 0 end) as 购买数
from ubd
group by hour(time)
order by hour(time);
"""

cursor.execute(sql1)
data1 = cursor.fetchall()
data1 = np.array(data1)
print(data1)

xx = [data1[i][0] for i in range(data1.shape[0])]
yy1 = [data1[i][1] for i in range(data1.shape[0])]
yy2 = [int(data1[i][2]) for i in range(data1.shape[0])]
yy3 = [int(data1[i][3]) for i in range(data1.shape[0])]
yy4 = [int(data1[i][4]) for i in range(data1.shape[0])]
yy5 = [int(data1[i][5]) for i in range(data1.shape[0])]

plt.plot(xx, yy2)
"""
由于加上这个图片会变得巨大,因此在这里注释
"""

a = [np.mean(np.array(yy2)) for i in range(len(xx))]
plt.plot(xx, a, '--')
plt.text(x=xx[-1], y=a[-1], s='平均值:' + str(round(a[-1])), color='r', fontproperties=myfont)
b = [np.max(yy2), np.min(yy2)]
plt.text(x=xx[np.argmax(yy2)], y=yy2[np.argmax(yy2)], s=np.max(yy2), color='r', ha='center')
plt.text(x=xx[np.argmin(yy2)], y=yy2[np.argmin(yy2)], s=np.min(yy2), color='r', ha='center')
plt.title('各小时用户流量', fontproperties=myfont, fontsize=12)
plt.xticks(xx)
plt.show()

电商用户行为分析(一)
下面再将其他4项根据小时来可视化
plt.plot(xx, yy1, color='r')
plt.text(x=xx[np.argmax(yy1)], y=yy1[np.argmax(yy1)], s=np.max(yy1), color='r', ha='center')
plt.text(x=xx[np.argmin(yy1)], y=yy1[np.argmin(yy1)], s=np.min(yy1), color='r', ha='center')
plt.plot(xx, yy3, color='b')
plt.text(x=xx[np.argmax(yy3)], y=yy3[np.argmax(yy3)], s=np.max(yy3), color='b', ha='center')
plt.text(x=xx[np.argmin(yy3)], y=yy3[np.argmin(yy3)], s=np.min(yy3), color='b', ha='center')
plt.plot(xx, yy4, color='k')
plt.text(x=xx[np.argmax(yy4)], y=yy4[np.argmax(yy4)], s=np.max(yy4), color='k', ha='center')
plt.text(x=xx[np.argmin(yy4)], y=yy4[np.argmin(yy4)], s=np.min(yy4), color='k', ha='center')
plt.plot(xx, yy5, color='y')
plt.text(x=xx[np.argmax(yy5)], y=yy5[np.argmax(yy5)], s=np.max(yy5), color='y', ha='center')
plt.text(x=xx[np.argmin(yy5)], y=yy5[np.argmin(yy5)], s=np.min(yy5), color='y', ha='center')
plt.legend(['用户数', '收藏量', '加入购物车量', '购买量'], frameon=False)
plt.xticks(xx)
plt.title('各项指标趋势图', fontproperties=myfont, fontsize=12)
plt.show()

电商用户行为分析(一)

可以看出每天在 10时平台总流量开始上升, 14时达到最高值,之后便一直下降至 20时,在 20时之后再次上升到 凌晨2时后再次下降。其实这与现代使用淘宝的人作息很相似,早上的 6时9时是一个上班上学高峰期,流量确实会比较平稳; 10时之后就可以开始摸鱼刷手机,并且随着午饭时间的到来流量呈指数式上涨; 14时之后便是下午的上班上课时间,其实还可以看到 18时之后的下降斜率几乎为0,这肯定是因为下班下课的高峰期到了,刷手机的用户又开始多起来了; 20时左右就是一天的放松时间,吃完晚饭忙完一天的工作; 0时 后夜猫子开始活跃,直到 2时大多数用户睡觉后平台的总流量才开始下降。

以上,便是从时间的维度来进行分析的结果。针对这些可视化的数据,可以提出以下几个建议:

1.多在周末时段举行活动,多进行一些推荐推送来引流,商家也应该准备好应对比平时多的流量。
2.在早上到午间的时段用户的流量最多,此时应大量投放推荐并且进行单个时段的促销活动,结合下文的用户行为喜好分析来进行商品广告的引流。
3.夜间时段的潜在价值也很高,也可以相应的进行小时段促销活动,不过重点还是要集中在早上和午间。

电商用户行为分析(二): https://blog.csdn.net/qq_53500716/article/details/124839710

Original: https://blog.csdn.net/qq_53500716/article/details/124660387
Author: 陆伯言0
Title: 电商用户行为分析(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737831/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ajax的请求,异步,同源策略的学习

    Ajax Ajax 即”Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指⼀种创建交互式⽹⻚应…

    Python 2023年10月31日
    042
  • 电视剧里的代码真能运行吗?

    大家好,欢迎来到 Crossin的编程教室 ! 前几天,后台老有小伙伴留言”爱心代码”。这不是Crossin很早之前发过的内容嘛,怎么最近突然又被人翻出来了…

    Python 2023年10月14日
    059
  • 4.pytest parametrize()参数化

    pytest参数化 pytest.mark.parametrize()方式进行参数化 pytest.fixture()方式进行参数化,fixture装饰的函数可以作为参数传入其他函…

    Python 2023年9月11日
    063
  • 为什么推荐Kestrel作为网络开发框架

    网络框架千千万万,在dotnet平台,我们可以直接手撸Socket,也可以基于dotnetty来开发,或者选择某些第三方类似于dotnetty的网络库,为何我要推荐Kestrel呢…

    Python 2023年10月13日
    037
  • python影评_用Python分析18万条《八佰》影评,看看观众怎么说?

    大家好,我是J哥。 最近《八佰》这部电影比较火,上映仅15天就已斩获22亿票房。对于沉寂了半年、影院上座率仍限定在50%的电影市场而言,这样的成绩出人意料。 从猫眼电影官网可以看到…

    Python 2023年8月19日
    070
  • Anaconda的安装及环境配置(超详细)

    Anaconda的安装及环境配置 一、下载及安装 anaconda官网链接以下安装以windows为例。1、去官网下载64位的程序2、下载完成后进行安装点击next3、点击agre…

    Python 2023年8月1日
    066
  • .NET性能系列文章一:.NET7的性能改进

    这些方法在.NET7中变得更快 照片来自 CHUTTERSNAP 的 Unsplash 欢迎阅读.NET性能系列的第一章。这一系列的特点是对.NET世界中许多不同的主题进行研究、比…

    Python 2023年10月18日
    050
  • 一维时序数据_时序分析汽车销量预测

    0x00 前言 新能源慢慢进入我们的生活,现在大街上随处可见新能源车,2019年特斯拉国产化了,进入2020年,特斯拉已经交付了第一批国产化的新能源车,同时价格已经压到29.9W元…

    Python 2023年8月21日
    056
  • tensorflow+keras+python对应的版本

    进入深度学习,我的毕设框架是tensorflow,有很多需要注意的问题,尤其是版本问题,以前的代码都是在tensorflow1的版本中运行,现在已经出来2了,所以安装2,很多版本1…

    Python 2023年8月2日
    0249
  • seed()函数

    不管是再深度学习还是在其他工作中,相信大家经常会碰到seed()函数,一定有许多同学搞不清楚其作用,传入的参数数值(即seed(num),num对应的数字)应该是多少。下面一一给大…

    Python 2023年8月29日
    051
  • 【CSS】CSS文本样式【CSS基础知识详解】

    👨‍💻个人主页:@花无缺欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 本文章收录于专栏 【CSS】 【CSS专栏】已发布文章 📁【CSS基础认知】📁【CSS选择器…

    Python 2023年10月11日
    041
  • python bar图 百分比_如何将条形图值更改为百分比(Matplotlib)

    下面的代码生成一个条形图,每个条形图上方都有数据标签(如下图所示)。有没有办法把y轴上的刻度变成百分比(在这个图表中,是0%,20%,等等)? 我通过将条高与”%&#8…

    Python 2023年8月21日
    060
  • 微服务开发平台 Spring Cloud Blade 部署实践

    本文介绍使用 Rainbond 快速部署 Spring Cloud Blade 微服务平台。Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构,采用S…

    Python 2023年10月13日
    043
  • 【Python系列专栏】第六十五篇 Python中 Pandas 数据转换

    7.2 数据转换 Pandas 另一类重要操作是过滤、清理以及其他的转换工作。 7.2.1 移除重复数据 ​ DataFrame的 duplicated方法返回一个布尔型 Seri…

    Python 2023年8月8日
    066
  • 数组搜索+python课后小作业

    创建一个5*5网格世界,遵守以下规则:对不同行为进行奖励和乘法,选出最优的方案。 题目: 思路: 编写程序解决问题的步骤: 首先理解问题,将问题拆分,表达出每个部分的意思。 联系各…

    Python 2023年8月29日
    043
  • 关于PostgreSQL的问题-windows版本(探索ing)

    问题情况为如下三幅图 这个三幅图的情况都属于一样的(感觉在说废话,哈哈QWQ)。都是无法连接到服务器。问题描述(提高一下检索):psql:could not connect to …

    Python 2023年6月9日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球