【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题二方案及Python实现

您所在的位置:网站首页 progress手办官网 【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题二方案及Python实现

【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题二方案及Python实现

2024-07-10 01:02:27| 来源: 网络整理| 查看: 265

在这里插入图片描述

目录 相关链接代码下载1 问题二题目2 思路方案4 Python实现4.1 提取旅游产品4.1.1 数据准备4.1.2 单独提取公众号和游记攻略的旅游产品4.1.3 存储result2-1表 4.2 热度分析4.2.1 读取数据4.2.2 统计情感得分4.2.3 按年份统计旅游产品出现的次数 4.3 计算产品热度得分4.4 判断产品类型4.5 存储result2-1.csv

相关链接

(1)问题一方案及实现博客介绍

(2)问题二方案及实现博客介绍

(3)问题三方案及实现博客介绍

代码下载

https://github.com/BetterBench/BetterBench-Shop

1 问题二题目

完整的题目,请看第一篇文章

【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题一方案及Python实现

问题二:周边游产品热度分析

从附件提供的 OTA、UGC 数据中提取包括景区、酒店、网红景点、民宿、特色餐饮、乡村旅游、文创等旅游产品的实例和其他有用信息,将提取出的旅游产品和所依托的语料以的形式保存为文件“result2-1.csv”。建立旅游产品的多维度热度评价模型,对提取出的旅游产品按年度进行热度分析,并排名。将结果以表 3 的形式保存为文件“result2- 2.csv”。

2 思路方案

思路:本人从两个维度去计算产品热度,第一个是产品名称的词频,第二个是情感得分。

提取产品名称,是通过Textrank算法中文版提取关键词词组。通过cnsenti包计算情感,正向1,负向-1,中性0。通过权重相加得到总得热度得分。

还可以改进的,需要从其他维度去计算得分,并按一定权重相加。

4 Python实现 from tqdm import tqdm import pandas as pd tqdm.pandas() Hotel_reviews1 = pd.read_excel( './data/2018-2019茂名(含自媒体).xlsx', sheet_name=0) # 酒店评论 Scenic_reviews1 = pd.read_excel( './data/2018-2019茂名(含自媒体).xlsx', sheet_name=1) # 景区评论 Travel_tips1 = pd.read_excel( './data/2018-2019茂名(含自媒体).xlsx', sheet_name=2) # 游记攻略 Dining_reviews1 = pd.read_excel( './data/2018-2019茂名(含自媒体).xlsx', sheet_name=3) # 餐饮评论 Wechat_article1 = pd.read_excel( './data/2018-2019茂名(含自媒体).xlsx', sheet_name=4) # 微信公众号文章 Hotel_reviews2 = pd.read_excel( './data/2020-2021茂名(含自媒体).xlsx', sheet_name=0) # 酒店评论 Scenic_reviews2 = pd.read_excel( './data/2020-2021茂名(含自媒体).xlsx', sheet_name=1) # 景区评论 Travel_tips2 = pd.read_excel( './data/2020-2021茂名(含自媒体).xlsx', sheet_name=2) # 游记攻略 Dining_reviews2 = pd.read_excel( './data/2020-2021茂名(含自媒体).xlsx', sheet_name=3) # 餐饮评论 Wechat_article2 = pd.read_excel( './data/2020-2021茂名(含自媒体).xlsx', sheet_name=4) # 微信公众号文章 Hotel_reviews = pd.concat([Hotel_reviews1, Hotel_reviews2],axis=0) # 酒店评论 Scenic_reviews = pd.concat([Scenic_reviews1, Scenic_reviews2], axis=0) # 景区评论 Travel_tips = pd.concat([Travel_tips1, Travel_tips2], axis=0) # 游记攻略 Dining_reviews = pd.concat([Dining_reviews1, Dining_reviews2], axis=0) # 餐饮评论 Wechat_article = pd.concat([Wechat_article1, Wechat_article2], axis=0) # 微信公众号文章 ''' 旅游产品,亦称旅游服务产品。是指由实物和服务构成。包括旅行商集合景点、交通、食宿、娱乐等设施设备、 项目及相应服务出售给旅游者的旅游线路类产品,旅游景区、旅游饭店等单个企业提供给旅游者的活动项目类产品 ''' 4.1 提取旅游产品 4.1.1 数据准备

由于酒店评论、景区评论和餐饮评论,直接给出了旅游产品,直接汇总就可以。但微信公众号和游记攻略没有特定的旅游产品,需要建立模型,提取出旅游产品的名称

Scenic_reviews.head(10)

在这里插入图片描述

def addstr(s): return '景区评论-'+str(s) Scenic_reviews['语料ID'] = Scenic_reviews['景区评论ID'].progress_apply(addstr) Scenic_reviews['文本'] = Scenic_reviews['评论内容'] Scenic_reviews['产品名称'] = Scenic_reviews['景区名称'] Scenic_reviews['年份'] = pd.to_datetime(Scenic_reviews['评论日期']).dt.year Hotel_reviews.head(10)

在这里插入图片描述

def addstr(s): return '酒店评论-'+str(s) Hotel_reviews['语料ID'] = Hotel_reviews['酒店评论ID'].progress_apply(addstr) Hotel_reviews['文本'] = Hotel_reviews['评论内容'] Hotel_reviews['产品名称'] = Hotel_reviews['酒店名称'] Hotel_reviews['年份'] = pd.to_datetime(Hotel_reviews['评论日期']).dt.year Dining_reviews.head(10)

在这里插入图片描述

def addstr(s): return '餐饮评论-'+str(s) Dining_reviews['语料ID'] = Dining_reviews['餐饮评论ID'].progress_apply(addstr) Dining_reviews['文本'] = Dining_reviews['评论内容'] + '\n'+Dining_reviews['标题'] Dining_reviews['产品名称'] = Dining_reviews['餐饮名称'] Dining_reviews['年份'] = pd.to_datetime(Dining_reviews['评论日期']).dt.year 4.1.2 单独提取公众号和游记攻略的旅游产品 # 采用Textrank提取关键词组算法 。。.。略 请下载完整代码 4.1.3 存储result2-1表 。。.。略 请下载完整代码

在这里插入图片描述

product_id = ['ID'+str(i+1) for i in range(len(all_df))] all_df['产品ID'] = product_id result2 = all_df[['语料ID','产品ID','产品名称']] result2

在这里插入图片描述

result2.to_csv('./data/result2-1.csv', index=False) all_df.to_csv('./data/问题二所有数据汇总.csv', index=False) 4.2 热度分析 4.2.1 读取数据 import warnings import pandas as pd from tqdm import tqdm tqdm.pandas() warnings.filterwarnings('ignore') all_df = pd.read_csv('./data/问题二所有数据汇总.csv') all_df

在这里插入图片描述

4.2.2 统计情感得分 。。.。略 请下载完整代码

在这里插入图片描述

4.2.3 按年份统计旅游产品出现的次数 year_2018 = all_df[all_df['年份']==2018] year_2019 = all_df[all_df['年份'] == 2019] year_2020 = all_df[all_df['年份'] == 2020] year_2021 = all_df[all_df['年份'] == 2021] dict_2018 = dict(year_2018['产品名称'].value_counts()) def get_frequency(s): fre = dict_2018[s] return fre year_2018['出现频次'] = year_2018['产品名称'].progress_apply(get_frequency) dict_2019 = dict(year_2019['产品名称'].value_counts()) def get_frequency(s): fre = dict_2019[s] return fre year_2019['出现频次'] = year_2019['产品名称'].progress_apply(get_frequency) dict_2020 = dict(year_2020['产品名称'].value_counts()) def get_frequency(s): fre = dict_2020[s] return fre year_2020['出现频次'] = year_2020['产品名称'].progress_apply(get_frequency) dict_2021 = dict(year_2021['产品名称'].value_counts()) def get_frequency(s): fre = dict_2021[s] return fre year_2021['出现频次'] = year_2021['产品名称'].progress_apply(get_frequency) 4.3 计算产品热度得分

将情感和频次按权重相加

# 计算综合得分 year_2018['产品热度总分'] = 2*year_2018['出现频次']+year_2018['情感得分'] year_2019['产品热度总分'] = 2*year_2019['出现频次']+year_2019['情感得分'] year_2020['产品热度总分'] = 2*year_2020['出现频次']+year_2020['情感得分'] year_2021['产品热度总分'] = 2*year_2021['出现频次']+year_2021['情感得分'] year_2018['产品热度'] = year_2018['产品热度总分'].div(np.sum(year_2018['产品热度总分']), axis=0) year_2019['产品热度'] = year_2019['产品热度总分'].div(np.sum(year_2019['产品热度总分']), axis=0) year_2020['产品热度'] = year_2020['产品热度总分'].div(np.sum(year_2020['产品热度总分']), axis=0) year_2021['产品热度'] = year_2021['产品热度总分'].div(np.sum(year_2021['产品热度总分']), axis=0) year_2018 = year_2018.sort_values(by="产品热度", ascending=False).reset_index(drop=True) year_2019 = year_2019.sort_values(by="产品热度", ascending=False).reset_index(drop=True) year_2020 = year_2020.sort_values(by="产品热度", ascending=False).reset_index(drop=True) year_2021 = year_2021.sort_values(by="产品热度", ascending=False).reset_index(drop=True) product_hot_score = pd.concat([year_2018, year_2018, year_2020, year_2021], axis=0) product_hot_score

在这里插入图片描述

4.4 判断产品类型 # 分词 import re import jieba stopword_list = [k.strip() for k in open( 'stop/cn_stopwords.txt', encoding='utf8').readlines() if k.strip() != ''] def clearTxt(line): if line != '': line = str(line).strip() #去除文本中的英文和数字 line = re.sub("[a-zA-Z0-9]", "", line) #只保留中文、大小写字母 reg = "[^0-9A-Za-z\u4e00-\u9fa5]" line = re.sub(reg, '', line) #分词 segList = jieba.cut(line, cut_all=False) segSentence = '' for word in segList: if word != '\t': segSentence += word + " " # 去停用词 wordList = segSentence.split(' ') sentence = '' for word in wordList: word = word.strip() if word not in stopword_list: if word != '\t': sentence += word + " " return sentence.strip() product_hot_score['文本'] = product_hot_score['文本'].progress_apply(clearTxt) product_hot_score # 景区、酒店、网红景点、民宿、特色餐饮、乡村旅游、文创 def get_product_type(s): 。。.。略 请下载完整代码 product_hot_score['产品类型判断文本'] = product_hot_score['语料ID'] +' '+product_hot_score['文本'] product_hot_score['产品类型'] = product_hot_score['产品类型判断文本'].progress_apply(get_product_type)

在这里插入图片描述

# 去除重复的产品 product_hot_score2 = product_hot_score.drop_duplicates(['产品名称']) product_hot_score2

在这里插入图片描述

4.5 存储result2-1.csv # 产品 ID 产品类型 产品名称 产品热度 年份 result2_2 = product_hot_score2[['产品ID','产品类型','产品名称','产品热度','年份']] result2_1.to_csv('./data/result2-2.csv',index=False)

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭