分析用户行为和可视化展现
利用用户在这个商品子集上的行为数据,往往还需要利用更丰富的用户行为数据。
文章目录
一、数据源说明
数据来源:
天池:https://tianchi.aliyun.com/competition/entrance/231522/introduction
该机构通过大数据技术帮助商家实现店铺、商品详情、微淘、工作台的千人千面,提升会员运营、流量运营和精准营销的效率;
20000用户的完整行为数据以及百万级的商品信息。竞赛数据包含两个部分。
第一部分是用户在商品全集上的移动端行为数据(D),表名为tianchi_fresh_comp_train_user_2w,包含如下字段:
第二个部分是商品子集(P),表名为tianchi_fresh_comp_train_item_2w,包含如下字段:
训练数据包含了抽样出来的一定量用户在一个月时间(11.18~12.18)之内的移动端行为数据(D),评分数据是这些用户在这个一个月之后的一天(12.19)对商品子集(P)的购买数据。使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为的预测结果。
二、查看数据
1.引入库
代码如下:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
2.读取数据,并查看数据类型和数据结构
代码如下(示例):
user = pd.read_csv(r'tianchi_fresh_comp_train_user.csv')
user.info()
1.源数据的数据类型为:DataFrame
2.表格的维度:15463110 行 * 6列,RangeIndex:0 to 15463109
3.表格的列名和列字段类型dtype
4.表格所占空间:707.8M+
Pandas中的info()函数与describe()函数
https://blog.csdn.net/qq_40305043/article/details/104862499
https://blog.csdn.net/Dreamer_rx/article/details/100804378
具体怎么更改类型,可以看我写的这篇文章:
df数据类型转化和说明(astype,apply,object)
3.看表头
user.head()
用户行为 behavior_type, “1” 表示浏览,“2” 表示收藏,“3” 表示加入购物车,“4” 表示购买
4.统计缺失值
user.isnull().sum()
user_geohash地理数据不分析 ,这列的缺失值不做处理
三、处理数据
1.删除重复值
user.drop_duplicates(keep='last',inplace=True)
keep:first/last/False, 默认值 ‘first’;
first: 保留第一次出现的重复行,删除后面的重复行。
last: 删除重复项,除了最后一次出现。
False: 删除所有重复项。
inplace:布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。(inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。)
2.将time转换为datetime格式
user['time']=pd.to_datetime(user['time'])
3.提取出日期和时间
user['dates'] = user.time.dt.date
user['month'] = user.dates.values.astype('datetime64[M]')
user['hours'] = user.time.dt.hour
数据分析——可视化
1.统计每日PV和UV数据
pv_day=user[user.behavior_type=="1"].groupby("dates")["behavior_type"].count()
uv_day=user[user.behavior_type=="1"].drop_duplicates(["user_id","dates"]).groupby("dates")["user_id"].count()
print(pv_day)
print(uv_day)
2.分析每天的pv与uv的趋势
# 加载库
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.charts import Grid
import numpy as np
# 做出每天的pv与uv趋势图
attr=list(pv_day.index)
pv=(
Line(init_opts=opts.InitOpts(width="1000px",height="500px"))
.add_xaxis(xaxis_data=attr)
.add_yaxis(
"pv",
np.around(pv_day.values/10000,decimals=2),
label_opts=opts.LabelOpts(is_show=False)
)
.add_yaxis(
series_name="uv",
yaxis_index=1,
y_axis=np.around(uv_day.values/10000,decimals=2),
label_opts=opts.LabelOpts(is_show=False),
)
.extend_axis(
yaxis=opts.AxisOpts(
name="uv",
type_="value",
min_=0,
max_=1.6,
interval=0.4,
axislabel_opts=opts