之前DC发起过一个关于游戏玩家付费预测的算法大赛,比赛所提供的玩家七日内游戏行为数据不仅可以用于算法比赛,也可以让我们利用数据进行一些分析,从而了解游戏的运营状况和数值状况。
本数据共包含有109个字段,一眼看上去有点蒙,如果没有玩过游戏可能根本就不了解这个字段有什么用,那个字段背后又代表了什么。当然你不了解游戏也不会影响你的数值结论产出,但是很可能会影响你得出正确结论。所以笔者每次分析一个游戏前都要去体验几天,这次也不例外,我的要塞等级升到了9级,对各种字段代表的含义也有了一定的掌握,因此才开始进行一些分析。

1、数据预处理

导入必要的包:数据处理包pandas和可视化包matplotlib和seaborn

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

导入数据

df = pd.read_csv(r'F:\数据分析项目\游戏数据分析\野蛮时代数据分析\tap_fun_train.csv')
pd.set_option('display.max_columns',110) #为了能看全所有的109列,需要设置最大展示列
df.head(5)

图片篇幅有限,只展示部分列:

对我们的分析比较有价值的列包含以下几个:

  • 用户信息字段:
  • 基础资源消耗:

  • 加速类资源消耗:
  • 对战和上线数据:
  • 玩家付费数据:

    选择字段
item = ['user_id','register_time','bd_stronghold_level','wood_reduce_value','stone_reduce_value','ivory_reduce_value','meat_reduce_value','magic_reduce_value','general_acceleration_reduce_value','building_acceleration_reduce_value','reaserch_acceleration_reduce_value','training_acceleration_reduce_value','treatment_acceleration_reduce_value','pvp_battle_count','pvp_win_count','pve_battle_count','pve_win_count','avg_online_minutes','pay_price','pay_count','prediction_pay_price']
key_data = df[item]
key_data.info()
# 其实后续使用中很多都直接使用了df里面的数据,key_data如果觉得重要可以单独存储,毕竟文件比较小。


这样,所有需要的字段都被选了出来。

2、新增用户分析

  • 新增用户标准:有注册行为。(因为这里也只有注册数据)
  • 通常来说,新增用户分析常常是基于渠道的,通过新增用户的量、转化率、留存率等来对比和评估不同渠道质量,当然我们这里没有渠道数据,太深入的新增用户分析没法开展了。在这里基于数据主要进行波动分析。
    数据表中有具体到时分秒的注册时间,我们先把日期和时间分别提取出来。

先看看register_time的数据类型:

key_data['register_time'].dtype

结果显示是‘o’,也就是object,字符串。其实字符串也可以直接用,如果需要日期、天数等的加减运算,可以转化为日期格式。
先截取日期
注册时间都是类似这种:'2018-01-26 00:01:05’格式的数据,所以可以直接截取字符串:

key_data['date'] = key_data['register_time'].apply(lambda x:x[5:10])
key_data['time'] = key_data['register_time'].apply(lambda x:x[11:13])

apply函数真的非常好用
统计每天的新增用户

x_data = key_data['date'].value_counts().reset_index() # 统计每天的注册人数,并做成DataFrame格式
x_data.columns = ['date','num']  # 改一下列名

可视化新增数据

# 设置显示中文:
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 使用seaborn画图:
plt.figure(figsize = (18,6)) # 图像大小
sns.set_style()
sns.lineplot(x = x_data['date'],y = x_data['num'],color = 'red')
plt.xticks(rotation = 50)
plt.xlabel('注册日期',fontsize = 15) # 横轴标签
plt.ylabel('新增用户数',fontsize = 15) # 纵轴标签
plt.title('新增用户变化',fontsize = 20) # 图表标题
plt.grid(True)   # 给图增加网格


就我自己做可视化的话,喜欢python和excel、power bi结合起来,更灵活。
从新增用户一个来月的数据可以出一个题:流量波动问题,请分析为什么2月19日的新增用户出现这么大的波动?请分析原因
我在博客里面提到过流量波动问题的分析,方方面面可能涉及的原因都提到了,这里再复习一遍:国家宏观政策、热点事件、常识判断、竞品行为、本产品行为、用户偏好、版本问题、统计口径和数据计算问题。虽然我们不了解具体业务发生的背景,但是可以稍微判断一下。波动发生的时间2018-02-19,是2018年春节期间(2.15-2.21)。所以2月19日新增用户大增原因可能是:

  • 春节假期效应。2月15日是除夕,春节假期第一天,注册人数出现一个小高峰,假期的拉动效应还是非常强的。
  • 运营商的拉新活动。我翻看了游戏运营方的微博,运营方在游戏中开展了一系列活动,包括舞狮活动、酋长参战、跨服战、爆竹活动等,这些活动和春节效应叠加,带来了注册人数的增加,出现峰值。

3、用户付费分析

3.1 游戏的总体付费转化率、ARPU和ARPPU

数据中用户的注册时间是1月26日-3月6日的,但游戏行为数据是7日的,具体哪7日并没有指明。
(1)总体付费转化率
总体付费转化率 = 付费用户数/活跃用户数
定义活跃用户:这里把平均在线时间超过30分钟的作为周活用户。

# 单独把付费数据提取出来
pay_data = df[['user_id','avg_online_minutes','pay_price','pay_count']]
# 活跃用户(WAU)
active_data = pay_data[pay_data['avg_online_minutes']>30]
# 计算付费转化率
active_data[active_data['pay_price']>0]['user_id'].count()/active_data['user_id'].count()

得到活跃新用户注册后七日内付费转化率为:22.3%
(2)ARPU和ARPPU
ARPU = 总付费金额/活跃用户数
ARPPU = 总付费金额/付费用户数

# 活跃用户(WAU)
active_data = pay_data[pay_data['avg_online_minutes']>30]
# 总付费金额
active_data['pay_price'].sum()
# ARPU
active_data['pay_price'].sum()/active_data['user_id'].count()
# ARPPU
active_data['pay_price'].sum()/active_data[active_data['pay_price']>0]['user_id'].count()

得到该游戏新用户前七天ARPU值为8.29元,ARPPU值为37.17元
然而如果不进行对比,我们就不知道游戏收入的好坏。根据《游戏数据分析实战》书中的说法,ARPU在3元以下较差,3-5元中等,5元以上算是优秀;而根据GameAnalytics2019年发布的《全球手游分析报告》,全球策略类(SLG)手游的ARPU值平均为0.4美元(约合2.83元),头部策略类(SLG)手游的ARPU大约为2.4美元(约合17元)。所以综上对比来看,本文分析案例的SLG手游收入处于优秀行列,但距离头部产品还有较大差距。
需要注意的是,其实很多数据如果不了解产出过程,就不能直接拿来做对比。就以上面的ARPU为例,付费总额基本没有太大歧义,但活跃用户的定义可能因公司、游戏或个人习惯而不同,最后计算出的ARPU值自然就不一样,如果我把活跃用户定义为平均在线时长在10分钟以上、1分钟以上,最后的ARPU又发生变化。不了解数据产出过程而直接进行比较,就失去了严谨性。

3.2 游戏的总体付费转化率、ARPU和ARPPU

(1)不同等级玩家的付费状况
玩过游戏的应该知道,要塞等级是决定玩家采集、战斗、研发、建筑等各项能力的基础,所以要塞等级代表了玩家体验游戏的程度。

  • 不同等级玩家人均付费统计
# 以要塞等级为分组,计算各组的人均付费情况
level_pay = df['pay_price'].groupby(by = df['bd_stronghold_level']).mean().reset_index()
# 可视化展示
plt.figure(figsize = (12,6))
plt.plot(level_pay['pay_price'],color = 'red')
plt.xticks(range(24))
plt.xlabel('要塞等级',fontsize = 13)
plt.ylabel('付费金额',fontsize = 13)
plt.title('各等级玩家人均付费', fontsize = 15)

  • 不同等级玩家人数统计
# 统计各等级玩家人数
level_user = df['user_id'].groupby(by = df['bd_stronghold_level']).count().reset_index()
# 可视化展示
plt.figure(figsize = (12,6))
plt.plot(level_user['user_id'],color = 'red')
plt.xticks(range(24))
plt.xlabel('要塞等级',fontsize = 13)
plt.ylabel('玩家人数',fontsize = 13)
plt.title('各等级玩家人数', fontsize = 15)

  • 不同等级玩家付费转化率统计
# 通过循环计算不同等级玩家的付费转化率
pay_rate = []
base_level = []
for i in range(24):level_data = df[df['bd_stronghold_level'] == i][['user_id','pay_price']]r = level_data[level_data['pay_price']>0]['user_id'].count()/level_data['user_id'].count()base_level.append(i)pay_rate.append(r)
# 把结果转成DataFrame表格
pay_rate_data = pd.DataFrame({'base':base_level,'pay':pay_rate})
# 可视化展示
plt.figure(figsize = (13,5))
plt.plot(pay_rate_data['pay'],color = 'red')
plt.xticks(range(24))
plt.xlabel('要塞等级',fontsize = 13)
plt.ylabel('付费率',fontsize = 13)
plt.title('不同等级玩家付费转化率',fontsize = 15)

  • 不同等级人均付费次数
level_count = df['pay_count'].groupby(by = df['bd_stronghold_level']).mean().reset_index()
plt.figure(figsize = (14,5))
plt.plot(level_count['pay_count'])
plt.xticks(range(24),fontsize = 13)
plt.xlabel('要塞等级',fontsize = 13)
plt.ylabel('付费次数',fontsize = 13)
plt.title('各等级人均付费次数',fontsize = 15)

  • 结论:
    (1)从人均付费金额(ARPU)来看,玩家在11、12级之后付费金额上升比较明显,尤其是14级之后上升明显加快;等级超过20级之后出现明显的波动,分析原因发现是因为样本量太少,代表性不强(21级12人,22级2人,23级1人)。
    (2)从付费转化率和人均付费次数来看,要塞等级超过8级之后付费转化率陡升,同时人均付费次数也随着等级增加而逐渐攀升。
    (3)低等级玩家数量太多,6级及以下的玩家数量非常庞大,具体来说level_user[:7]['user_id'].sum()/level_user['user_id'].sum(),占比高达92.4%。根据亲身的游戏体验,即使不肝不氪,两三天时间也能轻松达到6级。而数据却显示90%以上的玩家都没有达到6级,这就是问题所在,毕竟8级以后玩家付费才开始发力。

推测原因可能如下:新手前七日游戏体验不深入很大原因是新手引导的问题。根据我亲身体验的结果这个游戏对新手引导还算到位,一步一步指导我升级建筑、训练小兵。但是却没有关于各种资源及用途的介绍,让我有点混乱,如魔法有什么用,天赋、符文的用途等等,各种加速道具的使用等。因为新手期(7天)送的加速道具还是很多的,一两天完全可以帮助玩家轻松到6级。目前的新手引导基本上是一股脑引导玩家修造建筑,试想一直在“建造升级---->等待---->升更高级”来回循环,而不明白升级建筑有什么意义,很容易引起玩家的疲倦。新手期完全可以多加入些剧情动画,配合新手任务,给玩家带来沉浸式体验。

在使用python进行分组聚合计算的时候发现了一个比较有用的函数pivot_table,可以同时处理多列:

result = pd.pivot_table(df,index = ['bd_stronghold_level'],values = ['user_id','avg_online_minutes','pay_price','pay_count'],aggfunc = {'user_id':'count','avg_online_minutes':'mean','pay_price':'mean','pay_count':'mean'})

一行代码,结果全出来了。

4、春节拉新活动效果分析

还记得上面新增用户分析中的2月19日峰值吗,当时运营方推出了一些春节活动,为游戏带来了很多新用户。那么这次活动的效果如何呢?可以结合手边的数据进行一下并不严肃的分析。
一般来说,分析师在公司进行的营销活动分析是一个系统性的工作,绝不单单是看活动后的效果,而是活动前、活动中、活动后三个方面。这里就只从活动后的维度分析,主要包括活动的短期效果和长期效果。由于只有注册用户7天的行为数据,所以只能评估短期效果,主要从拉新量和新增用户质量两个维度分析。

(1)新用户增长量(拉新效果)

spring_data = key_data[key_data['date'] == '02-19']
register_data = key_data['user_id'].groupby(by = key_data['date']).count().reset_index()
register_data['user_id'].mean()
spring_data['user_id'].count()

根据运行结果可知,拉新活动期间新增注册用户117311人,对比平均每天的自然新增57200人,可以简单推算活动带来新用户60111,差不多翻了一倍,所以活动的拉新效果还算可以。当然,实际分析中要对比活动之前的目标。
(2)新用户的质量分析
活动带来的新增用户质量怎么样,这是运营方非常关注的,毕竟都是花钱做活动,谁也不希望带来的新用户全是羊毛党。羊毛党既不会迟到,更不会缺席,但是只要活动能带来足够的高质量用户,那就是非常有意义的。
从手头的数据出发,我们可以从付费率、ARPU、ARPPU、7日留存、平均在线时长等几个指标评价活动效果,对比的是所有新用户相应的平均数据。
先上代码:

# 活动新增活跃用户付费转化率:24.2%
spring_active_data = spring_data[spring_data['avg_online_minutes']>30]
spring_active_data[spring_active_data['pay_price']>0]['user_id'].count()/spring_active_data['user_id'].count()
# 活动新增活跃用户ARPU:12.66
spring_active_data['pay_price'].sum()/spring_active_data['user_id'].count()
# 活动新增活跃用户ARPPU:52.3
spring_active_data['pay_price'].sum()/spring_active_data[spring_active_data['pay_price']>0]['user_id'].count()
# 7日内留存率(注册后7天内活跃时间超过30分钟):2.87%
spring_active_data['user_id'].count()/spring_data['user_id'].count()
# 平均在线时长:4.9分钟
spring_data['avg_online_minutes'].mean()

可视化对比:

注:本文关于活跃用户的定义是平均在线时长(avg_online_minutes)高于30分钟的用户。

  • 付费转化率
    平均的付费转化率是22.3%,本次活动带来的新用户付费转化率为24.2%,略高于平均水平。

  • ARPU、ARPPU和人均付费次数
    所有用户的ARPU和ARPPU分别为8.29和37.2,本次活动带来的新用户ARPU和ARPPU分别为12.66和52.3,说明本次活动带来的活跃用户的付费水平较高。通过观察人均付费次数也可以看出本次活动的活跃用户人均付费次数1.01次高于平均水平的0.82次。

  • 7日内留存率和平均在线时长
    也就是新注册用户7日内活跃时长超出30分钟的用户比例,可以看出活动带来的新用户活跃度较低,只有2.87%,远低于平均的6.23%。活动拉新必然会流入很多非目标群体,活跃用户的比例相对会较低。同时看平均在线时长数据也可以看出,活动带来的新用户在线时长还不到其他用户的一半,说明活动带来的整体新用户的黏性较低。

  • 要塞等级
    活动带来的新用户中活跃用户的平均要塞等级为7.7级,高于7.1级的平均水平。

(3)结论
首先,活动的拉新效果明显,活动期间新注册用户几乎增长了一倍。
第二,活动拉来的新用户总体来说质量不高,几个指标的得分都不如自然流入的新用户高,这说明受运营活动影响而来的用户中无效用户的比例比较高,并没有为游戏带来多大收益。但是,活动带来的新用户中活跃用户的比例虽然较低,但是活跃用户的质量较高,用户黏性、付费转化率、付费金额、次数等均高于自然流入的用户。说明活动期间的营销行为起到了很好的拉动消费的作用,大大刺激了新玩家充值和消费。

所以,本次活动起到了很好的拉新和付费转化作用,从短期的数据来看为游戏带来了很多高质量用户付费转化、收入等都有所提高。活动效果的好坏跟时间选择也有很大关系,重要节假日做活动能够放大活动效果,毕竟可以借到东风,事半功倍。今年的春节,在疫情阴霾的笼罩之下却也带来了各大游戏的爆炸式增长,影视行业的寒冬却成了很多游戏最好的“春节档”。需要注意的是,在业务场景中,活动之前都会事先埋点,以便精准区分玩家来源,是自然流入还是活动导入,而且除了评价短期效果,还要追踪活动导入用户的长期留存、LTV等。除了单次的活动效果分析,还要做一些活动之间的对比,以便确定什么样的活动才更适合本游戏。

某策略游戏(SLG)数据分析:新增、付费和活动效果评估相关推荐

  1. 【每日一文】《数据分析:如何分析活动效果?》

    原文链接:数据分析:如何分析活动效果? 1.活动评估的常见错误 所有以评估/评价/判断作为动词的问题,答案只有一种:"好or坏". 所以一定要有结论,切忌没有结论,只是分析过程.分 ...

  2. 多场景‘‘ 项目‘‘!!! 实战 (游戏数据) 数据分析必看!!!!!

    游戏数据分析 学习目标 知道游戏行业关键数据指标 掌握ARPU, ARPPU等指标的计算方法 一.游戏行业关键数据指标 1.1 运营数据 激活数据 总激活码发放量.总激活量.总登录账号数 激活率.激活 ...

  3. 今天开始做战斗,回合制战斗代码实现第三篇,特殊的回合制游戏Slg(策略战棋)

    喜欢玩火焰纹章吗?[这个是我最喜欢的游戏]fc时期放假的时候,可以一次玩一天的游戏,梦幻模拟战,最早接触的电脑游戏<天使帝国>(我这个人比较奇怪,人家都是先玩红警,我最早接触的游戏除了48 ...

  4. 野蛮时代SLG数据分析报告

    项目背景 <野蛮时代>(Brutal Age)是一款风靡全球的SLG(策略)类型手机游戏.准确了解每个玩家的价值和产品道具使用效果,对游戏的广告投放策略和高效的运营活动具有重要意义,有助于 ...

  5. 移动游戏运营数据分析指标:用户获取,用户活跃,用户生命周期

    一.用户获取(Acquisition) AARRR模型指出了移动游戏运营两个核心点: 1)     以用户为中心,以完整的用户生命周期为线索 2)     把控产品整体的成本/收入关系,用户生命周期价 ...

  6. 某策略游戏公测期运营情况分析报告-基于python

    某策略游戏测试阶段运营情况分析报告-基于python 背景 了解数据 字段含义 加载必要的库 读取数据 查看数据类型和数据结构 统计缺失值 删除重复数据 游戏总体情况 注册人数变化 活跃用户数变化 活 ...

  7. 从零开始的游戏运营数据分析生活?如何构建数据分析的逻辑框架?

    5月30日,数数课堂特邀盛趣游戏数据分析专家黎湘艳老师坐镇第五期直播. 黎湘艳老师向学员们分享了历经超50多款产品沉淀下来的数据分析思维,让大家对数据分析的岗位理解从一个日常节点,展开成为可以预测产品 ...

  8. NEO FANTASY:回合制策略游戏在ACGN文化与GameFi中的新探索09-07

    导读:在去年,知名链游综合发行平台 NEXTYPE 与其合作伙伴 GND STUDIO 联手开发了一款区块链游戏 NEO FANTASY,该游戏不仅在美术视觉上下了较大的功夫,并且游戏构建了一套较为创 ...

  9. 网页策略游戏《绝地战争》完整源码下载

    绝地战争网页策略游戏源码,服务端用java,前端用flash as3,解压后701mb 战争>宏大的陆空作战战场.国战系统.兵种之间的相克关系,是战斗更加变化多端,野地建设.殖民系统推动玩家的城 ...

  10. 4X 策略游戏的制胜之道

    Google Play 的开发者增长顾问 Howard Chen 和来自 Scopely 的副总裁兼总经理 David Eckleberry 在 Google 的 Apps, Games, & ...

最新文章

  1. sqlite 0转换为bit_DA转换实例
  2. Tree Operations 打印出有向图中的环
  3. 一个简单的GridView分页
  4. Istio 将被捐赠给开源基金会 | 云原生生态周报 Vol. 47
  5. 微电网日前优化调度 。算例有代码(1)
  6. k8s包管理器helm_eShopOnContainers 知多少[10]:部署到 K8S | AKS
  7. html 滤镜兼容,CSS3 中各种滤镜介绍和兼容性说明 - 文章教程
  8. c语言函数调用用法大全,C语言函数
  9. 【笔记】【机器学习基础】非负矩阵分解
  10. hprose for java 教程_Hprose for Java怎么使用?Hprose for Java使用教程
  11. 手机如何卸载android,怎样删除手机自带软件(安卓手机自带软件怎么卸载)
  12. yocto-poky下目录结构分析
  13. 中秋节到了我给大家用python做一个月饼
  14. 病毒HEUR:Trojan-Downloader.Win32.Generic
  15. linux高性能服务器编程书本总结
  16. 漫步者的蓝牙耳机和南卡耳机哪个好?半入耳式耳机对比!
  17. VSCode编辑器中对PHP语言的支持
  18. 新星计划 Electron+vue2 桌面应用 2 搭建及运行
  19. 水平集详解与代码分析一
  20. PLMN=46004是中国移动的SIM卡

热门文章

  1. 宽带拨号连接显示被远程计算机终止
  2. 仿苹果手机_仿iphone12充电动画下载-仿iphone12充电动画软件下载 v1.1
  3. 基于腾讯人口迁徙数据的全国城市网络结构特征分析
  4. linux 脚本 pause,Linux Shell脚本pause命令
  5. Datawhale组队学习周报(第042周)
  6. 伦敦时间现在几点_英国伦敦现在时间是几点
  7. POJ 3097 Falling Ice 笔记
  8. html p标签嵌套a,HTML标签嵌套规则详细归纳适合新手朋友
  9. linux系统课程ubuntu视频教程
  10. 计算机专业拜年语,适合拜年发的朋友圈祝福语:过年拜年的说说