1.目标:
按月求三个重要指标:
- 用户数
- 销量
- 销售额
在每个维度的总和,或者每个分类的环比、同比。
2.背景:
一家国外品牌的自行车生产公司,在中国拥有三个代理商帮助销售其品牌产品,该品牌的自行在中国车十分畅销,在各个地区都有其用户。
该场景下的维度有:
- 时间维度
- 产品维度
- 地区维度
- 代理商维度
- 消费者维度
以月为单位就算,计算各维度中某分类的总和、同比、环比
3.观察数据:
Dataframe里每一行代表一位客人在某一天购买的一辆单车。
有83285条的订单记录,26列
df.shape
#(83285, 26)
df.info()
'''
<class 'pandas.core.frame.DataFrame'>
Int64Index: 83285 entries, 0 to 83342
Data columns (total 26 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 创建日期 83285 non-null object
1 创建年月 83285 non-null object
2 季度 83285 non-null int64
3 一年的周数 83285 non-null int64
4 星期 83285 non-null int64
5 当月的天数 83285 non-null int64
6 两年的周数 83285 non-null int64
7 是否今天 83285 non-null int64
8 订单ID 83285 non-null float64
9 客户ID 83285 non-null int64
10 商品ID 83285 non-null object
11 商品名 83285 non-null object
12 商品子类 83285 non-null object
13 商品类别 83285 non-null object
14 价格 83285 non-null float64
15 客户创建日期 83285 non-null object
16 出生日期 83285 non-null object
17 性别 83285 non-null object
18 婚否 83285 non-null object
19 年收入 83285 non-null float64
20 省 83285 non-null object
21 市 83285 non-null object
22 地区 83285 non-null object
23 代理商 83285 non-null object
24 成本 83285 non-null float64
25 渠道 83285 non-null object
dtypes: float64(4), int64(7), object(15)
memory usage: 17.2+ MB
'''
时间是从2019年1月2日到2020年9月30日
df['创建日期'].value_counts().sort_index()
'''
2019-01-02 85
2019-01-03 104
2019-01-04 98
2019-01-05 101
2019-01-06 84
...
2020-09-26 283
2020-09-27 293
2020-09-28 303
2020-09-29 317
2020-09-30 313
Name: 创建日期, Length: 633, dtype: int64
'''
4.计算步骤、思路
聚合后每个分类的三个指标的总和:
- 用groupby对[创建年月,分类字段]进行聚合
- 对客户数,求客户ID唯一值的数量
- 对销量,对订单ID用count求出销量
- 对销售额,对价格(单价)用sum求和
环比:
- 用pivot_table()计算每个月每个分类的各指标
- 用pct_change()计算环比
- 用stack()/reset_index()对多层列/行引索进行处理
- 用rename()重命名字段名
同比:
- 算分类的唯一值
- 对分类分层用for loop,再用pct_change()计算同比
5.多维度分类的聚合运算
以产品维度为例,详细步骤如下:
先观察,查看有多少产品子类
#一共有三个自行车子类:
df['商品子类'].value_counts()
'''
df['商品子类'].value_counts()
公路自行车 44131
山地自行车 27266
旅游自行车 11888
Name: 商品子类, dtype: int64
'''
每个子类在每个月的销售表现
#算出了每个分类在每个月的总客户数、销量、销售额
product_category=df.groupby(["创建年月","商品子类"]).agg({
"客户ID":pd.Series.nunique,"订单ID":"count","价格":"sum"}).reset_index()
product_category=product_category.rename(columns={
"客户ID":"客户数","订单ID":"销量","价格":"销售额"})
计算环比
先到pivot_table()转化行列
pivot_table()跟Excel的透视表功能一致,能对所需字段进行求和、求平均等。注意values一定要是数值类型,否则不能计算。
这里不需要计算,只需要行列转换。
categor