这次依然是用之前rossmann店铺竞赛的数据集。
之前的数据集探索处理在这里已经做过了,此处就不再赘述了优快云链接
数据集地址:竞赛链接
这里探讨数据集中Promo2对于每家店铺销售额的影响。其中,Promo2是一个基于优惠券的邮寄活动,发送给参与商店的顾客。每封信里都有几张优惠券,大部分是所有产品的一般折扣,有效期为三个月。所以在这些优惠券到期之前,我们会给客户发新一轮的邮件。具体的变量解释可以看这里:Promo2释义
此处单纯是为了作因果推断的练习。由于笔者是因果推断的初学者,有些概念与处理可能会有疏漏错误,还请发现的读者不吝赐教。
一、数据可视化
首先,我们从单纯地数据可视化的角度来看总体均值以及店铺自身使用优惠券政策前后的比较。
import warnings
warnings.filterwarnings("ignore")
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime, timedelta
data = pd.read_csv("train.csv")
data = data[data["Open"]==1]
store_info = pd.read_csv("store.csv")
#假设一年的第一周是包含1月4日的那周
data = data[data["Sales"]>0]
data["Date"]=pd.to_datetime(data["Date"])
data["Year"]=[i.year for i in data["Date"]]
data["Month"]=[i.month for i in data["Date"]]
def get_first_day_of_week(year, week):
if np.isnan(year):
return np.nan
year = int(year)
week = int(week)
first_thursday = datetime(year, 1, 4)
while first_thursday.weekday() != 3: # weekday() returns 0 (Monday) through 6 (Sunday)
first_thursday += timedelta(days=1)
first_day_of_week = first_thursday - timedelta(days=first_thursday.weekday() - 1)
target_date = first_day_of_week + timedelta(weeks=week - 1)
return datetime.date(target_date)
res = []
for i in range(store_info.shape[0]):
res.append(get_first_day_of_week(store_info.loc[i,"Promo2SinceYear"],store_info.loc[i,"Promo2SinceWeek"]))
store_info["Promo2StartTime"] = pd.to_datetime(res)
data = data.merge(store_info,on="Store")
data["Post"] = (data["Date"]>data["Promo2StartTime"]).astype("int8")
data["StateHoliday"] = (data["StateHoliday"]!="0").astype("int8")
## 先简单比较一下每天·店的均值
#均值比较
Promo2_date=data[data["Post"]==1].groupby(["Year","Month"])["Sales"].mean()
NoPromo2_date=data[data["Post"]==0].groupby(["Year","Month"])["Sales"].mean()
Promo2_date.index

最低0.47元/天 解锁文章
883

被折叠的 条评论
为什么被折叠?



