【毕业设计】大数据大众点评评论文本分析 - python 数据挖掘

news2025/2/27 21:14:35

文章目录

  • 0 前言
  • 1 爬虫
    • 1.1 整体思路
    • 1.2 网页爬取和解析
    • 1.3 数据存储
    • 1.4 反爬虫对抗
  • 2 探索性分析与文本数据预处理
    • 2.1 探索性分析
    • 2.2 数据预处理
    • 2.3 词云展示
  • 3 文本的情感分析
    • 3.1 先上结果
    • 3.2 文本特征提取(TF-IDF)
    • 3.3 机器学习建模
    • 3.4 最后输出的准确率
  • 4 最后


0 前言

🔥 Hi,大家好,这里是丹成学长的毕设系列文章!

🔥 对毕设有任何疑问都可以问学长哦!

这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是

🚩 基于大数据挖掘分析的大众点评评论文本挖掘

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

🧿 选题指导, 项目分享:

https://gitee.com/yaa-dc/BJH/blob/master/gg/cc/README.md

1 爬虫

1.1 整体思路

爬取大众点评十大热门糖水店的评论,爬取网页后从html页面中把需要的字段信息(顾客id、评论时间、评分、评论内容、口味、环境、服务、店铺ID)提取出来并存储到MYSQL数据库中。

1.2 网页爬取和解析

链接格式为"http://www.dianping.com/shop/" + shopID + “/review_all/” + pi,如:http://www.dianping.com/shop/518986/review_all/p1 ,一页评论有20条。我们使用for循环构造链接URL,使用requests库发起请求并把html页面爬取下来,通过BeautifulSoup和re库解析页面提取信息。

我们发现完整的评论都存储在’div’,'main-review’中,且部分页面口味、环境、服务并不是每一页都有,因此需要使用try…except…防止程序中断,BeautifulSoup部分代码如下:

for item in soup('div','main-review'):
    cus_id = item.find('a','name').text.strip()
    comment_time = item.find('span','time').text.strip()
    comment_star = item.find('span',re.compile('sml-rank-stars')).get('class')[1]
    cus_comment = item.find('div',"review-words").text.strip()
    scores = str(item.find('span','score'))
    try:
        kouwei = re.findall(r'口味:([\u4e00-\u9fa5]*)',scores)[0]
        huanjing = re.findall(r'环境:([\u4e00-\u9fa5]*)',scores)[0]
        fuwu = re.findall(r'服务:([\u4e00-\u9fa5]*)',scores)[0]
        except:
            kouwei = huanjing = fuwu = '无'

1.3 数据存储

我们使用MYSQL数据库,安装教程参考菜鸟教程,python连接MYSQL数据推荐使用pymysql,同样是推荐菜鸟教程菜鸟教程。我们需要先建立一个数据库和表,然后连接并定义游标,然后写对应的sql语句,最后执行事务,存储部分的代码如下:

#连接MYSQL数据库
db = pymysql.connect("localhost","root","","TESTDB" )
cursor = db.cursor()
#存储爬取到的数据
def save_data(data_dict):
    sql = '''INSERT INTO DZDP(cus_id, comment_time, comment_star, cus_comment, kouwei, huanjing,           fuwu, shopID) VALUES(%s,%s,%s,%s,%s,%s,%s,%s)'''
    value_tup = (data_dict['cus_id']
                 ,data_dict['comment_time']
                 ,data_dict['comment_star']
                 ,data_dict['cus_comment']
                 ,data_dict['kouwei']
                 ,data_dict['huanjing']
                 ,data_dict['fuwu']
                 ,data_dict['shopID']
                 )
    try:
        cursor.execute(sql,value_tup)
        db.commit()
    except:
        print('数据库写入失败')
    return

1.4 反爬虫对抗

  • 修改请求头中浏览器信息:使用fake_useragent第三方库,修改request中的headers参数,用法如下:
from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent':ua.random}
  • 设置跳转路径:在访问评论时,一般的浏览行为是从某一页跳转到下一页这样的,而不是直接通过连接访问,为了更好的伪装成一个正常的访问,我们需要设置一下跳转的路径,修改headers中的Referer参数
headers = {
        'User-Agent':ua.random,
        'Cookie':cookie,
        'Referer': 'http://www.dianping.com/shop/518986/review_all'
}
  • 设置Cookies:评论数据需要登录后才能获取,下面介绍一种非常简单方便的绕过登录的方法。

  • 在网页上进行登录
    使用Chrome浏览器的开发者工具,查询当前请求的cookie
    复制浏览器中的cookie,使用此cookie对我们的请求进行伪装
    使用IP代理池:这里使用西刺代理的免费代理,构建一个爬虫爬取西刺代理的ip,然后进行验证,筛掉不可用的ip,构建出ip池供后续调用,代码来自网络。但是经过测试,大众点评对一个账号不同ip访问监控非常严格,使用IP代理池不更换账号的话,死的更快,封你账号,然而构建账号池比较麻烦,我们先暂缓。

  • 降低爬取频率:一个简单又有效的方法就是降低爬取频率,毕竟高频率的爬取对服务器也是一个考验,如果对速度的要求不是很高的话,建议把频率放慢一点,你好我好大家好!

import random
import time
time.sleep(6*random.random() + 4)

2 探索性分析与文本数据预处理

2.1 探索性分析

查看数据大小以及基础信息 ,浏览数据

在这里插入图片描述
样本分布
在这里插入图片描述
各店铺评分分布
在这里插入图片描述
点评数的的时间分布
在这里插入图片描述
查看评论长度对结果影响
在这里插入图片描述

2.2 数据预处理

去除非文本数据:可以看出,爬虫获取的数据非常多类似“\xa0”的非文本数据,而且都还有一些无意义的干扰数据,如结尾的“收起评论”

data['cus_comment'] = data['cus_comment'].str.replace(r'[^\u4e00-\u9fa5]','').str.replace('收起评论','')

中文分词:中文文本数据处理,怎么能离开中文分词呢,我们使用jieba库,简单又好用。这里我们把文本字符串处理为以空格区隔的分词字符串

import jieba
data['cus_comment'] = data['cus_comment'].apply(lambda x:' '.join(jieba.cut(x)))

去除停用词:文本中有很多无效的词,比如“着”,“和”,还有一些标点符号,这些我们不想在文本分析的时候引入,因此需要去掉,因为wordcloud和TF-IDF都支持停用词,因此就不额外处理了

2.3 词云展示

在这里插入图片描述

3 文本的情感分析

3.1 先上结果

在这里插入图片描述
模型的效果还可以的样子,yeah~接下来我们好好讲讲怎么做的哈,我们通过爬虫爬取了大众点评广州8家最热门糖水店的3W条评论信息以及评分作为训练数据,前面的分析我们得知样本很不均衡。接下来我们的整体思路就是:文本特征提取(TF-IDF)—机器学习建模—模型评价。

我们先不处理样本不均衡问题,直接建模后查看结果,接下来我们再按照两种方法处理样本不均衡,对比结果。

3.2 文本特征提取(TF-IDF)

模型不能直接处理文本数据,因此需要先把文本数据转为向量,方法有词库表示法、TF-IDF、word2vec等

3.3 机器学习建模

这里我们使用文本分类的经典算法朴素贝叶斯算法,而且朴素贝叶斯算法的计算量较少。特征值是评论文本经过TF-IDF处理的向量,标签值评论的分类共两类,好评是1,差评是0。情感评分为分类器预测分类1的概率值。

3.4 最后输出的准确率

#从大众点评网找两条评论来测试一下
test1 = '很好吃,环境好,所有员工的态度都很好,上菜快,服务也很好,味道好吃,都是用蒸馏水煮的,推荐,超好吃' #5星好评
test2 = '糯米外皮不绵滑,豆沙馅粗躁,没有香甜味。12元一碗不值。' #1星差评
print('好评实例的模型预测情感得分为{}\n差评实例的模型预测情感得分为{}'.format(ceshi(classifier,test1),ceshi(classifier,test2)))

>>>好评实例的模型预测情感得分为0.8638082706675478
>>>差评实例的模型预测情感得分为0.7856544482460911

4 最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java ssh校园拼餐系统

首先在系统前台,游客用户可以经过账号注册,管理员审核通过后,用账号密码登录系统前台,查看拼餐服务、网站公告、文明拼餐员、会员风彩、系统简介、咨询信息、拼餐信息等栏目信息,进行在线咨询和管理员交流,…

LTSPICE使用教程:二极管钳位电路仿真

在我们查看芯片内部的设计电路时,通常会发现以下的电路结构: 当定义pin脚输入电压Vpin, 1.Vpin>VDD,二极管D1导通,D2截止,此时无论怎样继续加大VPIN的输入电压时, 进入到管脚内部的电压会被钳制在Vint…

【RocketMQ中生产者生产消息的高可用机制、消费者消费消息的高可用机制、消息的重试机制、死信队列于死信消息】

一.知识回顾 【0.RocketMQ专栏的内容在这里哟,帮你整理好了,更多内容持续更新中】 【1.Docker安装部署RocketMQ消息中间件详细教程】 【2.RocketMQ生产者发送消息的三种方式:发送同步消息、异步消息、单向消息&案例实战&详细学习流程】 【3.Rock…

野火FPGA入门(5)

文章目录第17讲:触摸按键控制LED灯第18讲:流水灯第19讲:呼吸灯第20讲:状态机第21讲:无源蜂鸣器驱动实验第17讲:触摸按键控制LED灯 触摸按键可分为四大类:电阻式、电容式、红外感应式、表面声波…

调优工具常用命令

语法格式 mysqldumpslow [ OPTS... ] [ LOGS... ] //命令行格式常用到的格式组合 -s 表示按照何种方式排序c 访问次数l 锁定时间r 返回记录t 查询时间al 平均锁定时间ar 平均返回记录数at 平均查询时间 -t 返回前面多少条数据 -g 后边搭配一个正则匹配模式,大小写…

机械专业学子的芯片封装仿真“逆袭之路”

作者:萧显军 导读:近期,ANSYS公司给清华大学集成电路学院捐赠了一批业界领先的计算机辅助工程(CAE)软件及自动化(EDA)软件,为清华大学的芯片设计仿真的教学科研工作提供更强大的软件服务与技术支撑。 捐的仿真软件包括ANSYS涉及…

小白学Java

ip地址:用于唯一识别标记网络中的每一台计算机 查看方法:ipconfig ip地址的表示形式:点分十进制 xx.xx.xx.xx 每个十进制数的范围:0-255 ip地址的组成 网络地址主机地址 ipv4地址分类: (特殊:…

一、react简介

目标 理解react这个框架在前端开发中的地位理解react诞生的原因和意义(react是一个用于快速构建前端视图的javaScript库)理解什么是虚拟dom、原生js模拟出虚拟dom的表示,模拟出创建虚拟dom的方法,模拟出虚拟dom转换成真实dom的方…

什么是甘特图?什么是项目管理?

数字化与信息化早已成为现今人们工作和生活中不可缺少的一部分。尤其是随着科学技术的进步,人们对数字化的期待也越来也高。作为项目管理中常备的工具,甘特图已经成为不少业内人士中常备的“神器”了。然而依旧有人搞不清甘特图与项目管理区别究竟在哪里…

Revit中创建基于线的砌体墙及【快速砌体排砖】

​  墙可以更改内部结构和材质,但是很难画出砌块样式形成的墙体,我们可以用其他方式画出砌体排砖墙么?这里我们用基于线的常规模型做砌体排砖墙。在开始我们需要做两个族,作为砌体排砖墙的基本单位,也就是一个单独的砌体块。 一…

多亏了这份大佬整理的Java进阶笔记,让我斩获7个offer

移动互联网时代,IT 系统变得愈加复杂,对我们程序员的要求也是越来越高,技术不断更新,我们还不能停止学习,停下来了就会被打上一个‘不合格的程序员’的标签,如何成为一位「不那么差」的程序员? …

java.io.IOException: FIS_AUTH_ERROR in Android Firebase

项目里更换完google-services.json文件后,获取 firebase token 时,显示报错: E/FirebaseInstanceId: Topic sync or token retrieval failed on hard failure exceptions: FIS_AUTH_ERROR. Wont retry the operation.D/AndroidRuntime: Sh…

测试行业3年经验,从大厂裸辞后,面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生

测试员可以先在大厂镀金,以后去中小厂毫无压力,基本不会被卡,事实果真如此吗?但是在我身上却是给了我很大一巴掌... 所谓大厂镀金只是不卡简历而已,如果面试答得稀烂,人家根本不会要你。况且要不是大厂出来…

精品基于ssm的足球联赛管理系统的设计与实现vue

《基于ssm的足球联赛管理系统的设计与实现》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 使用技术: 开发语言:Java 框架:ssm 前端技术:JavaScript、VUE.js(2.X)、css3 J…

记录一次服务器CPU负载高,利用率正常的处理方法

背景: 在一次查看服务器监控的时候偶然发现其中一台服务器的CPU负载很高,但是CPU利用率基本没有,通过top命令完全看不出来问题所在,经过一些思路的排查发现了原因并处理,现记录下来。 现象: top命令查看…

前端js手写面试题汇总(一)

实现prototype继承 所谓的原型链继承就是让新实例的原型等于父类的实例: //父方法 function SupperFunction(flag1){this.flag1 flag1; }//子方法 function SubFunction(flag2){this.flag2 flag2; }//父实例 var superInstance new SupperFunction(true);//子继…

刷了一个月leetcode算法,成功收下阿里巴巴、网易等大厂的offer

前言 有人调侃我们说: 程序员不如送外卖。送外卖是搬运食物,自己是搬运代码,都不产出新的东西……透支体力,又消耗健康,可替代性极强,30岁之后就要面临被优化的危险……想跳槽,但是更高的平台…

Linux常见的链接命令有几种?分别是什么?

链接命令是创建链接文件,链接文件分为软链接和硬链接,软链接的作用是方便文件的快速访问,而硬链接的作用是可以给重要文件创建硬链接能够防止文件数据被误删。 学习目标:能够说出软链接的创建方式和硬链接的创建方式。 教程推荐…

青岛地铁交通咨询系统

大二课程《数据结构》课程设计项目,仅供参考 C&QT 项目地址 1.(重要)后台数据处理:使用图结构存储数据,利用最短路径选择算法进行路径选择; 2.检测输入框是否为空及输入合法性,使用模糊搜索实现站点的选择引导 &…