韩都衣舍网站建设方案,好的建站软件,网站排名软件利搜,做ppt卖给网站数据分析#xff1a;某电商优惠卷数据分析 作者#xff1a;AOAIYI 专栏#xff1a;python数据分析 作者简介#xff1a;Python领域新星作者、多项比赛获奖者#xff1a;AOAIYI首页 #x1f60a;#x1f60a;#x1f60a;如果觉得文章不错或能帮助到你学习#xff0c;可…数据分析某电商优惠卷数据分析 作者AOAIYI 专栏python数据分析 作者简介Python领域新星作者、多项比赛获奖者AOAIYI首页 如果觉得文章不错或能帮助到你学习可以点赞收藏评论关注哦 如果有小伙伴需要数据集和学习交流文章下方有交流学习区一起学习进步 文章目录数据分析某电商优惠卷数据分析一、实验目的二、加载数据三、数据规整四、数据分析五、分析每天中优惠券的总体发放量与使用量情况一、实验目的
随着移动设备的完善和普及移动互联网各行各业进入了高速发展阶段这其中以O2OOnline to Offline消费最为吸引眼球。据不完全统计O2O行业估值上亿的创业公司至少有10家也不乏百亿巨头的身影。O2O行业关联数亿消费者各类APP每天记录了超过百亿条用户行为和位置记录因而成为大数据科研和商业化运营的最佳结合点之一。 以优惠券盘活老用户或吸引新客户进店消费是O2O的一种重要营销方式。然而随机投放的优惠券对多数用户造成无意义的干扰。对商家而言滥发的优惠券可能降低品牌声誉同时难以估算营销成本。个性化投放是提高优惠券核销率的重要技术它可以让具有一定偏好的消费者得到真正的实惠同时赋予商家更强的营销能力。
二、加载数据
1.导入所需的模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns #绘图模块基于matplotlib的可视化python包,不能完全替代matplotlib,只是对matplotlib进行升级
plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus] False # 用来正常显示负号
%matplotlib inline2.导入数据
offline pd.read_csv(rC:\Users\XWJ\Desktop\ccf_offline_stage1_train.csv,parse_dates[Date_received,Date])
offline.head(10)parse_dates:将指定的列加载成日期的格式 NaT:时间日期格式的空值 3.使用函数info():数据表的基本信息维度列名称数据格式所占空间等
offline.info()三、数据规整
1.判断每一列当中有多少个空值
offline.isnull().sum()2.把“Discount_rate”列中的满减政策转换成折扣率
offline[Discount_rate] offline[Discount_rate].fillna(null)
offline.head()def discount_rate_opt(s): #s代表每一个元素if : in s:split s.split(:)discount_rate (int(split[0]) - int(split[1]))/int(split[0])return round(discount_rate,2) #折扣率保留两位小数elif s null:return np.NaNelse:return float(s)offline[Discount_rate] offline[Discount_rate].map(discount_rate_opt)
offline.head()3.Coupon_id字段null代表无优惠券此时Discount_rate与Date_received字段无意义。
检查Coupon_id和Discount_rate与Date_received判断空值和非空值是否一一对应。
np.all([True,False,True])np.all():判断一个课迭代数据中是否都为True如果是返回True否则返回False 判断优惠卷是否为空以及领券日期是否为空
nan1 offline[Coupon_id].isnull()
nan2 offline[Date_received].isnull()
np.all(nan1 nan2)结果true说明之前的猜测Coupon_id与Date_received空值与非空值是一一对应的关系 nan3 offline[Discount_rate].isnull()
np.all(nan1 nan3)结果true说明之前的猜测Coupon_id与Discount_rate空值与非空值是一一对应的关系 4.如果Datenull Coupon_id!null,有券未消费cpon_no_consume 如果Datenull Coupon_id null,无券未消费no_cpon_no_consume 如果Datenull Coupon_idnull,无券消费no_cpon_consume 如果Datenull Coupon_id!null,有券消费cpon_consume
cpon_no_consume offline[(offline[Date].isnull() offline[Coupon_id].notnull())]
no_cpon_no_consume offline[(offline[Date].isnull() offline[Coupon_id].isnull())]
no_cpon_consume offline[(offline[Date].notnull() offline[Coupon_id].isnull())]
cpon_consume offline[(offline[Date].notnull() offline[Coupon_id].notnull())]print(有券未消费:{}.format(len(cpon_no_consume)))
print(无券未消费:{}.format(len(no_cpon_no_consume))) #无意义不需分析
print(无券消费:{}.format(len(no_cpon_consume)))
print(有券消费:{}.format(len(cpon_consume)))用优惠券消费的用7万相比其他用户来说占比较少 四、数据分析
1.绘制饼图占比
consume_status_dict {cpon_no_consume:len(cpon_no_consume),no_cpon_consume:len(no_cpon_consume),cpon_consume:len(cpon_consume)}
consume_status pd.Series(consume_status_dict)
consume_status2.绘制消费方式构成的饼图
fig,axplt.subplots(1,1,figsize(8,10))
consume_status.plot.pie(ax ax,autopct%1.1f%%,shadowTrue,explode[0.02,0.05,0.2],textprops{fontsize:15,color:blue},wedgeprops{linewidth:1,edgecolor:black},labels[有券未消费 \n ({}).format(len(cpon_no_consume)),无券消费 \n ({}).format(len(no_cpon_consume)),用券消费 \n ({}).format(len(cpon_consume))])
ax.set_ylabel() #去除ylable
ax.set_title(消费占比情况)
plt.legend(labels[有券未消费,无券消费,用券消费])有券未消费占比55.7%最大说明大多数人拿完券之后尚未使用 无圈消费用户占比40%说明很多人没有使用优惠券可能优惠券的吸引力不大客户没在意可能新用户比较多。 用券消费用户占比较小4.3%,说明我们的优惠券使用率不高。可以考虑是不是加大优惠券力度. 3.在有券消费人群中分析距离和优惠折扣
各商家对应的顾客到店平均距离
Merchant_distance cpon_consume.groupby(Merchant_id)[Distance].mean()
Merchant_distance[Merchant_distance0]有4076个商家有1431个商家的用券消费用户平均范围在500米以内 各商家对应的顾客到店消费平均折扣力度
Merchant_discount_rate cpon_consume.groupby(Merchant_id)[Discount_rate].mean()
Merchant_discount_rate.sort_values()
Merchant_discount_rate.hist()
Merchant_discount_rate.mean()
Merchant_discount_rate所有商家平均折扣的平均值0.88 5.持券到店消费人数最多的商家
#对商家进行分组取出用户id对用户id进行去重统计数量、
popular_merchant cpon_consume.groupby(Merchant_id)[User_id].apply(lambda x:len(x.unique())).sort_values(ascendingFalse)
#找出持券消费人数500的商家id
popular_merchant500 popular_merchant[popular_merchant500]
popular_merchant500.name customer_count #指定列名为消费者数量持券消费者
print(len(popular_merchant500))
print(popular_merchant500)共有16家店铺持券消费人数在500人以上 持券消费人数最多商家是5341持券消费人数在2800 排名最后的商家持券消费人数未559人 这批商家对优惠券的使用方法得当消费者喜欢用优惠券进行消费可以适当借鉴这批商家的推广力度 6.持券消费人数在500人以上的商家连接顾客到店平均距离和平均折扣力度
merchant_pop_dis pd.merge(leftpopular_merchant500,rightMerchant_distance,onMerchant_id,howinner)
merchant_pop_dis_rate pd.merge(leftmerchant_pop_dis,rightMerchant_discount_rate,onMerchant_id,howinner)
merchant_pop_dis_rate7.计算到店消费人数与平均距离和折扣力度的相关系数 #corr(correlation:相关系数)用来计算df数据中列与列的相关性皮尔逊相关系数取值范围[-1,1]之间 #1完全正相关-1完全负相关 #绝对值越大相关性越大反之成立 #正相关随着变量的增大而增大反之同理 #负相关随着变量的增大而减小反之同理 merchant_pop_dis_rate.corr()持券消费人数与距离和折扣率都呈现出负相关属于生活中的正常现象 用热力图展示相关系数 #用热力图展示相关系数(data:相关系数annot显示相关系数值cmap颜色范围vmax最大值vmin最小值) sns.heatmap(datamerchant_pop_dis_rate.corr(),annotTrue,cmapAccent,vmax1,vmin-1)#由图可知 #1.到店消费人数的多少与顾客到店铺的距离之间呈现负相关相关系数0.31在0.3~0.5之间为低度相关 #2.到店消费人数的多少与优惠打折力度呈现负相关相关系数0.2在0~0.3之间为相关程度极弱 #综上所述这些店家之所以火爆应该是物美价廉导致与距离和优惠力度相关性不大 五、分析每天中优惠券的总体发放量与使用量情况
1.统计每天优惠券发放数量和使用数量
offline[Date].notnull().sum() 77.7万消费数据 offline[Date_received].notnull().sum()已经发送出105万优惠券 取出存在消费日期的记录进行升序再去重
date_sort offline[offline[Date].notnull()][Date].sort_values().unique()
date_sort[:5]取出存在领券日期的记录进行升序再去重
date_receive_sort offline[offline[Date_received].notnull()][Date_received].sort_values().unique()
date_receive_sort[:5]每天优惠券的使用量即持券消费人群
consume_num_everday cpon_consume[[User_id,Date_received]]
consume_num_everday consume_num_everday.groupby(Date_received).count()
consume_num_everday consume_num_everday.rename(columns{User_id:count})
consume_num_everday每天发放的优惠券数量
coupon_sendout_everyday offline[offline[Date_received].notnull()][[Date_received,User_id]]
coupon_sendout_everyday coupon_sendout_everyday.groupby(Date_received).count()
coupon_sendout_everyday coupon_sendout_everyday.rename(columns{User_id:count})
coupon_sendout_everyday绘制每天发券量和每天用券量
plt.figure(figsize(18,6))
plt.bar(xdate_receive_sort,heightcoupon_sendout_everyday[count],label每天发券量)plt.yscale(log) #对y轴进行对数缩放
plt.legend()plt.figure(figsize(18,6))
plt.bar(xdate_receive_sort,heightcoupon_sendout_everyday[count],label每天发券量)
plt.bar(xdate_sort,heightconsume_num_everday[count],label每天用券量)
plt.yscale(log) #对y轴进行对数缩放
plt.legend()#16年2月为例用券量级别再1000发券量再10万左右在100倍左右优惠券的使用率还是非常低的 计算每天的优惠券与发券量占比
plt.figure(figsize(18,6))
plt.bar(xdate_receive_sort,heightconsume_num_everday[count]/coupon_sendout_everyday[count],label百分比)
plt.legend()#由图可知优惠券使用率最高在16年3月底达到了30% #使用率最低在16年1月底最低为3%左右。 #整体来看优惠券使用率波动较大。 人生总是在前行不论走到哪里只要带着信念往前走比别人多一点努力你就会多一份成绩比别人多一点志气你就会多一份出息比别人多一点坚持你就会夺取胜利比别人多一点执着你就会创造奇迹。