所需库:pandas、datetime,其他酌情选择(numpy、etc.)
受众:适合稍有一点python基础的朋友
注:本文所作python处理仅针对报表的数据部分,表格设计部分题主认为还是直接上Excel比较快(可以考虑的方法是复制粘贴数据到表格框架中,粘贴时选择“值(v)”)
一、实现目标:
假设我们的目标是要做出一个这样的表格,并填入数据。
上表所需基础数据为消费金额、消费人数、消费件数、消费次数4个基础指标,基础指标的原数据获取和计算因人而异,本文假设均为已知变量。
二、代码实现:
2.1 创建表格
import pandas as pd
# ItemID
ItemID_list = ['X0001','X0002'] # 也可以通过Excel/csv等导入
KPI_list = ['消费金额','消费人数','消费件数','消费次数','人均消费金额','人均消费件数','人均消费次数','平均单件消费']
month_range = ['10月','9月']
year_range = ['2024','2023','增长率']
# establish the form
form = pd.DataFrame(index=pd.MultiIndex.from_product([ItemID_list,
KPI_list]),
columns=pd.MultiIndex.from_product([month_range,
year_range]))
form = form.rename_axis(index=['产品ID','KPI'],columns=['',''])
form
2.2 填入数据
如下为假设的基础数据指标计算/查询结果,接下来用这一数据导入表格:
# 此处省略一堆基础指标的计算/获取过程
# 假设基础指标现在为已知数据,且储存格式如下:
# [产品ID,起始时间,结束时间,消费金额,消费人数,消费件数,消费次数]
data = [['X0001','2024-10-01','2024-10-31',10000,120,125,122],
['X0001','2024-09-01','2024-09-30',20000,130,135,132],
['X0001','2023-10-01','2023-10-31',30000,140,145,142],
['X0001','2023-09-01','2023-09-30',40000,150,155,152],
['X0002','2024-10-01','2024-10-31',50000,160,165,162],
['X0002','2024-09-01','2024-09-30',60000,170,175,172],
['X0002','2023-10-01','2023-10-31',70000,180,185,172],
['X0002','2023-09-01','2023-09-30',80000,190,195,192],
]
处理时间数据时,样例中每一时期均对应一个月。
导入:
import datetime
basic_indic = ['消费金额','消费人数','消费件数','消费次数']
deriv_indic = ['人均消费金额','人均消费件数','人均消费次数','平均单件消费']
for i in range(len(data)):
line = data[i]
ID = line[0]
time = datetime.datetime.strptime(line[1], '%Y-%m-%d')
year,month = time.year,time.month
# 填补基础数据
form.loc[(ID,basic_indic),(str(month)+'月',str(year))] = line[3:7]
# 提取每一指标的值
sales,consumers,quantity,trans = line[3:7]
# 计算衍生指标的值
sales_pc = sales/consumers
quantity_pc = quantity/consumers
trans_pc = trans/consumers
sales_unit = sales/quantity
# 填入衍生指标结果
form.loc[(ID,deriv_indic),(str(month)+'月',str(year))] = [sales_pc,quantity_pc,trans_pc,sales_unit]
# 计算增长率
for j in range(len(form)):
form.iloc[j,2] = (form.iloc[j,0]-form.iloc[j,1])/form.iloc[j,1]
form.iloc[j,5] = (form.iloc[j,3]-form.iloc[j,4])/form.iloc[j,4]
2.3 导出为 Excel / csv
# 设定保存路径
save_path = 'C:/Users/XXXX/Desktop/'
# 导出为excel
form.to_excel(save_path + 'statement.xlsx',header=True,index=True)
导出后的Excel效果如下:
需要做表格设计的朋友可以直接复制粘贴数据到现有的表格框架中,粘贴时选择“值(v)”,也可以直接在导出的表格上做修改。
三、结语:
如上为本次分享的一点点tips,当需要更新的数据量特别大,但是计算/查询过程相似度又很高时,可以考虑使用python来帮助做一件化繁为简、一劳永逸的工作。