ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:103.60KB ,
资源ID:591425      下载积分:5 金币
已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《自然语言处理技术》——实训12 游客目的地聚类分析.docx)为本站会员(极速器)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(发送邮件至doc331@126.com或直接QQ联系客服),我们立即给予删除!

《自然语言处理技术》——实训12 游客目的地聚类分析.docx

1、自然i,i处理.技术隗加吁心出仪我学茶CCVT.卜/。人八目录项目3深入文本进阶处理1一擀客目的地聚类分析11 实训目标12 实训环境13 实训说明I4 实训步骤34.1 数据读取34.2 数据预处理41. 基于规则的垃圾评论排除42. 基于机器学习无监督学习排除无效评论73. 数据拆分104.3 目的地评分分析H1. 计算情感得分122. 绘制情感分布直方图134.4 目的地特色分析151. 筛选各层次景区和酒店152. 景区和酒店特征聚类163. 聚类结果分析265 实训小结28项目3深入文本进阶处理游客目的地聚类分析1实训目标(1) 熟练使用SnowNLP类对评论情感进行计算。(2) 掌

2、握TF-IDF算法排除无效评论的原理与实现方法。(3) 熟悉使用K-Means聚类算法对数据进行聚类的过程。(4) 能够使用sklearn库的silhouette_score函数计算轮廓系数。2实训环境环境版本说明Windows1064电脑操作系统Python3.8.5Python语言版本pandas1.3.0主要用于数据读取、清洗等操作NumPy1.21.6主要用于Python中的数值计算jieba0.42.1主要用于文本分词Gensim4.2.0主要用于检索文本、计算文本相似度、训练词向量、建模主题等Matplotlib3.3.0主要用于数据可视化PaddlePaddle2.4.2是一个深

3、度学习框架,提供了高效的计算框架和优化算法PaddleSpeech1.2.0主要用于语音和音频中的各种关键任务的开发scikit-leam1.0.2广泛地用于统计分析和机器学习建模等数据科学领域Librosa0.8.1主要用于分析一般的音频信号,是一个非常强大的Python语音信号处理的第三方库NLTK3.5是一个常用的自然语言处理工具包,可用于文本处理、语义分析、词性标注等SciPy1.7.3是一个科学计算工具包,可用于数学、科学、工程学等领域pyttsx32.9.0主要用于将文本转换成语音3实训说明随着经济和人民生活水平的提高,旅游已成为人们生活中不可或缺的部分。在新时代中国特色社会主义的

4、指导下,相关部门应该充分认识到旅游业的重要性,并积极引导旅游企业遵循社会主义核心价值观,注重文明、和谐等价值观的践行。但我国大部分旅游景点基础设施薄弱、配套设施不完善,游玩产品缺乏创新,各个景点严重同质化,缺乏差异化竞争。因此,提高旅游企业的经营收益,提升景区的资源配置,已成为各大旅游企业所需解决的难题。同时,游客在选择旅游目的地时,也需要了解该目的地的评价情况。旅游企业和相关部门可以基于大量的评论反馈,对景点、酒店等进行更有针对性、实效性的质量管理,进而增加客流量,提高经营效益。游客满意度与评价紧密相关,掌握影响游客满意度的因素,有助于提升景区/酒店的美誉度,保证客源稳定,开发旅游产品,优化

5、资源配置,以及开展市场开拓。在全面建设社会主义现代化国家的目标下,旅游企业和相关部门可以。通过资源配置的优化,开发创新的旅游产品,实现旅游业的可持续发展,为人民群众提供更加丰富、多样化的旅游体验。本任务使用的数据集为某旅游平台近几年的景区及酒店评论数据和评分数据,该数据共有4张数据表,包括景区评论”“酒店评论”“景区评分”和“酒店评分”,数据说明如表3-1所示。表3-1景区/酒店评论和评分数据说明数据表名属性名称示例景区评论景区名称AOl评论日期2020-06-16评论内容是亲子游的绝佳场所酒店评论酒店名称HOl评论日期2020-01-01评论内容酒店很适合家庭出行入住房型标准客房景区评分景区

6、名称AOl总得分4.4服务得分3.8位置得分4.9设施得分4.9卫生得分4.5性价比得分4.5酒店评分,序:1酒店名称HOl总得分4.8服务得分4.8位置得分4.8设施得分4.7卫生得分4.8性价比得分4.0游客目的地聚类分析的基本流程如图3-1所示。图3-1游客目的地印象分析总体流程4实训步骤4.1 数据读取读取“景区评论.xlsx”和“酒店评论.xlsx”中的数据并查看前5条数据,如代码3-1所ZjSo代码3-1数据读取importpandasaspdscenic=pd.read_excel(./data/景区评论.xlsx)hotel=pd.read_excel(./data/酒店评论.

7、xlsx)Print(景区评论表部分为:nu,scenic.head()PrintC酒店评论表部分为:11,hotel.head()运行数据读取代码后,得到景区评论和酒店评论表的部分记录如下。景区评论表部分为:景区名称评论日期评论内容0AOI2020-06-16是亲子游的绝佳场所,门票就是有点贵,不过可以接受,爷爷奶奶不放心小朋友也跟上来了,当天我们十1AOl2020-01-23*景区差不多,票价偏贵了。大马戏比较精彩,八点的场次,6点40才能检票进入,我们6点多看看2AOI2020-03-22很有*特色的亲子酒店,房间里的装修很可爱,小孩子特别喜欢,洗漱用品也很有特色,对应的房间还3AOl2

8、020-12-25有园区的工作人员在那,他会主动给你园区里的地图和表演的时间安排,很周到,上接驳车大概也是34.4AOI2020-11-28朋友在广州集合!终于如愿以偿的到达欢乐世界。学生票198需要出示相关证件(校卡或酒店评论表部分为:酒店名称评论日期评论内容入住房型0HOl2020-01-01HOl2020-01-01酒店很适合家庭出行标准客房升级了房间延迟退房很赞标准客房2HOl2020-01-01这几年,每年都会来广州,每次都会住*酒店。因为位置好,酒店的性价比也不错,这次给免费升级了.标准客房HOI2020-01-014HOI2020-01-01酒店很好不错标准客房超五星好评高级客房

9、4.2 数据预处理平台上的评论信息经常会出现内容不相关、信息重复复制、无有效内容等,即垃圾评论。所谓的垃圾评论主要包含相似评论、无效评论(长度很短、毫无理由的夸赞或诋毁)和无关评论(意义不明、全是符号、同一个单词或词语等)。数据预处理的目标是找出不能提供有效信息的垃圾评论,进行垃圾数据清理,保留真正的、有价值的评论信息。本任务主要使用基于规则的垃圾评论排除方法和基于机器学习无监督学习排除方法进行数据预处理,同时对景区评论和酒店评论进行数据拆分。1.基于规则的垃圾评论排除针对评论数据中的重复数据,直接调用drop_duplicates()方法进行去除,同时保留重复数据中的第一条,如代码3-2所示

10、代码3-2去除重复评论# 对景区完全重复的评论进行去重Print(景区评论去重前的表格规模:,scenic.shape)scenic=scenic.drop_duplicates()Print(景区评论去重后的表格规模:,scenic.shape)# 对酒店完全重复的评论进行去重Print(酒店评论去重前的表格规模:,hotel.shape)hotel=hotel.drop_duplicates()Print(酒店评论去重后的表格规模:hotel.shape)运行重复评论去除代码后,表格的规模变化如下,共删除了305条重复景区评论和248条重复酒店评论。景区评论去重前的表格规模:(59106

11、3)景区评论去重后的表格规模:(58801,3)酒店评论去重前的表格规模:(25225,4)酒店评论去重后的表格规模:(24977,4)经观察,在景区评论字符长度低于8的评论和酒店评论字符长度低于8的评论中,出现了较多的无效评论,且分析这些评论的作用性不大,可将其直接剔除,如代码3-3错误!未找到引用源。所示。代码3-3去除字符长度低于8的评论# 除去景区评论字符长度低于8的评论scenic=scenicscenic.apply(lambdaxden(x评论内容)=8,axis=l)Printe除去景区评论字符长度低于8的评论后的表格规模:,scenic.shape)# 除去酒店评论字符长度

12、低于8的评论hotel=hotelhotel.apply(lambdaxJen(x,评论内容)=8,axis=1)Printe除去酒店评论字符长度低于8的评论后的表格规模:,hotel.shape)运行去除字符长度低于8的评论代码后,表格的规模变化如下,共删除了41条景区评论和5196条酒店评论。除去景区评论字符长度低于8的评论后的表格规模:(58760,3)除去酒店评论字符长度低于8的评论后的表格规模:(19781,4)在评论中存在凑字数、混经验和刷广告的情况,为此根据“小程序”“凑字”“字数”和“个字”这4个关键词进行无效评论的剔除,如代码34错误!未找到引用源。所示。代码3-4去除关键字

13、无效评论# 除去评论中有关键字的无效评论defdelete_comment(x):X=Xr评论内容ifC字数TnXandIen(X)70):#判断评论是否为有关键字字数的无效评论returnTrueeli9个字Tnx:#判断评论是否为有关键字个字的无效评论returnTrueelifC凑字HnXandIen(X)7O):#判断评论是否为有关键字凑字的无效评论returnTrue61if(小程序inxandlen(x)num/2andx+1=0.1SCeniC.tosv(.tmp预处理后的景区评论.csv,index=False,encoding-utf-8sig,)hotel=hotel.il

14、ocx0forxinarray_hifxl=0.01hoteLto_csvC./tmp/预处理后的酒店评论.csvindex=False,encoding=,utf-8sig)#输出处理后的部分景区评论和酒店评论Print(预处理后的部分景区评论:n,scenic.head()Print(预处理后的部分酒店评论:n,hotel.hcad()运行剔除无效评论代码,得到预处理后的部分景区/酒店评论如下。预处理后的部分景区评论:景区名称评论日期评论内容0AOl2020-06-16是亲子游的绝佳场所门票就是有点贵不过可以接受爷爷奶奶不放心小朋友也跟上来了当天我们十点多就到1AOI2020-01-23景

15、区差不多票价偏贵了大马戏比较精彩八点的场次点才能检票进入我们点多看看人多起来就等了进去位置2AOl2020-03-22很有特色的亲子酒店房间里的装修很可爱小孩子特别喜欢洗漱用品也很有特色对应的房间还送了对应动物3AOl2020-12-25有园区的工作人员在那他会主动给你园区里的地图和表演的时间安排很周到上接驳车大概也是分钟车程就4AOI2020-11-28朋友在广州集合终于如愿以偿的到达欢乐世界学生票需要出示相关证件校卡或者录取通知书另.预处理后的部分酒店评论:酒店名称评论日期评论内容入住房型IHOI2020-01-01升级了房间延迟退房很赞标准客房2HOI2020-01-01这几年每年都会来

16、广州每次都会住酒店因为位置好酒店的性价比也不错这次给免费升级了大房间标准客房5HOl2020-01-01酒店干净卫生服务很好标准客房6HOl2020-01-01酒店位置属于传统的标准五星酒店唯一遗憾的就是浴室只有浴缸没有淋浴间标准客房7HOl2020-01-02酒店设施稍微有点旧但地理位置确实优越标准客房3.数据拆分为了后续实现更快速、更精准的进行文本挖掘,还需要对剔除无效评论后的景区和酒店的评论数据进行拆分,将每个景区和每个酒店的评论拆分成一个文件,文件数据包含剔除无效评论后的景区/酒店名称、评论日期、分词与去停用词后的评论内容。数据拆分,如代码3-8错误!未找到引用源。所示。代码3-8数据

17、拆分#对剔除无效评论后的评论内容进行分词、去停用词nr_s=SCeniCir评论内容.applymap(lambdax:iforiinjicba.lcut(x)ifinotinstopword)nr_h=hotelF.applymap(lambdax:iforiinjieba.Icut(x)ifinotinstopword)#合并剔除无效评论后的景区名称、评论日期、评论内容(分词与去停用词后的)scenic_c=pd.concat(scenic景区名称,评论日期,nr_s,axis=l)hotel_c=pd.concat(hotel酒店名称评论日期,nr_h,axis=l)defsplit_d

18、ata(x,name,path):data=xx.duplicatcd(namc)=Falsename#切分foriindata:result=xxname=iresult.to_excel(path+,%s.xlsx,%i,index=False)SpliJdata(SCeniJCJ景区名称/景区已拆分数据,)SPIiLdata(hotel_c,酒店名称7酒店已拆分数据)Printc共拆分出d个景区数据%Ien(SCeniJCr景区名称unique。)PrintC共拆分出d个酒店数据%len(hotel_c酒店名称.unique。)运行数据拆分代码后,景区和酒店数据拆分结果如下。共拆分出50

19、个景区数据共拆分出50个酒店数据4.3目的地评分分析用户评论作为用户消费后的反馈,往往包含用户强烈的情感,可以反映用户对产品的消费喜爱。一般来说,评论与评分往往是正面相关,评价越正面的评论,往往评分也就越高。本任务将从景区/酒店评论数据中提取出评论内容,并通过文本情感提取工具SnoWNLP抽取评论情感强烈程度以计算情感得分,最后绘制景区/酒店情感分布直方图。1.计算情感得分获取每一个景区/酒店中的评论,并计算评论的情感得分,如代码3-9错误!未找到引用源。所示。代码3-9计算评论的情感得分fromsnownlpimportSnowNLPimportpandasaspdimportmatplot

20、lib.pyplotaspit#获取每一个景区/酒店中的评论scenic=pd.read_csv(./tmp/预处理后的景区评论.csv)hotel=pd.read_csv(1./tmp/预处理后的酒店评论.csv)SCeniC_comment=SCeniCr评论内容hotel_comment=hotel评论内容emotion_score_s=#遍历景区评论数据集,提取每一条评论的情感分数foriinrange(len(scenic_comment):#调用snownlp工具包提取评论情感score=SnowNLP(scenic_commenti).sentimentsemotion_scor

21、e_s.append(score)emotion_score_h=#遍历酒店评论数据集,提取每一条评论的情感分数foriinrange(len(hotel_comment):#调用snownlp工具包提取评论情感score=SnowNLP(hotel_comment|i).sentimentsemotion_score_h.append(score)#输出前十个情感分数Print(景区前10个情感分数为:n,emotion.SCOre-S:IO)Print(酒店前10个情感分数为:n,emotion_score_h:10)在Python中可以使用SnowNLP类对评论情感进行计算,其中,Sno

22、wNLP类的常用参数如表3-2错误!未找到引用源。所示,SnoWNLP类的变量SentimentS为文本的情感分数,范围在01之间,越接近1表示情感越积极,越接近0表示情感越消极。表3-2SnowNLP类的常用参数说明参数名称参数说明text接收str,表示待处理的文本字符串。无默认值运行计算评论的情感得分代码后,景区和酒店前10个情感分数如下。景区前10个情感分数为:0.9999999981319527,0.4114136876300306,0.9999972805137574,0.9991497778709062,0.00026137390468450317,0.3865299933432

23、26,0.9999999999996867,2.8656804302418237e-05酒店前10个情感分数为:0.04056093662334703,0.7786298001781975,0.9999999981319527,0.4114136876300306,0.9999972805137574,0.9991497778709062,0.00026137390468450317,0.386529993343226,0.9999999999996867,2.8656804302418237e-050.04056093662334703,0.7786298001781975,2.绘制情感分布

24、直方图绘制景区评论的情感分布直方图,如代码3-10错误!未找到引用源。所示。代码3-10景区评论情感分布直方图#中文和负号的正常显示plt.rcParamsfont.sans-serif=MicrosoftYaHeipk.rcParamsaxes.unicode-minus=FalseltxlabelC正面情感倾向)plt.ylabel(景区评论数量/条)plt.hist(emotion_score_l,10)运行代码3-10错误!未找到引用源。得到景区评论情感分布直方图,如图3-2错误!未找到引用源。所示。040608正情他向卡一-史詹s三凶图3-2景区评论情感分布直方图维制酒店评论的情感分

25、缶直方图,如代码311倚辑!未找到引用深所小代码311酒店评论情感分布直方图PIHabeK正面偏蜷倾向)p3)dC酒店评论数量,条。ph.himcmoH432.景区和酒店特征聚类使用K-Means聚类算法对数据预处理后的景区/酒店进行聚类,步骤如下。a. 创建、训练K-MeanS模型。b. 通过轮廓系数法进行K值的选取。其中,将K值的寻优范围定为39,通过调用metrics模块中的silhouette_score函数,计算轮廓系数,寻找最佳K值。这里需要注意的是,在进行聚类时从3类开始的,而在返回的K值索引是从0开始,因此索引加上3才能得到真实的K值。c. 使用K-MeanS聚类的算法提取特征

26、词,即进行聚类特色分析。实现K-MeanS文本聚类需要计算TF-IDF,如代码3-14错误!未找到引用源。所示。该代码中定义了transform和train两个函数。transform函数用于计算TF-IDF矩阵,而train函数用于训练K-Means模型,train函数可以选择是否输出聚类主题和是否返回聚类模型。代码3-14基于TF-IDF的K-Means文本聚类importosimportpandasaspdfromsklearn.feature_extraction.textimportTfidfVectorizerimportmatplotlib.pyplotaspitfromskle

27、arn.clusterimportKMeansimportskleamimportre#计算TF-ITFdeftransfbrm(dataset):ItfHl参数:dataset:数据集返回值:X:计算得到的TF-IDF矩阵Vectorizer:使用的TfidfVectorizer对象vectorizer=TfidfVectorizer(max_df=0.5,min_df=2,use_idf=True)X=vectorizer.fit_transfbrm(dataset)returnX,vectorizer#训练K-MeanS模型deftrain(Xvectorizer,true_k,Show

28、Lable=False,choice_k=False):IllMl参数:X:TFIDF矩阵vectorizer:使用的TfidfVectorizer对象true_k:聚类的簇数showLable:是否输出聚类主题choice.k:是否返回聚类模型返回值:如果choice_k为True,返回训练好的K-Means模型# 聚类km=KMeans(n_clusters=true_k,init=,k-means+,max_iter=300,njnit=1,verbose=False,random_state=250)km.fit(X)# 是否输出聚类主题ifshowLable:order_ccntroids=km.cluster_centers_.argsort():,:-1terms=vectorizer.get_feature_names()foriinrange(true_k):Print(主题%d:H%(i+l),end=)forindinorder-centroidsi,:10:print(%s%termsind,end=)print()# 是否返回聚类模型ifchoice_k=True:returnkm代码3-14错误!未找到引用源。中使用了sklearn.cluster库中的KMeans函数构建K-MeanS模型,KMeanS函数的常用参数说明如表

宁ICP备18001539号-1