龙空技术网

R语言文本挖掘:情感极性分析+LDA主题建模「二」

Codewar 289

前言:

此刻同学们对“算法设计实验报告”大概比较注意,小伙伴们都想要剖析一些“算法设计实验报告”的相关知识。那么小编也在网络上搜集了一些对于“算法设计实验报告””的相关知识,希望小伙伴们能喜欢,姐妹们快快来学习一下吧!

这一篇文章依然是接着上一篇没写完的文章进行,如果您没看过上一篇文章,建议您先移步上一篇文章哦:R语言文本挖掘:情感极性分析+LDA主题建模 「一」

三、评论可视化展示

3.1基于词云图的可视化

为了更直观地展示客户在正面评论与负面评论讨论的侧重点,本小节依据情感分析结果,使用R语言table()函数对正负面分词结果进行词项计数,并利用在线词云图绘制网站Wordart(),绘制正负面评论词云图,其中,字体的大小表示词项出现的频次,词云图中的词项越大,说明词项出现的频数越高,通过词频统计表和词云图来了解用户在购买京东美的热水器的关注点,结果如下:

根据所做词云图与词频统计表,能够更为直观地看出,不同评论类型的用户对于美的热水器的不同关注点:

1、在正负面词频统计表中,“安装”一词出现的频率最高,表明用户在购买美的热水器后,较为关注的是热水器的安装问题,而较容易出现问题的,也是热水器的安装问题;

2、正面评论中突出用户态度的高频词有“可以”、“很快”、“不错”、“值得”、“满意”等正面评价,可见大多数用户对于产品是持肯定态度的;其次也可以看到负面评论中的“不好”、“一般”、“不行”等负面评价,推测客户可能在购买热水器后,在安装、售后服务等过程中有不好的购物体验,因而给了差评;

3、高频词中有体现产品形象的词项,如“漂亮”、“大气”、“好看”等;而“功能”、“省电”、“操作”、“简单”、“节能”、“质量”等代表热水器性能与操作的词汇,反映客户在购买热水器后对热水器性能这一方面较为关注;

4、从高频词中可以看到,体现客户购物体验的有售后退货服务方面的,如负面高频词中的“售后”、“服务态度”、“客服”、“退货”,物流配送方面的,如正面高频词中的“送货”、“物流”等,表名消费者在选购产品时注重购物体验;

5、负面高频词中出现的,诸如“服务态度”、“客服”、“态度”,可见京东美的热水器的售后服务还存在需要改进的地方。从正负面词云图可以看出,消费者在京东购买美的热水器的主要关注点在于热水器的安装、外观性能、购物体验以及售后服务上。

四、LDA主题建模

本小节的主题建模分两部分代码,一种使用R语言的tm、NLP、topicmodels等R包进行主题提取,另一种的基于Python语言进行LDA主题建模。建模结果解读基于Python语言的建模结果。

4.1LDA主题提取简介

在这一小节开始前,我先简要介绍下主题模型及其作用:主题建模是一种用于在文档集合中发现抽象主题的统计模型,属于无监督学习方法,其常用算法LDA是由Blei D M等人于2003年提出。生成式主题模型(LDA),该模型认为一篇文档中的每个词语都是通过“一定的概率选择了某个主题,并从这个主题中以一定的概率选择了某个词语”,其包含“文档-主题-词”三部分。

LDA的作用是从一份文档(以本文研究内容为例,即为正负面评论)中提取出相关主题,以及每一主题中涉及的词语,而抽象出来的主题能够反映文本的核心内容(即不同评论类型中用户的关注点及其相关特征词)。

基于此,本文通过LDA主题建模,结合第三小节的情感分析结果,深入挖掘正负面评论中,用户对于京东美的热水器产品的关注点以及相关特征。

4.2LDA最优主题个数确定

一般情况下,不同文档的主题提取个数不同,因此,在进行主题建模前,需先确定不同文档所需提取的潜在主题数目k。根据本文研究内容,需先确定正、负面评论分词结果集所需主题数k,然后根据确定的最优主题数进行主题抽取。基于此,本文应用相似度的自适应最优LDA模型选择法,确定主题数并对正负面评论进行主题提取。试验证明该方法可以在不需要人工调试主题数目的情况下,用相对少的迭代找到最优的主题结构。相关步骤如下:

1、取初始主题数k值,得到初始模型,计算各主题之间的相似度(平均余弦距离);

2、增加或减少k值,重新训练模型,再次计算各个主题之间的相似度;

3、重复步骤2,直至得到最优主题数k;

4.3使用R语言进行LDA主题建模

具体代码如下:

#数据导出--运用python进行LDA主题建模:write.csv(posword,"posdata.csv",row.names = F)write.csv(negword,"negdata.csv",row.names = F)head(posword)head(negword)po1 <- as.data.frame(posword[,4])ne1 <- as.data.frame(negword[,4])write.table (po1, file ="posLDA.txt", sep ="\n", row.names =FALSE, col.names =FALSE, quote =FALSE)write.table (ne1, file ="negLDA.txt", sep ="\n", row.names =FALSE, col.names =FALSE, quote =FALSE)#R语言代码LDA主题建模:head(posword)head(negword)po1 <- as.data.frame(posword[,4])ne1 <- as.data.frame(negword[,4])#可导出备用:write.table (po1, file ="posLDA.txt", sep ="\n", row.names =FALSE, col.names =FALSE, quote =FALSE)write.table (ne1, file ="negLDA.txt", sep ="\n", row.names =FALSE, col.names =FALSE, quote =FALSE)#R包载入:library("tm")library("NLP")posLDA <- scan("posLDA.txt",sep = '\n',what = character(),encoding = "UTF-8")negLDA <- scan("negLDA.txt",sep = '\n',what = character(),encoding = "UTF-8")pos.corpus <- Corpus(VectorSource(posLDA))neg.corpus <- Corpus(VectorSource(negLDA))#文档--词条矩阵posjz <- DocumentTermMatrix(pos.corpus,                            control = list(   #control里面可以放各种调整参数                              wordLengths=c(1, Inf), # 限制词长,将词长设置为大于等于2                              bounds = list(global = c(5,Inf)), #bounds参数设置词频,最小词频为5                              removeNumbers = TRUE))  #移除数字negjz <- DocumentTermMatrix(neg.corpus,                            control = list(   #control里面可以放各种调整参数                              wordLengths=c(1, Inf), # 限制词长,将词长设置为大于等于2                              bounds = list(global = c(5,Inf)), #bounds参数设置词频,最小词频为5                              removeNumbers = TRUE))                         #寻找最优主题数:library("topicmodels")lda.k <- function(jz){  #初始化平均余弦相似度:  mean_similarity <- c()  mean_similarity[1] = 1  #循环生成主题并计算主题间的相似度:  for(i in 2:10){    control <- list(burnin = 500,iter = 1000,keep = 100)    Gibbs <- LDA(jz,k = i,method = "Gibbs",control = control)    term <- terms(Gibbs,50)  #提取主题词    word <- as.vector(term)   #列出所有词    freq <- table(word)    unique_word <- names(freq)    mat <- matrix(rep(0,i*length(unique_word)),nrow = i,ncol = length(unique_word))    colnames(mat) <- unique_word    #生成词频向量:    for(k in 1:i){      for(t in 1:50){        mat[k,grep(term[t,k],unique_word)] <- mat[k,grep(term[t,k],unique_word)]+1              }    }    p <- combn(c(1:i),2)    l <- ncol(p)    top_similarity <- c()    for(j in 1:l){      #计算余弦相似度:      x <- mat[p[,j][1],]      y <- mat[p[,j][2],]      top_similarity[j] <- sum(x*y)/sqrt(sum(x^2)*sum(y^2))    }    mean_similarity[i] <- sum(top_similarity)/l    message("top_num",i)  }  return(mean_similarity)}#计算余弦相似度:#rowSums是直接对矩阵的行进行求和,然后找到>0的那些行posjz<-posjz[ rowSums(as.matrix(posjz)) > 0 , ]negjz<-posjz[ rowSums(as.matrix(negjz)) > 0 , ]unique_lines = unique(posjz$i)posjz1 = posjz[unique_lines,]unique_lines1 = unique(negjz$i)negjz1 = negjz[unique_lines1,]pos_k <-lda.k(posjz1)neg_k <-lda.k(negjz1)par(mfrow = c(2,1))plot(pos_k,type = "l")plot(neg_k,type = "l")#LDA主题分析;control <- list(burnin = 500,iter = 1000,keep = 100)pos.gibbs <- LDA(posjz1,k = 3,method = "Gibbs",control = control )neg.gibbs <- LDA(negjz1,k = 2,method = "Gibbs",control = control )pos.termsl <- terms(pos.gibbs,10)neg.termsl <- terms(neg.gibbs,10)pos.termslneg.termsl

首先是确定最优主题数,根据余弦相似度函数进行计算,并将结果可视化,结果如下所示:

图1-8 余弦相似度

如上图所示,根据余弦值越小,则主题内容越接近的原则,确定正负面评论结果集的主题个数,由图可知,对于正面评论,当主题个数取3时,主题间的相似度达到了最小值;对于负面评论,当主题个数取2时,主题间的余弦相似度达到了最低值。基于此,本文将正负面评论的主题提取个数分别设定为3和2;

建模所得结果如下表所示:(个人感觉数据量太少,导致建模结果不大好解读,这是败笔,害......)

4.4使用python语言进行LDA主题建模

首先是确定最优主题数,根据余弦相似度函数进行计算,并将结果可视化,结果如下所示:

图1-9 余弦相似度

惊不惊喜,意不意外?

R跟python画的不一样耶!!!!!!

如上图所示(忽略表情包),根据余弦值越小,则主题内容越接近的原则,确定正负面评论结果集的主题个数,由图可知,对于正面评论,当主题个数取2或3时,主题间的相似度达到了最小值;对于负面评论,当主题个数取3或4时,主题间的余弦相似度达到了最低值。基于此,本文将正负面评论的主题提取个数分别设定为3和4;

建模结果如下所示:

通过上表,我们可以得到美的热水器正面评论所提取的3个主题。在主题一中,主题词有不错、满意、可以等,说明消费者对于京东平台的美的热水器产品持肯定态度;在主题二中,如安装、送货、物流、服务等,主要反映美的热水器的配送服务速度快,且预约安装方便、安装服务好等;在主题三中,主题词如外观、加热、很快、大气、品牌等,主要反映美的热水器外观大气,大品牌加热很快。

通过上表,我们可以得到美的热水器负面评论所提取的四个主题。在主题一中,主题词有不好、服务、人员、服务态度等,主要涉及售后人员的服务态度问题;在主题二中,所提取的主题词主要关注点在于配件、漏水等,说明存在配件不齐全,安装完漏水等问题;在主题三,所提取的主题词有安装、师傅、收费、乱收费等,主要反映安装师傅乱收费、收费高等问题;主题四中,所提取的主题词主要涉及售后退货问题,可能存在退货慢的问题。

五、结论与建议

综上所述,消费者对于京东美的热水器产品大多持肯定态度,且认为其安装服务好,认可美的热水器产品的外形外观设计;其次,用户主要不满于售后服务人员的态度问题以及安装时乱收费问题。由此可见,该品牌热水器商家需要着重于客服人员职业素质的培养,以及在热水器安装收费方面定立统一收费标准。

(一)建议

5.1.1对京东的建议

1、完善现有配送体系,继续保持送货速度快、安装服务好等优势。京东的送货速度快得益于自建的物流系统,因此保持现有优势显得十分必要。

2、深化安装人员及售前、售后客服人员的服务意识,提高客服岗位人员职业素质。京东平台应着力提升服务质量,注重售后服务。对安装收费做到公开透明,例如定立统一的收费标准,并为消费者提供安装保障服务,做到透明公开,以及减少安装人员安装过程中乱收费、材料购买费用过高、收费高等问题。

5.1.2对于美的热水器供应商

1、在保持现有产品外观优势的基础上,注重产品基本配置,如配件;其次,加大出厂检查力度,例如,通过浏览部分热水器评论发觉,不少客户反馈在打开产品后存在划痕、损坏等问题。

2、优化产品性能。在本文分析中,正面评论用户的主要探讨点在于“省电”,负面评论主要提及“漏水”问题,基于此,可见客户对于美的热水器产品质量较为看重,因此,只有不断改进自身产品的缺点,才能更好地留住客户;

3、提供价保服务。在分析过程中,发现用户对于产品时不时降价问题存在异议,而且不满于产品没有价保服务。基于此,供应商应与电商平台协商推出例如保价险、30天差价补贴这样的服务,以缓和消费者对于不保价的负面情绪。

(二)本文小结

本文对京东电子商务平台的美的热水器文本评论数据进行挖掘分析,其中主要内容如下:

1、安装python、R、Rstudio等编程软件,并配置好环境变量,安装所需R包与python第三方库;

2、利用python爬取京东美的热水器评论数据;

3、在数据预处理阶段,使用Excel对原始数据进行繁体字转简体,使用R语言对文本数据进行去重、清洗低价值信息、重复评论,其次对每一评论按固定标点符号切分为片段,再将片段进行分词处理、去除停止词等操作,并将分词结果进行词频统计,得出高频词;

4、设计情感得分算法,使用R语言编程实现情感得分算法,并构造相应的情感词典;

5、根据情感分析结果,进行LDA主题建模,得出正负面评论的相应主题,并提出可行性建议。

小结

本文由R数据科学,建建baby原创,请支持原创!

感谢大家耐心看完,自己的文章都写的很细,代码都在原文中,希望大家都可以自己做一做,请关注后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先收藏,再点赞转发。

也欢迎大家的意见和建议。

如果你是一个大学本科生或研究生,如果你正在因为你的统计作业、数据分析、论文、报告、考试等发愁,如果你在使用SPSS,R,Python,Mplus, Excel中遇到任何问题,都可以联系我。因为我可以给您提供最好的,最详细和耐心的数据分析服务。

如果你对Z检验,t检验,方差分析,多元方差分析,回归,卡方检验,相关,多水平模型,结构方程模型,中介调节,量表信效度等等统计技巧有任何问题,请私信我,获取最详细和耐心的指导。

If you are a student and you are worried about you statistical #Assignments, #Data #Analysis, #Thesis, #reports, #composing, #Quizzes, Exams.. And if you are facing problem in #SPSS, #R-Programming, #Excel, Mplus, then contact me. Because I could provide you the best services for your Data Analysis.

Are you confused with statistical Techniques like z-test, t-test, ANOVA, MANOVA, Regression, Logistic Regression, Chi-Square, Correlation, Association, SEM, multilevel model, mediation and moderation etc. for your Data Analysis...??

Then Contact Me. I will solve your Problem...

加油吧,打工人!

猜你喜欢:

R文本挖掘:文本聚类分析

R文本挖掘:中文文本聚类

R文本挖掘:情感分析「2」

R文本挖掘:情感分析

R文本挖掘:中文词云生成

R文本挖掘:中文词云生成,以2021新年贺词为例

R文本挖掘:社会网络分析

R文本挖掘:文本主题分析topic analysis

R文本挖掘:手把手教你做词云图,小白教程

R语言文本挖掘:情感极性分析+LDA主题建模 「一」

标签: #算法设计实验报告 #文本挖掘lda