标签归档:聚类

电子商务顾客评论的热点话题分析

作者:蔡越 (厦门大学经济学院统计系),郭鹏(厦门数析信息科技有限公司),

方匡南(厦门大学经济学院统计系,厦门大学数据挖掘研究中心)

摘要: 买家的评论文本数据是电子商务领域一种重要的数据形式,通过对其分析,电商卖家可以直接了解顾客对产品的态度与建议,提取顾客关注的热点问题,也可以进行顾客分类,实现精准营销,改进和提高生产和服务等;买家可以提取所关注属性的相关评价,了解舆论情感倾向,提高购物决策效率。但是大数据环境下海量文本的出现给文本数据的有效利用带来了一定的困难,比如结构化处理后的文本数据的高维特性给电子商务文本聚类等分析带来了新的挑战。本文主要研究当词条数目(变量数)远远大于评论文本数(样本数)时如何归纳顾客评论以及提取热点话题。本文抓取了亚马逊中国站热门产品kindle的评论文本,通过惩罚高斯混合模型聚类方法,同时进行文本聚类和有效词条的筛选,实现了大规模评论文本的有效、快速、自动聚类,为后续更加精细的商业分析提供了良好的基础。

关键词:顾客评论;文本分析;聚类;热点话题

继续阅读电子商务顾客评论的热点话题分析

统计词画番外篇(一):谁共我,醉明月?

moon

将军百战身名裂。向河梁、回头万里,故人长绝。易水萧萧西风冷,满座衣冠似雪。正壮士、悲歌未彻。啼鸟还知如许恨,料不啼清泪长啼血。谁共我,醉明月?

这是笔者最喜欢的词人辛弃疾的《贺新郎·别茂嘉十二弟》之下阙,最后一句“谁共我,醉明月”写尽了挚友远去的孤独和寂寞。毫无疑问,词人在生活中有自己的基友闺蜜,那么问题来了,词人之间有没有风格相近的知音来共醉明月?笔者识字不多,读词少,所幸学习统计专业,因此只能简单地用统计方法来浅显地探讨一下这个问题了。

本文的题目是统计词画,显然有统计,有词,有可视之图画。好的,铺垫完毕,正文开始。

继续阅读统计词画番外篇(一):谁共我,醉明月?

新浪微博文本分析初探v0.1

v0.1版本说明:本文发在主站上之后,站友们经常评论代码跑着有问题。经过和lijian大哥等人进行咨询,自己也摸索了一些之后,发现了之前代码非常多的漏洞。因此,给广大站友带来了困扰。在这里我表示万分的抱歉。最近邮箱中收到让我整理代码的需求越来越多。我也非常想整理下,但是由于工作也非常繁忙,所以很难抽出时间。前两天说5.1期间会整理一下代码发出来。但是事实上因为5.1小长假期间我可能无法上网,导致无力更新代码。所以今晚抽时间对代码进行了简单的修改。对本文也进行了一些调整。目前的状况是,基本上到生成待分析的语料库已经没有问题了。聚类分析的模型可以跑出来,但是最终的图画不出来。我暂时也没能找到原因。所以进一步的调整可能要等到5.1过完以后再抽时间来做了。这篇文章我会负责到底的哈。(20130429)

完整代码如下:weibo_analysis

—————————–分割线————————————————-

自从lijian大哥的Rweibo包问世以来,便成了R爱好者们获取新浪微博数据的最为重要的工具。在该包的中文主页上,作者对如何连接新浪微博的API,获取授权,并以此为基础开发应用的原理讲解的非常清楚。对于我这种连基本的网页开发神马原理都一点也不清楚的菜鸟来说,Rweibo是一种非常趁手的获取微博数据的工具。

有了获取数据的工具,对于中文文本分析来说,最重要的是分词。这里使用的分词算法来自中科院 ictclas算法。依然是沾了lijian大哥Rwordseg的光,直接拿来用了。

有了这两样利器,我们便可以来分析一下新浪微博的数据了。我选取的话题是最近热映的国产喜剧电影《泰囧》,在微博上拿到了998条和“泰囧”有关的微博文本。代码如下(以下代码不能直接执行,请首先阅读链接中Rweibo的关于授权帮助文档):

#关键词搜索并不需要注册API
require(Rweibo)
#registerApp(app_name = "SNA3", "********", "****************")
#roauth <- createOAuth(app_name = "SNA3", access_name = "rweibo")
res <- web.search.content("泰囧", page = 10, sleepmean = 10,
           sleepsd = 1)$Weibo

获取了数据之后,首先迫不及待对微博文本进行分词。代码如下(Rwordseg包可以在语料库中自助加入新词,比如下面的insertWords语句):

require(Rwordseg)
insertWords("泰囧")
n = length(res[, 1])
res = res[res!=" "]
words = unlist(lapply(X = res, FUN = segmentCN))
word = lapply(X = words, FUN = strsplit, " ")
v = table(unlist(word))
v = sort(v, decreasing = T)
v[1:100]
head(v)
d = data.frame(word = names(v), freq = v)

继续阅读新浪微博文本分析初探v0.1