R语言进行网站评论文本数据挖掘聚类

对于非结构化的网站中文评论信息,r的中文词频包可能是用来挖掘其潜在信息的好工具,要分析文本内容,最常见的分析方法是提取文本中的词语,并统计频率。频率能反映词语在文本中的重要性,一般越重要的词语,在文本中出现的次数就会越多。词语提取后,还可以做成词云,让词语的频率属性可视化,更加直观清晰。

比如对于如下的网站评论信息:

通过一系列的文本处理和高频词汇的提取,最后结合聚类,我们可以得到如下的可视化结果。

第一类客户:

第二类

第三类

这是根据某网站成交评论制作的可视化词云,词频的统计,分词和词云的制作都是用R,最后做了聚类,将不同的用户聚成了3个类别。这个图能很直观看到,每个类别的客户的特点。不过这张图中的词语还需要进行优化,因为有些术语或词组可能被拆分成了更小的词语,没有展示出来,为了演示,我就没再花更多时间去优化词库,主要介绍分析的过程与方法。
                                                                                                    pinglun=readLines("E:\\ 手机评论1.txt")
                                                                                                      write.table(pinglun,"E:\\ 手机评论整理.txt")
                                                                                                      pinglun1=read.table("E:\\手机评论整理.txt",sep="|")

# == 文本预处理
res=pinglun1[pinglun1!=" "];
#剔除通用标题
res=gsub(pattern="[專賣店【未拆封順豐】||]+"," ",res);
#剔除特殊词
res=gsub(pattern="[我|你|的|了|是]"," ",res);
#清理文本里的回车!否则每个回车就会被识别成一段文本
res=gsub("\n","",res)
###############
library(rJava);
library(Rwordseg);  

# == 分词+频数统计
words=unlist(lapply(X=res, FUN=segmentCN));
word=lapply(X=words, FUN=strsplit, " ");
v=table(unlist(word));
# 降序排序
v=rev(sort(v));
d=data.frame(word=names(v), freq=v);
# 过滤掉1个字和词频小于100的记录
d=subset(d, nchar(as.character(d$word))>1 & d$freq>=100)  

# == 输出结果
                                                                                                       write.table(d, file="E: \\worldcup_keyword.txt", row.names=FALSE)
#############绘制词汇图####################3
library("wordcloud")
mycolors <- brewer.pal(8,"Dark2")#设置一个颜色系:
wordcloud(d[1:30,]$word,d[1:30,]$freq,random.order=FALSE,random.color=FALSE,colors=mycolors,family="myFont3")
                                                                                                        write.csv(d[1:30,], file="E:\\ 30个keyword.csv", row.names=FALSE)  

############kmeans聚类#######################
res1=res[1:10000]#筛选500个样本做测试
words=unlist(lapply(X=res1, FUN=segmentCN));
word=lapply(X=words, FUN=strsplit, " ");
v=table(unlist(word));
# 降序排序
v=rev(sort(v));
d=data.frame(word=names(v), freq=v);
# 过滤掉1个字和词频小于100的记录
d=subset(d, nchar(as.character(d$word))>1 & d$freq>=100)  #获得高频词汇

rating=matrix(0,length(res1),dim(d)[1])#生成评价矩阵
colnames(rating)=d[,1]#给矩阵列命名

for(i in 1:length(res1)){
  words=unlist(lapply(X=res1[i], FUN=segmentCN));#对每一条记录分析获得词频
  word=lapply(X=words, FUN=strsplit, " ");
  v=table(unlist(word));
  # 降序排序
  v=rev(sort(v));
  dd=data.frame(word=names(v), freq=v);
  index=intersect(dd[,1],colnames(rating))#找到每条记录中拥有的高频词汇
  if(length(index)==0)next;
  for(j in 1:length(index)){
    jj=which(dd[,1]==index[j])
    rating[i,colnames(rating)==index[j]]=dd[jj,2][[1]]#高频词汇的数量赋值到评价矩阵
  }
}
                                                                                                      write.table(rating, file="E:\\ 评价矩阵.txt", row.names=FALSE)  

kmeans(rating,5)#对评价矩阵进行k均值聚类

                                                                                                      result=read.csv("E:\\ 聚类结果.csv")
colnames(result)=d[1:30,1]

###分类别
c1=result[result[,31]==1,]
c2=result[result[,31]==2,]
c3=result[result[,31]==3,]

freq1=apply(c1,2,sum)[-31]
freq2=apply(c2,2,sum)[-31]
freq3=apply(c3,2,sum)[-31]

library("wordcloud")
mycolors <- brewer.pal(8,"Dark2")#设置一个颜色系:
wordcloud(colnames(result)[-17],freq1[-17],random.order=FALSE,random.color=FALSE,colors=mycolors,family="myFont3")

wordcloud(colnames(result)[-17],freq2[-17],random.order=FALSE,random.color=FALSE,colors=mycolors,family="myFont3")

wordcloud(colnames(result)[-17],freq3[-17],random.order=FALSE,random.color=FALSE,colors=mycolors,family="myFont3")

######算法比较
y=rbind(matrix(rnorm(10000,mean=2,sd=0.3),ncol=10),matrix(rnorm(10000,mean=1,sd=0.7),ncol=10))#生成两类随机数合并
colnames(y)=c(paste("y",1:10))#变量名

#Kmeans算法聚类
cl=kmeans(y,2)
pch1=rep("1",1000)#类标号
pch2=rep("2",1000)
plot(y,col=cl$cluster,pch=c(rep("1",1000),rep("2",1000)),main="kmeans算法聚类图")#每个类样本
points(cl$centers,col=3,pch="*",cex=3)#每个类中心

原文地址:https://www.cnblogs.com/tecdat/p/11214920.html

时间: 2024-11-09 10:35:26

R语言进行网站评论文本数据挖掘聚类的相关文章

R语言csv与txt文本读入区分(sep参数)

R语言csv与txt文本读入区分 R语言用来处理数据很方便,而处理数据的第一步是把数据读入内存空间,平时最常用的文本数据储存格式有两种: 一种是CSV(逗号分隔符文本)另一种是TXT(Tab分隔符或空格分隔符),有时候读这两种文件格式读入容易混淆. 1,我们读入数据的时候,一般写文件名有两种方式: (1)将储存数据的文件所在的目录设置为工作目录(setwd("file path")),读文件时只需要写文件名即可 1 setwd('C:/Data/mydata') 2 data <

R语言做文本挖掘 Part3文本聚类

Part3文本聚类 分类和聚类算法,都是数据挖掘中最常接触到的算法,分类聚类算法分别有很多种.可以看下下面两篇文章对常见的分类聚类算法的简介: 分类算法:http://blog.csdn.net/chl033/article/details/5204220 聚类算法:http://blog.chinaunix.net/uid-10289334-id-3758310.html 文本分类聚类会要用到这些算法去实现,暂时不用深究算法细节,R中已经有成熟的可以直接调用的这些算法了.大概说下分类和聚类的差

R语言学习路线和常用数据挖掘包(转)

对于初学R语言的人,最常见的方式是:遇到不会的地方,就跑到论坛上吼一嗓子,然后欣然or悲伤的离去,一直到遇到下一个问题再回来.当然,这不是最好的学习方式,最好的方式是——看书.目前,市面上介绍R语言的书籍很多,中文英文都有.那么,众多书籍中,一个生手应该从哪一本着手呢?入门之后如何才能把自己练就成某个方面的高手呢?相信这是很多人心中的疑问.有这种疑问的人有福了,因为笔者将根据自己的经历总结一下R语言书籍的学习路线图以使Ruser少走些弯路. 本文分为6个部分,分别介绍初级入门,高级入门,绘图与可

R语言-文本挖掘 主题模型 文本分类

####需要先安装几个R包,如果有这些包,可省略安装包的步骤.#install.packages("Rwordseg")#install.packages("tm");#install.packages("wordcloud");#install.packages("topicmodels") 例子中所用数据 数据来源于sougou实验室数据. 数据网址:http://download.labs.sogou.com/dl/so

R语言做文本挖掘 Part4文本分类

Part4文本分类 Part3文本聚类提到过.与聚类分类的简单差异. 那么,我们需要理清训练集的分类,有明白分类的文本:測试集,能够就用训练集来替代.预測集,就是未分类的文本.是分类方法最后的应用实现. 1.       数据准备 训练集准备是一个非常繁琐的功能,临时没发现什么省力的办法,依据文本内容去手动整理.这里还是使用的某品牌的官微数据,依据微博内容.我将它微博的主要内容分为了:促销资讯(promotion).产品推介(product).公益信息(publicWelfare).生活鸡汤(l

R语言中文社区历史文章整理(类型篇)

R语言中文社区历史文章整理(类型篇) R包: R语言交互式绘制杭州市地图:leafletCN包简介 clickpaste包介绍 igraph包快速上手 jiebaR,从入门到喜欢 Catterplots包,让你绘制不一样的图 今天再来谈谈REmap包 ggplot2你需要知道的都在这... R访问数据库管理系统(通过RODBC包和RMySQL包两种方式) NLP--自然语言处理(三)text2vec包 Rattle:数据挖掘的界面化操作 借助caret包实现特征选择的工作 R语言的高质量图形渲染

R与数据分析学习总结之一:R语言基本操作

最近开始学习R语言,把学习笔记和小伙伴们分享一下吧,欢迎一起交流 R 起源: R是S语言的一种实现.S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索.统计分析.作图的解释型语言.最初S语言的实现版本主要是S-PLUS.S-PLUS是一个商业 软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善.后来Auckland大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开发了一个R系统.R的使用与S-PLUS有很多类似之处,两个软件有一定的兼容性.

R语言:社会网络关系分析-进阶

本文内容参考李明<R语言与网站分析>一书 下面使用R语言实现社会网络分析的各个基础概念 # (1) 点集合(Vertexs)和点的属性数据 # 使用V(g)可返回关系网络g中所有点的集合V,并通过length函数直接返回点数目n.代码如下: V(g.undir) ## Vertex sequence: ## [1] 1 2 3 4 5 6 7 length(V(g.undir)) ## [1] 7 # 在g.undir中记录了点名称属性数据V(g.undir)$label,这里也可以直接展示.

R语言数据结构二

上节我们讲到R语言中的基本数据类型,包括数值型,复数型,字符型,逻辑型以及对应的操作和不同数值类型之间的转换.众所周知,R语言的优势在于进行数据挖掘,大数据处理等方面,因此单个的数据并不能满足我们的需要,于是向量,矩阵,数组,数据框等变量类型应运而生. 向量:与我们在数学里面所学到的向量不同,R语言中的向量类似于我们在C语言中学习的数组,表示一个同种数据类型的数据集. 向量的创建:在R语言中使用c( )命令就创建了一个向量,任何类型的数据都可以组成向量,但一个向量里面的数据最好类型一致,不然会发