1、项目背景:通过行业常见指标对淘宝用户行为数据进行分析,本数据集包含了2017年11月25日至2017年12月3日之间,约一百万随机用户的所有行为数据(包括用户id、商品id、商品类目、时间戳、行为类型),给出优化建议。数据来源于阿里云天池。
https://tianchi.aliyun.com/dataset/dataDetail?dataId=649
2、提出问题和分析目标
电商指标:
3.本数据集分析维度以及相关指标
【1】流量分布分析
【2】行为转化率分析
【3】消费偏好分析
【5】用户价值分析
三、理解数据
本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。
由于原数据集一共有1亿调数据记录,数据量较为庞大,本次分析选取大约300万条记录进行分析。
数据集简介:
四、数据分析
(1)python导入excel文件(数据量太大,这里导入前300万条)
import pandas as pd
import numpy as np
import os
import matplotlibos.chdir("D:\\UserBehavior")
data = pd.read_csv("UserBehavior.csv",nrows = 3000000)
data = data.rename(columns = {"1":"user_id","2268318":"item_id","2520377":"category_id","pv":"behavior","1511544070":"timestamps"})
(2)数据清洗
# 时间戳转换
data[\'timestamps\'] = pd.to_datetime(data[\'timestamps\'], unit=\'s\') #unix转datetime格式
data[\'day\'] = data[\'timestamps\'].dt.date
data[\'hour\'] = data[\'timestamps\'].dt.hour
print("数据量:",data.shape[0])
# 异常时间处理
data = data[data[\'timestamps\']>\'2017-11-25\']
data = data[data[\'timestamps\']<\'2017-12-04\']
(3)构建模型与图表分析
#模型构建与数据分析
#总pv、总uv、总平均访问量(pv/uv)
uv = pd.DataFrame(data.groupby([\'user_id\'])[\'user_id\'].value_counts()).count()[0] #访问量
pv = data[data[\'behavior\']==\'pv\'].count()[0] #访客数
avgpv = pv/uv #平均访问量
print("访问量:",uv,"访客数:",pv,"平均访问量:",avgpv)
结果如下:
#日访客量、日点击量、日平均访客计算
dayUserCount = data.pivot_table(index=[\'day\',\'user_id\'],aggfunc=\'count\') #透视表
dayUser = pd.DataFrame(dayUserCount.groupby([\'day\']).count()[\'behavior\'])
pvData = data[data[\'behavior\']==\'pv\']
dayPv = pd.DataFrame(pvData.pivot_table(index=[\'day\'],aggfunc=\'count\')[\'user_id\']) #透视表
DayDate = pd.merge(dayUser, dayPv,on = \'day\')
DayDate = DayDate.rename(columns = {\'behavior\':\'日访客量\',\'user_id\':\'日点击量\'})
DayDate[\'日均点击量\'] = DayDate[\'日点击量\']/DayDate[\'日访客量\']
#日访客图表分析
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams[\'font.sans-serif\'] = [\'SimHei\'] #指定默认字体
mpl.rcParams[\'axes.unicode_minus\']
plt.plot(DayDate[\'日访客量\'])
plt.xticks(rotation=50)
plt.title("日访客量")
plt.ylim(20000, 30000)
#分时访客分析
hourUserCount = data.pivot_table(index=[\'hour\',\'user_id\'],aggfunc=\'count\') #透视表
hourUser = pd.DataFrame(hourUserCount.groupby([\'hour\']).count()[\'behavior\'])
pvData = data[data[\'behavior\']==\'pv\']
hourPv = pd.DataFrame(pvData.pivot_table(index=[\'hour\'],aggfunc=\'count\')[\'user_id\']) #透视表
hourdata = pd.merge(hourUser, hourPv,on = \'hour\')
hourdata = hourdata.rename(columns = {\'behavior\':\'小时访客量\',\'user_id\':\'小时点击量\'})
hourdata[\'小时均点击量\'] = hourdata[\'小时点击量\']/hourdata[\'小时访客量\']
#分时图表绘制
ax = plt.bar(range(len(hourdata)),hourdata[\'小时均点击量\'])
plt.xticks(rotation=50)
plt.title("分时点击量分布")
plt.ylim(0, 15)
#高销量商品ID与商品类目
#前10高销量商品
#其成交量和转化率情况
itemData = pd.DataFrame()
pv = data[data[\'behavior\']==\'pv\'] #商品点击量
itemPv= pd.DataFrame(pv.groupby([\'item_id\']).count()[\'behavior\'])
buy= data[data[\'behavior\']==\'buy\'] #商品购买量
itemBuy = pd.DataFrame(buy.groupby([\'item_id\']).count()[\'behavior\'])
itemData = pd.merge(itemBuy,itemPv,on=\'item_id\')
itemData = itemData.rename(columns={\'behavior_x\':\'商品购买量\',\'behavior_y\':\'商品浏览量\'})itemData[\'转化率\'] = itemData[\'商品购买量\'] /itemData[\'商品浏览量\']
#流量前10商品id
itemData.sort_values(by = \'商品浏览量\',ascending=False).head(10)
结果如下:
购买量前10商品id
itemData.sort_values(by = \'商品购买量\',ascending=False).head(10)
说明:本blog是作者本人熬夜做出来的,切勿抄袭哈。。。
内容待完善,下次更。。。