数据分析案例-基于随机森林算法的商品评价情感分析

简介: 数据分析案例-基于随机森林算法的商品评价情感分析

摘 要:随着我国的信息化发展速度的加快,时代科技技术的进步以及我国联网设施不断完善、不断普及,网民人数不断增加,各个行业都受到相应的推进与革新。网络购物用户人数的逐步提高促进电子商务行业迅速崛起,同时这也产生大量的用户评论文本数据,推动了文本挖掘技术的研究热潮。本文就随机森林算法对安踏跑步鞋评论数据进行文本情感分析。


首先使用python网络爬虫从天猫商城的安踏官方自营店爬取安踏跑步鞋的数据,将其商品的评论作为分析对象;其次,将收集到的数据进行文本预处理,使用SnowNLP算法计算出评论数据的情感得分。最后,使用随机森林算法构造分类器,并对所爬取的安踏跑步鞋数据进行文本分类,构造出好评集获差评级。


关键词:SnowNLP,随机森林,情感分析


1.挖掘目标

本次建模目标是利用天猫商城积累下来的安踏跑步鞋真实评论数据,采用文本挖掘技术对其进行文本情感分析,构建随机森林情感分类模型,实现对新采集的安踏跑步鞋评价数据进行分析商品的优势和劣势,从而促进商家有目标对商品的不足进行优化,提高顾客满意度、店铺转化率。


2.分析方法与过程

2.1总体流程

建模方法及过程的总体流程图如下:



本用例主要包括如下步骤:


步骤一:收集原始数据,进行选择性抽取样本数据。


步骤二:将数据进行词汇切分、停用词过滤等文本预处理操作。


步骤三:使用SnowNLP算法得出情感得分。


步骤四: 对数据文本处理完成后的文档集进行数据可视化操作,绘制词云图便于后续分析。


步骤五:使用随机森林分类器构建情感分类模型、对模型进行训练与评估。


步骤六:对所构建的随机森林情感分类模型的评估报告进行分析,模型优化与重构。


2.2具体步骤

结合总体流程图,对本例安踏跑步鞋评论情感分析建模法进行详细说明。


步骤1:样本数据抽取  本文选择整理收集的安踏跑步鞋评论语料作为训练集和测试集,安踏跑步鞋评价影响因子主要有用户、评论时间、商品来源、商品描述、评论内容等指标,故进行安踏跑步鞋评论情感分析时需根据建模要求有选择性地从安踏自营店中使用Python爬虫爬取用户、评论时间、商品来源、商品描述、评论内容等数据。本文选取评论共863条数据。



爬虫代码如下:


import csv
import requests
import time
import re
import random
# 爬虫主函数
def main(i):
    # 构造请求信息
    url = 'https://rate.tmall.com/list_detail_rate.htm?'
    headers = {
        'cookie':'lid=tb482754983; enc=OLmCxk0zYIWAaWbxiJGJZLgZXFhpOoFAZRIv5/YHmby4uo3ck9KqKs9vMh3nkV/Jm+VnJn3St+k/JAYQyySRgA==; cna=QOqsGqOLgWQCAduQ6z6UauuL; hng=CN|zh-CN|CNY|156; t=b14fefe4bac79a6562ba911fb3034e02; tracknick=tb482754983; lgc=tb482754983; _tb_token_=31d33eee47ee3; cookie2=1158f5d5b24db7770424d086b9151279; xlly_s=1; x5sec=7b22617365727665723b32223a2232333733656335656464303836626537613033376230323562626366636466654350485a795a5547454e4776682b65466b717653536a43756f66474e41673d3d227d; _m_h5_tk=e05b9579c2b1dd0b4dac3586855d1b4d_1655869503345; _m_h5_tk_enc=71420e63987b44f337034fd014461a2d; dnk=tb482754983; uc1=cookie15=URm48syIIVrSKA==&cookie14=UoexN9smQ1lxdQ==&pas=0&existShop=false&cookie16=UtASsssmPlP/f1IHDsDaPRu+Pw==&cookie21=W5iHLLyFe3xm; uc3=lg2=UtASsssmOIJ0bQ==&nk2=F5RBzefNa4UWMMc=&vt3=F8dCvCIUD82B9U5+mUA=&id2=Vy6xyuVKA3qrYw==; _l_g_=Ug==; uc4=id4=0@VXkWTZ2Lyk2O9F7hKk4638+V8r/A&nk4=0@FY4KqBPwZ/gfx5FZc1dyxX/4i900Vw==; unb=4294095874; cookie1=B0f1tItLZyRaW/Jg29jakLzOxwmDYfDw97vOqX1S6HQ=; login=true; cookie17=Vy6xyuVKA3qrYw==; _nk_=tb482754983; sgcookie=E100P1pRjez8kopXEfFYcsjEjPRYaZCwajRPzEJYiU4+nIujVs6stM9waDntAJwi1CgVJNZ9XmwrjcmO3Hxrh9zaOa4DkyPA0Qf0u4mYNDbWMM/WUCgrML0IlXX7bqCOcHt8; cancelledSubSites=empty; sg=34f; csg=31a000f8; tfstk=cP71BeDzIAD_2OEq71NUbMMiTcYlZzeBtl9O1JQ183MjkB51iq0yFT0AmvY2MB1..; l=eBMZ7wCRLrSWabRvBO5aPurza77TZIRb81VzaNbMiInca18F_FOk1NChuI8X8dtxgtCjAetz04qHHRhH8hzdgZqhuJ1REpZZVxvO.; isg=BGBg13igFhHmQaqLyUkuAp-GMW4yaUQz-RjUiNpx5XsJ1QH_gnjkwzqjbH3VwvwL',
        'referer': 'https://detail.tmall.com/item.htm?id=625732205710&ali_refid=a3_430673_1006:1151560379:N:BaxGxtmXhnUjBqGrANoKiA==:6ef5bc214174112e2516125768cf56c2&ali_trackid=1_6ef5bc214174112e2516125768cf56c2&spm=a2e0b.20350158.31919782.1',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36'
    }
    params = {
        'itemId':'625732205710',
        'spuId':'2491659345',
        'sellerId':'3489613060',
        'order':'3',
        'currentPage':f'{i}',
        'append':'0',
        'content':'1',
        'tagId':'',
        'posi':'',
        'picture':'',
        'groupId':'',
        'ua':'098#E1hvv9vPvByvUvCkvvvvvjiWRL590jiERFLyQjljPmPysjYbRLsygjlWRLcy0jiUdvhvhyDUe3oyvhCnMdBYofUq8ZQzBUvCvvsNtMuwaxdNzYGQrYA+vpvEphh/jEgvphk939hvChCCvvmevpvhphvhHU9CvvXmp99h5EAIvpvUphvhC+o2VH7gvpvIphvvvvvvphCvpC9vvvCCQ6CvVvvvvhWFphvOvvvvpznvpC9vvvC2wQ9Cvh1megQvI1yaWA1EKX6TnVQEVArlYb8rwAtScfmxdXyaUVUCDO97rj6OVA3lMEQfJZCTp/2yHF+SBkphQRA1+2n7OHNIAfUTnZwK2ixrvvhvCyCUvvvvvvgCvvpvvPMMRvhvChCvvvm+vpvEphEUVWhvph5IdvhvhZ38LC9pvhC8g4rYZfv1veWARvhvChCvvvv=',
        'needFold':'0',
        '_ksTS':str(time.time()*1000).replace('.','_'),
        'callback': 'jsonp422'
    }
    # 发送请求
    resp = requests.get(url,headers=headers,params=params)
    # 提取出全部的评论数据
    name_list = re.findall(r'"displayUserNick":"(.*?)",',resp.text)
    time_list = re.findall(r'"rateDate":"(.*?)",',resp.text)
    sourse_list = re.findall(r'"cmsSource":"(.*?)",',resp.text)
    desc_list = re.findall(r'"auctionSku":"(.*?)",',resp.text)
    comment_list = re.findall(r'"rateContent":"(.*?)",',resp.text)
    for n,t,s,d,c in zip(name_list,time_list,sourse_list,desc_list,comment_list):
        print(n,t,s,d,c) 
        csvwriter.writerow((n,t,s,d,c))
    print(f'第{i}页爬取完毕')
# 程序入口函数
if __name__ == '__main__':
    # 创建txt文件储存数据
    with open('data.csv','a',encoding='utf-8')as f:
        csvwriter = csv.writer(f)
        csvwriter.writerow(('买家昵称','评论时间','商品来源','商品描述','评论内容'))
        # 抓取40页评论数据
        for i in range(1,41):
            try:
                main(i)
                time.sleep(20 + random.random()*10) # 防止检测
            except:
                pass


步骤2:样本数据预处理  数据预处理主要包括缺失值和重复值处理、文本提取、词汇切分、停用词过滤等。


缺失值和重复值处理


       使用python中的pandas模块调用dropna()对数据进行缺失值处理,调用drop_duplicates()对数据进行重复值处理。



文本提取


       因为原始评论数据中存在特殊字符以及一些数字等字符,故我们需要利用re模块将中文文本提取出来。

# 文本预处理 :去除一些无用的字符只提取出中文出来
import re
def parse_comment(x):
    new_data = re.findall('[\u4e00-\u9fa5]+',x, re.S)
    new_data = "".join(new_data)
    return new_data
comment_data['评论内容'] = comment_data['评论内容'].apply(parse_comment)
comment_data.head()

词汇切分


       使用python的中文分词组件jieba对所爬取的原始数据进行词汇分词。


停用词过滤


       所谓“停用词”是指在较多的文本数据中对分析情感倾向无影响的词语,在原始样本数据中,存在大量如“啊”、“的”、“地”等词的情况。根据网上收集并汇总停用词,得到停用词表 停用词库.txt,可以去除文本数据中的无用词,提高分类的准确率。

# 文本分词
import jieba
def divide_word(x):
    seg_list_exact = jieba.cut(x, cut_all=True)
    result_list = []
    with open('停用词库.txt', encoding='utf-8') as f: #可根据需要打开停用词库,然后加上不想显示的词语
        con = f.readlines()
        stop_words = set()
        for i in con:
            i = i.replace("\n", "")   # 去掉读取每一行数据的\n
            stop_words.add(i)
    for word in seg_list_exact:
        if word not in stop_words and len(word) > 1:
            result_list.append(word)
    return ' '.join(result_list)
comment_data['评论内容'] = comment_data['评论内容'].apply(divide_word)
comment_data

步骤3: SnowNLP算法得出情感得分


       SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。简单地说,snownlp是一个中文的自然语言处理的Python库。主要原理是计算出的情感分数表示语义积极的概率,越接近0情感表现越消极,越接近1情感表现越积极。

#加载情感分析模块
from snownlp import SnowNLP
def emo_score(x):
    score = SnowNLP(x).sentiments
    return round(score,3)
comment_data['情感得分'] = data['评论内容'].apply(emo_score)
# 添加情感标签
def add_label(x):
    if x > 0.7:
        return '积极'
    elif 0.3<= x <=0.7:
        return '中性'
    else:
        return '消极'
comment_data['情感标签'] = comment_data['情感得分'].apply(add_label)
comment_data.head()



步骤4: 样本数据可视化


数据进行文本处理操作之后,调用pyecharts中的wordcloud函数绘制词云图,进行数据可视化操作。


步骤5:建模 本文建模过程主要包括构建情感分类模型、训练模型与评估模型等。


构建情感分类模型


       根据提取的商品特征关键词,归纳筛选出用户主要关注的特征,并按照这些特征构造评论分类模型,对评论数据进行分类[4]。在此条件上,使用随机森林算法对提取的特征关键词构造分类器模型,得出随机森林情感分类模型。

from sklearn.model_selection import train_test_split
# 准备数据
X = df.drop('情感标签',1)
y = df['情感标签']
# 划分数据集
x_train,x_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)
from sklearn.metrics import confusion_matrix,accuracy_score,classification_report,recall_score
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier()
rfc.fit(x_train,y_train)
y_pred = rfc.predict(x_test)
print('Accuracy:{:.1%}'.format(accuracy_score(y_test,y_pred)))
print('Reacall:{:.1%}'.format(recall_score(y_test,y_pred,average='weighted')))
print(classification_report(y_test,y_pred))

训练模型与评估模型


        以训练集当中的词的列表进行每篇文章重要性统计,随后使用随机森林算法预估器对模型进行预测。其次对分类器模型进行评估处理,调用accuracy_score()得出预测结果正确的百分比,使用sklearn.metrics.classification_report对分类器进行结果报告分析,了解构建的随机森林情感分类模型的精确率、召回率以及F1-score,所谓精确率,即预测结果为正例样本中真实为正例的比例;召回率,即真实为正例的样本中预测结果为正例的比例;精确率、召回率是代表主观性评论的查全率和查准率。查全率和查准率反映了分类质量的两个不同方面,两者必须综合考虑[5]。F1-score反映所构建模型的稳健性。


步骤6:结果分析并优化模型与重构  在模型训练与评估之后,就评估报告结果查看随机森林分类器模型的准确率、精确率、召回率与F1-score,初次得到的模型准确率约为76.3%,随后重新在停用词表中添加停用词,再一次进行文本预处理,调试页面内容代表词汇个数以及test_size,不断对模型进行优化与重构。


2.3结果分析

       本文以安踏跑步鞋真实评论数据作为分析对象,收集好数据首先进行正向评价与负向评价占比统计,并且对数据进行jieba分词、去停用词等数据预处理操作,随后进行正负向评价总和的词频统计并绘制相关词云图,便于购买安踏跑步鞋的消费者情感特征,使用SnowNLP算法得出情感得分,通过随机森林算法对数据进行分类建模,训练并评估分类器模型,同时将分类的好评集和差评集,即对正向评价和负向评价进行绘制词云图。


       由正向评价与负向评价占比图与正负向总和词频图分析可知,安踏跑步鞋的好评率较高,商品销量效果较好,了解到多数消费者认为安踏跑步鞋舒适、透气、好看、轻便,消费者较为关注安踏跑步鞋的透气度和舒适度等。



        使用随机森林算法对提取的特征关键词构造分类器模型,使用随机森林模型进行预测,查看模型的预测值,并且对其进行训练评估,不断地优化模型与重构。由评估模型图报告显示可知,本文针对安踏跑步鞋评论数据构建的情感分类模型准确率约为78.3%,精确率与召回率效果相对良好。



                                                                              预测值图


                                                                        模型评估图


        为了安踏跑步鞋提供更为全面的建议,需要对安踏跑步鞋的优势进行总结,了解销售优势,扬长避短。由正向评价图显示,可见词频率高的词为不错、舒服、合适、好看、满意、喜欢、舒适、值得、质量、透气、轻便等,由此可知,给与好评的多数消费者认为安踏跑步鞋舒适、好看、透气、轻便柔软等,故而分析出安踏跑步鞋的优势。



                                                                       好评词云图


        所谓扬长避短,在了解安踏跑步鞋的优势之后,需要合理认识自身商品的不足并且进行相应改进,由负向评价图显示,可见词频率高的词为鞋底、价格、客服、臭脚、快递、味道等,由此可知,给与差评的多数消费者认为安踏跑步鞋鞋底有问题、价格不合适、客服服务态度不好、快递慢、鞋臭脚等,故而分析出安踏跑步鞋的劣势,“价格”、“服务”都出现于正向评价、负向评价高频词,可见赠品、服务态度、活动是影响消费者满意度的重要因素。可以看出,安踏天猫直营店在跑步鞋的销售过程中服务态度有待提高,加强客服态度管理问题,检查是否有真假混卖情况,提高店铺的诚信度,尽量减少活动期间存在漏发赠品的情况,提高消费者对商品以及店铺的满意度,留下良好的印象。



                                                                       差评词云图


3.结论

       关于天猫商品评论情感倾向分析,对电子商务的发展有推动的作用,对于商家了解商品销售下过、提高商品销量、提高消费者满意度等方面都有很重要的意义,经过文本预处理,以去掉影响挖掘结果的词语,又通过词云分析、词频分析、对文本情感分析与随机森林算法结合构建出减小工作量又提高准确率的算法模型并且分析,挖掘其中潜在信息,可以给出安踏跑步鞋的销售提供实际意义的建议。


       本文总体分析认为,安踏跑步鞋的综合表现较好,好评率较高。但是在部分工作环节害存有不足,加强态度管理、产品质量管理十分的重要,这是安踏官方自营旗舰店提高销售量和消费者满意度的关键因素。


目录
相关文章
|
3月前
|
数据采集 机器学习/深度学习 算法
|
21天前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
46 0
|
3月前
|
数据采集 存储 数据挖掘
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
本文介绍了一个基于Python的书旗网小说网站数据采集与分析系统,通过自动化爬虫收集小说数据,利用Pandas进行数据处理,并通过Matplotlib和Seaborn等库进行数据可视化,旨在揭示用户喜好和市场趋势,为图书出版行业提供决策支持。
262 6
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
|
6天前
|
存储 算法 搜索推荐
这些算法在实际应用中有哪些具体案例呢
【10月更文挑战第19天】这些算法在实际应用中有哪些具体案例呢
15 1
|
23天前
|
算法 数据可视化 新制造
Threejs路径规划_基于A*算法案例完整版
这篇文章详细介绍了如何在Three.js中完整实现基于A*算法的路径规划案例,包括网格构建、路径寻找算法的实现以及路径可视化展示等方面的内容。
48 0
Threejs路径规划_基于A*算法案例完整版
|
23天前
|
存储 算法 机器人
Threejs路径规划_基于A*算法案例V2
这篇文章详细介绍了如何在Three.js中使用A*算法进行高效的路径规划,并通过三维物理电路的实例演示了路径计算和优化的过程。
40 0
|
3月前
|
供应链 数据挖掘 Serverless
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
|
3月前
|
数据采集 数据可视化 关系型数据库
【优秀python 数据分析案例】基于python的穷游网酒店数据采集与可视化分析的设计与实现
本文介绍了一个基于Python的穷游网酒店数据采集与可视化分析系统,通过爬虫技术自动抓取酒店信息,并利用数据分析算法和可视化工具,提供了全国主要城市酒店的数量、星级、价格、评分等多维度的深入洞察,旨在为旅行者和酒店经营者提供决策支持。
【优秀python 数据分析案例】基于python的穷游网酒店数据采集与可视化分析的设计与实现
|
3月前
|
JSON 数据挖掘 API
案例 | 用pdpipe搭建pandas数据分析流水线
案例 | 用pdpipe搭建pandas数据分析流水线
|
3月前
|
机器学习/深度学习 人工智能 算法
【人工智能】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例
传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述
70 2