乐趣区

关于数据挖掘:用R语言进行网站评论文本挖掘聚类附代码数据

原文链接:http://tecdat.cn/?p=3994

原文出处:拓端数据部落公众号

 最近咱们被客户要求撰写对于文本开掘的钻研报告,包含一些图形和统计输入。

对于非结构化的网站中文评论信息,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)# 每个类核心 

最初能够失去直观的用户的聚类特色从而进一步进行钻研。


最受欢迎的见解

1.Python 主题建模 LDA 模型、t-SNE 降维聚类、词云可视化文本开掘新闻组

2.R 语言文本开掘、情感剖析和可视化哈利波特小说文本数据

3.r 语言文本开掘 tf-idf 主题建模,情感剖析 n -gram 建模钻研

4. 游记数据感知游览目的地形象

5. 疫情下的新闻数据察看

6.python 主题 lda 建模和 t -sne 可视化

7.r 语言中对文本数据进行主题模型 topic-modeling 剖析

8. 主题模型:数据凝听人民网留言板的那些“网事”

9.python 爬虫进行 web 抓取 lda 主题语义数据分析

退出移动版