热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

某SLG游戏公测期用户与付费分析

这次主要对某SLG游戏的用户及付费进行分析。数据来源为游戏玩家付费金额预测大赛-竞赛信息-DC竞赛一.理解数据下图为数据的部分截图:图1主要关键字有:用

这次主要对某SLG游戏的用户及付费进行分析。数据来源为游戏玩家付费金额预测大赛-竞赛信息-DC竞赛


一.理解数据

下图为数据的部分截图:

图1

主要关键字有:用户ID, 注册时间, 付费金额,要塞(玩家主基地)等级,付费金额等。

将数据导入到Data Frame中:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#导入数据
game = pd.read_csv('D:\\data analysis\\dc-game\\tap4fun\\tap4fun\\tap_fun_train.csv')

查找是否有缺失值,得到结果为False,即没有缺失值:

#查找缺失数据
game.isnull().any().any()


二.清洗数据

去掉用户ID重复的行:

#去重
game = game.drop_duplicates(subset='user_id')

经过清洗后,可以发现总共有2288007条数据


三.分析数据

1.用户分析

首先分析玩家的注册信息,原始数据中给出的是每个玩家注册之后前7日的数据

#总注册人数
len(game['user_id'])

总注册人数为2288007人


接下来观察各个时间段的注册人数分布:

#去掉时间
def drop_time(series):time_list = []for li in series:time_list.append(li.date())return time_list
#每日注册人数分布
reg_user = game[['user_id', 'register_time']]
reg_user['register_time'] = pd.to_datetime(reg_user['register_time'])


reg_user[‘register_time’] = drop_time(reg_user[‘register_time’])


#查看注册分布

reg_user = reg_user.groupby([‘register_time’]).user_id.count()

#画图

plt.style.use(‘dark_background’)

fig = plt.figure(figsize=(14, 10))

plt.plot(reg_user)

plt.title(‘用户注册分布图’)

plt.show()


得到结果如下图所示:

图2

可以发现,在一月下旬迎来了一次注册的高峰,二月下旬又迎来一次注册的小高峰,可能是游戏内部活动吸引了大部分玩家,也可能是该公司对各个手游渠道加大了宣传的力度。但两次高峰过后每天的注册人数相较于高峰前并没有明显增长,对于游戏的整体热度并没有很大提升。


然后,将每日时长超过30分钟的用户划分成活跃用户,表示他们和游戏互动性较高,通过将活跃用户细分,并分析他们的数据,可以让游戏厂商更好地了解用户并且满足用户,使游戏运营活动做到有的放矢。

接下来,利用k-means方法对活跃用户进行细分:

#获取活跃用户(游戏时长大于30分钟小于24小时)

activate_user &#61; data[(data[‘avg_online_minutes’]>&#61;30) & (data[‘avg_online_minutes’]<&#61;24*60)

#选取特征

activate_user_means &#61; activate_user[[‘bd_stronghold_level’, ‘pvp_battle_count’, ‘pve_battle_count’, ‘avg_online_minutes’,

‘pay_count’, ‘pay_price’]]



#对玩家进行分类&#xff0c;将特征近似的分成一类&#xff0c;总共分成三类

estimator &#61; KMeans(n_clusters&#61;3)

res &#61; estimator.fit_predict(activate_user_means)

#每一行数据对应的类

label_pred &#61; estimator.labels_

#每一类的平均值

centroids&#61;estimator.cluster_centers_



#将均值整合成DataFrame

means_data &#61; {‘第一类’: centroids[0],

‘第二类’: centroids[1],

‘第三类’: centroids[2],}

activate_user_means &#61; pd.DataFrame(means_data, index&#61;[‘要塞等级’, ‘pvp次数’, ‘pve_次数’, ‘日均在线时间’,

‘付费次数’, ‘付费金额’])


这三类活跃用户的特征如下表所示&#xff1a;

表1

可以发现&#xff0c;第一类玩家各项指标都较低&#xff0c;可命名为萌新玩家, 样本量为125018&#xff1b;

第二类玩家的各项指标均高于第一类玩家&#xff0c;可命名为中端活跃玩家, 样本量为17893

第三类玩家所有指标都显著高于前两类玩家&#xff0c;可命名为高端死忠玩家&#xff0c; 样本量为149

在对各类用户进行定位后&#xff0c;我们可以给出一些针对性的运营活动&#xff0c;促进玩家留存以及玩家付费


2.付费分析

首先是计算各类付费指标&#xff1a;

付费率&#xff1a;

#付费率&#61;付费人数/活跃用户

pay_user &#61; game[game[‘pay_price’]>0]

pay_rate &#61; pay_user[‘user_id’].count() / act_user[‘user_id’].count()

print(‘付费率为%.2f’ %(pay_rate))


付费率为0.29


ARPU:

#ARPU &#61; 付费金额/活跃人数

arpu &#61; pay_user[‘pay_price’].sum() / act_user[‘user_id’].count()

print(‘arpu为%.2f元’ %(arpu))


ARPU为8.55元


ARPPU:

#ARPPU &#61; 付费金额/付费用户人数

arppu &#61; pay_user[‘pay_price’].sum() / pay_user[‘user_id’].count()

print(‘arppu为%.2f元’ %(arppu))


ARPPU为29.52元


目前较好的手游ARPU超过5元&#xff1b;一般的手游ARPU在3~5元之间&#xff1b;ARPU低于3元则说明表现较差。可见该手游的盈利能力较好。


然后分析不同要塞等级的玩家的付费情况&#xff1a;

#统计各个等级的玩家到达人数&#xff0c;付费人数&#xff0c; 付费次数&#xff0c; 付费总额&#xff0c; 等级付费转化率&#xff0c;

等级人均付费次数&#xff0c; 等级人均付费总额

user &#61; data[[‘user_id’, ‘bd_stronghold_level’, ‘pay_count’, ‘pay_price’]]

#汇总各等级人数分布&#xff0c;总付费次数&#xff0c; 总付费金额&#xff0c;
table &#61; pd.pivot_table(user, index&#61;[‘bd_stronghold_level’], values&#61;[‘user_id’, ‘pay_count’, ‘pay_price’],
aggfunc&#61;{‘user_id’: ‘count’, ‘pay_count’: ‘sum’, ‘pay_price’: ‘sum’})
user_pay &#61; pd.DataFrame(table.to_records())

#汇总各等级付费人数
pay_num &#61; user[user[‘pay_count’]>0].groupby(‘bd_stronghold_level’).user_id.count()
user_pay[‘total_count’] &#61; pay_num

#计算等级付费转化率&#xff0c;等级人均付费次数&#xff0c;等级人均付费总额
user_pay[‘user_payrate’] &#61; user_pay[‘total_count’] / user_pay[‘user_id’]
user_pay[‘user_avgcount’] &#61; user_pay[‘pay_count’] / user_pay[‘total_count’]
user_pay[‘user_avgmoney’] &#61; user_pay[‘pay_price’] / user_pay[‘total_count’]

#修改列名
user_pay.columns &#61; [‘要塞等级’, ‘付费次数’, ‘付费总额’, ‘达到人数’, ‘付费人数’, ‘付费转化率’, ‘人均付费次数’, ‘人均付费总额’]

#重置列名
user_pay &#61; user_pay[[‘要塞等级’, ‘达到人数’, ‘付费人数’, ‘付费次数’, ‘付费总额’, ‘付费转化率’, ‘人均付费次数’, ‘人均付费总额’]]

得到结果如下表所示&#xff1a;

表2

接下来对付费转化率&#xff0c;人均付费次数和人均付费总额进行分析&#xff0c;观察不同等级在这些指标上的差异&#xff0c;从而制定相应的运营方案&#xff1a;

图3 付费转化率


图4 人均付费次数


图5 人均付费总额

通过观察付费转化率可以发现&#xff0c;在10级之后&#xff0c;付费转化率呈现显著增长&#xff0c;在14级之后&#xff0c;趋近于100%。观察人均消费总额和人均消费次数可以发现&#xff0c;在10级之后&#xff0c;两项指标也同时呈现显著的增长。

通过观察各等级人数分布可以发现&#xff0c;绝大部分玩家的要塞等级停留在10级之前&#xff0c;而10级之后的玩家大多数可能都是游戏的核心玩家&#xff0c;所以愿意为游戏付费。因此对于10级之前的用户&#xff0c;可以通过问卷调查&#xff0c;所在等级处的领取任务分析等方式&#xff0c;了解10级以内的玩家对于游戏的评价&#xff0c;以及他们是否对完成任务感到困难。从而帮助他们平滑度过10级&#xff0c;感受到游戏的核心玩法。而对于付费次数和付费总额比较高的等级&#xff0c;比如20-23级&#xff0c;可以加强付费引导&#xff0c;从而提升游戏收入。



最后分析不同玩家的消费习惯

该游戏充值主要获得以下几种物品&#xff1a;资源类&#xff08;木头、石头、象牙、肉、魔法等&#xff09;&#xff0c;加速券类&#xff08;通用加速、建筑加速、科研加速、训练加速、治疗加速等&#xff09;。

根据玩家充值金额大小&#xff0c; 将10级以上玩家分为高氪玩家&#xff08;充值金额高于500元&#xff09;普通玩家&#xff08;充值金额低于500元&#xff09;&#xff0c;分别统计两种玩家的各类资源使用情况&#xff0c;最后绘图


首先分析玩家资源类消费情况

#分成高级和低级玩家

eli_uesr &#61; game[(game[‘pay_price’]>&#61;500) & (game[‘bd_stronghold_level’]>&#61;10)]

nor_user &#61; game[(game[‘pay_price’]《500》) & (game[‘bd_stronghold_level’]>&#61;10)]



#统计两类玩家各自的资源使用情况

wood_avg &#61; [eli_uesr[‘wood_reduce_value’].mean(), nor_user[‘wood_reduce_value’].mean()]

stone_avg &#61; [eli_uesr[‘stone_reduce_value’].mean(), nor_user[‘stone_reduce_value’].mean()]

ivory_avg &#61; [eli_uesr[‘ivory_reduce_value’].mean(), nor_user[‘ivory_reduce_value’].mean()]

meat_avg &#61; [eli_uesr[‘meat_reduce_value’].mean(), nor_user[‘meat_reduce_value’].mean()]

magic_avg &#61; [eli_uesr[‘magic_reduce_value’].mean(), nor_user[‘magic_reduce_value’].mean()]



data &#61; {‘高端玩家’:[wood_avg[0], stone_avg[0], ivory_avg[0], meat_avg[0], magic_avg[0]],

‘低端玩家’:[wood_avg[1], stone_avg[1], ivory_avg[1], meat_avg[1], magic_avg[1]]}

resource &#61; pd.DataFrame(data, index&#61;[‘木头’, ‘石头’, ‘象牙’, ‘肉’, ‘魔法’])

#绘图
plt.style.use(‘dark_background’)
resource.plot(kind &#61; ‘bar’, stacked&#61;True, colormap&#61; ‘PuBu’, figsize&#61;(14, 10))
plt.title(‘玩家资源使用量’)
plt.show()

得到结果如下图所示&#xff1a;


可以发现&#xff0c;相对于其他资源&#xff0c;象牙和魔法类资源的平均使用量较少&#xff0c;木头和肉类的平均使用量较高。高氪玩家和普通玩家在木头和肉类资源上使用差距最小&#xff0c;而在象牙资源的使用上差距最大&#xff0c;是因为象牙资源在游戏中的用途相对高端一些&#xff0c;而木头和肉类是游戏发展过程中必需的资源。所以&#xff0c;高氪玩家在资源上的平均使用量要远远高于普通玩家&#xff0c;象牙资源最能够体现出一个玩家在游戏上的消费水平。


然后分析玩家加速券类的使用情况&#xff1a;

#各类玩家对加速券的使用情况

genral_avg &#61; [eli_uesr[‘general_acceleration_reduce_value’].mean(), nor_user[‘general_acceleration_reduce_value’].mean()]

building_avg &#61; [eli_uesr[‘building_acceleration_reduce_value’].mean(), nor_user[‘building_acceleration_reduce_value’].mean()]

reaserch_avg &#61; [eli_uesr[‘reaserch_acceleration_reduce_value’].mean(), nor_user[‘reaserch_acceleration_reduce_value’].mean()]

training_avg &#61; [eli_uesr[‘training_acceleration_reduce_value’].mean(), nor_user[‘training_acceleration_reduce_value’].mean()]

treament_avg &#61; [eli_uesr[‘treatment_acceleration_reduce_value’].mean(), nor_user[‘treatment_acceleration_reduce_value’].mean()]



data &#61; {‘高端玩家’:[genral_avg[0], building_avg[0], reaserch_avg[0], training_avg[0], treament_avg[0]],

‘低端玩家’:[genral_avg[1], building_avg[1], reaserch_avg[1], training_avg[1], treament_avg[1]]}



acceleration &#61; pd.DataFrame(data, index &#61; [‘通用’, ‘建筑’, ‘科研’, ‘训练’, ‘治疗’])

#绘图

plt.style.use(‘dark_background’)

acceleration.plot(kind &#61; ‘bar’, stacked&#61;True, colormap&#61; ‘Reds’, figsize&#61;(14, 10))

plt.title(‘玩家加速券使用量’)

plt.show()


得到结果如下图所示:


可以发现&#xff0c;通用类加速券的平均使用量最大&#xff0c;而治疗类加速券的平均使用量相比于其他加速券来说非常少&#xff0c;这主要和加速时间长短和使用范围有关。同时&#xff0c;也可以发现&#xff0c;高氪玩家和普通玩家在使用加速券方面的差距非常大。


四.总结

1.该游戏具有较大的用户基数&#xff0c;且新用户注册可能受游戏活动&#xff0c;版本更新的影响较大

2.该游戏的ARPU为8.5元&#xff0c;收入能力较好

3.对于游戏付费情况&#xff0c;两极分化情况十分严重&#xff0c;绝大多数玩家处于10级以内&#xff0c;且付费情况较差&#xff0c;而少数玩家在10级以上&#xff0c;且付费能力强(20级以上用户的付费转化率接近100%).因此对于如何让大多数玩家平滑过渡到10级&#xff0c;非常的重要。

4.高氪玩家在游戏消费上面&#xff0c;对象牙资源&#xff0c;和加速券的使用量远远高于普通玩家。


推荐阅读
author-avatar
撩人的东莞博文
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有