第9章 电商数据分析实战_第1页
第9章 电商数据分析实战_第2页
第9章 电商数据分析实战_第3页
第9章 电商数据分析实战_第4页
第9章 电商数据分析实战_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章电商数据分析实战9.6实战1——电商平台用户行为数据分析研究背景分析目标数据处理数据分析9.6.1研究背景电商平台在所有媒体类型中,具有足够的特殊性,是兼具媒体场景和消费场景两大属性的平台,符合品效合一,也因此衍生出了贴合电商“搜索→购买→评价”链条的多种营销模式。随着电商营销产业链上消费行为数据的积累,海量数据中蕴含着无尽的价值,显现了用户不同的购物方式及爱好,基于此背景,本节利用某大型购物平台电商用户数据进行分析。9.6.2分析目标本次分析使用的数据集包含随机用户的所有行为(点击、购买、加购、收藏)、行为发生的时间与商品类型。针对这些数据类型,此次分析从以下几个方面着手分析以提出问题与建议。1.用户整体购物情况2.用户行为的时间模式分析3.分析从浏览到购买的转化情况下面结合用户网上购物行为分析用户的网上购物流程,如下图所示。9.6.3数据处理importpandasaspdimportmatplotlib.pyplotaspltimportdatetimeimportmatplotlibdata=pd.read_csv('UserBehavior.csv',header=None,nrows=200000,names=['user_id','item_id','category_id','behavior_type','time'])#由于数据量过大这里只导入20万条数据data.head()1)查看数据首先导入需要的第三方库,由于原数据缺少列名,这里给数据加上列名,具体代码如下。运行结果如下图所示。9.6.3数据处理data.isnull().sum()运行结果如下。user_id0item_id0category_id0behavior_type0time0dtype:int642)处理缺失值接下来查看并处理数据缺失值,具体代码如下。9.6.3数据处理repeat=data.groupby(['user_id','item_id','time']).agg({'user_id':'count'})repeat[repeat['user_id']>1]3)处理重复值下面检测并处理数据中的重复值,在数据集中,用户ID、商品ID、时间戳这三个字段可以用于标志唯一性。具体代码如下。运行结果如下图所示。9.6.3数据处理data['time']=pd.to_datetime(data['time'],unit='s')+datetime.timedelta(hours=8)data.head()4)处理时间字段接下来转化数据中的时间戳类型,具体代码如下。运行结果如下图所示。9.6.3数据处理data['date']=data['time'].map(lambdax:x.strftime('%Y-%m-%d%H').split('')[0])#设置日期列data['hour']=data['time'].map(lambdax:x.strftime('%Y-%m-%d%H').split('')[1])#设置时间列pd.set_option('display.max_columns',10)data.head()4)处理时间字段下面将时间拆分为日期与整点时间,具体代码如下。运行结果如下图所示。9.6.3数据处理data=data.sort_values(by=['date','hour'],ascending=True)data=data.reset_index(drop=True)data.head(10)接下来将数据按date、hour列排序,重置索引。具体代码如下。运行结果如下图所示。9.6.3数据处理df_bool=(data.loc[:,'date']>'2017-11-24')&(data.loc[:,'date']<'2017-12-04')data=data.loc[df_bool,:].reset_index(drop=True)5)处理时间异常值现在删除超出时间范围的异常数据。具体代码如下。运行结果如下图所示。9.6.3数据处理drop_data=data[(data['behavior_type']!='pv')&(data['behavior_type']!='cart')&(data['behavior_type']!='buy')&(data['behavior_type']!='fav')]drop_data6)处理其他异常值接下来查看“用户行为”字段除去四种用户行为代表值外是否有其他异常值。具体代码如下。运行结果如下图所示。9.6.3数据处理data.isnull().any()由运行结果可见,数据中并无用户行为异常值。下面查看其他字段异常值,具体代码如下。运行结果如下图所示。user_idFalseitem_idFalse

category_idFalse

behavior_typeFalse

timeFalse

dateFalse

hourFalse

dtype:bool9.6.4数据分析base_count=data[['user_id','item_id','category_id']].nunique()behaviour_count=data['behavior_type'].count()print(base_count,'\n','用户行为数:',behaviour_count)1.用户整体购物情况依照用户行为数据来看,统计数据集中总的用户数,商品数,商品类别数,用户行为数。具体代码如下。运行结果如下图所示。user_id1973item_id117031category_id3980dtype:int64用户行为数:1999089.6.4数据分析2.用户行为的时间模式分析1)访问量与用户量变化现选取数据集中某时间段的用户数量与访问量变化趋势数据做折线图的展示。具体代码如下。pv_daily=data[data['behavior_type']=='pv'].groupby('date')['user_id'].count()pv_daily=pv_daily.reset_index().rename(columns={'user_id':'pv'})uv_daily=data.groupby('date')['user_id'].apply(lambdax:x.drop_duplicates().count())uv_daily=uv_daily.reset_index().rename(columns={'user_id':'uv'})x=pv_daily['date']y1=pv_daily['pv']y2=uv_daily['uv']fig=plt.figure(figsize=(10,6))matplotlib.rcParams['font.sans-serif']=['SimHei']matplotlib.rcParams['font.family']='sans-serif'#设置中文显示plt.subplot(1,1,1)plt.plot(x,y1,label='访问量',linewidth=1.8,color='r',marker='o',markersize=4)plt.plot(x,y2,label='用户量',linewidth=1.8,color='g',linestyle='-.',marker='^',markersize=4)plt.legend(loc='best')plt.title("某时段用户每天活跃量",fontsize=24)plt.show()9.6.4数据分析运行结果如下图所示。9.6.4数据分析2)用户行为时间段内变化趋势接下来使用折线图查看每种用户行为的同一时间短的变化趋势。具体代码如下。count_by_behav=data.groupby('behavior_type')plt.figure(figsize=(12,6))forgroup_name,group_dataincount_by_behav:count_by_day=group_data.resample('D').count()['behavior_type']x=count_by_day.indexy=count_by_day.valuesplt.plot(range(len(x)),y,label=group_name)plt.xticks(range(len(x)),x,rotation=45)plt.legend(loc='best')plt.xlabel('日期',fontsize=12)plt.ylabel('行为次数',fontsize=12)plt.title('每天各行为的访问次数')plt.show()运行结果如下图所示。9.6.4数据分析3)用户一天内各时间段活跃度接下来使用折线图与柱状图查看用户一天中各个时间段的活跃度。具体代码如下。pv_time=data[data['behavior_type']=='pv'].groupby('hour')['user_id'].count()pv_time=pv_time.reset_index().rename(columns={'user_id':'pv'})uv_time=data.groupby('hour')['user_id'].apply(lambdax:x.drop_duplicates().count())uv_time=uv_time.reset_index().rename(columns={'user_id':'uv'})x=pv_time['hour']y1=pv_time['pv']y2=uv_time['uv']plt.figure(figsize=(10,6))plt.subplot(1,1,1)plt.plot(x,y1,label='访问量',color='r',linewidth=1.8,marker='o',markersize=4)plt.bar(x,y2,label='用户量')plt.legend(loc='best')plt.title("用户一天内各时间段活跃度",fontsize=24)plt.show()运行结果如下图所示。9.6.4数据分析9.6.4数据分析3.商品点击量和购买量之间的关系下面使用散点图查看商品的点击量与购买量之间的关系,具体代码如下。3.商品点击量和购买量之间的关系下面使用散点图查看商品的点击量与购买量之间的关系,具体代码如下。plt.figure(figsize=(8,6))plt.scatter(x,y,marker='o',color='g')plt.xlabel("商品点击量",fontsize=14)plt.ylabel("商品购买量",fontsize=14)plt.title("商品点击量和购买量之间的关系",fontsize=18)plt.show()pv_item=data[data['behavior_type']=='pv'].groupby('item_id')['user_id'].count().sort_values(ascending=False)buy_item=data[data['behavior_type']=='buy'].groupby('item_id')['user_id'].count().sort_values(ascending=False)merge2=pd.merge(pv_item,buy_item,on='item_id',how='outer').fillna(0)x=merge2['user_id_x']y=merge2['user_id_y']运行结果如下图所示。9.6.4数据分析9.7实战2——网店商品售卖数据分析研究背景分析目标数据处理数据分析9.7.1研究背景本次分析针对店铺在一个月之中的商品销量进行数据分析,数据集来自某大型购物网站,共包含28010条数据,根据已有数据对店铺整体运营情况分析,了解运营状况,以及对未来销售状况进行预测。9.7.2分析目标本次分析使用到的数据集字段包括订单编号;总金额(该笔订单的总金额);买家实际支付金额也就是实际成交金额,分为已付款和未付款两种情况:已付款(买家实际支付金额=总金额-退款金额)、未付款(买家实际支付金额=0);收货地址(维度为省份,共包含31个省市);订单创建时间(2020年2月1日至2020年2月29日);订单付款时间(2020年2月1日至2020年3月1日);退款金额(付款后申请退款的金额。没有申请退款或没有付过款,退款金额为0)针对以上数据情况,可以根据以下几个方面进行数据分析以给出相应的结论以及解决政策。①整体购物情况。②总销售情况。③地区销售分析。④产品价格分析。9.7.3数据处理defcleaning():tmall=pd.read_csv(r'mall_goods.csv',encoding='utf-8')returntmallcleaning()首先导入部分模块查看数据,9.7.3数据处理data.rename(columns={'收货地址':'收货地址','订单付款时间':'订单付款时间'},inplace=True)data.columnssum(data['订单付款时间'].isnull())#查看缺失值2.缺失值处理在上面查看数据过程中发现了“订单付款时间”字段有缺失数据,在详细查看该字段数据是报错。经查是在“收获地址”与“订单付款信息”字段名后分别出现了一个空格,现在将其修改,具体代码如下。现在执行代码查看“订单付款时间字段”的缺失值。结果如下。39239.7.3数据处理print(data[data['订单付款时间'].isnull()&data['买家实际支付金额']>0].size)#查看缺失值是否为拍下订单但是未付款情况print(sum(data['订单付款时间'].isnull())/data.shape[0])#查看缺失值与整体数据的比例进一步查看其详细信息。具体代码如下。00.140057122456265619.7.3数据处理data.describe()4.异常值处理这里使用describe()查看函数的异常值,具体代码如下。9.7.3数据处理plt.boxplot(data['总金额'])plt.show()从上表可以看到‘总金额’的最大值远远超过75%分位数,怀疑是异常值。下面使用箱线图辅助判断。具体代码如下。9.7.3数据处理data=data.drop(index=data[data['总金额']>17500].index)plt.boxplot(data['买家实际支付金额'])plt.show()由运行结果可知,总金额大于175000订单只有一条,且没有付款,可能为顾客操作失误,可以将其删除。具体代码如下。9.7.3数据处理data[data['退款金额']>2000]下面查看顾客退款金额大于2000的异常值,具体代码如下。运行结果可见,顾客退款金额异常值均为正常操作,在正常范围内,故也无须对其特殊处理。9.7.4数据分析1.整体销售情况与总销售情况如图,由“数据异常值处理”一步中得出的数据整体情况中可见:共记录28009条订单,其中买家实际支付订单24087条(86.0%),买家有退款行为的订单5646条(占实际支付23.4%);平均每单订单100.2元,金额最小1元,金额最大16065元;实际支付订单平均每单79.0元,金额最小0元,金额最大16065元;退款订单平均每单退款101.4元,金额最小1元,金额最大3800元。9.7.4数据分析下面查看该店铺的总销售额,具体代码如下。importnumpyasnpnp.sum(data['买家实际支付金额'])运行结果:1902487.159.7.4数据分析2.地区分析下面对该店铺在全国各地的销售情况进行分析,此次情况选用柱状图,具体代

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论