目录
项目背景:
淘宝是阿里巴巴集团旗下的一款移动商务平台产品,是中国深受欢迎的网购零售平台,拥有近5亿的注册用户数,每天有超过6000万的固定访客,同时每天的在线商品数已经超过了8亿件,平均每分钟售出4.8万件商品。庞大的用户量和销售量决定了淘宝拥有非常丰富的用户行为数据,在这个数字经济的时代下,拥有数据且有效运用数据是推动产品运营效果提升的关键要素。
此次项目的数据集来源于2014年双十二期间,阿里巴巴移动商务平台上真实的用户商品行为数据,通过对行业的关键指标进行多维度分析,从而探索淘宝用户的行为模式,致力于为产品的运营和营销提供数据决策基础。
一、认识数据
user_id:用户名
item_id:商品名
behavior_type:用户行为类型(1:点击,2:加购,3:收藏,4:支付)
user_geohash:用户地理位置
item_category:商品种类
time:用户操作时间
#导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#导入数据
df=pd.read_csv("tianchi_mobile_recommend_train_user.csv")
#查看数据
df.head()
df.info()
#数据有1225万条,6个字段,user_geohash,time列数据类型为object,后续需要进行更改
df.describe()
#查看数据描述性分析
二、处理数据
#统计重复值
df.duplicated().sum()
结果显示4092866条重复数据
#有大量重复数据,需要对其进行删除,并替换原数据
df.drop_duplicates(inplace=True)
df.info()
# 数据只剩816万,400多万条重复数据已删除
#缺失值
df.isna().sum()
#缺失值集中在user_geohash列,而且数据量很大,考虑将该列删除
df.drop(columns='user_geohash',inplace=True)
df.info()
#数据列只剩5
#time列包含日期和小时两种信息,考虑将其拆分,日期和时间段作为两个分析维度
df['date']=df['time'].str.split(' ').str[0]#新建date列,存放time列中的日期信息
df['hour']=df[time].str.split(' ').str[1]#新建hour列,存放小时数据
# split函数只能用于字符串,先将time列转换为str格式
df.info()
#需要更改列的数据类型
df['time']=pd.to_datetime(df['time'])
df['date']=pd.to_datetime(df['date'])
df['hour']=pd.to_numeric(df['hour'])
df.info()
#数据类型转换成功
df.head()
三、数据分析及可视化
3.1 用户访问行为分析
3.1.1 日访问量
pv_daily=df.groupby('date')['用户名'].count()#选择任意列计数
pv_daily
# uv
# uv对于多次访问网页的同一用户不进行重复计数
uv_daily=df.groupby('date')['用户名'].apply(lambda x:x.drop_duplicates().count())
uv_daily
#可视化
#构建画布,将画布划分两行一列子区域
flg=plt.figure()
axes=flg.subplots(2,1)
#绘制条形图
pv_daily.plot(ax=axes[0],title='pv_daily')
uv_daily.plot(ax=axes[1],title='uv_daily')
plt.show()
小结及建议:
1.可以看出pv与uv的最大值均出现在12.12当天,说明双十二促销活动取得一定的引流效果
2.pv与uv变化趋势大体一致,结合主观经验可以认为uv变化使得pv变化
3.因此对于平台来说,比起促进同一用户访问多次页面,更重要的是吸引更多用户,增加uv从而增加pv
4.pv和uv趋势相似,但pv数据量要更大,说明同一用户在同一天内会访问页面多次
3.1.2 小时访问量
pv_hour=df.groupby('hour')['用户名'].count()#分组依据为hour
pv_hour
# uv
uv_hour=df.groupby('hour')['用户名'].apply(lambda x:x.drop_duplicates().count())
uv_hour
#构建画布,将画布划分两行一列子区域
flg=plt.figure()
axes=flg.subplots(2,1)
#绘制条形图
pv_hour.plot(ax=axes[0],title='pv_hour')
uv_hour.plot(ax=axes[1],title='uv_hour')
plt.show()