文章目录
一、分析背景与目的
2014年是阿里巴巴集团移动电子商务业务快速发展的一年。例如,2014年11月11日的移动销售中的移动终端商品总销售额(GMV)占总GMV的42.6%。与PC时代相比,移动终端可以随时随地访问网络。此外,他们还拥有更丰富的背景数据,例如用户的位置信息,访问时间的规律性等。该数据基于阿里巴巴M-Commerce平台上的真实用户商品行为数据。同时,它提供了移动时代典型的位置信息。
通过挖掘用户行为数据价值,深度分析,然后可视化展现出来;能够充分发现业务运营中的问题,制定合理的运营策略,优化运营效率,进行精准营销。
二、数据理解
数据来源于阿里天池:(https://tianchi.aliyun.com/dataset/dataDetail?dataId=46&userId=1)
大概有一千多万条,6个特征指标;6个特征代表的含义如下:
字段名 | 字段描述 |
---|---|
user_id | 用户ID |
item_id | 商品ID |
behavior_type | 行为类型(1:浏览,2:收藏,3:加入购物车,4:下单付款) |
user_geohash | 用户地理位置 |
item_category | 商品类目 |
time | 行为发生的具体时间 |
分析思路:
三、数据清洗
#导入相关的库
import numpy as np
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
from datetime import timedelta
import matplotlib.dates as mdates
plt.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False # 正常显示负号
1、读取并查看数据基本信息和数据的完整性
data=pd.read_csv('./tianchi_mobile_recommend_train_user.csv')
data.head()
data.info()
time为object类型,后面需将time这一列转化为时间格式
2、缺失值处理
data.isnull().sum()
data.drop(['user_geohash'],axis=1,inplace=True)#这里user_geohash大量缺失不好填充,所以选择删除user_geohash这一特征
3、增加新特征
#将time这一列数据分割成日期、时间、星期
data.time = pd.to_datetime(data['time'])
data['date']=data['time'].dt.date
data['hour']=data['time'].dt.time
data['week']=data['time'].dt.weekday
#将行为类型的代表数值用字符表示
di = {
1:'浏览',2: '收藏',3:'加入购物车',4:'付款'}
data['behavior_type']= data['behavior_type'].apply(lambda x: di[x])
#查看数据基本信息
data.head()
data.info()
四、数据分析
1、不同时间维度的PV、UV流量的情况
(1)每天pv、uv变化
date_pv=data.groupby('date').user_id.count()
date_uv=data.groupby('date').user_id.nunique()
plt.style.use('ggplot')
plt.figure(figsize=(15,18), dpi=80)
plt.subplot(611)
plt.plot(date_pv.index, date_pv.values, 'bo-')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator()) # 按月显示,按日显示的话,将MonthLocator()改成DayLocator()
plt.gcf().autofmt_xdate() # 自动旋转日期标记
plt.xlabel('2014-xx-xx')
plt.title('一个月内pv变化')
plt.show()
plt.figure(figsize=(15,18), dpi=80)
plt.subplot(612)
plt.plot(date_uv.index, date_uv.values, 'ro-')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator()) # 按月显示,按日显示的话,将MonthLocator()改成DayLocator()
plt.gcf().autofmt_xdate() # 自动旋转日期标记
plt.xlabel('2014-xx-xx')
plt.title('一个月内uv变化')
plt.show()
201411-18到2014-12-18内uv、pv变化平稳趋势大体一致,在2014-12-12pv、uv大幅增长;根据常识可知,是由于双十二淘宝商家大量优惠活动的原因。
(2)一天内pv、uv变化
hour_pv=data.groupby('hour').user_id.count()
hour_uv=data.groupby('hour').user_id.nunique()
plt.figure(figsize=(15,18), dpi=80)
plt.subplot(613)
plt.plot(hour_pv.index, hour_pv.values, 'bo-')
plt.title('一天内pv变化')
plt.show()
plt.figure(figsize=(15,18), dpi=80)
plt.subplot(614)
plt.plot(hour_uv.index, hour_uv.values, 'ro-')
plt.title('一天内uv变化')
plt.show()
一天中从早上6:00-10:00,18:00-21:00这两个时间段pv有较明显上升;uv从早上6:00-10:00有较明显增加,而后到21点uv保持稳定数量,然后开始下降;pv、uv变化符合大众工作作息时间。
(3)一周内pv、uv变化
week_pv=data.groupby('week').user_id.count()
week_uv=data.groupby('week').user_id.nunique()
plt.figure(figsize=(15,18), dpi=80)
plt.subplot(615)
x=np.arange(7)
plt.plot(week_pv.index, week_pv.values, 'bo-')
plt.title('一周内pv变化')
tick_label=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
plt.xticks(x,tick_label)
plt.show()
plt.figure(figsize=(15,18), dpi=80)
plt.subplot(616)
x=np.arange(7)
plt.plot(week_uv.index, week_uv.values, 'ro-')
plt.title('一周内uv变化')
tick_label=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
plt.xticks(x,tick_label)
plt.show()
一周内周一到周四pv、uv数量增加,周四到周六开始减少,周日有小幅上升;根据客观现实推测可能是周末大家选择计划出去玩等,有较长的可支配自由时间;周四pv,uv数量最高。
2、不同行为在不同时间维度下的pv情况
(1)每天不同行为的pv变化
data_1=data.loc[data['behavior_type'] != '浏览']
plt.style.use('ggplot')
df_date_pv1=pd.pivot_table(data,index=['behavior_type','date'],values=['user_id'],aggfunc='count')
df_date_pv=df_date_pv1.unstack(0)
df_date_pv.plot()
plt.title('一个月内不同行为的pv变化')
plt.show()
df_date_pv1_1=pd.pivot_table(data_1,index=['behavior_type','date'],values=['user_id'],aggfunc='count')
df_date_pv_1=df_date_pv1_1.unstack(0)
df_date_pv_1.plot()
plt.title('一个月内不同行为的pv变化')
plt.show()
不同行为每天的pv变化趋势一致,2014-11-12当天的付款人数高于收藏人数许多;说明商家活动有利于促进消费,活动效果好。
(2)不同行为一天内pv变化
df_hour_pv1=pd.pivot_table(data,index=['behavior_type','hour'],values=['user_id'],aggfunc='count')
df_hour_pv=df_hour_pv1.unstack(0)
df_hour_pv.plot()
plt.title('一个天内不同行为的pv变化')
plt.show()
df_hour_pv1_1=pd.pivot_table(data_1,index=['behavior_type','hour'],values=['user_id'],aggfunc='count')
df_hour_pv_1=df_hour_pv1_1.unstack(