目录

  • 相关链接
  • 代码下载
  • 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)

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

  1. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 31页省一等奖论文及代码

    相关链接 (1)[第十届"泰迪杯"数据挖掘挑战赛]B题:电力系统负荷预测分析 问题一Baseline方案 (2)[第十届"泰迪杯"数据挖掘挑战赛]B题:电力系统 ...

  2. 分享篇:第十届“泰迪杯”数据挖掘挑战赛-农田害虫图像识别(特等奖)

    第十届"泰迪杯" 数据挖掘挑战赛优秀作品-农田害虫图像识别--特等奖 实验结果分析 4.1.1 实验配置 本篇论文的实验都是基于 Ubuntu 系统下进行,使用 GPU 和 CPU ...

  3. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 问题二 时间突变分析 Python实现

    目录 相关链接 完整代码下载链接 1 定义绘图函数 2 通过对原始测量应用阈值来查找异常值 3 手动设置阈值 4 使用分位数设置阈值 5 3Sigma原则(IQR) 6 设定分位数 6.1 导入数据 ...

  4. 分享篇:第十届“泰迪杯”数据挖掘挑战赛-农田害虫图像识别(特等奖)一

    1.1 赛题背景 昆虫的种类浩如烟海,农田常见的昆虫是人工生态系统的重要组成部分.分辨益 虫和害虫,保留益虫,消灭害虫,对于减轻害虫对农田的生产危害有重要意义.常见 农田害虫共有 138 种,天敌昆虫 ...

  5. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析第一问LSTM模型的建立

    1️⃣问题分析 地区负荷的中短期预测分析 根据附件中提供的某地区电网间隔15分钟的负荷数据,建立中短期负荷预测模型:

  6. 2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(1.数据处理)

    1. 前言 本题相对来说比较适合新手,包括针对数据的预处理,数据分析,特征提取以及模型训练等多个步骤,完整的做下来是可以学到很多东西的. 2.问题一思路分析 本题要求利用附件中的训练数据进行深入的分析 ...

  7. 2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(2.数据探索性分析)

    前言 继续上一片数据预处理进行续写,利用预处理之后的数据进行数据分析并且解决问题一相关的问题.问题一主要目的是让研究各种因素对于需求量的影响,然后找到确定影响需求量的主要因素并且进行数据分析和主要特征 ...

  8. 泰迪杯数据挖掘挑战赛C题 通用论坛正文提取

    参与第五届泰迪杯,侥幸获得二等奖,简单记录一下. 一.问题的背景 在当今的大数据时代里,伴随着互联网和移动互联网的高速发展,人们产生的数据总量呈现急剧增长的趋势,当前大约每六个月互联网中产生的数据总量 ...

  9. 第八届“泰迪杯”数据挖掘挑战赛C题“泰迪杯”奖论文(基于卷积神经网络及集成学习的网络问政平台留言文本挖掘与分析)

    目 录 第一章 引言 1.1挖掘背景 1.2挖掘意义 1.3问题描述 第二章 群众留言分类 2.1数据准备 2.1.1数据描述 2.1.2数据预处理 2.2特征提取 2.3建立模型 2.3.1卷积神经 ...

  10. 泰迪杯-数据挖掘挑战赛

    http://www.tipdm.org/bdrace/tzjingsai/20181226/1544.html?cName=ral_101 第七届泰迪杯数据挖掘挑战赛组委会及专家组名单 2018-0 ...

最新文章

  1. JVM调优总结 -Xms -Xmx -Xmn -Xss等
  2. TCP之三次握手四次挥手 1
  3. php使用zeromq
  4. ubuntu下用命令行安装Qt
  5. Linux内核参数传递Tag
  6. 行健设计_行健要闻|“第四届‘天行健创新创业设计大赛”培训班成功举办
  7. TensorFlow第六步: 继续挖坑 用tf重写BP并增加SGD
  8. 2018web前端面试题总结
  9. android 加载外部矢量图SVG
  10. 移动端媒体尺寸_网络推广外包浅析提升移动端网站建设效率有哪些网络推广外包技巧-企服...
  11. 企业内网巡航扫描神器
  12. L2-028 秀恩爱分得快(25 分)
  13. 开源的物联网技术平台thingsboard安装测试及使用步骤
  14. tm8211的i2s协议
  15. 使用CSS和HTML实现3D旋转魔方效果
  16. 1寸2寸3寸5寸6寸8寸10寸照片的具体尺寸(附常用照片尺寸对照表)
  17. JS逻辑运算符的与,或,非
  18. 刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK等)以及全角、半角、CJK
  19. SCI收录的文献类型与认证的文献类型
  20. 李玉刚与石头的雨花石

热门文章

  1. 整理一些ChartControl控件属性
  2. C语言程序设计谭浩强第五版复习梳理3
  3. 投资平台服务器状态未知,投资者说20130606:503 service unavailable错误解决教程
  4. 记录windows游戏编程——1
  5. 用C语言实现正则表达式匹配器
  6. 下载——百度文库下载方法
  7. vfp复制表结构_有关VFP表的问题
  8. 问道手游服务器修改,分享一下自己架设问道手游经验和教程【图文篇】
  9. 记一次根据url下载金庸有声小说
  10. Apache roller