文章目录
一、背景介绍
在当下竞争激烈的文旅市场,游客评论不仅是口碑的体现,更是优化服务、精准营销的风向标。传统依赖人工看评论的方法效率低、信息碎、无法量化。
于是我尝试用 Python 数据分析 + 自然语言处理(NLP)的方法,对万岁山武侠城的某程评论进行深度挖掘,期望达到以下目的:
- 快速提取评论关键词与情绪倾向:辅助景区精准识别服务亮点与痛点
- 识别游客类型与满意度之间的关联:揭示亲子游、情侣游等群体的具体偏好
- 分析游客地理来源与情感偏好分布:优化市场投放和区域运营策略
- 追踪评论月度趋势变化:为景区运营方制定淡旺季策略提供数据支撑
💡 面向文旅行业从业者、景区运营方、数据分析师、AI应用探索者
📊 提供景区评论智能分析模型 + 情绪趋势分析 + 用户画像洞察
🔍 本案例基于真实某程评论数据,带你还原游客最真实的声音与偏好
二、数据获取与处理流程
✅ 数据来源
- 来源平台:某程
- 景区名称:万岁山武侠城
- 获取方式:自建 Python 爬虫进行结构化提取
- 采集数量:3千多条
✅ 数据字段展示
Unnamed: 0 | _id | commentId | poiInfo | extInfo | replyInfo | replyTypeList | commentKeywordList | commentTagInfo | resourceId | resourceType | businessId | businessType | districtId | sourceType | externalResourceId | hasVoted | isUnUseful | showUsefulModule | isPicked | isGood | isOwner | fromType | fromTypeText | publishTime | publishStatus | usefulCount | replyCount | score | touristType | images | videos | voteUsers | content | languageType | translateContent | translateLanguageType | canEdit | jumpUrl | jumpH5Url | replyJumpUrl | publishTypeTag | isTripShoot | aiTagIdSens | replyTag | replyContent | replyTime | setTitle | outerTitle | impressionTags | recommendItems | childrenTag | ipLocatedName | replyIpLocatedName | isFollow | isDeleted | clientInfo | ip | jumpMiniAppUrl | isAnonym | theForkLogoUrl | timeDuration | touristTypeDisplay | originContent | collectCnt | hasCollected | isUnderReview | predicted_label | ipLocatedNameEn | touristTypeDisplayEn | date | month | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 208331747 | 208331747 | nan | nan | [] | nan | [] | [] | 77323 | 66 | 78248 | 70 | 165 | 5 | 30030209277 | False | False | 1 | False | False | False | 1 | 来自订单 | /Date(1744111046000+0800)/ | 6 | 0 | 0 | 5 | 3 | [] | [] | [] | 非常不错的体验 | zh-cn | nan | nan | False | /trip_flutter?flutterName=flutter_trip_shoot_review_detail&businessId=208331747 | https://m.xxx.com/webapp/you/comment/detail/77323/66/208331747.html | /rn_destination_video/main.js?CRNModuleName=destinationlive&CRNType=1&initialPage=CommentFloat&id=208331747&isPresent=0&topPercent=0.3&isTransparentBg=YES&scene=review&topBackgroundColor=rgba(0,0,0,0.6) | 2025-04-08 发布点评 | False | nan | nan | nan | nan | nan | nan | nan | nan | nan | 湖北 | nan | False | False | {“clientId”:“”,“currency”:“”,“platform”:“”,“cctPlatform”:“”} | nan | /pages/gs/comment/detail?BusinessId=0&BusinessType=0&CommentId=208331747&POIId=0&SightId=0 | 0 | nan | nan | 朋友出游 | nan | 0 | False | nan | happy | Hubei | 朋友出游 | 2025-04-08 00:00:00 | 2025-04 |
1 | 1 | 208312224 | 208312224 | nan | nan | [] | nan | [] | [] | 77323 | 66 | 78248 | 70 | 165 | 5 | 1128137131147441 | False | False | nan | False | False | False | 1 | 来自订单 | /Date(1744093379000+0800)/ | 6 | 0 | 0 | 5 | 3 | [] | [] | [] | 一次不错的旅行 | zh-cn | nan | nan | False | /trip_flutter?flutterName=flutter_trip_shoot_review_detail&businessId=208312224 | https://m.xxx.com/webapp/you/comment/detail/77323/66/208312224.html | /rn_destination_video/main.js?CRNModuleName=destinationlive&CRNType=1&initialPage=CommentFloat&id=208312224&isPresent=0&topPercent=0.3&isTransparentBg=YES&scene=review&topBackgroundColor=rgba(0,0,0,0.6) | 2025-04-08 发布点评 | False | nan | nan | nan | nan | nan | nan | nan | nan | nan | 河南 | nan | False | False | {“clientId”:“”,“currency”:“”,“platform”:“”,“cctPlatform”:“”} | nan | /pages/gs/comment/detail?BusinessId=0&BusinessType=0&CommentId=208312224&POIId=0&SightId=0 | 1 | nan | nan | 朋友出游 | nan | 0 | False | nan | happy | Henan | 朋友出游 | 2025-04-08 00:00:00 | 2025-04 |
2 | 2 | 208312203 | 208312203 | nan | nan | [] | nan | [] | [] | 77323 | 66 | 78248 | 70 | 165 | 5 | 1128137131147064 | False | False | nan | False | False | False | 1 | 来自订单 | /Date(1744093357000+0800)/ | 6 | 0 | 0 | 5 | 3 | [] | [] | [] | 表演多,环境好 | zh-cn | nan | nan | False | /trip_flutter?flutterName=flutter_trip_shoot_review_detail&businessId=208312203 | https://m.xxx.com/webapp/you/comment/detail/77323/66/208312203.html | /rn_destination_video/main.js?CRNModuleName=destinationlive&CRNType=1&initialPage=CommentFloat&id=208312203&isPresent=0&topPercent=0.3&isTransparentBg=YES&scene=review&topBackgroundColor=rgba(0,0,0,0.6) | 2025-04-08 发布点评 | False | nan | nan | nan | nan | nan | nan | nan | nan | nan | 河南 | nan | False | False | {“clientId”:“”,“currency”:“”,“platform”:“”,“cctPlatform”:“”} | nan | /pages/gs/comment/detail?BusinessId=0&BusinessType=0&CommentId=208312203&POIId=0&SightId=0 | 0 | nan | nan | 朋友出游 | nan | 0 | False | nan | happy | Henan | 朋友出游 | 2025-04-08 00:00:00 | 2025-04 |
✅ 预处理步骤
- 清洗:去除广告、水贴、空评论、重复评论
- 分词:使用
jieba
进行中文分词 - 去停用词:自定义停用词表
- 专有名词:自定义专有名词表
- 去重与标准化处理
三、评论关键词挖掘与词云分析
利用 n-gram 方法,统计了评论中出现频率较高的 n-gram词组,并分别为好评和差评生成了词云图,帮助我们更直观地理解游客的情感倾向和关注点。
N-gram代码
from sklearn.feature_extraction.text import CountVectorizer
from wordcloud import WordCloud
import matplotlib.pyplot as plt
comments = df[df['score']<4]['content'].to_list()
# 用 jieba 分词后合并为字符串
texts = [" ".join(jieba.lcut(comment)) for comment in comments]
# 生成 N-gram 特征(比如 bi-gram)
vectorizer = CountVectorizer(ngram_range=(2, 2)) # 2-gram
X = vectorizer.fit_transform(texts)
ngrams_freq = X.toarray().sum(axis=0)
# 得到词组和频率
ngram_freq_dict = {word.replace(' ',''): freq for word, freq in zip(vectorizer.get_feature_names_out(), ngrams_freq)}
# 打印 top N 的词组
sorted_ngrams = sorted(ngram_freq_dict.items(), key=lambda x: int(x[1]), reverse=True)
sorted_ngrams = [(s[0], int(s[1]))for s in sorted_ngrams]
print("Top ngram 词组:")
for word, freq in sorted_ngrams[:1]:
print(f"{word} : {freq}")
🌟 好评词云分析
提取了评论中的高频 2-gram词组,分析出以下热门正向词组:
- 演出精彩、性价比超高、值得一去、非常不错、表演很多
- 孩子喜欢、打铁花震撼、节目丰富、适合孩子、非常推荐
- 推荐推荐、表演精彩、节目非常好、非常好玩、演员敬业
📷 好评词云图
🎯 大多数游客对景区的 表演内容 和 性价比 表现出高度满意,尤其是 打铁花 等节目深受好评,适合亲子家庭游玩。
⚠ 差评词云分析
同样,我们提取了 2-gram 负面评论中的常见词组,并绘制了差评词云图:
- 体验极差、垃圾客服、景区人员态度差、排队时间长、价格偏高
- 限流措施差、踩踏事件、节假日人多、厕所差、没有体验感
- 交通不便、服务差、没有限流、非常不好、没有任何提醒
📷 差评词云图
🎯 负面情绪集中在 服务质量、设施维护、游客密度管理 以及 交通便利性 等方面,尤其在节假日游客过多时,存在较为严重的 排队 和 踩踏 等问题,影响了游客的整体体验。
四、情感标签分布情况
对所有评论文本进行了情感倾向识别,使用 BERT 模型 进行情感分类,并将评论划分为以下情感标签:
- 标签:Happy、Neutral、Angry、Sad、Surprise、Fear
预测代码
# 加载模型和tokenizer
model = BertForSequenceClassification.from_pretrained('./saved_model')
tokenizer = BertTokenizer.from_pretrained('./saved_model')
def predict_sentiment(input_text):
inputs = tokenizer(input_text, return_tensors='pt', truncation=True, padding=True, max_length=512)
# 进行推理
with torch.no_grad():
outputs = model(**inputs)
# 获取预测结果
predictions = torch.argmax(outputs.logits, dim=-1)
predicted_label_index = predictions.item() # 数字标签(0 到 5)
# 反编码为原始标签
predicted_label = label_encoder.inverse_transform([predicted_label_index])[0]
return predicted_label
情感分布
- Happy:2244条评论
- Neutral:432条评论
- Angry:420条评论
- Sad:104条评论
- Surprise:36条评论
- Fear:4条评论
📊 情感分布柱状图
🎯大多数游客的评论呈现 正面情感,其中 Happy 标签的评论数量远高于其他标签。负面情绪主要集中在 Angry 和 Sad 标签,其中 排队、服务体验 等问题可能导致了游客的 负面情绪。少量评论中出现 Fear 和 Surprise 标签,可能与游客的意外体验或不满情绪相关。
🧑🤝🧑 游客类型与情感偏好分析
我们对不同游客类型(如家庭亲子、情侣夫妻、朋友出游等)进行了情感倾向分析,统计了每种游客类型在情感标签(如 Happy、Neutral、Angry 等)下的占比。
📊 游客类型 vs 情感分布柱状图
🎯通过对不同游客类型的情感分析,发现:
家庭亲子:情感表现最为积极,正面评价占比超过70%。这可能与景区丰富的亲子活动和演出有关,满足了家庭游客的需求。
朋友出游和情侣夫妻:也表现出较高的正面情感比例,说明景区的武侠文化和互动体验对这些群体有较大吸引力。
五、评论数量的时间变化趋势分析
统计了每月评论数量与情绪变化趋势,发现评论量与假期/旅游旺季高度相关
📉 月度评论变化折线图
📌 分析结果
- 2024年全年评论趋势
- 持续活跃:2024年全年评论数量保持相对活跃,尤其是节假日和旅游旺季,评论量明显增加。
- 8月评论高峰:2024年8月达到了评论量的最高点(239条),这与暑期旅游高峰、节假日相关,也是景区开展二次元漫展狂欢节所致。
- 2025年初评论趋势
- 高位持续:2025年前几个月评论数量依然保持在高位,反映出景区和旅游地的热度持续不减,游客的关注度仍然较高。表明该景区在短期内仍然维持高涨的活跃度。
- 社交平台影响
- 平台效应:2024年8月和2025年初的高评论量可能与抖音、小红书等社交平台的流行密切相关,尤其是在这些平台上进行的景区推广和游客分享,带动了评论量的大幅提升。
- 用户生成内容(UGC):社交平台的高互动性和游客的积极分享,增强了景区的曝光度,也推动了游客更频繁地在平台上发布评论,形成了自我循环的效果。
- 趋势结论
- 热度持续:景区的热度从2023年延续到2025年,反映出旅游市场的稳定活跃。尤其是在社交平台的推动下,景区的关注度和评论量持续增长。
六、语义网络分析
对评论中的关键词进行了深度分析,构建了语义网络,揭示了不同关键词之间的关联与影响。通过该分析,我们能够识别出游客评论中最常提及的主题和热点问题,帮助我们更好地理解游客的关注点。
📊 语义网络分析图
📌 分析结果
-
高频关键词:
- “表演”、“演出”、“节目”:这些关键词的频率很高,显示出游客对景区表演类活动的高度关注,尤其是关于“打铁花”和“精彩”的描述。
- “景区”、“景点”:这两个词频繁出现在评论中,表明游客关注的重点是景区本身以及其各类景点设施。
- “价格”、“性价比”、“门票”:这些关键词与景区的收费有关,反映出游客对价格和性价比的敏感度。
-
关键词关联:
- 表演类活动:如“精彩”、“震撼”、“好看”等关键词与“演出”、“表演”高度关联,表明游客对这些活动的热衷和赞赏。
- 价格相关:如“贵”、“便宜”、“性价比”等词汇与“门票”、“价格”直接相关,突出游客对收费的关注点。
七、总体总结
通过对景区评论数据的深入挖掘与情感分析,我们得出以下关键结论:
- 游客整体满意度较高,评论中积极情绪占比超过 75%,景区的表演内容与环境体验是最受认可的核心优势;
- 负面反馈集中在高峰期的排队、拥挤与配套服务不足,影响游客节假日期间的整体体验;
- 游客群体以家庭亲子和朋友出游为主,需求存在差异,需做出更有针对性的服务与活动设计;
- 节假日评论激增且情绪波动较大,反映出运营调度与服务承载在关键时间节点上的挑战;
import requests
url = "http://wx.17610352720.wx"
response = requests.get(url)
print(response.text) #获取数据集
八、结语
该分析仅供学习交流使用,禁止用于商业用途,不构成任何投资建议。
数据不止于分析,更应反哺运营。将游客声音转化为行动方向,是实现景区可持续增长和口碑提升的关键。
创作不易,如果你觉得有帮助,请点个赞支持一下。你的鼓励是我创作的最大动力,期待未来能为大家带来更多有趣的分析文章。感谢大家的阅读和支持!