首页 > 编程语言 > 详细

利用python进行游戏用户行为分析

时间:2021-03-04 18:59:32      阅读:31      评论:0      收藏:0      [点我收藏+]
一、数据描述
《野蛮时代》(Brutal Age)是一款风靡全球的SLG类型手机游戏。根据App Annie统计,《野蛮时代》在12个国家取得游戏畅销榜第1,在82个国家取得游戏畅销榜前10。准确了解每个玩家的价值,对游戏的广告投放策略和高效的运营活动(如精准的促销活动和礼包推荐)具有重要意义,有助于给玩家带来更个性化的体验。
二、分析目的
希望利用玩家在游戏内前七日的行为数据,对玩家日后的一个价值进行一个简单的评估,对用户运营提供数据支撑。
三、数据获取
1、数据来源
DC竞赛-大数据竞赛平台?js.dclab.run
2、数据理解
整个数据集共828934条记录,108个字段,此处仅选取分析中用到的字段进行解释说明。
字段说明: user_id:用户编码,用户唯一标识 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:玩家对玩家次数 pve_battle_count:玩家对机器次数 avg_online_minutes:日均在线时间 pay_price: 消费金额 pay_count:消费次数
四、数据清洗
本次分析是利用python及其第三方库:pandas、numpy和matplotlib完成的。
4.1 数据导入
#导入相应的第三那方库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import pickle
import seaborn as sns
import re
from wordcloud import *
%matplotlib inline
mpl.rcParams[font.sans-serif] = [SimHei]
mpl.rcParams[axes.unicode_minus] = False

#读取数据
data = pd.read_csv(D:\Dataanalysis\data.csv)

#查看前5行
data.head()
技术分享图片
技术分享图片
共有828934条数据记录。
4.2 重复值处理
#以user_id为维度,删除重复数据,并统计用户总数

print(用户总数:,len(data.drop_duplicates([user_id])))

用户总数:828934
去重前和去重后的记录数一样,证明没有重复值。
4.3 缺失值处理
#检查是否有空值

print(data.isnull().any().any())
False
检查数据是否有空值返回False,说明数据完整。
五、数据分析
5.1 用户注册分析
from pandas import to_datetime
from datetime import datetime
reg_user = data[[user_id,register_time]]
reg_user.head()

#将注册时间转化为日期格式
reg_user[register_time] = to_datetime(reg_user.register_time,format=%Y/%m/%d)
reg_user[register_time]=reg_user.register_time.apply(lambda x: datetime.strftime(x,"%Y-%m-%d"))

#计算每天的注册人数
reg_user = reg_user.groupby([register_time]).user_id.count()

#可视化
fig = plt.figure(figsize=(10, 8))
plt.plot(reg_user)
plt.xticks(rotation=90)
plt.title(用户注册分布图)
plt.show()

 


技术分享图片
通过可视化分析可知,在3月9日到3月11日期间注册人数达到高峰,推测这期间广告的推广促销力度比其它时段更大。
5.2 用户付费情况分析
5.2.1 付费率:
付费率 = 付费用户/活跃用户
活跃用户:每日平均游戏时长大于30分钟
#活跃用户
act_user = data[data[avg_online_minutes]>=30]

#付费用户
pay_user = data[data[pay_price]>0]

#付费率
pay_user_rate = pay_user[user_id].count()/act_user[user_id].count()
print(付费率: %.2f %(pay_user_rate))
付费率: 0.31
5.2.2 ARPU(平均每用户收入)
ARPU = 玩家总付费金额 / 总活跃人数
#玩家总付费金额
pay_sum = data[pay_price].sum()

#ARPU
ARPU = pay_sum / act_user[user_id].count()
print(ARPU: %.2f %(ARPU))

ARPU: 8.86

5.2.3 ARPPU(平均每付费用户收入)

ARPPU = 玩家总付费金额 / 总付费人数
#ARPPU
ARPPU = pay_sum / pay_user[user_id].count()
print(ARPPU: %.2f %(ARPPU))

ARPPU: 28.49

手游市场的平均ARPU在5元左右,该手游的ARPU为8.86元,高于平均水平,付费率达到了31%,ARPPU为28.49,可以看出该手游的玩家很愿意在游戏中充值,后续需要进一步评估付费用户的价值,针对性的制定运营策略。

5.2.4 各个等级玩家的付费情况
#根据要塞等级进行分类
user_grade = data.groupby([bd_stronghold_level]).user_id.count()
user_grade = data[[user_id,bd_stronghold_level,pay_count,pay_price]]

#通过数据透视表汇总各等级人数分布,总付费次数,总菲菲金额
table = pd.pivot_table(user_grade,index=[bd_stronghold_level],values=[user_id,pay_count,pay_price],aggfunc={user_id: count,pay_count: sum,pay_price: sum})

user_pay = pd.DataFrame(table.to_records())

#计算各等级付费人数
user_count = user_grade[user_grade[pay_price]>0].groupby(bd_stronghold_level).user_id.count()
user_pay[user_count] = user_count
user_pay.head()

#计算等级付费转化率,等级人均付费次数,等级人均付费金额
user_pay[pay_rate] = user_pay.user_count / user_pay.user_id
user_pay[user_avgcount] = user_pay.pay_count / user_pay.user_count
user_pay[user_avgmoney] = user_pay.pay_price / user_pay.user_count

#修改列名
user_pay.columns = [要塞等级,付费次数,付费总额,玩家人数,付费人数,付费转化率,人均付费次数,人均付费总额]
#调整列名
user_pay = user_pay[[要塞等级,付费次数,付费总额,玩家人数,付费人数,付费转化率,人均付费次数,人均付费总额]]
user_pay
技术分享图片
可视化
  • 要塞等级和付费转化率的关系
x = user_pay[要塞等级]
y = user_pay[付费转化率]
fig = plt.figure(figsize=(10,8))
plt.plot(x,y,ls=-,lw=2)
plt.xticks(x,range(0,len(x),1))
plt.grid(True)
plt.title(要塞等级和付费转化率的关系)
plt.show()

技术分享图片
  • 要塞等级和人均付费金额的关系
x = user_pay[要塞等级]
y = user_pay[人均付费总额]
fig = plt.figure(figsize=(10,8))
plt.plot(x,y,ls=-,lw=2)
plt.xticks(x,range(0,len(x),1))
plt.grid(True)
plt.title(要塞等级与人均付费金额的关系)
plt.show()
技术分享图片
  • 要塞等级和人均付费次数的关系
x = user_pay[要塞等级]
y = user_pay[人均付费次数]
fig = plt.figure(figsize=(10,8))
plt.plot(x,y,ls=-,lw=2)
plt.xticks(x,range(0,len(x),1))
plt.grid(True)
plt.title(要塞等级与人均付费次数的关系)
plt.show()
技术分享图片
  • 处于各个要塞等级的玩家人数
x = user_pay[要塞等级]
y = user_pay[玩家人数]
fig = plt.figure(figsize=(10,8))
plt.bar(x,y)
plt.xticks(x,range(0,len(x),1))
plt.title(各个要塞等级的玩家人数)
plt.show()
技术分享图片
通过观察付费转化率和要塞等级的关系可以发现,9级时付费转化率为26%,10级时的付费转化率已经接近60%,且在14级之后的玩家, 付费转化率达100%。观察人均消费总额和人均消费次数可以发现,10级之后,两项指标也同时呈现显著的增长。
然而观察要塞等级达到人数的柱形图可以发现,大量的用户集中在10以下,因此游戏的运营方向应该是如何是用户平滑的达到10级,可以进一步通过 一系列数据或者通过游戏内发放问卷调查的方式,了解用户在10级以下时遇到的困难和问题,进一步优化游戏内容,增强引导用户提升要塞等级。
可以通过人均消费总额看出,在18级以后人均消费额的曲线出现了陡增,该阶段的用户应该已经了解了游戏的核心玩法,因此可以对该部分用户加强消费引导, 提升游戏的收入
5.3 用户的资源使用情况分析
该游戏充值主要获得以下几种物品:资源类(木头、石头、象牙、肉、魔法等),加速券类(通用加速、建筑加速、科研加速、训练加速、治疗加速等)。
根据玩家充值金额大小, 将10级以上玩家分为高氪玩家(充值金额高于500元)和低氪玩家(充值金额低于500元大于0元),分别统计两种玩家的各类资源使用情况,最后绘图
#对10级以上的玩家进行分类
sup_user = data[(data[pay_price]>=500)&(data[bd_stronghold_level]>=10)]
sub_user = data[(data[pay_price]<500)&(data[bd_stronghold_level]<10)]
5.3.1 玩家各类资源使用情况
#制作资源相关数据集
wood_avg = [sup_user[wood_reduce_value].mean(),sub_user[wood_reduce_value].mean()]
stone_avg = [sup_user[stone_reduce_value].mean(),sub_user[stone_reduce_value].mean()]
ivory_avg = [sup_user[ivory_reduce_value].mean(),sub_user[ivory_reduce_value].mean()]
meat_avg = [sup_user[meat_reduce_value].mean(),sub_user[meat_reduce_value].mean()]
magic_avg = [sup_user[magic_reduce_value].mean(),sub_user[magic_reduce_value].mean()]
df = {高氪玩家: [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 = pd.DataFrame(df,index =[木头,石头,象牙,,魔法]).round(2)

#可视化
resource.plot(kind=bar,figsize=(10,8),legend=True,logy=True)

x = np.arange(len(resource.index))
y1 = np.array(list(resource[高氪玩家]))
y2 = np.array(list(resource[低氪玩家]))

for a,b in zip(x,y1):
    plt.text(a,b,b,ha=right,va=bottom)
for a,b in zip(x,y2):
    plt.text(a,b,b,ha=left,va=bottom)
    
plt.title(玩家资源使用量,fontsize=20)
plt.xlabel(资源种类,fontsize=18)
plt.ylabel(资源使用量,fontsize=18)
plt.tick_params(labelsize=14)
plt.show()
技术分享图片
高消费玩家和低消费对木头、石头、肉的消耗都较大,魔法的消耗都较小,而在象牙的消耗上,高消费玩家和低消费玩家的消耗差距较大。因为象牙资源在游戏中的用途相对高端一些,而木头和肉类是游戏发展过程中必需的资源。因此高氪玩家在资源上的平均使用量要远远高于低氪玩家,象牙资源最能够体现出一个玩家在游戏上的消费水平。
5.3.2 玩家加速券使用情况
#制作加速券相关数据集
general_avg = [sup_user[general_acceleration_reduce_value].mean(),sub_user[general_acceleration_reduce_value].mean()]
building_avg = [sup_user[building_acceleration_reduce_value].mean(),sub_user[building_acceleration_reduce_value].mean()]
reaserch_avg = [sup_user[reaserch_acceleration_reduce_value].mean(),sub_user[reaserch_acceleration_reduce_value].mean()]
training_avg = [sup_user[training_acceleration_reduce_value].mean(),sub_user[training_acceleration_reduce_value].mean()]
treament_avg = [sup_user[treatment_acceleration_reduce_value].mean(),sub_user[treatment_acceleration_reduce_value].mean()]

df = {高氪玩家: [general_avg[0],building_avg[0],reaserch_avg[0],training_avg[0],treament_avg[0]],
     低氪玩家: [general_avg[1],building_avg[1],reaserch_avg[1],training_avg[1],treament_avg[1]]}
acceleration = pd.DataFrame(df, index=[通用,建筑,科研,训练,治疗]).round(2)

#可视化
acceleration.plot(kind = bar, figsize=(10,8),logy=True,legend=True)

x = np.arange(len(acceleration.index))
a = np.array(list(acceleration[高氪玩家]))
b = np.array(list(acceleration[低氪玩家]))

for m,n in zip(x,a):
    plt.text(m,n,n,ha=right,va=bottom)
    
for m,n in zip(x,b):
    plt.text(m,n,n,ha=left,va=bottom)

plt.title(玩家加速券使用情况,fontsize=20)
plt.xlabel(加速券类型,fontsize=18)
plt.ylabel(加速券使用量,fontsize=18)
plt.tick_params(labelsize=14)
plt.show
技术分享图片
两类玩家对对治疗加速券消耗都很小,对通用加速券的消耗差异较大,其他三种加速券消耗差别不大。通过体验游戏了解到加速券的使用,直接影响游戏进程的加快,因此高氪玩家更希望通过加快游戏进程增加游戏体验。
5.3.3 玩家游戏玩法分析
  • 玩家在线时长
#平均在线时长数据
avg_online_time = [sup_user[avg_online_minutes].mean(),sub_user[avg_online_minutes].mean()]

df = {高氪玩家: [avg_online_time[0]],
     低氪玩家: [avg_online_time[1]]}

online_time = pd.DataFrame(df,index=[平均在线时长]).round(2)

#可视化
online_time.plot(kind=bar,legend=True,figsize=(10,8))
x = np.arange(len(online_time.index))
a = np.array(list(online_time[高氪玩家]))
b = np.array(list(online_time[低氪玩家]))

for m,n in zip(x,a):
    plt.text(m,n,n,ha=right,va=bottom,fontsize=12)
    
for m,n in zip(x,b):
    plt.text(m,n,n,ha=left,va=bottom,fontsize=12)
    
plt.xticks(rotation=0)
plt.tick_params(labelsize=14)
plt.title(玩家平均在线时长,fontsize=20)
plt.show()
技术分享图片
  • 玩家pvp情况
#pvp相关数据
pvp_battle_avg = [sup_user[pvp_battle_count].mean(), sub_user[pvp_battle_count].mean()]
pvp_lanch_avg = [sup_user[pvp_lanch_count].mean(), sub_user[pvp_lanch_count].mean()]
pvp_win_avg = [sup_user[pvp_win_count].mean(), sub_user[pvp_win_count].mean()]
data = {高氪玩家:[pvp_battle_avg[0], pvp_lanch_avg[0], pvp_win_avg[0]], 
        低氪玩家:[pvp_battle_avg[1], pvp_lanch_avg[1], pvp_win_avg[1]]}
PVP = pd.DataFrame(data, index = [PVP次数, 主动发起PVP次数, PVP胜利次数]).round(2)

#可视化
PVP.plot(kind=bar,legend=True,figsize=(10,8))
plt.title(玩家pvp对局情况,fontsize=20)
plt.tick_params(rotation=0,labelsize=14)
plt.show()
技术分享图片
  • 玩家pve情况
#玩家pve对局数据
pve_battle_count = [sup_user[pve_battle_count].mean(),sub_user[pve_battle_count].mean()]
pve_lanch_count = [sup_user[pve_lanch_count].mean(),sub_user[pve_lanch_count].mean()]
pve_win_count = [sup_user[pve_win_count].mean(),sub_user[pve_win_count].mean()]

df = {高氪玩家: [pve_battle_count[0],pve_lanch_count[0],pve_win_count[0]],
     低氪玩家: [pve_battle_count[1],pve_lanch_count[1],pve_win_count[1]]}

PVE = pd.DataFrame(df,index=[PVE次数,主动发起PVE次数,PVE胜利次数]).round(2)

#可视化
PVE.plot(kind=bar,legend=True,figsize=(10,8))
plt.title(玩家pve对局情况,fontsize=20)
plt.tick_params(rotation=0,labelsize=14)
plt.show()
技术分享图片
可以看到高氪玩家的平均在线时长时低氪玩家的50倍左右,而高氪玩家的PVP的三项指标数值都在低氪玩家三项指标数值的100倍左右;pve的数值高氪玩家是低氪玩家的30倍左右。
总的来说高消费玩家更愿意投入时间在这款游戏上,它们热衷于pvp玩法,在pve的局数上也多于低消费玩家,因此游戏可以投入较多的精力在pvp的玩法改进上,吸引玩家更多的参与到pvp上,刺激玩家的消费,增加游戏的收入。
六、分析总结
1.该游戏具有较大的用户基数,且新用户注册受游戏活动、游戏推广力度等因素影响较大。
2.该游戏的ARPU为8.86,说明该游戏的盈利能力较高。
3.对于游戏付费情况,两极分化情况十分严重,绝大多数玩家处于10级以内,且付费情况较差,而少数玩家在10级以上,且付费能力强(13级的用户付费转化率接近100%).因此对于如何让大多数玩家平滑过渡到10级,非常的重要。
4.消费习惯上,高消费玩家对象牙和通用加速券的需求远多于一般玩家。
5.在玩家行为上,高消费玩家投入游戏时间更多,它们更热衷于pvp玩法。

利用python进行游戏用户行为分析

原文:https://www.cnblogs.com/noahcocy/p/14481943.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!