R&Python玩家诉求词云分析

作者:Fish

http://www.gamedas.com

一、数据爬虫

在实际工作中,数据的来源不能局限于自家的数据库或者成型的后台,在做某些市场分析或是竞争对手开服节奏分析的情况下,对竞争对手数据的获得显得更为至关重要,本文就以获取某大平台开服数据作为一个案例,简要的介绍另一种获取数据的方法,网络爬虫技术。

何为网络爬虫,爬虫是一个自动提取网页的程序,为搜索引擎在万维网上下载网页,是搜索引擎的重要组成部分。简单的讲就是从一个或若干个初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的某些停止条件。

本文利用爬虫收集各大平台开服数据列表上的相关数据,减去了在收集开服数据的繁琐,以下就是一个简单爬虫及正则的例子,从某知名页游平台上抓取开服数据。爬起中文数据常有的问题就是不规格的编码模式,这需要在程序的编写过程中注意编码转换。

在此之前简要的讲一下获取数据的另一个重要内容,正则表达式。正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。正则表达式元字符及语法可以在http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx详细查阅。

使用python编写爬虫程序,导入相应的模块urllib2,使用urlopen下载网页,在网页中使用正则获得想要获得相应的数据。

简要的介绍urllib2模块中用到的方法,

urllib.urlopen(url[, data[, proxies]]) :

url: 表示远程数据的路径

data: 以post方式提交到url的数据

proxies:用于设置代理

urlopen返回对象提供方法:

read() , readline() ,readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样

info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息

getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到

geturl():返回请求的url

import urllib2

import re

msg=urllib2.urlopen('http://www.****.com/').read()

res=re.findall('tr>[\s\S]*?target=\"_blank\" class=\"cred\">(.*?)</a></td[\s\S]*?target=.*?class=.*?>(.*?)</a></td>[\s\S]*?<td >(.*?)</td>',msg)

for res1 in res:

for res2 in res1

print res2.decode('utf-8')

用MySQL储存数据,先要在自己的数据库里建立一个空表,这里我建立了一个名为KFdata的数据库,表名为data_one,相应的在python中导入相应的MySQL模块,并与相应数据库连接,将数据写入数据库。

import MySQLdb

db=MySQLdb.connect(host="localhost",user="root",password="123456",db="KFdata",use_unicode=1,charset='utf-8')

cursor=db.cursor()

for i in range(20):

cursor.execute("insert into data_one values(%s,%s,%s,%s,%s,%s,%s,%s)",(id[i],'h',index[i],time1[i],size[i],hit[i],lz[i],title1[i]))

二、玩家诉求词云分析

在实际游戏运营工作中,游戏从业人员除了关注游戏体验,游戏各系统设计,运营活动,游戏数据表现等等以外,玩家反馈及玩家诉求也是各位同行重点关注的内容。时下这种客服机制难以支撑运营策划人员了解玩家诉求的需求;由于玩家抵触性,运营成本受限,地域受限,时间受限等等原因,运营策划人员也难以通过自身主动了解来满足这一需求。Fish旨在介绍一种简便的方法(词云分析)有效的解决这一困境,不单单让玩家体验游戏,也能更好的让玩家诉求成为游戏版本策划,运营活动策划的考虑因素。

  1. 问题背景:从玩家评论中,获得玩家诉求中的关键词,进而了解玩家情感,玩家需求
  2. 数据获取:借助Python强大的爬虫模块(urllib2&Tornado),抓取9游上海岛奇兵(http://www.9game.cn/hdqb/)的玩家评论数据(1000条)。

简单代码如下:

#!/usr/bin/python

#coding:utf-8

import tornado.httpclient

import re

import pandas as pd

import sys

reload(sys)

sys.setdefaultencoding('utf8')

comment_utf8 = []

url='http://www.9game.cn/tpl/pc/common/commentajax.html?count=1000&total=10003&gameid=539038&platform_id=2&offset=20&isAjax=1'

http_header = {'User-Agent':'Chrome'}

http_request = tornado.httpclient.HTTPRequest(url=url,method='GET',headers=http_header)

http_client = tornado.httpclient.HTTPClient()

http_response = http_client.fetch(http_request)

body = http_response.body

commentId=re.compile('<li commentId=\"(.*)\">').findall(body)

comment_time=re.compile('<span class=\"time\">(.*)<\/span>').findall(body)

comment=re.compile('<p class=\"text\">(.*)<\/p>').findall(body)

for item in comment:

item.decode('utf8')

comment_utf8.append(item)

result = pd.DataFrame([commentId,comment_time,comment]).T

print result

result.to_csv(r'C:\Users\Administrator\Desktop\fish\short.csv')

  1. 数据简单描述

利用R强大的描述统计能力,获得近期玩家评论趋势

由上图可见,海岛奇兵的评论数每天保持在20以上,说明这款游戏在上线将近一年之后仍保持这玩家高关注度。

  1. 分词分析&词云分析

借助强大的数据分析语言R,及其丰富的统计分析工具包,进行文本分词及词云分析,此处会使用到Rwordseg包及wordcloud包。安装这两个包还是挺麻烦的,如果有兴趣的同学遇到什么麻烦可以加入Gamedatas游戏分析群(90342017)咨询Fish。

部分R代码如下:

f_cut <- function(x) {

library(Rwordseg)

unlist(strsplit(segmentCN(x, nature = T), " "))

}

word_cut <- function(x, n = 1) {

x <- gsub("[a-z]|\\.", "", x)

x[nchar(x) > n]

}

comment.words <- lapply(comment, f_cut)

words <- lapply(comment.words, word_cut, 1)

# 去掉words词汇量为0的文本

cw.len <- unlist(lapply(words, length))

short2 <- short[cw.len > 0, ]

words2 <- words[cw.len > 0]

cw.len <- cw.len[cw.len > 0] #8028

# 词频统计

all.words <- unlist(words2)

freq <- sort(table(all.words), decreasing = T)

words.name <- names(freq)

words.freq <- freq[]

sum(words.freq[1:50])/sum(words.freq)

# 词长至少为1

w3 <- all.words[nchar(all.words) > 1]

f3 <- sort(table(w3), decreasing = T)

w3.name <- names(f3)

w3.freq <- f3[]

par(mar = c(0, 0, 3, 0), bg = "black")

wordcloud(words.name, words.freq, scale = c(5, 1.5), min.freq = 1, max.words = 100, colors = rainbow(130))

title(main = "评论出现频率最高的100个词汇", col.main = "red")

结果如图:

从词云分析的结果中可以看出,“好玩”这一词汇在玩家评论中曝光程度最高,达到152次,在出现频数最高的词汇中,褒义词居多。而“流量”,“Wifi”这种词汇的出现也不容忽视,其频数也分别达到了16和12次,侧面反映了玩家在体验过程中存在受网络因素的影响。“2275866599”这一词汇的出现,也反映了在实际评论信息中存在这水军,噪声信息这一因素,可以在处理数据时做剔除处理 。

就此,这样一个分析玩家诉求的思路就阐述完毕了,希望能在实际工作中帮助到运营策划人员了解玩家诉求。

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2015-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据派THU

数据蒋堂 | 存储过程的利之弊

来源:数据蒋堂 作者:蒋步星 本文长度为2240字,建议阅读5分钟 本文通过剖析存储过程的优点,探查存储过程的潜在风险及应用场景。 存储过程是数据库领域中应用非...

1858
来自专栏猿人谷

一天一点学linux

随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起。就像是战争,你有勇气战胜一切敌人,但你...

1896
来自专栏华章科技

以朋友圈为例,腾讯资深架构师揭秘鹅厂大数据平台是怎样运营的

导读:本文将从构成运营成本的主要运营资源(设备资源、带宽资源、专线资源)出发,以实际案例分别阐述精细化技术运营实施的要点。

1525
来自专栏张善友的专栏

千万级规模高性能、高并发的网络架构经验分享

主 题 :INTO100沙龙 时间 :2015年11月21日下午 地点 :梦想加联合办公空间 分享人:卫向军(毕业于北京邮电大学,现任微博平台架构师,先后在微软...

3806
来自专栏腾讯移动品质中心TMQ的专栏

【探索式测试基础系列】初恋的味道

在学习探索式测试的过程中,也会有酸甜苦辣,只有了解它的人才知道这种味道。不妨和探索测试一起再回味一下初恋的味道。

1.4K10
来自专栏青枫的专栏

软件开发文档介绍

532
来自专栏顶级程序员

程序员必须遵守的8大准则

再确认测试代码前,先找别人帮你检查下是否无误。在别人做之前尽量检查出bug并且将其处理好。代码审查最重要规则是对即将提交的代码中查找问题——你需要做的就是确认代...

1024
来自专栏DevOps时代的专栏

无服务器化的微服务持续交付

前言 我在刚进入 ThoughtWorks 的时候就做微服务,当时不知道什么叫做微服务,只是我们通过一个小的技术应用替换原先的大应用的一个部分,当时只是做一个解...

2306
来自专栏互扯程序

千万级规模高性能、高并发的网络架构经验分享

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

1206
来自专栏idba

提问的那些事儿

工作7年了,接触了很多开发和其他岗位的同事 ,遇到各种各样的问题。求助过他人也帮别人解决过问题,在解决问题的过程中,合理的提问方式等于事半功倍,提出问题的同...

881

扫码关注云+社区