大数据毕业设计hadoop+spark旅游推荐系统 旅游可视化系统 地方旅游网站 旅游爬虫 旅游管理系统 计算机毕业设计 机器学习 深度学习 知识图谱

基于hive数据仓库的贵州旅游景点数据分析系统的设计与实现

摘  要

随着旅游业的快速发展和数字化转型,旅游数据的收集和分析变得越来越重要。贵州省作为一个拥有丰富旅游资源的地区,旅游数据的分析对于促进旅游业的发展和提升旅游体验具有重要意义。基于Hive数据仓库的贵州省旅游景点数据分析系统的设计与实现,旨在建立一个高效、可靠且功能丰富的系统,帮助利益相关者准确理解和利用旅游数据,为决策和规划提供可靠依据。

本系统通过数据采集与存储模块,将贵州省的旅游景点数据收集到一个中心化的数据平台,确保数据的准确性和一致性。同时,借助Hive数据仓库的设计,实现了灵活的数据模型和高效的数据查询与分析能力。系统的功能模块设计包括数据导入模块和查询与分析模块,前者实现了对新数据的导入和预处理,后者提供了多维度的数据查询和分析功能。

关键词:hive  旅游

1.1研究背景及意义

  贵州省作为中国的旅游目的地之一,拥有丰富多样的自然景观和独特的民族文化,吸引了大量的游客前来观光和旅游。如今,随着旅游业的迅速发展和智能化技术的进步,对于旅游数据的分析和利用变得越来越重要。然而,目前尚缺乏一个完备的贵州省旅游景点数据分析系统,以全面、准确地了解和管理贵州省的旅游景点数据,为相关决策提供支持和参考。

本项目的目的是基于Hive数据仓库,设计和实现一个贵州省旅游景点数据分析系统,旨在为用户提供方便、快捷的数据分析和查询功能,帮助相关人员深入了解贵州省旅游景点的情况,提供数据支持和参考,促进旅游业的持续发展。

总之,贵州省旅游景点数据分析系统的设计与实现将为贵州旅游业的发展带来巨大的推动力,为决策者提供科学的决策依据,提升景区的运营效率和服务质量,进一步提升贵州省作为旅游目的地的知名度和吸引力。

1.2 开发现状

  国外与国内相比下来,国外由于互联网很早就拥有了分析系统,因此,他们对于旅游分析系统方面的研究远比国内深入,而纵观几十年来的科技发展,可以很清楚的看到他们的旅游分析系统的发展阶段,具体可以分为三个阶段。

  1. 初始阶段:1959年IBM公司的销售员R. Blair Smith建议美国航空公司总裁C.R.Smith一起去开发一个计算机订位系统(SABRE),1960年世界首个计算机订位系统诞生。
  2. 发展阶段:由于科技的发展,1979年-1995年这期间很多机票的购买,酒店预订,乘车等事务都可以通过网络来完成,这让旅游系统得到更多的关注,大大推进了旅游网站的发展.
  3. 高潮阶段:旅游文化的兴起,1995年世界旅游组织,以及国外多个旅游机构举办了世界信息技术与旅游会议,体现出计算机与旅游业密不可分的关系。

国内的旅游信息化与国外相比由于起步较晚以及多种原因,等到改革开放后才开始有这方面的研究,即使起步晚经过国人的不断学习与研究,在旅游信息化科技发展方面已经堪比国外大国了。国内旅游网站发展可以分为三个阶段。

  1. 萌芽阶段:由于改革开放,大量国外旅游文化与科技涌入国内,1998年-2002年在互联网技术发展蓬勃时,旅游网站也因此出现在人们的视野
  2. 发展阶段:以前国内旅游网站主要以服务为主,在2003年-2008年这期间由于互联网的飞速发展,在以往以服务为主的基础上加上了旅游路线,以及在线旅游模式,这让国内旅游网站的用户迎来了爆发式的增长。
  3. 成熟阶段:从2008年以后,旅游网站已经成了我国游客必不可少的工具,即使已经成熟,但是仍然在稳步发展。

2 开发工具及相关技术

2.1 Hive描述

Apache Hive是一个容错分布式的数仓系统,可实现大规模分析。 而且Hive 元存储(HMS提供了一个元数据的中央存储库可以很快速的分析做出有用的信息数据驱动的决策,因此它多数据湖架构的关键组成部分。 Hive通过Apache Hadoop建立再由hdfs支持S3,adls,gs等存储。除此之外Hive 允许用户使用 SQL 读取、写入和管理数据。

优点:

  1. Hive不用去写MapReduce,大大减少了程序员的学习成本。
  2. Hive可以更好地处理大数据,由于延迟高的问题,处理小数据没有优势。
  3. Hive简单,易上手,拥有快速开发的能力
  4. 支持用户自定义函数

缺点:

  1. 调优困难
  2. 不擅长数据挖掘
  3. 不能表达迭代算法

2.2 MySQL描述

MySQL是一个DBMS(数据库管理系统)。由于它的体积小,总体拥有成本低,速度快,开放源码等特点,也让它成为了当前最流行的关系型数据库管理系统,很多中小型的网站开发者都会用MySQL使用SQL语言操作,将MySQL作为网站数据库。

优点:

  1. 体积小,总体拥有低,速度快,开放源码。
  2. 核心采用多线程编程,使用多线程实现MySQL可以充分利用CPU资源。
  3. 支持Windows,Linux,HP-UX,OpenBSD等多种操作系统。
  4. MySQL有安全的权限和口令系统,支持主机认证。

缺点:

  1. 不支持自定义数据类型。
  2. 安全系统过于复杂。
  3. 对触发器支持和存储过程不友好。
  4. 不能备份。

2.3 Spring Boot概述

Spring Boot是一个快速开发的框架。用于简化加快Spring应用的建立,运行,调节测试和安装部署。可以更好地解决依赖问题,简化并且加快了Java web的开发,让开发人员可以更合理的运用自己的开发时间。

优点:

  1. 能够快速建立项目。
  2. 提高了开发和部署的效率。
  3. 不用外部依赖Servlet容器也可以独立运行。
  4. 不用配置也可以也可以对主流开发框架进行开发。

2.4 Pycharm简介

Pycharm是一种Python IDE,是Python语言的高效率开发工具,如项目管理,调试,单元测试,代码跳转,版本控制,智能提示等。

优点:

  1. 支持web框架开发,如Flask,Pyramid,Django。
  2. 能够快速精确地修复bug。
  3. 可在远程主机上进行程序开发。

缺点:

  1. 界面过于复杂。
  2. 成本过高。

2.5 Vue.js 描述

Vue是一款用于构建用户界面的JavaScript框架。他基于CSS,HTML,JavaScript构建。可以高效的构建想要的界面。还是一个渐进式框架,可以逐步集成且相当灵活。

优点:

  1. 能够修改和使用现有的应用程序。
  2. 无论简单还是复杂都能够集成小部件且不会影响系统。
  3. 可以更好的编辑文档。
  4. 具有很强的适应性。

缺点:

  1. 不支持IE8。
  2. 存在程序开发问题。

(1)技术方面,本系统使用了Hive,MySQL技术来支持数据逻辑与事务,P然后前台的页面显示用H5来做,Python来爬取数据,Spring Boot做前端的框架。这些技术都由本人在课堂上经过学习积累所得以及一些编程网站学习所得。这些技术都有在课堂上做不同的项目实践过,可以更好地开发系统。从技术方面来看,这个系统是可以实现的。

(2)经济方面,因为这个系统的目的是为游客提供更好的旅游路线以及购票服务,还有工作人员更好的管理后台,这就是我们能够直接使用信息化软件,而且这个系统主要成本集中于对数据后期的维护和管理,他所提供的高效率和低成本远远低于一般的系统。同时也可以很明显的发现这个系统的实际应用方面的价值已经超过了系统实际开发和维护所需的成本,因此从经济上说,本系统是可行的。

(3)实用方面,本系统包含了购票,评论,相关景点推荐,在当前大时代是紧跟时代潮流的,还有更优的旅游路线,游客可以通过互联网更清晰的了解到自己需要的东西,并且非常便捷和快速,还提高了游客的体验感觉。所以从实用方面也是可行的。

前台分为未注册和已注册两种服务需求。

未注册用户:

注册账号:用户填写个人信息并进行验证。

浏览景点:用户可以从景点分类中查看某个景点的信息如“名称,特点,景点地区,票价,其他用户的评论”。

已注册用户:

登录:用户输入账号及密码进行登录。

修改个人信息:用户进入个人信息面板可对信息进行修改。

点击评论:用户点击评论可查看其他用户对该景点的评价。

购票:用户点进购票页面,根据自己的需求可以去购买相应的票据。

评论:用户可以经过自己的感受对景点做出评论

景点资讯:用户登录后可以查看系统中最新的资讯。

景点信息:用户可以根据需求点击相应的景点浏览信息。

推荐:用户在浏览景点后在此基础上推荐类似的景点,形成推荐列表,提供给用户更好的购票等,还能购票删除记录。

3.3.2 后台管理员功能

登陆密码修改:管理员可以修改自己的登录密码,保障系统的安全性。

处理购票单:管理员可以查看购票单信息。

景点信息管理:管理员可以对景点信息进行增加,修改,删除,维护。

景点分类管理:管理员可以对景点分类进行增加,修改,删除,维护。

评论管理:管理员可以查看用户评论,给出建议,还可以删除评论。

用户管理:管理员可以管理用户并查看用户信息。

核心算法代码分享如下:

import csv
import timeimport requests
from DrissionPage import ChromiumPage
from DrissionPage.common import ActionChains# 创建页面对象,并启动或接管浏览器
page = ChromiumPage()
import re
import pymysql
#area_list = ['北京','天津','上海','重庆','河北','山西','辽宁','吉林','黑龙江','江苏','浙江','安徽','福建','江西','山东','河南','湖北','湖南','广东','海南','四川','贵州','云南','陕西','甘肃','青海','台湾','内蒙','广西','西藏','宁夏','新疆']
area_list = ['云南',]
zxs=['北京','天津','上海','重庆']# 数据库配置信息
host = "localhost"
port = 3306
user = "root"
password = "123456"
database = "tour"
# 连接mysql
conn = pymysql.connect(host=host, port=port, user=user, password=password, database=database)
cursor = conn.cursor()def existsTour(name):sql="select count(*) from tb_tour where  name='%s'"connect = Noneconnect = pymysql.connect(host="localhost", port=3306, user="root",password="123456", database="tour")cur = connect.cursor()print(sql % name)cur.execute(sql % name)exist_count = cur.fetchmany(1)if exist_count[0][0] > 0:return 1else:return 0def address2(address):url="xxxxxxxxxxxxxxxx"%('f1063cfc84a84bd3b1d3a339c87b8bd0',address)data=requests.get(url)contest=data.json()#返回经度和纬度print(contest)contest=contest['geocodes'][0]print(contest)return contestfor area in area_list:#url="xxxxxxxxxxxxxxxx"url="xxxxxxxxxxxxxxxx"req_urk=url % area# 跳转到登录页面page.get(req_urk)# 换成景点门票ele = page.ele('xpath://ul[@class="search_type_tab"]//li[@data-type="TICKET"]')ele.click()ele = page.ele('xpath://input[@class="lv_search w_380"]')# 输入对文本框输入账号ele.input(area)# 点击登录按钮page.ele('xpath://span[@class="btn_lv_search"]').click()#time.sleep(3)ac = ActionChains(page)# for s in range(1, 10):#     # print(name)#     ac = ac.scroll(delta_y=20000)#总页码#page.run_js("window.scrollTo(0, document.body.scrollHeight)")#time.sleep(10)pages=int(page.ele('xpath://div[@class="pagebox"]/a[last()-1]/text()'))pages=int(pages)for p in range(0,pages):#cp=page.ele('xpath://div[@class="pagebox"]/a[@class="nextpage"]')#cp.click()# 滑动到底部cp_url="xxxxxxxxxxxxxxxx"+str(p+1)+"?keyword="+area+"&tabType=ticket#list"page.get(cp_url)#开始取值tours=page.eles('xpath://div[@class="product-regular clearfix"]')for tour in tours:#景点名称必然能取到并且不报错name=tour.ele('xpath://div[@class="product-section"]/h3[@class="product-ticket-title"]/a/text()')if existsTour(name) == 1:print('景点',name,'存在,无需反复爬取!')continuetry:AAAAA_Str=tour.ele('xpath://span[@class="level"]/text()').strip()grade=str(len(AAAAA_Str))+'A'except :grade='0A'try:address=tour.ele('xpath://dl[1]/dd/@title').strip()except:address = nametry:intro=tour.ele('xpath://dl[4]/dd/div').raw_text.strip()except:intro='暂无'try:#异常说明也没评论数据hot=tour.ele('xpath://ul[@class="product-number"]/li[1]/b/text()').strip()except:hot=0#评分score=hot# 评论数 评分连接try:# 异常说明也没评论数据c_str = tour.ele('xpath://ul[@class="product-number"]/li[2]/a/text()').strip()result = re.findall("\d+", c_str)comments = result[0]comments_url=tour.ele('xpath://ul[@class="product-number"]/li[2]/a/@href').strip()except:comments = 0comments_url='暂无'price =tour.ele('xpath://div[@class="product-price"]/em/text()').strip()try:#异常说明也没售出数据sold_str=tour.ele('xpath://ul[@class="product-number"]/li[2]/a/text()').strip()result = re.findall("\d+", sold_str)msold =result[0]except:msold=0#lng lat调用工具print('#正在调用高德地图API获取经纬度===================================================')try:resp_add=address2(address)print('高德返回结果',resp_add)#lng=resp_add.split(',')[0] #经度#lat=resp_add.split(',')[1] #纬度lng = resp_add['location'].split(',')[0]  # 经度lat = resp_add['location'].split(',')[1]  # 纬度except:lng='102.712251'lat='25.040609'#district = resp_add['district']  # 纬度print('经度',lng,'纬度',lat)print('#正在调用高德地图API获取经纬度===================================================')img=tour.ele('xpath://img/@src').strip()province_city = tour.ele('xpath://span[@class="city"]/text()').strip()province_city = province_city.replace('[', '')province_city = province_city.replace(']', '')province_city_arr = province_city.split('·')city_ = province_city_arr[0]if city_ in zxs:province = ''city = province_city_arr[0]district = province_city_arr[1]else:province = province_city_arr[0]city = province_city_arr[1]district = district = resp_add['district'] #从高德地图取sql = "replace into tb_tour (name,grade,address,intro,hot,price,msold,lng,lat,img,province,city,district) " \"values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"#data = (name, grade, address, intro, hot, price, msold, lng, lat, img, province, city, district,comments,comments_url)data = (name, grade, address, intro, hot, price, msold, lng, lat, img, province, city, district)print(name, grade, address, intro, hot, price, msold, lng, lat, img, province, city, district,comments,comments_url)try:cursor.execute(sql, data)except:print('sql出错',sql%(name, grade, address, intro, hot, price, msold, lng, lat, img, province, city, district))continue#cursor.execute(sql, data)conn.commit()########向景点csv写内容tours_file = open("tours.csv", mode="a+", newline='', encoding="utf-8")tours_writer = csv.writer(tours_file)address = address.strip().replace(',', ',').replace('"', '').replace("'", '').replace("\n", '').replace('\r','').replace( '\t', '')intro = intro.strip().replace(',', ',').replace('"', '').replace("'", '').replace("\n", '').replace('\r','').replace( '\t', '')name = name.strip().replace(',', ',').replace('"', '').replace("'", '').replace("\n", '').replace('\r','').replace( '\t', '')tours_writer.writerow([name, grade, address, intro, hot, price, msold, lng, lat, img, province, city, district,comments,comments_url])tours_file.close()

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

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

相关文章

程序汪10万接的多平台视频分发项目,模拟人工发视频

本项目来自程序汪背后的私活小团队,开发了一个多平台分发视频项目,给粉丝分享一下解决方案和具体项目分开情况付款情况等等细节,希望给想接私活的朋友一些经验参考 程序汪10万接的多平台视频分发项目,模拟人工发视频 视频版本 在 …

RedCap轻量化5G提升生产效率,多领域应用

在工业数字化时代,工业智能化已经成为了各行各业的发展趋势。而在这个过程中,5G作为新一代网络通信技术正逐渐成为工业领域的核心力量。而在5G技术的应用中,RedCap轻量化5G工业网关路由器便是低成本畅享5G的最佳选择。 RedCap轻量化5G工业网…

x-cmd-pkg | broot 是基于 Rust 开发的一个终端文件管理器

简介 broot 是基于 Rust 开发的一个终端文件管理器,它设计用于帮助用户在终端中更轻松地管理文件和目录,使用树状视图探索文件层次结构、操作文件、启动操作以及定义您自己的快捷方式。 同时它还集成了 ls, tree, find, grep, du, fzf 等工具的常用功能…

Github2024-04-03 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-03统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4TypeScript项目2Jupyter Notebook项目2C++项目1Shell项目1Go项目1非开发语言项目1Rust项目1从零开始构建你喜爱的技术 创建周期:21…

【教程】宝塔default.db占用空间几十g解决方法|宝塔占用磁盘空间特别大解决方法|宝塔磁盘被占满怎么清理

目录 一、前言二、排查问题三、解决方法 一、前言 用过宝塔创建网站,大家应该都非常熟悉,但是用随着用的时间越来越多,宝塔所占用的空间也越来越多,不停的加大数据盘都没有用,我原先买了30G够用了,随着时间…

Redis 主从复制,哨兵模式,集群

目录 主从复制 主从复制 作用 缺陷 主从复制流程 实现Redis主从复制 哨兵模式 主从复制切换的缺点 哨兵的核心功能 哨兵模式原理 哨兵模式的作用 哨兵结构组成 故障转移机制 主节点的选举 实现哨兵模式 集群(Cluster) redis群集有三种模式,主从复制…

idea maven 打包 内存溢出 报 GC overhead limit exceeded -> [Help 1]

idea 使用maven打包 报GC overhead limit exceeded -> [Help 1] 解决方法: 打开settings -> 点开如同所示 将 vm Options 参数 设为 -Xmx8g

互联网轻量级框架整合之Spring框架II

持久层框架 Hibernate 假设有个数据表&#xff0c;它有3个字段分别是id、rolename、note, 首先用IDEA构建一个maven项目Archetype选择org.apache.maven.archetypes:maven-archetype-quickstart即可&#xff0c;配置如下pom <project xmlns"http://maven.apache.org/…

MyBatis强大的动态Sql功能

1.动态不定增加 根据需求 , 动态的拼接SQL 。 用户有的信息是必须输入&#xff0c;但有的不是必须进行输入 比如在填写注册信息的时候&#xff0c;有时候密码是一定要填写的&#xff0c;而银行卡号不是必须填写的 1)注解方式 测试类中 &#xff1a; 使用 if 标签 可以实现动…

​如何使用ArcGIS Pro进行洪水淹没分析

洪水淹没分析是一种常见的水文地理信息系统应用&#xff0c;用于模拟和预测洪水事件中可能受到淹没影响的地区&#xff0c;这里为大家介绍一下ArcGIS Pro进行洪水淹没分析的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&…

ES学习日记(九)-------logstash导入数据

一、安装和下载 es官网下载地址 官方介绍:Logstash是开源的服务器端数据处理管道&#xff0c;能够同时从多个来源采集数据&#xff0c;转换数据&#xff0c;然后将数据发送到您最喜欢的“存储库”中。(我们的存储库当然是 Elasticsearch。) 下载和ES一样的版本(很重要,必须这…

Beaver Builder Pro v2.8.0.6:最佳的WordPress页面构建器插件

如果你正在寻找一个能帮助你轻松创建具有专业外观的网站的工具&#xff0c;那么Beaver Builder Pro v2.8.0.6就是你的最佳选择。这个高级WordPress插件提供了一个直观的前端可视化页面构建器&#xff0c;让你可以通过拖放元素来快速构建无限的自定义帖子和页面。 Beaver Buil…