基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析
作者:mmseoamin日期:2023-12-13

 基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,3f6a7ab0347a4af1a75e6ebadee63fc1.gif,第1张

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者

🐋 希望大家多多支持,我们一起进步!😄

如果文章对你有帮助的话,

欢迎评论 💬点赞👍🏻 收藏 📂加关注+


基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,7810c21adf3441d98ab184828c1b8334.png,第2张

目录

一、项目简介

二、实验过程

2.1获取数据

2.2情感分析

2.3TF-IDF+Kmeans聚类分析

2.4LDA主题分析

2.5社会语义网络分析

三、总结


 

一、项目简介

        本项目是基于携程网中关于大唐不夜城评论的文本分析,项目中用到了Python爬虫、词频分析、词云图分析、kmeans聚类、LDA主题分析、情感分析、社会网络语义分析等。

二、实验过程

实验环境

Anaconda

Python3.9

2.1获取数据

数据目标是获取携程网中关于大唐不夜城景点的评论文本数据

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,f3f3e92d0c3b481aa0a70b1a1c482465.png,第3张

由于该网站抓包不是很方便,于是我果断选择使用selenium自动化工具来爬取数据。该网站也不需要登录,直接可以访问这个页面并且可跳转下一页,最后我们使用CSV文件进行存储。

先导入第三方库

from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver import Chrome,ChromeOptions
from selenium.webdriver.common.by import By
import warnings
import csv
import random
#忽略警告
warnings.filterwarnings("ignore")

 创建我们的浏览器并准备好用来存储评论数据的csv文件

# 创建一个驱动
service = Service('./chromedriver.exe')
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation','enable-logging'])
options.add_experimental_option('useAutomationExtension', False)
# 创建一个浏览器
driver = Chrome(service=service,options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
        Object.defineProperty(navigator, 'webdriver', {
        get: () => false
        })
    """
    })
with open('comments.csv','a',encoding='utf-8',newline='')as f:
    csvwriter = csv.writer(f)
    csvwriter.writerow(('景点','用户评论'))
    main()

接下来就主要编写我们的main()函数,该函数主要就是访问页面获取评论标签元素,一页获取完点击下一页,并用创建的csv文件进行存储。

def main():
    driver.get('https://you.ctrip.com/sight/xian7/130441.html')
    sleep(2)
    for i in range(109):
        comment_list = driver.find_elements(By.XPATH,'//*[@id="commentModule"]/div[5]/div/div[2]/div[2]')
        for item in comment_list:
            try:
                comment = item.find_element(By.XPATH,'.').text
                comment = comment.strip()
                comment = comment.replace('\n','')
                csvwriter.writerow(('大唐不夜城',comment))
                f.flush()
                print(comment)
            except:
                pass
        driver.find_element(By.CSS_SELECTOR,'li.ant-pagination-next>span').click()
        print(f'=====================第{i+1}页爬取完毕!=========================')
        sleep(random.random()*5)

评论一共有109页,于是我们爬取了109页,大概也就1000条评论数据,爬虫运行截图如下: 

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,8ba1720887064b82b6a1a5a3a3ca3762.png,第4张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,bb1809333e5441ecb287b48a8aa32736.png,第5张

数据已经准确就绪,下来我们将开始一一分析。 

2.2情感分析

首先导入我们刚爬取的评论文本数据

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,5c80ce73f810481a9a8b2591fdb2f796.png,第6张

 使用snownlp情感分析模块进行情感打分

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,d5fd43ba7b03403bb164fb8205dbd46f.png,第7张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,b1ab735fb2f54739be2223e17f14beb6.png,第8张

经过了上面的打分操作,现在已经有了每句话都情感分值及其情感类别。

接下来对情感分值和类别进行可视化展示

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,18c57e6b6dd049ee8ba6535a819ee5d3.png,第9张

 基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,b5a0c3632a6c44fd80f6779042db0795.png,第10张

从结果看出评论主要都是积极评论占比88%,只有极少数的中性和消极评论,说明该景点真的很值得去! 

接着我们编写一个画词云图的函数,该函数中的功能包括文本预处理、文本分词、去除停用词、词频统计、画出top10词频条形图、画出词云图。

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,583f922281344a269edf854ddcbf1d81.png,第11张

画出积极评论的词云图,调用上面的函数,运行结果如下: 

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,fadad8fa43654c2283f252a8c248b33e.png,第12张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,58283ce86ab44f778ac9d8a3ad1ee934.png,第13张

 基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,8901a3de2cb64581b75cf1b14b4bc077.png,第14张

画出中性评论的词云图,调用上面的函数,运行结果如下: 

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,72f5e46ab26e4f078eaedb4acebfa633.png,第15张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,604c76f28a9e404dab06c4ced3424a5b.png,第16张

 基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,0d1828d04a77445db1aa9dd64e4c8ad7.png,第17张

 画出消极评论的词云图,调用上面的函数,运行结果如下: 

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,026d0c2cd63b455a9d0fb106c414a814.png,第18张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,473159d6eb744c70975551cfa188f8e7.png,第19张

 基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,3b8a39449d0144618c2656a16c526c8c.png,第20张

前面我们分别对积极、中性、消极评论进行了词云图分析,我们发现在消极评论中,最突出的问题就是人多拥挤,谁叫它是免费的景点呢,哈哈哈。

2.3TF-IDF+Kmeans聚类分析

首先还是导入用到的第三方库以及数据

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,3cda886d31c44f2994c5dd7a5727dcf8.png,第21张

编写一个中文分词的函数

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,25b6dcd2e6ef40a8a685b84ae40138ff.png,第22张基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,55036b4e4d334df898fa490921e30dc4.png,第23张

 对分词结果进行词向量化并降维到1000维同时进行标准化操作

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,98469dd2f147473792e241f4c19c3f3d.png,第24张

 使用TF-IDF提权关键词并获取权重

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,18e5f0bcd5464a7b92816a16b90967b3.png,第25张

 使用Kmeans进行聚类,关于K的确定,我是试了几个数字,发现还是2最合适。

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,17ed974043e44cfd8c366992fda04818.png,第26张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,1b017a24e0f541b9bf4b84b8ac6b4d4b.png,第27张

 最后将聚类结果进行可视化

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,1fcc0cfe475a483baff3a7f8487d79a3.png,第28张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,98a6dd43820f416bb4b4be0363e66027.png,第29张

2.4LDA主题分析

首先还是导入我们的数据

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,b2966d296ee44703868722a5fd30ce33.png,第30张

 在中文分词之前,我们先删除重复数据并且将评论长度小于10的进行剔除,从结果发现,我们剔除了40条评论。

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,dcbd8f4fd5024f828bc511cae04d58b9.png,第31张

 中文分词基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,422fbde7c6684c9d81b1d5a465eaef68.png,第32张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,5b523289e68f4f288daa4bc703d20662.png,第33张

 确定最佳主题个数K值

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,855d9d652b294f9c92508d7e500e8f1c.png,第34张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,96290554b4844eb4b0286a087165201a.png,第35张

 从图可看出,8是最低的点,但是8个主题明显太多,会出现过拟合,所以还剩下3和5。最后经过主题可视化我们最终确定了3是最佳的K值。

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,d519ae203104497aa388b4127ce43817.png,第36张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,ea05c36987b34b5097a00e6be08e3aba.png,第37张

 基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,4b18f920bc664c098e6c99a4f83c33c1.png,第38张

 基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,725985d806854943a551ef3178b05b69.png,第39张

 基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,74a9a2c9555843718c489dd7c15bb4ad.png,第40张

 可以使用summary查看模型信息

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,8dac6faae6a5495fb74227b03c3058d1.png,第41张

 Lda主题可视化

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,1bd14063b60d4445b000637a08f8741a.png,第42张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,9aa4f345865d4d209126c784f3a3b670.png,第43张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,6d1c879ba7cf4ea48edc922aeb3564f5.png,第44张

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,7ddc7bdee98143c3b9aeec06080474f8.png,第45张

 最后我们也可以将每个主题的关键词进行词云图展示

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,a6e5f004383a4a22a2f46b0505a639b1.png,第46张

运行完上面的代码会生成3个html页面

主题0词云图

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,cbc0c9da55ec48268a88fe0e3d292929.png,第47张

 主题1词云图

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,80fbb1591dc6401d8940ed108d09d90e.png,第48张

主题2词云图
基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,8dce7ac7ebc1413889eaf87428079596.png,第49张

2.5社会语义网络分析

这里我们主要使用到的工具是ROSTCM6,关于软件的安装及使用可参考我的博文

ROSTCM6软件下载及语义网络分析详细操作教程(附网盘链接)_艾派森的博客-CSDN博客

基于爬虫+词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析,5968b6c5c8394800a869f198dd98f6d6.png,第50张

三、总结

        本次实验我们使用了爬虫、词云图、情感分析、LDA主题分析、TF-IDF+Kmeans、社会网络语义分析等对大唐不夜城的评论进行了分析。关于博文中的源码大家可以关注派森小木屋公众号进入粉丝群领取,如对文章有疑惑,请评论区留言。