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

简介: 用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(r;  


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)#每个类中心

最后可以得到直观的用户的聚类特征从而进一步进行研究。

相关文章
|
7月前
|
自然语言处理 数据可视化
R语言文本挖掘:twitter推特LDA主题情感分析
R语言文本挖掘:twitter推特LDA主题情感分析
|
7月前
|
数据挖掘
R语言主成分、因子分析、聚类对我国城镇私营单位就业人员平均工资数据研究与分析
R语言主成分、因子分析、聚类对我国城镇私营单位就业人员平均工资数据研究与分析
|
7月前
|
机器学习/深度学习 监控 数据可视化
R语言SOM神经网络聚类、多层感知机MLP、PCA主成分分析可视化银行客户信用数据实例2
R语言SOM神经网络聚类、多层感知机MLP、PCA主成分分析可视化银行客户信用数据实例
|
7月前
|
机器学习/深度学习 数据采集 算法
R语言、WEKA关联规则、决策树、聚类、回归分析工业企业创新情况影响因素数据
R语言、WEKA关联规则、决策树、聚类、回归分析工业企业创新情况影响因素数据
|
7月前
|
自然语言处理 数据可视化 大数据
R语言《红楼梦》文本挖掘:词频统计、词云可视化及前后对比分析
R语言《红楼梦》文本挖掘:词频统计、词云可视化及前后对比分析
R语言《红楼梦》文本挖掘:词频统计、词云可视化及前后对比分析
|
7月前
|
SQL 算法 数据可视化
R语言k-prototype聚类新能源汽车行业上市公司分析混合型数据集(上)
R语言k-prototype聚类新能源汽车行业上市公司分析混合型数据集
|
7月前
|
存储 自然语言处理 数据可视化
R语言文本挖掘:kmeans聚类分析上海玛雅水公园景区五一假期评论词云可视化
R语言文本挖掘:kmeans聚类分析上海玛雅水公园景区五一假期评论词云可视化
R语言文本挖掘:kmeans聚类分析上海玛雅水公园景区五一假期评论词云可视化
|
7月前
|
机器学习/深度学习 数据可视化 算法
R语言SOM神经网络聚类、多层感知机MLP、PCA主成分分析可视化银行客户信用数据实例1
R语言SOM神经网络聚类、多层感知机MLP、PCA主成分分析可视化银行客户信用数据实例
|
7月前
|
机器学习/深度学习 数据采集 数据可视化
R语言SVM模型文本挖掘分类研究手机评论数据词云可视化
R语言SVM模型文本挖掘分类研究手机评论数据词云可视化
|
7月前
|
数据可视化 数据挖掘 定位技术
数据分享|R语言生态学种群空间点格局分析:聚类泊松点过程对植物、蚂蚁巢穴分布数据可视化
数据分享|R语言生态学种群空间点格局分析:聚类泊松点过程对植物、蚂蚁巢穴分布数据可视化