游戏每天的充值从后台导出,这里脱敏了,所以有的数据可能看起来怪怪的。这里期望达成的效果是更新每天新增用户的累计充值人数和累计充值金额情况。这里只是简单的获取新增充值和新增充值人数,ltv增长,二次付费率等指标后续将看下如何处理。
#coding=utf-8
import pandas as pd
#读取数据
df = pd.read_excel('F:\\order_1.xls')
读取前5行查看下结果>>>
用户id 昵称 渠道 订单号 充值金额 到账钻石 充值时间 注册时间
0 ******* ******* 官网包 5955283458 98 980 2021-02-22 19:15:29 2021-01-01 00:44:17
1 ******* ******* 官网包 5673955958 30 300 2021-02-06 14:10:41 2021-01-01 00:44:17
2 ******* ******* 官网包 5413423923 30 300 2021-01-01 01:15:34 2021-01-01 00:44:17
3 ******* ******* 官网包 5166355291 6 60 2021-02-09 01:43:54 2021-01-01 01:07:12
4 ******* ******* 官网包 5611135040 6 60 2021-02-06 09:46:42 2021-01-01 01:07:12
时间戳改为日期,以便后续处理
df['注册时间'] = pd.to_datetime((df['注册时间'])).dt.normalize()
df['充值时间'] = pd.to_datetime((df['充值时间'])).dt.normalize()
loc选取需要统计的的渠道(这些只需要获取外部渠道数据,官方渠道不参与统计。定义一个列表,把需要统计的渠道名字放进来)
channel = [''ios渠道1','ios渠道2','ios渠道3','ios渠道4','渠道1','渠道2','渠道3','渠道4']
df.set_index('渠道',inplace=True)
df = df.loc[channel]
print(df.head())
读取前5行得到以下结果>>>
用户id 昵称 订单号 充值金额 到账金额 充值时间 注册时间
渠道
ios渠道1 ******* **** 5.170953e+09 6 60 2021-02-27 2021-02-04
ios渠道1 ******* **** 5.017410e+09 6 60 2021-02-27 2021-02-26
ios渠道1 ******* **** 5.155954e+09 6 60 2021-02-27 2021-02-05
ios渠道1 ******* **** 5.780142e+09 6 60 2021-02-22 2021-01-31
ios渠道1 ******* **** 5.906700e+09 6 60 2021-02-24 2021-02-02
分组求和获取每日新增用户的充值金额
new_user_amount = df.groupby(by='注册时间').sum()['充值金额']
分组去重技术获取每日新增用户的充值人数
new_paying_user_count = df.groupby(by='注册时间').nunique()['用户id']
分别打印看下充值金额和充值人数的前五行
注册时间
2021-01-01 2226
2021-01-02 940
2021-01-03 1372
2021-01-04 1054
2021-01-05 3242
Name: 充值金额, dtype: int64
注册时间
2021-01-01 28
2021-01-02 24
2021-01-03 27
2021-01-04 22
2021-01-05 31
Name: 用户id, dtype: int64
需要的数据备好了,下面准备做表输出
充值数据比较少,上面得到的数据中日期可能有断层,这里重新生成下完整的日期(此处用pandas.datetime类时,pandas报FutureWarning:未来的版本将弃用,后续更新可能会报错)
report_df = pd.DataFrame(pd.date_range(start='2021-1-1',end=pd.datetime.now(),freq='D'))
pandas.merge()分两次连接之前得到的充值金额和充值人数,都为左连接,连接条件为注册时间
report_df = pd.merge(report_df,new_paying_user_count,how='left',left_on=[0],right_on='注册时间')
report_df = pd.merge(report_df,new_user_amount,how='left',left_on=[0],right_on='注册时间')
打印一下前5行看下结果>>>
0 用户id 充值金额
0 2021-01-01 28 2226
1 2021-01-02 24 940
2 2021-01-03 27 1372
3 2021-01-04 22 1054
4 2021-01-05 31 3242
这里列名需要重新设置下,顺便把日期设为索引
report_df = report_df.rename(columns={0:'日期','用户id':'新增充值人数','充值金额':'充值总额'})
report_df = report_df.set_index(['日期'])
由于原始表格中有日期的新增用户时没有充值的,这部分日期没有充值数据,这里用0填充下
report_df = report_df.fillna(0)
再次打印查看效果>>>
新增充值人数 充值总额
日期
2021-01-01 28 2226
2021-01-02 24 940
2021-01-03 27 1372
2021-01-04 22 1054
2021-01-05 31 3242
最后写入表格文件,查看效果
report_df.to_excel('daily_report.xlsx')