码迷,mamicode.com
首页 > 其他好文 > 详细

用户对于购买商品的行为分析案例

时间:2020-07-18 15:41:01      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:统计   抽样   案例   分析   ima   append   时间   trie   false   

用户对于购买商品的行为分析案例

import pandas as pd
from pandas import DataFrame,Series
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

#数据量级达到一亿,考虑到电脑性能问题,故随机抽样其中的100万左右数据作为本次分析的原始数据.
df = pd.read_csv(‘./UserBehavior.csv‘,header=None,names=[‘user_id‘,‘item_id‘,‘category_id‘,‘behavior_type‘,‘time_stamp‘])
data = df.take(indices=np.random.permutation(df.shape[0]),axis=0)[0:1000000]
data.to_csv(‘./UserBehavior_new.csv‘

df = pd.read_csv(‘./UserBehavior_new.csv‘)
df.drop(labels=‘Unnamed: 0‘,axis=1,inplace=True)

df.head()
#查看是否存在重复的行数据
(df.duplicated()).sum()
0
#查看列中是否存在缺失数据
df.isnull().any(axis=0)

user_id          False
item_id          False
category_id      False
behavior_type    False
time_stamp       False
dtype: bool
#将时间戳转换为时间序列类型
#time.strftime("%Y-%m-%d", time.localtime(1511572885))
import time

#方式1:
pd.to_datetime(df[‘time_stamp‘],unit=‘s‘)

技术图片
#方式2:
def get_str_dt(d):
    return time.strftime(‘%Y-%m-%d‘,time.localtime(d))  
df[‘time_stamp‘] = df[‘time_stamp‘].apply(get_str_dt)
df[‘time_stamp‘] = pd.to_datetime(df[‘time_stamp‘])
df.head().info()
<class ‘pandas.core.frame.DataFrame‘>
RangeIndex: 5 entries, 0 to 4
Data columns (total 5 columns):
user_id          5 non-null int64
item_id          5 non-null int64
category_id      5 non-null int64
behavior_type    5 non-null object
time_stamp       5 non-null datetime64[ns]
dtypes: datetime64[ns](1), int64(3), object(1)
memory usage: 280.0+ bytes
#添加一列为月份
df[‘month‘] = df[‘time_stamp‘].astype(‘datetime64[M]‘)
#查看数据的时间范围,如有异常值将其删除
#只保留17年的数据即可
df[‘time_stamp‘].value_counts()
技术图片
ex = (df[‘time_stamp‘] >= ‘2017-01-01‘) & (df[‘time_stamp‘] <= ‘2017-12-31‘)
df = df.loc[ex]

df[‘time_stamp‘].max(),df[‘time_stamp‘].min()

(Timestamp(‘2017-12-27 00:00:00‘), Timestamp(‘2017-04-13 00:00:00‘))
#对所有用户的不同购买行为进行数量统计且求得不同购买行为的百分比,以柱状图进行展示
s_persent = df.groupby(by=‘behavior_type‘)[‘user_id‘].nunique() / df.groupby(by=‘behavior_type‘)[‘user_id‘].nunique().sum() * 100
plt.bar(s_persent.index,s_persent.values)
技术图片
#发现用户点击量占据83%,而购买量仅占所有数据的3.3%,,用户从浏览到购买的转化#率只有2%,那是什么原因导致的转化率低呢?
#分析出每个用户对商品的不同行为

df.head()
技术图片
one_hot_df = pd.get_dummies(df[‘behavior_type‘])
user_item_behavior_df = pd.concat((df[[‘user_id‘,‘item_id‘]],one_hot_df),axis=1)
user_item_behavior_df.head()
技术图片
#分析出每个用户对商品的不同行为次数的汇总
pv_sum = user_item_behavior_df.groupby(by=‘user_id‘)[‘pv‘].sum()
buy_sum = user_item_behavior_df.groupby(by=‘user_id‘)[‘buy‘].sum()
cart_sum = user_item_behavior_df.groupby(by=‘user_id‘)[‘cart‘].sum()
fav_sum = user_item_behavior_df.groupby(by=‘user_id‘)[‘fav‘].sum()

user_behavior_total_df = DataFrame(data=[pv_sum,buy_sum,cart_sum,fav_sum]).T
user_behavior_total_df.head()
技术图片
#点击量:所有用户的总点击量
pv_sum = user_behavior_total_df[‘pv‘].sum()
pv_sum
896151

#点击--购买:用户点击后无加购和收藏的情况下直接参与购买的行为统计
user_behavior_total_df.query(‘pv > 0 & cart ==0 & fav == 0 & buy > 0‘).shape[0]
10069

#点击--加购:点击后,无收藏情况下的加购行为
user_behavior_total_df.query(‘pv > 0 & cart > 0 & fav == 0‘).shape[0]
31234

#点击--加购--购买:点击后无收藏情况下的加购和购买行为
user_behavior_total_df.query(‘pv > 0 & cart > 0 & buy > 0 & fav ==0‘).shape[0]
966

#点击--收藏:点击后,无加购情况下的收藏行为
user_behavior_total_df.query(‘pv > 0 & fav > 0 & cart == 0‘).shape[0]
16450

#点击--收藏--购买:点击后,无加购情况下的收藏和购买行为
user_behavior_total_df.query(‘pv > 0 & fav > 0 & buy > 0 & cart ==0‘).shape[0]
393

#点击--收藏+加购:点击后的收藏和加购行为
user_behavior_total_df.query(‘pv > 0 & fav > 0 & cart > 0‘).shape[0]
1044

点击--收藏+加购 -- 购买:点击后的收藏加购和购买的行为
user_behavior_total_df.query(‘pv > 0 & fav > 0 & cart > 0 & buy > 0‘).shape[0]
20

#点击--流失:点击后无购买无加购无收藏的行为
user_behavior_total_df.query(‘pv > 0 & buy ==0 & cart == 0 & fav ==0 ‘).shape[0]
434326
#直接购买转化率低于加购和收藏等行为之后的综合转换率,因此需要从产品交互界面、#营销机制等方面让用户去多加购,多收藏。
#转化率低的原因分析:
#提出假设:推荐机制不合理,给用户推荐的都是不喜欢的商品,造成转化率低
#这里可以通过分析高浏览量商品与高购买量商品之间是否存在高度重合,如果是的,那#就说明推荐的商品是用户喜欢,假设就不成立,如果不是则证明假设成立。

#分析出点击量前10的商品
pv_sum_item_10_s = user_item_behavior_df.groupby(by=‘item_id‘)[‘pv‘].sum().sort_values().tail(10)
pv_sum_item_10_s
item_id
3031354    172.0
987143     173.0
2338453    186.0
2331370    188.0
3371523    190.0
2032668    193.0
1535294    194.0
138964     211.0
3845720    258.0
812879     296.0
Name: pv, dtype: float64

#购买量前10的商品
buy_sum_item_10_s = user_item_behavior_df.groupby(by=‘item_id‘)[‘buy‘].sum().sort_values().tail(10)
buy_sum_item_10_s
item_id
555181      7
4443059     7
793577      7
3189426     8
2560262     8
1168232     8
705557      9
3964583    13
3031354    13
3122135    18
Name: buy, dtype: uint8

#查看点击量高且购买量也高的商品类别个数
buy_sum_item_10_s.append(pv_sum_item_10_s).index.value_counts()
3031354    2
1535294    1
812879     1
3371523    1
2560262    1
3964583    1
1168232    1
793577     1
2331370    1
555181     1
2338453    1
2032668    1
3189426    1
4443059    1
138964     1
705557     1
3122135    1
3845720    1
987143     1
Name: item_id, dtype: int64
#计算点击量前10的商品的购买量
pv_10_buy = []
for index in pv_sum_item_10_s.index:
    buy_count = user_item_behavior_df.loc[user_item_behavior_df[‘item_id‘] == index][‘buy‘].sum()
    dic = {
        ‘item_id‘:index,
        ‘buy_count‘:buy_count
    }
    pv_10_buy.append(dic)

pv_10_buy
[{‘item_id‘: 3031354, ‘buy_count‘: 13},
 {‘item_id‘: 987143, ‘buy_count‘: 2},
 {‘item_id‘: 2338453, ‘buy_count‘: 1},
 {‘item_id‘: 2331370, ‘buy_count‘: 0},
 {‘item_id‘: 3371523, ‘buy_count‘: 0},
 {‘item_id‘: 2032668, ‘buy_count‘: 0},
 {‘item_id‘: 1535294, ‘buy_count‘: 1},
 {‘item_id‘: 138964, ‘buy_count‘: 3},
 {‘item_id‘: 3845720, ‘buy_count‘: 0},
 {‘item_id‘: 812879, ‘buy_count‘: 1}]

#计算购买量前10的点击量
pv_sum_list = []
for index in buy_sum_item_10_s.index:
    pv_sum = user_item_behavior_df.loc[user_item_behavior_df[‘item_id‘] == index][‘pv‘].sum()
    dic = {
        ‘item_id‘ : index,
        ‘pv_sum‘:pv_sum
    }
    pv_sum_list.append(dic)
pv_sum_list
[{‘item_id‘: 555181, ‘pv_sum‘: 2},
 {‘item_id‘: 4443059, ‘pv_sum‘: 140},
 {‘item_id‘: 793577, ‘pv_sum‘: 20},
 {‘item_id‘: 3189426, ‘pv_sum‘: 44},
 {‘item_id‘: 2560262, ‘pv_sum‘: 103},
 {‘item_id‘: 1168232, ‘pv_sum‘: 33},
 {‘item_id‘: 705557, ‘pv_sum‘: 89},
 {‘item_id‘: 3964583, ‘pv_sum‘: 54},
 {‘item_id‘: 3031354, ‘pv_sum‘: 172},
 {‘item_id‘: 3122135, ‘pv_sum‘: 25}]

#总结:可以看出点击量高的购买量不一定高,推荐的商品顾客并不喜欢购买,由于高#浏览量并没有带来购买,所以转化率低。

 

用户对于购买商品的行为分析案例

标签:统计   抽样   案例   分析   ima   append   时间   trie   false   

原文地址:https://www.cnblogs.com/linranran/p/13335101.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!