第2期我们用RFM模型把500个用户分成四群,知道该给谁发优惠券了。今天换个老板更关心的问题:今年哪个月最赚钱?明年的备货节奏怎么排?
答案藏在销售趋势里。原始的日销数据像心电图一样抖,直接看啥也看不出来。得先聚合,再算环比,把趋势从噪声里捞出来。
先声明:下面用的是我按真实零售特征合成的演示数据(冬季旺季、双十一大促、周末效应都埋进去了),代码换成你们家的真实CSV照样跑。
环境:pandas 2.1.4,plotly。先说一个实测坑:老版本pandas里resample(“ME”)会报错,得写成"M",我在这儿卡了十分钟。
代码,核心就三行:
importpandasaspd df=pd.read_csv("sales_2026.csv",parse_dates=["date"])monthly=df.set_index("date").resample("M").sum()monthly["环比"]=monthly["sales"].pct_change()*100print(monthly)resample按月求和,pct_change算环比。跑出来的月度表(单位:元),1月43659,2月41110,3月32138,一路波动。11月56269,环比+72.3%,12月32473,环比-42.3%。全年总额42.7万。
数字一摆,故事就清楚了。11月是绝对旺季,一个月干了5.6万,占全年13%。1-2月是冬季小旺季,都在4万以上。3月之后一路阴跌到3万出头,典型的节后疲软。12月大促一结束直接腰斩,环比-42.3%,备货要是按11月的量进,12月全砸手里。
再拆一层:周末日均1283,工作日日均1124,周末高14%。门店排班、客服人力跟着这个节奏走,周末加人、工作日减人,人效直接提一档。
光看表格不够直观,plotly画条折线,波峰波谷一眼定位:
importplotly.expressaspx fig=px.line(monthly.reset_index(),x="date",y="sales",title="2026年月度销售额趋势")fig.add_hline(y=monthly["sales"].mean(),line_dash="dash",annotation_text="月均线")fig.show()加一条月均线当参照,哪个月在均线上方、哪个在下方,一目了然。老板要的从来不是表格,是"11月备货翻倍、12月砍半"这种能直接拍板的结论。
四个坑,提前说。
第一,环比第一个月是NaN。1月没有上个月,pct_change算出来是空,别当成0填进去,会把均值拉偏。
第二,同比和环比别混用。老板问"比去年11月怎么样",那是同比,得有两年的数据。一年的数据只能做环比和趋势,别硬编同比。
第三,单日正负8%的抖动是噪声,不是趋势。看到某天跌了10%就喊出事了,大概率是虚惊。看7天滑动平均,线平滑了再下结论。
第四,旺季结论要分品类验。11月大促可能是某一个爆品撑起来的,全店备货翻倍就翻车了。按品类再跑一遍同样的代码,哪个品类是真旺季才看得准。
收藏这篇吧。这套"聚合-环比-画线"三板斧,换个CSV就能跑你们家的数据,下次老板问趋势,十分钟交差。
下期预告:第4期讲缺失值和异常值清洗,真实数据拿到手第一步该干的脏活。这个系列在专栏《数据分析实战》里连载,从洗数据到用户分层再到趋势拆解,关注后进专栏能连着看完整链路。
讨论时间:你们行业的销售旺季是几月?跟这个"双十一+春节"的节奏一样吗?一句话说说。
Cyrus