【数据分析】盘点五一期间最受欢迎的几个景区


戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg

  

五一假期已经结束,小伙伴是不是都还没有玩过瘾?但是没办法,还有很多bug等着我们去写,同样还有需要money需要我们去赚。为了生活总的拼搏。


640?wx_fmt=gif


今年五一放了四天假,很多人不再只是选择周边游,因为时间充裕,选择了稍微远一点的景区,甚至出国游。各个景点成了人山人海,拥挤的人群,甚至去卫生间都要排队半天,那一刻我突然有点理解灭霸的行为了。


640?wx_fmt=gif




今天,通过分析去哪儿网部分城市门票售卖情况,简单的分析一下哪些景点比较受欢迎。等下次假期可以做个参考。

640?wx_fmt=png


通过请求https://piao.qunar.com/ticket/list.htm?keyword=北京,获取北京地区热门景区信息,再通过BeautifulSoup去分析提取出我们需要的信息。

这里为了偷懒只爬取了前4页的景点信息,每页有15个景点。因为去哪儿并没有什么反爬措施,所以直接请求就可以了。

这里只是随机选择了13个热门城市:北京, 上海, 成都, 三亚, 广州, 重庆, 深圳, 西安, 杭州, 厦门, 武汉, 大连, 苏州。

并将爬取的数据存到了MongoDB数据库 。

爬虫部分完整代码如下

import requestsfrom bs4 import BeautifulSoupfrom pymongo import MongoClientclass QuNaEr():    def __init__(self, keyword, page=1):        self.keyword = keyword        self.page = page    def qne_spider(self):        url = 'https://piao.qunar.com/ticket/list.htm?keyword=%s&region=&from=mpl_search_suggest&page=%s' % (self.keyword, self.page)        response = requests.get(url)        response.encoding = 'utf-8'        text = response.text        bs_obj = BeautifulSoup(text, 'html.parser')        arr = bs_obj.find('div', {'class': 'result_list'}).contents        for i in arr:            info = i.attrs            # 景区名称            name = info.get('data-sight-name')            # 地址            address = info.get('data-address')            # 近期售票数            count = info.get('data-sale-count')            # 经纬度            point = info.get('data-point')            # 起始价格            price = i.find('span', {'class': 'sight_item_price'})            price = price.find_all('em')            price = price[0].text            conn = MongoClient('localhost', port=27017)            db = conn.QuNaEr # 库            table = db.qunaer_51 # 表            table.insert_one({                'name'      :   name,                'address'   :   address,                'count'     :   int(count),                'point'     :   point,                'price'     :   float(price),                'city'      :   self.keyword            })if __name__ == '__main__':    citys = ['北京', '上海', '成都', '三亚', '广州', '重庆', '深圳', '西安', '杭州', '厦门', '武汉', '大连', '苏州']    for i in citys:        for page in range(1, 5):            qne = QuNaEr(i, page=page)            qne.qne_spider()
from bs4 import BeautifulSoup
from pymongo import MongoClient

class QuNaEr():
    def __init__(self, keyword, page=1):
        self.keyword = keyword
        self.page = page

    def qne_spider(self):
        url = 'https://piao.qunar.com/ticket/list.htm?keyword=%s&region=&from=mpl_search_suggest&page=%s' % (self.keyword, self.page)
        response = requests.get(url)
        response.encoding = 'utf-8'
        text = response.text
        bs_obj = BeautifulSoup(text, 'html.parser')

        arr = bs_obj.find('div', {'class''result_list'}).contents
        for i in arr:
            info = i.attrs
            # 景区名称
            name = info.get('data-sight-name')
            # 地址
            address = info.get('data-address')
            # 近期售票数
            count = info.get('data-sale-count')
            # 经纬度
            point = info.get('data-point')

            # 起始价格
            price = i.find('span', {'class''sight_item_price'})
            price = price.find_all('em')
            price = price[0].text

            conn = MongoClient('localhost', port=27017)
            db = conn.QuNaEr # 库
            table = db.qunaer_51 # 表

            table.insert_one({
                'name'      :   name,
                'address'   :   address,
                'count'     :   int(count),
                'point'     :   point,
                'price'     :   float(price),
                'city'      :   self.keyword
            })



if __name__ == '__main__':
    citys = ['北京''上海''成都''三亚''广州''重庆''深圳''西安''杭州''厦门''武汉''大连''苏州']
    for i in citys:
        for page in range(15):
            qne = QuNaEr(i, page=page)
            qne.qne_spider()



效果图如下


640?wx_fmt=png


有了数据,我们就可以分析出自己想要的东西了


1、最受欢迎的15个景区


640?wx_fmt=png


由图可以看出,在选择的13个城市中,最热门的景区为上海的迪士尼乐园

代码如下

from pymongo import MongoClient# 设置字体,不然无法显示中文from pylab import *mpl.rcParams['font.sans-serif'] = ['SimHei']conn = MongoClient('localhost', port=27017)db = conn.QuNaEr # 库table = db.qunaer_51 # 表result = table.find().sort([('count', -1)]).limit(15)# x,y轴数据x_arr = []  # 景区名称y_arr = []  # 销量for i in result:    x_arr.append(i['name'])    y_arr.append(i['count'])"""去哪儿月销量排行榜"""plt.bar(x_arr, y_arr, color='rgb')  # 指定color,不然所有的柱体都会是一个颜色plt.gcf().autofmt_xdate() # 旋转x轴,避免重叠plt.xlabel(u'景点名称')  # x轴描述信息plt.ylabel(u'月销量')  # y轴描述信息plt.title(u'拉钩景点月销量统计表')  # 指定图表描述信息plt.ylim(0, 4000)  # 指定Y轴的高度plt.savefig('去哪儿月销售量排行榜')  # 保存为图片plt.show()import MongoClient
# 设置字体,不然无法显示中文
from pylab import *

mpl.rcParams['font.sans-serif'] = ['SimHei']

conn = MongoClient('localhost', port=27017)
db = conn.QuNaEr # 库
table = db.qunaer_51 # 表

result = table.find().sort([('count'-1)]).limit(15)
# x,y轴数据
x_arr = []  # 景区名称
y_arr = []  # 销量
for i in result:
    x_arr.append(i['name'])
    y_arr.append(i['count'])

"""
去哪儿月销量排行榜
"""

plt.bar(x_arr, y_arr, color='rgb')  # 指定color,不然所有的柱体都会是一个颜色
plt.gcf().autofmt_xdate() # 旋转x轴,避免重叠
plt.xlabel(u'景点名称')  # x轴描述信息
plt.ylabel(u'月销量')  # y轴描述信息
plt.title(u'拉钩景点月销量统计表')  # 指定图表描述信息
plt.ylim(04000)  # 指定Y轴的高度
plt.savefig('去哪儿月销售量排行榜')  # 保存为图片
plt.show()



2、景区热力图


这里为了方(tou)便(lan),只展示一下北京地区的景区热力图。用到了百度地图的开放平台。首先需要先注册开发者信息,首页底部有个申请秘钥的按钮,点击进行创建就可以了。我的应用类型选择的是浏览器端,因此只需要组装数据替换掉相应html代码即可。另外还需要将自己访问应用的AK替换掉。效果图如下


640?wx_fmt=png



3、景区价格


价格是出游第一个要考虑的,一开始想统计一下各城市的平均价格,但是后来发现效果不是很好,比如北京的刘老根大舞台价格在580元,这样拉高了平均价格。就好比姚明和潘长江的平均身高在190cm,并没有什么说服力。所以索性展示一下景区的价格分布。

根据价格设置了六个区间


640?wx_fmt=png


通过上图得知,大部分的景区门票价格都在200元以下。每次旅游花费基本都在交通、住宿、吃吃喝喝上了。门票占比还是比较少的。

代码如下

arr = [[0, 50], [50,100], [100, 200], [200,300], [300,500], [500,1000]]name_arr = []total_arr = []for i in arr:    result = table.count({'price': {'$gte': i[0], '$lt': i[1]}})    name = '%s元 ~ %s元 ' % (i[0], i[1])    name_arr.append(name)    total_arr.append(result)color = 'red', 'orange', 'green', 'blue', 'gray', 'goldenrod' # 各类别颜色explode = (0.2, 0, 0, 0, 0, 0)  # 各类别的偏移半径# 绘制饼状图pie = plt.pie(total_arr, colors=color, explode=explode, labels=name_arr, shadow=True, autopct='%1.1f%%')plt.axis('equal')plt.title(u'热点旅游景区门票价格比例', fontsize=12)plt.legend(loc=0, bbox_to_anchor=(0.82, 1))  # 图例# 设置legend的字体大小leg = plt.gca().get_legend()ltext = leg.get_texts()plt.setp(ltext, fontsize=6)# 显示图plt.show()50], [50,100], [100200], [200,300], [300,500], [500,1000]]
name_arr = []
total_arr = []
for i in arr:
    result = table.count({'price': {'$gte': i[0], '$lt': i[1]}})
    name = '%s元 ~ %s元 ' % (i[0], i[1])
    name_arr.append(name)
    total_arr.append(result)

color = 'red''orange''green''blue''gray''goldenrod' # 各类别颜色
explode = (0.200000)  # 各类别的偏移半径

# 绘制饼状图
pie = plt.pie(total_arr, colors=color, explode=explode, labels=name_arr, shadow=True, autopct='%1.1f%%')

plt.axis('equal')
plt.title(u'热点旅游景区门票价格比例', fontsize=12)

plt.legend(loc=0, bbox_to_anchor=(0.821))  # 图例
# 设置legend的字体大小
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize=6)
# 显示图
plt.show()


以上分析结果仅供参考


640?wx_fmt=png


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • 太形象了!什么是边缘计算?最有趣的解释没有之一!

  • 互联网出海十年

  • 华为员工年薪 200 万!真相让人心酸!

  • 天才程序员:25 岁进贝尔实验室,32 岁创建信息论  琥珀  极客宝宝  5天前

  • 安全顾问反水成黑客, 靠瞎猜盗得5000万美元的以太币, 一个区块链大盗的另类传奇

  • 人造器官新突破!美国科学家3D打印出会“呼吸”的肺 | Science


640?wx_fmt=png真香,朕在看了!

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

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

相关文章

SonarQube代码质量管理平台C++插件sonar-cxx的安装

gblfy推荐了一个好的可替代CFamily插件, sonar-cxx插件,听闻插件作者就是看不惯CFamily的收费,自己写了个开源的, 更牛逼的插件,开源地址 https://github.com/SonarOpenCommunity/sonar-cxx这是我使用插件后的图片&am…

qt提升控件之后,编译报错

引言 自定义的控件,在ui文件中将控件提升为自定义的控件,提升的时候没有指明提升的头文件的相对路径或者绝对路径,导致编译的时候无法找到相应的头文件。 解决方法 1.在被提升的类的头文件前添加本机电脑所在的相对路径; 2.在被…

Spark精华问答 | 学Spark究竟有什么用?

戳蓝字“CSDN云计算”关注我们哦!为什么要学习Spark?作为一个用来实现快速而通用的集群计算的平台。扩展广泛使用的MapReduce计算模型,而且高效地支持更多的计算模式,包括交互式查询和流处理。Spark的一个重要特点就是能够在内存中…

SecureCRT 设置护眼最佳方案 的字体及颜色

SecureCRT远程连接Linux服务器 文章目录1. 选择全局选项2. 选择默认会话-【编辑默认设置】3. 选择仿真-【终端选择Linux】4. 选择外观-【当前颜色方案(白/黑)】 -【字符编码】5. 字体修改-点击字体6. 选择字体及大小7. 关闭重启SecureCRT8. 效果图&#…

qt中QTreeWidget控件的使用

引言 在按照项目设计的样式来实现的时候,发现了一些问题,幸运的是最终找到了解决的方法。 详情 1.QTreeWidget设置列数和隐藏头(这里指的是有1所在的那个部位) ui->treeWidget->setColumnCount(1);//设置有1列ui->tr…

SecureCRT 免安装、绿色版、免费版本

SecureCRT远程连接Linux服务器 文章目录1. 下载软件2. 解压软件3. 双击运行4. 选择SecureCRT5. 图标点击,输入用户名6. 添加密码,点击确定7. 连接成功1. 下载软件 链接https://pan.baidu.com/s/1vv40uI_0uwIagPGm7FS9_g 提取码t32h 2. 解压软件 3. 双击…

qt中QMultiMap获取键值

概述 QMultiMap获取键值分为两种&#xff0c;一种是获取所有的键值&#xff0c;包含重复的键值&#xff0c;一种是获取不重复的键值&#xff0c;下面记录一下。 1.获取键值 使用函数values(). QMultiMap<int,stuDepart> bookMap; QList<int> levels bookMap.val…

GitHub重大更新即将加入免费软件包管理服务;钉钉社区因出现违规内容将停更整改一个月;Uber上市,定价为45美元……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go永安行共享电动汽车&#xff…

SecureCRT 文件下载上传

SecureCRT远程连接Linux服务器 文章目录1. 点击SecureFX图标2. 填写密码3. 窗口简要说明4. 上传文件5. 下载文件6. 第二种方案(建议使用)&#xff1a;7. 拖拽文件或目录8. 效果图1. 点击SecureFX图标 2. 填写密码 3. 窗口简要说明 4. 上传文件 5. 下载文件 6. 第二种方案(建议使…

qt中关于按钮的click()函数卓见

概述 按钮有一个基类QAbstractButton&#xff0c;这个类中有一个函数click(),j几乎所有的函数都继承了这个类QAbstractButton&#xff0c;同时这个函数click()是一个公有的槽函数&#xff0c;也就是意味着所有的子类都可以调用这个函数。而这个click&#xff08;&#xff09;函…

《复联4》| 生活需要漫威这块糖

戳蓝字“CSDN云计算”关注我们哦&#xff01;漫威电影宇宙&#xff0c;历时11年&#xff0c;经历了21部电影&#xff0c;终于迎来了最终章。有人问如果没看过复联1、2、3可以去看吗&#xff1f;只看过钢铁侠没接触过复联可以去看吗&#xff1f;......看当然是可以看的&#xff…

企业实战02:Oracle数据库的安装和卸载

Oracle数据库专栏 文章目录一、 Oracle安装1.1. Oracle下载链接&#xff1a;1.2. 解压到一个文件夹中1.3. 百度云解压包&#xff1a;二、Oracle安装流程2.1. 以管理员身份运行2.2. 下图忽略2.3. 开始安装2.4. 选择-【是】2.5. 不勾选邮箱2.6. 选择【是】2.7. 选择创建和配置数据…

qt中在QMultiMap中删除自定义数据类的元素

引言 当我们使用QMultiMap的remove函数来删除容器中的某一个元素时&#xff0c;若是容器中存放的是基本数据类型&#xff0c;则程序编译的时候没有任何问题&#xff0c;但是当容器中存放的是自定义的数据&#xff0c;这时若是C基础比较扎实的&#xff0c;应该不会出现编译报错…

10 种最流行的 Web 挖掘工具 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01; 程序员硬核评测&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;作者 | prowebscrapers blog译者 | 高级农民工责编 | 胡巍巍本文经授权转载自高级农民工互…

企业实战03:Oracle数据库_用户和表空间

Oracle数据库专栏 命令后面可以不加;分号 SQL语句后面一定要加;分号 文章目录用户和表空间2-1 使用系统用户登录Oracle系统用户2-2 Oracle用户和表空间之查看登录用户2-3 Oracle用户和表空间之启用scott用户2-4 练习题2-5 Oracle用户和表空间之表空间概述理解表空间&#xff1a…

qt获取QString中第一个汉字

概述 一串汉语中获取这串汉语中的第一个汉字。采用的方法front(). QString str(QStringLiteral("李数"));QString strText str.front();

Kubernetes精华问答 | K8s架构和组件是怎样的?

kubernetes&#xff0c;简称K8s&#xff0c;是用8代替8个字符“ubernete”而成的缩写。是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应…

企业实战01:Oracle数据库概述

Oracle数据库专栏 文章目录1 用户与表空间1.1 用户1.2 表空间2 表与约束2.1 表2.2 约束在表中的作用3 约束种类4 查询语句4.1 查询的作用1 用户与表空间 1.1 用户 安装Oracle之后的系统用户有哪些&#xff1f;如何通过他们登陆Oracle数据库&#xff1f; 1.2 表空间 所登录数…

qt设置模态对话框并设置对话框的位置

引言 当对话框弹出的时候&#xff0c;其它的操作不能进行&#xff0c;这个对话框就是模态对话框&#xff0c;非模态对话框弹出的时候&#xff0c;其它的操作依旧可以做。以上就是通俗的理解模态对话框与非模态对话框。下面实现当模态对话框弹出的时候&#xff0c;设置弹出的位…

PLSQL 设置布局

前言:设置符合自己的PL/SQL布局 文章目录1. 设置符合自己风格的布局2.【Windows】-【Save Layout】1. 设置符合自己风格的布局 2.【Windows】-【Save Layout】