2023年第三届中国高校大数据挑战赛第二场赛题C:用户对博物馆评论的情感分析(附上代码与详细视频讲解)

问题重述:

博物馆是公共文化服务体系的重要组成部分。国家文物局发布, 2021 年我国新增备案博物馆 395 家,备案博物馆总数达 6183 家,排名全球前列;5605 家博物馆实现免费开放,占比达 90%以上;全国博物馆举办展览 3.6 万个,教育活动 32.3 万场;虽受疫情影响,全国

博物馆仍接待观众 7.79 亿人次。

但在总体繁荣业态下,一些地方博物馆仍存在千馆一面、公共文化服务供给同质化的尴尬局面,在发展定位、体系布局、功能发挥等方面尚需完善提升。这给博物馆基于自身特色进一步迈向真正的公共性提出了新课题,也即坚持守正创新,坚持直面公众和社会的公共文化服务的创造性转化、创新性发展。

为了提升博物馆公共服务水平,课题组收集大众点评平台上用户对南京市朝天宫、瞻园、甘熙宅第、江宁织造博物馆和六朝博物馆五个博物馆的点评数据,数据字段主要包括:用户编号、评论内容、评论时间等。

问题1:针对每位用户的评论,建立情感判别模型,判断评论内容的情感正反方向,输出评论内容的情感方向为正面、中立、负面, 并统计每个博物馆历史评论各个方向情感的比例分布情况。

问题 2:综合考虑评论内容中情感词、程度副词、否定词、标点符合等等影响情感方向的指标,建立情感得分评价模型,得到每位户评论的情感得分,并基于得分对五个博物馆进行客观排名。

问题 3:针对每位用户评论的内容,可通过事件抽取或实体抽取算法,从评论内容中抽取影响用户情感的关键事件或因素,如某用户评论“非常不错!环境高大上!好多是最近房地产开发盖新房子时新挖出来的,不错“,可得知该评论为正面情感,影响其正面评价的是” 房地产开发盖新房子时新挖的“、”环境高大上“两个因素。基于上述抽取的关键事件或影响因素,综合分析得到影响用户对五个博物馆情感的影响因素

问题 4:基于上述分析得到的数据结果,为五个博物馆撰写一段提升公共服务水平的可行性建议,建议要有理有据,且具有一定的可操作性。

问题分析

  1. 建立情感判别模型,对评论内容的情感方向进行分类(正面、中立、负面),并统计每个博物馆历史评论各个方向情感的比例。
  2. 建立情感得分评价模型,考虑情感词、程度副词、否定词、标点符号等因素,为每条评论打分,并基于得分对博物馆进行排名。
  3. 通过事件抽取或实体抽取算法,从评论中抽取影响用户情感的关键事件或因素,分析影响用户情感的因素。
  4. 基于以上分析,为五个博物馆提出提升公共服务水平的可行性建议。

解题代码

使用python脚本对数据集进行分析

import pandas as pd# 加载数据
data_path = '数据-五个博物馆评论内容.xlsx'
df = pd.read_excel(data_path)# 数据清洗
# 转换评论星级至正确的比例
df['评论星级(抓取的数据/10=评论星级)'] = df['评论星级(抓取的数据/10=评论星级)'].apply(lambda x: x / 10)# 确保所有文本字段都是字符串类型
df['评论内容'] = df['评论内容'].astype(str)# 处理时间数据,这里简单示例,实际情况可能需要根据时间数据的具体乱码情况做更复杂的处理
# 假设我们只是转换时间格式,并忽略乱码问题
df['时间(部分时间有乱码,或无法抓取,是平台后端问题,爬虫无法解决)'] = pd.to_datetime(df['时间(部分时间有乱码,或无法抓取,是平台后端问题,爬虫无法解决)'], errors='coerce')# 查看处理后的数据
print(df.head())# 注意:这里的时间处理仅为示例,根据实际乱码情况可能需要更详细的处理步骤

在这里插入图片描述
对于“赞”和“回应”这样的字段,NaN可能表示没有人点赞或回应。在进行数据分析时,我们可以选择将这些NaN值替换为0,表示“没有赞”或“没有回应”,而不是直接删除这些记录。这样,我们可以保留更多的评论数据进行分析,因为评论内容本身对于情感分析来说是最重要的。

# 处理NaN值,将“赞”和“回应”字段中的NaN替换为0
df['赞'].fillna(0, inplace=True)
df['回应'].fillna(0, inplace=True)# 确认整个数据集处理情况
print(df.describe())  # 展示数据的统计概况来确认处理范围

在这里插入图片描述

# 对整个DataFrame按情感分数排序
df_sorted = df.sort_values(by='情感分数', ascending=False)# 显示情感分数最高的评论
print("最积极的评论:")
print(df_sorted.iloc[0])# 显示情感分数最低的评论
print("\n最消极的评论:")
print(df_sorted.iloc[-1])# 如果想显示更多的积极或消极评论,可以调整iloc的索引,例如使用df_sorted.iloc[:5]来查看前5个最积极的评论

在这里插入图片描述

import jieba# 自定义情感词典、程度副词典和否定词典
sentiment_dict = {"好": 1,"高兴": 2,"喜欢": 2,"棒": 2,"不错": 1,"差": -2,"失望": -2,"糟": -2,"讨厌": -2,
}degree_dict = {"非常": 1.5,"很": 1.2,"稍微": 0.8,"一点": 0.5,
}negation_dict = {"不": -1,"没": -1,"无": -1,
}# 情感得分计算函数
def calculate_sentiment_score(text):words = list(jieba.cut(text))score = 0negation = 1degree = 1for word in words:if word in negation_dict:negation = -1elif word in degree_dict:degree = degree_dict[word]elif word in sentiment_dict:score += sentiment_dict[word] * negation * degree# Reset negation and degreenegation = 1degree = 1return score# 测试代码
comments = ["非常喜欢这个博物馆,展览很棒","不是很好,稍微有点失望","没那么差,但也没有很好","真的很讨厌,完全失望",
]for comment in comments:print(f"评论: {comment}, 情感得分: {calculate_sentiment_score(comment)}")

在这里插入图片描述

import pandas as pd
import jiebaxls = pd.ExcelFile(data_path)all_museums_df_list = []for sheet_name in xls.sheet_names:df = pd.read_excel(xls, sheet_name=sheet_name)df['评论内容'] = df['评论内容'].astype(str)  # 确保评论内容为字符串df['情感得分'] = df['评论内容'].apply(calculate_sentiment_score)df['博物馆名称'] = sheet_nameall_museums_df_list.append(df)all_museums_df = pd.concat(all_museums_df_list, ignore_index=True)museum_avg_sentiment = all_museums_df.groupby('博物馆名称')['情感得分'].mean()
museum_ranking = museum_avg_sentiment.sort_values(ascending=False)print("博物馆情感得分排名:")
print(museum_ranking)

在这里插入图片描述

import matplotlib.pyplot as plt# 已给出的博物馆情感得分排名数据
museum_names = ["江宁织造博物馆", "六朝博物馆", "甘熙宅第", "瞻园", "朝天宫"]
sentiment_scores = [0.557347, 0.539564, 0.454345, 0.425397, 0.335504]
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
# 绘图
plt.figure(figsize=(10, 6))
plt.barh(museum_names, sentiment_scores, color='skyblue')
plt.xlabel('平均情感得分')
plt.title('博物馆情感得分排名')
plt.gca().invert_yaxis()  # 让最高得分的博物馆显示在最上面
plt.grid(axis='x')# 显示图形
plt.show()

在这里插入图片描述

import pandas as pd
import jieba.analyse# 初始化一个空字典来存储每个博物馆的关键词
museum_keywords = {}# 遍历每个sheet
for sheet_name in xls.sheet_names:df = pd.read_excel(xls, sheet_name=sheet_name)df['评论内容'] = df['评论内容'].astype(str)  # 确保评论内容为字符串类型# 初始化一个列表来存储当前博物馆的所有关键词keywords_list = []# 提取每条评论的关键词for text in df['评论内容']:keywords = jieba.analyse.extract_tags(text, topK=5)keywords_list.extend(keywords)# 存储当前博物馆的关键词museum_keywords[sheet_name] = keywords_list# 汇总分析结果
for museum, keywords in museum_keywords.items():print(f"博物馆: {museum}, 关键词: {set(keywords)}")

在这里插入图片描述

详细的视频讲解(代码文件内附视频讲解)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Dynamic Wallpaper v17.4 mac版 动态视频壁纸 兼容 M1/M2

Dynamic Wallpaper Engine 是一款适用于 Mac 电脑的视频动态壁纸, 告别单调的静态壁纸,拥抱活泼的动态壁纸。内置在线视频素材库,一键下载应用,也可导入本地视频,同时可以将视频设置为您的电脑屏保。 应用介绍 Dynam…

mysql 事务 及 Spring事务 初论

1.事务概述 事务是一种机制,用以维护数据库确保数据的完整性和一致性。。事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。MySQL中主要使用INN…

“遥感新纪元:GPT技术引领地球观测的智慧革新“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用,人工智能…

设计模式八:观察者模式

文章目录 1、观察者模式2、示例3、spring中的观察者模式3.1 spring观察者模式的使用3.2 spring观察者模式原理解析 1、观察者模式 观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模…

适合上班族的副业:steam游戏搬砖1天3小时,月入8K

互联网新时代,做副业的人越来越多。如果能充分利用下班后的时间,还真能赚到不少钱。steam游戏搬砖项目就是这样一个非常适合上班的副业,只要用心去操作,一个月至少收入两三千,多的轻松上万。 steam游戏搬砖项目其实做的…

2.4 RK3399项目开发实录-使用 SD 卡升级固件(物联技术666)

通过百度网盘分享的文件:嵌入式物联网单片… 链接:https://pan.baidu.com/s/1Zi9hj41p_dSskPOhIUnu9Q?pwd8qo1 提取码:8qo1 复制这段内容打开「百度网盘APP 即可获取」 本文主要介绍了如何将实现使用MicroSD卡,更新主板上的固件。但也仅限于固件小于4G大…

RabbitMQ - 01 - 快速入门

目录 界面总览 创建队列 选择默认交换机 发布消息 查看消息 通过实现以下目标快速入门 界面总览 RabbitMQ Management 界面总览 通道: 传输消息的通道 路由: 接收和路由(分发)消息 队列: 存储消息 消息队列的流程: 生产者将消息发送给路由,路由分发消息到各个队列存储…

超级实用导出各种excel,简单粗暴,无需多言

1、加入准备的工具类 package com.ly.cloud.utils.exportUtil;import java.util.Map;public interface TemplateRenderer {Writable render(Map<String, Object> dataSource) throws Throwable;}package com.ly.cloud.utils.exportUtil;import java.util.Map;public int…

Python之禅——跟老吕学Python编程

Python之禅——跟老吕学Python编程 Python之禅1.**Beautiful is better than ugly.**2.**Explicit is better than implicit.**3.**Simple is better than complex.**4.**Complex is better than complicated.**5.**Flat is better than nested.**6.**Spare is better than den…

【Tailwind + Vue3】100行代码手写一个客服组件

【Tailwind Vue3】100行代码手写一个客服组件 通常在官网页面上&#xff0c;都会有一个在右下角的客服小组件&#xff0c;有几个按钮&#xff0c;显示电话&#xff0c;微信等信息&#xff1a; 主要有以下几个难点&#xff1a; 动态类名绑定&#xff1a; 在迭代生成的每个工具…

AI绘画怎么用?详细教程在这里!

AI绘画是一种利用人工智能技术来创作艺术作品的方式。以下是一个详细的AI绘画的详细教程&#xff0c;介绍AI绘画怎么用? 1. 选择合适的AI绘画工具&#xff1a;市面上有许多AI绘画工具供用户选择&#xff0c;如建e网AI、DeepArt、DALL-E等。用户可以根据自己的需求和兴趣&#…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 1、线条折线曲面

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 代码: import pandas as pd import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D from matplotlib.colors import ListedColor…

Tab组件的编写与动态日期的函数封装

src\components\Tab\Icon.vue 底部导航栏子组件。 <template><router-link :to"path" class"tab-icon"><i class"icon">{{iconText}}</i><p class"text"><slot>{{ tabText }}</slot></…

2024.3.12 C++

1、自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height) 定义公有成员函数初始化函数:void init(int w, int h)更改宽度的函数:set w(int w)更改高度的函数:set h(int h)输出该矩形的周长和面积函数:void show() #include <iostream>using nam…

高项-项目整合管理

项目整合管理的目标 资源分配平衡竞争性需求研究各种备选方法裁剪过程以实现项目目标管理各个项目管理知识域之间的依赖关系 项目整合管理的过程 制定项目章程制定项目管理计划指导与管理项目工作管理项目知识监控项目工作实施整体变更控制结束项目或阶段 七个过程和五大过…

Servlet的book图书表格实现(使用原生js实现)

作业内容&#xff1a; 1 建立一个book.html,实现图书入库提交 整体参考效果如下: 数据提交后&#xff0c;以窗口弹出数据结果&#xff0c;如: 2 使用正则表达式验证ISBN为x-x-x格式&#xff0c;图书名不低于2个字符&#xff0c;作者不能为空&#xff0c;单价在【10-100】之间…

NASA和IBM联合开发的 2022 年多时相土地分类数据集

简介 美国国家航空航天局&#xff08;NASA&#xff09;和国际商业机器公司&#xff08;IBM&#xff09;合作&#xff0c;利用大规模卫星和遥感数据&#xff0c;包括大地遥感卫星和哨兵-2 号&#xff08;HLS&#xff09;数据&#xff0c;创建了地球观测人工智能基础模型。通过奉…

光电容积脉搏波PPG信号分析笔记

1.脉搏波信号的PRV分析 各类分析参数记参数 意义 公式 参数意义 线性分析 时域分析 均值MEAN 反应RR间期的平均水平 总体标准差SDNN 评估24小时长程HRV的总体变化&#xff0c; SDNN &#xff1c; 50ms 为异常&#xff0c;SDNN&#xff1e;100ms 为正常&#xff1b;…

Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-1、线条平滑曲面且可通过面观察柱体变化(一)

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

【Java探索之旅】数据类型与变量 浮点型,字符型,布尔型,字符串型

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java成长日志 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、变量1.1 浮点型1.2 字符型变量1.3 布尔类型 二、字符串类型2.1 转化 &#x1f324…