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 matplotlib

os.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是作者本人熬夜做出来的,切勿抄袭哈。。。

内容待完善,下次更。。。

相关文章: