问题背景概述:

M公司在20座城市拥有门店,销售A、B、C三种产品。现有2014年1月至2016年12月(共计三年,36个月)以来,每个城市每月每产品的销量数据,意在预测2017年度每城市每月每产品的销量。

解决方案:

本题拟对城市-产品分组建模,对20个城市-3种产品共建立60个时间序列模型。

读入数据并使用匿名函数转换时间变量:

data = read_csv("sales_data.csv",encoding= "gbk")

data["month"] = data["month"].apply(lambda x:datetime.datetime.strptime(x,'%Y-%m'))

data["month"]是dataframe里的一列,是series类型,如果想对其中每一个值进行操作,需要遍历读取。此处使用的方法是apply(lambda函数)。

分组:

grouped = data.groupby(["city","product"])

data共四列,分别是city,product,time,Q

grouped 变量作为groupby函数的输出,是一个二元组。其中的0号元素是又一个二元组,代表分组的组别标签,如(北京市,A产品);其中的1号元素是一个dataframe,是该组内的所有记录,如(北京市,A产品,2015年6月,5664件)。如下所示:

(北京市,A产品)

北京市A产品2015年6月5664件

考虑到访问元组只能通过遍历或索引的形式,可能带来不便,故将其转换为字典:键是二元组(city,product),值是该城市该产品的记录。完成后画销量折线图。

sale_dict = {}

for i in grouped:

sale_dict[i[0]]=i[1]

#利用键访问分组后的记录并再次按年份分组画图

for lable in sale_dict:

df = sale_dict[lable]

plt.figure(figsize= (20,10),dpi=100)

for i in df.groupby(["year"]):

plt.plot(i[1]["month"],i[1]["quantity"])

plt.savefig("fig/{}.jpg".format(lable))

得到折线图如下:蓝色代表2014年12个月的销量。黄色代表2015年12个月的销量。绿色代表2016年12个月的销量。

 60张图片看下来没一个时间序列是平稳的。。。服了。不过年年销量走向都差不多,说明有明显的季节性。接下来挑出一个城市的一个产品为例具体建模。

参考文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。