当前位置: 首页 >> 发展
优惠券使用情况数据分析(源码自用) 天天快消息
来源:哔哩哔哩     时间:2023-03-29 21:58:06

import numpy as np

import pandas as pd

from matplotlib import pyplot as plt


(资料图)

import seaborn as sns    # 绘图模块,基于matplotlib的可视化python包,不能完全替代matplotlib,只是对matplotlib进行升级

plt.rcParams['font.sans-serif'] = ['SimHei']   # 用来正常显示中文标签

plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号

"""

1.加载数据

parse_dates:将指定的列加载成日期的格式

"""

offline = pd.read_csv('ccf_offline_stage1_train.csv', parse_dates=['Date_received', 'Date'])

"""

2.数据的规整

判断每一列当中有多少个空值

offline.isnull().sum()

2.1 把“Discount_rate”列中的满减政策转换成折扣率

offline['Discount_rate'] = offline['Discount_rate'].fillna('null')

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.NaN

else:

return float(s)

offline['Discount_rate'] = offline['Discount_rate'].map(discount_rate_opt)

2.2 Coupon_id字段:null代表无优惠券,此时Discount_rate与Date_received字段无意义。检查Coupon_id与Discount_rate和Date_received判断空值和非空值是否一一对应

# np.all():判断一个可迭代数据中是否都为True,如果是返回True,否则返回False

nan1 = offline['Coupon_id'].isnull()    # 判断优惠券是否为空

nan2 = offline['Date_received'].isnull()    # 判断领券日期是否为空

nan3 = offline['Discount_rate'].isnull()

np.all(nan1 == nan2)    # 如果结果为True,说明Coupon_id与Date_received空值与非空值是一一对应的关系

np.all(nan1 == nan3)    # 如果结果为True,说明Coupon_id与Discount_rate空值与非空值是一一对应的关系

2.3 消费情况判断

如果Date == null & Coupon_id != null,有券未消费(coupon_no_consume)

如果Date == null & Coupon_id == null,无券未消费(no_coupon_no_consume)

如果Date != null & Coupon_id == null,无券消费(no_coupon_consume)

如果Date != null & Coupon_id != null,有券消费(coupon_consume)

"""

coupon_no_consume = offline[(offline['Date'].isnull() & offline['Coupon_id'].notnull())]

no_coupon_no_consume = offline[(offline['Date'].isnull() & offline['Coupon_id'].isnull())]

no_coupon_consume = offline[(offline['Date'].notnull() & offline['Coupon_id'].isnull())]

coupon_consume = offline[(offline['Date'].notnull() & offline['Coupon_id'].notnull())]

"""

print('有券未消费:{}'.format(len(coupon_no_consume)))

print('无券未消费:{}'.format(len(no_coupon_no_consume)))    # 无意义,不需分析

print('无券消费:{}'.format(len(no_coupon_consume)))

print('有券消费:{}'.format(len(coupon_consume)))

# 用优惠券消费的有7万,相比其他用户来说,占比较少

3.数据分析

# 绘制饼图占比

consume_status_dict = {'coupon_no_consume': len(coupon_no_consume),

'no_coupon_consume': len(no_coupon_consume),

'coupon_consume': len(coupon_consume)}

consume_status = pd.Series(consume_status_dict)

# 消费方式构成的饼图(figure:看作是一张画布,axes:代表画布内的多个坐标系)

fig, ax = plt.subplots(1, 1, figsize=(8, 10), dpi=240)

consume_status.plot.pie(ax=ax,

autopct='%1.1f%%',

shadow=True,

explode=[0.02, 0.05, 0.2],

textprops={'fontsize': 15, 'color': 'blue'},

wedgeprops={'linewidth': 1, 'edgecolor': 'black'},

labels=['有券未消费 \n ({})'.format(len(coupon_no_consume)),

'无券消费 \n ({})'.format(len(no_coupon_consume)),

'有券消费 \n ({})'.format(len(coupon_consume)),

]

)

ax.set_ylabel('')   # 去除ylabel

ax.set_title('消费占比情况')

plt.legend(labels=['有券未消费', '无券消费', '有券消费'])

# 有券未消费占比55.7%最大,说明大多数人拿完券之后,尚未使用;无券消费用户占比40%,说明很多人没有使用优惠券,可能优惠券的吸引力不大,客户没在意或者新用户比较多;用券消费用户比较小,占4.3%,说明优惠券使用率不高,可以考虑是不是加大优惠券力度......

3.1在有券消费人群中,分析距离和优惠折扣

# 各商家对应的顾客到点平均距离

Merchant_distance = coupon_consume.groupby('Merchant_id')['Distance'].mean()

print(Merchant_distance[Merchant_distance == 0])

# 有4076个商家,有1431个商家的用券消费用户平均范围在500米以内

# 各商家对应的顾客到点消费平均折扣力度

Merchant_discount_rate = coupon_consume.groupby('Merchant_id')['Discount_rate'].mean()

Merchant_discount_rate.sort_values()

Merchant_discount_rate.hist()

print(Merchant_discount_rate.mean())

# 所有商家平均折扣的平均值:0.88

3.2 持券到店消费人数最多的商家

# 对商家进行分组,取出用户id,对用户id进行去重统计数量

popular_merchant = coupon_consume.groupby('Merchant_id')['User_id'].apply(lambda x: len(x.unique())).sort_values(ascending=False)

# 找出持券消费人数>500的商家id

popular_merchant500 = popular_merchant[popular_merchant > 500]

# 共有16家店铺,持券消费人数在500人以上,持券消费人数最多商家是5341,持券消费人数在2800,排名最后的商家,持券消费人数为559人,这批商家对优惠券的使用方法得当,消费者喜欢用消费券进行消费,可以适当借鉴这批商家的推广力度

3.3 持券消费人数在500人以上的商家,连接顾客到店平均距离和平均折扣力度

merchant_pop_dis = pd.merge(left=popular_merchant500, right=Merchant_distance, on='Merchant_id', how='inner')

merchant_pop_dis_rate = pd.merge(left=merchant_pop_dis, right=Merchant_discount_rate, on='Merchant_id', how='inner')

3.4计算到点消费人数与平均距离和折扣力度的相关系数

corr(correlation:相关系数),用来计算df数据中列与列的相关性(皮尔逊相关系数),取值范围[-1,1]之间

1:完全正相关,-1:完全负相关;绝对值越大,相关性越大,反之同理

正相关:随着变量的增大,而增大,反之同理;负相关:随着变量的增大,而减小,反之同理

merchant_pop_dis_rate.corr()

# 持券消费人数,与距离和折扣率都呈现出负相关,属于生活中的正常现象

# 用热力图展示相关系数(data:相关系数,annot:显示相关系数,cmap:颜色范围,vmax:最大值,vmin:最小值)

sns.heatmap(data=merchant_pop_dis_rate.corr(),annot=True, cmap='Accent', vmax=1, vmin=-1)

由图可知:

1.到点消费人数的多少与顾客到店铺的距离之间呈现负相关,相关系数0.31,在0.3~0.5之间,为低度相关

2.到店消费人数的多少与优惠打折力度呈现负相关,相关系数0.2,在0~0.3之间,为相关程度极弱

综上所述,这些店家之所以火爆,应该是物美价廉导致,与距离和优惠力度相关性不大

4.1 分析每天中优惠券的总体发放量与使用量情况

业务分析:日期(优惠券的发放日期Date_received,使用日期date)用作图表的x轴

需要统计每天优惠券发放数量和使用数量

"""

offline['Date'].notnull().sum()    # 77.7万消费数据

offline['Date_received'].notnull().sum()    # 已经发送出105万优惠券

# 取出存在消费日期的记录,进行升序,再去重

date_sort = offline[offline['Date'].notnull()]['Date'].sort_values().unique()

# 取出存在领券日期的记录,进行升序,再去重

date_receive_sort = offline[offline['Date_received'].notnull()]['Date_received'].sort_values().unique()

# 每天优惠券的使用量(即持券消费人群)

consume_num_everyday = coupon_consume[['User_id', 'Date_received']]

consume_num_everyday = consume_num_everyday.groupby('Date_received').count()

consume_num_everyday = consume_num_everyday.rename(columns={'User_id': 'count'})

# 每天发放的优惠券数量(取出所有领券日期!=null的数据,再进行按天分组,计数就可以)

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'})

# 绘制每天发券量和每天用券量

plt.figure(figsize=(18, 6), dpi=400)

plt.bar(x=date_receive_sort, height=coupon_sendout_everyday['count'], label='每天发券量')

plt.bar(x=date_receive_sort, height=consume_num_everyday['count'], label='每天用券量')

plt.yscale('log')    # 对y轴进行对数缩放

plt.legend()

# 16年2月为例,用券量级别在1000,发券量在10万左右,在100倍左右,优惠券的使用率还是非常低的

# 计算每天的优惠券与发券量占比

plt.figure(figsize=(18,6), dpi=400)

plt.bar(x=date_receive_sort, height=consume_num_everyday['count']/coupon_sendout_everyday['count'], label='百分比')

plt.legend()

# 由图可知,优惠券使用率最高在16年3月底,达到了30%,使用率最低在16年1月底,最低为3%左右。整体来看,优惠券使用率波动较大

标签:

上一篇:

下一篇:

优惠券使用情况数据分析(源码自用) 天天快消息 importnumpyasnpimportpandasaspdfrommatplotlibimportpyplotaspltimportseabornassns 绘图模块,基于m...
锦绣未央君桃的扮演者(锦绣未央君桃扮演者) 锦绣未央君桃的扮演者锦绣未央君桃的扮演者《锦绣未央》君桃的扮演者是王妍之。角色简介:李未央在燕国...
《塞尔达传说:王国之泪》已开发完毕,距发售还有“45年”!-当前快讯 《塞尔达传说:王国之泪》公布了10分钟的中文实机演示,制作人青沼英二宣布游戏已经开发完毕,并在视频...
神木:加快生产进度 提升发展质效 今年以来,神木市坚持稳中求进工作总基调,深入实施“136”发展战略,在多项政策措施“护航”下,全市各...
AI疾飞猛进引爆担忧!马斯克等千名科技人士联名呼吁:暂停巨型 AI 实验_观点 这一次的反AI浪潮,科技人士们对AI 的潜在风险和负面影响表达的担忧,也会提高公众意识和引起相关政策制...
送男士礼物什么好,细数那些有创意的 全球球精选 送男士礼物什么好,送男士简简单单的一般礼物,就显得一点也不定制。换做想送男士创意礼品,挑选一款棒...
世界观天下!镇平县自然资源局: 坚持守正创新 建立土地作价供应新机制 镇平县自然资源局:坚持守正创新建立土地作价供应新机制,土地使用权,镇平县自然资源局
人民银行行长易纲:商业银行运用碳减排支持工具发放贷款已超6000亿元 人民银行行长易纲:商业银行运用碳减排支持工具发放贷款已超6000亿元,易纲,央行,贷款,碳减排,科学家,银...
维护正义 法制先行 世界观察 为不断提高辖区居民群众的法治意识,丰富广大群众的法治文化生活,进一步做好普法宣传教育工作,切实增...
高盛:阿里重组为各业务增值 予目标价133港元|世界时讯 高盛发报告指出,在阿里巴巴重组公布后,看到潜在的积极因素,包括基于所有六间部门须自给自足,或会加...
榆树市:发挥金融优势 助力乡村振兴|世界关注 榆树市:发挥金融优势助力乡村振兴
焦点热文:看看这座占地48英亩的DeSoto房屋的木制品 在距离达拉斯市中心不到20分钟路程的48英亩土地上,您能找到?您的搜索可能会将您带到DeSoto,在那里您会...
谷歌与Replit合作,将AI代码建议工具集成到云平台|全球速递 【ITBEAR科技资讯】3月29日消息,谷歌和在线IDE开发商Replit达成了合作,将Replit的基于AI的代码建议工...
华峰铝业:二级市场股票价格涨跌受宏观经济、行业情况、市场解读等诸多因素影响,敬请投资者注意风险 华峰铝业(601702)03月29日在投资者关系平台上答复了投资者关心的问题。
【环球财经】国债收益率上升施压科技股 美股收盘下跌 阿里暴涨14% 截至当天收盘,道琼斯工业平均指数收于32394 25点,跌幅为0 12%;标准普尔500种股票指数收于3971 27...
环球实时:三未信安等9只科创板股融资余额增幅超20% 证券时报网讯,wind统计显示,3月28日共有279只科创板个股融资余额环比增加。其中,9股融资余额增幅超过...
中国常住人口城镇化率突破65% 城镇化进入“下半场”|速递 来源:人民日报海外版作者:邱海峰超65%,城镇化进入“下半场”过去五年,常住人口城镇化率从60 2%提高...
中国投资基金公司(00612)发布年度业绩,股东应占亏损3.31亿港元 同比盈转亏 智通财经APP讯,中国投资基金公司(00612)发布截至2022年12月31日止年度业绩,该集团取得收益25 2万港元...
硅铁产地哪里最好_硅铁产地_世界微动态 1、我国硅铁产地集中在水电资源丰富的地区,四川,甘肃,青海和内蒙古是硅铁的主要产地。2、硅铁是由铁...
TCL子公司全资入股中隆新能源_当前快播 天眼查App显示,1月12日,南京中隆新能源科技有限公司发生工商变更,原股东代浩、王宏彬退出,新增TCL实...
环球看点!什么是寡妇年(民俗专家表示“寡妇年”不宜结婚的说法是荒唐的) 1、寡妇年,又名滑头年。民俗专家表示,“寡妇年”不宜结婚的说法是荒唐的,根本没有科学依据。社会上流...
精选!甲减怎么治甲减的治疗方法有哪些_甲减的治疗方法有哪些 1、病情分析:甲减由原发性甲减和继发性甲减组成。2、原发性甲状腺功能减退症的治疗主要是甲状腺激素替...
保密观app如何取得证书 具体操作方法介绍-世界信息 保密观app如何取得证书具体操作方法介绍,
焦点快播:押注真正的“ChatGPT”! 好久没聊宏观了,趁着没什么大行情,简单感慨两句。相信大家最近都感觉到了,当下全球的宏观局势其实并不
天天信息:商业外摆,“摆”出品质和烟火气 正值大地回温,春暖花开。遇上好天气时,摆在室外的桌椅总是格外抢手。临街而坐、晒晒暖阳、打量街区城...

广告

X 关闭

广告

X 关闭