1

魔兽世界大数据分析

腾讯近日市值亚洲登顶,游戏收入保持高速增长是主要原因之一,而游戏市场的欣欣向荣在可见的未来也比较明朗。IHS Technology预测2015年全球游戏产业规模为920亿美元,超过了电影产业(620亿美元)和音乐产业(180亿美元)的总和,占据了泛娱乐市场中最大的份额。《2015-2016中国泛娱乐产业发展白皮书》指出,游戏2015年已实现产值1407亿元。

为了更好地运营游戏,大数据分析也被引入了游戏开发生命周期。微软利用Hadoop大数据分析Halo玩家数据,用来快速统计全球玩家锦标赛名次、根据玩家游戏行为发送定制化的电子邮件来提高玩家留存、基于玩家偏好来更新战斗地图等等。Supercell运用Hadoop大数据分析来指导新特性开发、调整游戏平衡度等来保证Clash of Clans时刻保持在畅销榜上。

不知不觉魔兽世界7.0都已经上线了,应个景我们将分享魔兽世界的玩家行为数据分析方法,也算是个事件营销 🙂

根据Yeng-Ting Lee等发表的World of Warcraft Avatar History Dataset论文,玩家行为数据分析至少可以带来以下好处:

  1. 预测玩家流量以便充分准备服务器资源防止用户排队。
  2. 结合网络、系统、用户行为来度量游戏服务QoS。
  3. 检查自动脚本机器人,防止因为作弊导致平衡性受损。

总之,数据分析的目的是提高游戏质量以确保玩家留存。

为了更好地对玩家行为数据分析,论文提供了World of Warcraft Avatar History数据集,收集了台湾希望之光服务器2006、2007和2008三年的部落方数据,总共91065个角色供667032个会话。Lee收集数据的方法特别巧妙,那就是在游戏里面创建一个角色,然后通过Lua脚本来获取游戏角色数据——本质上就是一个收集情报的机器人。

为了使用天算大数据平台分析用户行为,只需要把行为数据上传至百度对象存储,然后通过百度MapReduce提供的Hue应用来分析就是了。环境配置请参考使用百度开放云分析网站日志一文。

首先对把原始数据建立外表:

DROP TABLE IF EXISTS WowAvatarRawData;
CREATE EXTERNAL TABLE WowAvatarRawData
(
    dummy1 int,
    querytime string,
    querynumber int,
    avatarid int,
    guild int,
    level int,
    race string,
    class string,
    zone string,
    dummy2 string,
    dummy3 int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 'bos://datamart/wowavatar/';

为了加快查询速度,把数据以ORC格式存储在本地HDFS:

DROP TABLE IF EXISTS wowavatardata;
CREATE TABLE wowavatardata
(
    querytime timestamp,
    avatarid int,
    guild int,
    level int,
    race string,
    class string,
    zone string
)
STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY");

然后导入数据,这样速度会快很多:

INSERT OVERWRITE TABLE wowavatardata
SELECT
    querytime,
    avatarid,
    guild,
    level,
    race,
    class,
    zone
FROM wowavatarrawdata

好了,现在可以做些统计了。首先从观察玩家上线的上线习惯:

SELECT hour(querytime), count(*)
FROM wowavatardata
GROUP BY hour(querytime)

果然夜猫子居多,甚至玩到凌晨,所以晚上一定要保证服务器资源,而运维最好集中在上午:

wow-avatar-analytics-01

查询用户平均在线时间:

SELECT length, COUNT(avatarid) AS number
FROM
(
  SELECT avatarid,
         CEIL(COUNT(*) / 6 / COUNT(DISTINCT DATE(querytime))) AS length
  FROM wowavatardata
  GROUP BY avatarid
) c
GROUP BY length
ORDER BY length
DESC

注意,以上是按照用户曾经上线的天为单位统计的,不上线的那些天不算。可见,绝大多数用户平均在线时长为1至2小时还稍微健康些,但是仍然有相当部分玩家平均在线4至5小时,这是给暴雪打工的节奏么……了解用户的游戏时间后,可以设计相应的按需或者包月等收费模式。

wow-avatar-analytics-02

下面看看玩家在虚拟世界中角色的喜好:

SELECT
    race,
    class,
    COUNT(*) AS number
FROM wowavatardata
GROUP BY race, class
ORDER BY number
DESC
LIMIT 19

部落方面,亡灵仍然是玩家的最爱,战士、术士、牧师比例最高;兽人比例最少,几乎全部集中在战士和猎人上:

wow-avatar-analytics-03

职业方面,果然法爷天下第一:

wow-avatar-analytics-04

除了这些数据统计,Tarng在On Prophesying Online Gamer Departure中提出了预估玩家流失的模型,对于骨灰级玩家,能够在两个月前就能够以80%的准确率预判玩家停止续费的决定以便尽早努力挽回客户,以后有机会再分享。

时间过得真快,遥想当年也曾与好基友一起金戈铁马为了联盟!被暴风城的豪迈与铁炉堡的雄浑深深打动过:

wow-avatar-analytics-05

天堂向左,战士向右!为了联盟!

 



张 琪

One Comment

  1. 游戏产业运营的成本日益高涨,数据驱动作用也日益显现,感谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注