社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

五一出行你准备好了吗?Python帮你预测全国热门景点!

CDA数据分析师 • 5 年前 • 555 次点击  




 CDA数据分析师 出品  

作者:Mika

数据:真达  

后期:泽龙 

【导语】:今天我们来盘一盘,五一出行数据预测。Python技术部分请看第二部分公众号后台,回复关键字“五一出行 ”获取完整数据。

Show me data,用数据说话

今天我们聊一聊五一出行预测

点击下方视频,先睹为快:


今年“五一”劳动节假期时间较长,与此同时,国内疫情防控形势持续向好。自4月30日0时起,北京市疫情应急响应也从一级调至二级。五一假期期间,北京市的89家等级旅游景区开放。

 

再加上全国高速公路免收通行费,天气逐渐转暖,温度适宜等等。在家宅了几个月的人群都按耐不住出行游玩的想法了。与此同时,C君还是要提醒大家,目前疫情还未结束,出行时还是要避免聚集,严格做好个人防护哦!


接下来话不多说,让我们来给大家盘一盘五一出游预测数据。

  


01


五一出行预测 

你准备好了吗?


近日,高德地图与中国气象局中国天气网联合发布了《2020年五一假期出行预测报告》,该报告中就运用交通大数据,对全国高速拥堵趋势进行了回顾预测。


下面让我们来简单看看吧。



小长假第一天总是最堵的


从近三年五一期间全国高速的拥堵趋势来看,小长假第一天为出程拥堵高峰,且第一天拥堵程度呈现逐渐走高态势,第三天为返程高峰。 


 根据高德地图交通大数据预测 ,受节前通勤晚高峰及假期前一天出行影响,预计出程拥堵高峰为4月30日,返程高峰为5月4日。


 


五一自驾游 西湖成最热门首选

 

从自驾意愿来看,预计杭州的西湖风景名胜区、成都的都江堰景区、西安昆明池景区排名前三,市民自驾前往意愿较强,其中,进入都江堰景区需提前完成门票预约。

 



02



用Python分析 

预测五一热门景点


想了解更多关于五一的热门景点预测吗?下面我们就试着用Python来实现。

 

我们分析整理了去哪儿网上,近一个月各大景点的门票销售数据,去重后共获得16651条,试着从中对五一期间景点热门度进行预测。


此次景点分析的过程主要分为三步:


  1. 数据获取

  2. 数据处理

  3. 数据可视化分析


以下是具体的步骤和代码实现:


数据获取

1


我们可以在哪去儿的门票页
http://piao.qunar.com/ticket/list.htm?keyword=''

搜索省份关键词,就可以看到推荐的景点的一些信息。然后我们使用谷歌浏览器,按下F12打开浏览器调试窗口,查找加载数据的url(通过翻页观察):

可以很容易地发现json数据的请求地址:
https://piao.qunar.com/ticket/list.json?keyword=%E5%8C%97%E4%BA%AC&page=2

其中keyword参数可以输入搜索关键词,page参数用于控制页数进行翻页。



本次我们需要获取的主要有:景点名称、景点星级、景点评分、景点介绍、经纬度、地区、月销量、票价等。


在爬虫的过程中我们首先请求第一页的网址获取到总页数,然后进行循环翻页。


具体代码实现:

# 导入包
import requests
import json
import pandas as pd
import time


def get_qunaer_one_city(search_city):
    """
    功能:给定城市和页数,获取一页的信息
    """

    # 获取URL
    url_1 = 'https://piao.qunar.com/ticket/list.json?keyword={}&page=1'.format(search_city)

    # 添加Headers
    headers = {
        'user-agent''Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
    }

    # 先发起一次请求
    response = requests.get(url_1, headers=headers)
    data = response.json()['data']

    # 所有页数
    totalCount = int(data.get('totalCount') / 15)+1

    # 存储数据
    df_all = pd.DataFrame()

    # 循环获取
    for page_num in range(1, totalCount+1):
        url_2 = 'https://piao.qunar.com/ticket/list.json?keyword={}&page={}'.format(search_city, page_num)

        # 发起请求
        try:
            response = requests.get(url_2, headers=headers, timeout=3)
        except ProxyError:
            response = requests.get(url_2, headers=headers, timeout=3)
        # 获取数据
        data = response.json()['data']

        # 景点名称
        sightName = [i.get('sightName'for i in data['sightList']]
        # 景点星级
        star = [i.get('star''无'for i in data['sightList']]
        # 景点评分
        score = [i.get('score'0for i in data['sightList']]
        # 景点介绍
        intro = [i.get('intro'''for i in data['sightList']]
        # 景点经纬度
        point = [i.get('point'for i in data['sightList']]
        # 景点地区
        districts = [i.get('districts'for i in data['sightList']]
        # 相关景点
        childrenCount = [i.get('childrenCount'0for i in data['sightList']]
        # 月销量
        saleCount = [i.get('saleCount'0for i in data['sightList']]
        # 门票价格
        Price = [i.get('qunarPrice'0for i in data['sightList']]

        # 保存数据
        df_one = pd.DataFrame({
            'sightName': sightName,
            'star': star,
            'score': score,
            'intro': intro,
            'point': point,
            'districts': districts,
            'childrenCount': childrenCount,
            'saleCount': saleCount,
            'qunarPrice': Price
        })

        # 追加数据
        df_all = df_all.append(df_one, ignore_index=True)
        # 打印进度
        print('我正在获取第{}页'.format(page_num))
        # 休眠一秒
        time.sleep(1)
    return df_all


传入省份名称即可获取一个省份的全部数据,此次我们获取了全国34个省份的数据,去重之后一共16651条,获取的数据以数据框的形式存储,结果如下所示:


df_all.head()



读入数据与数据预处理

2


对于获取的数据,我们需要进行进一步的处理以满足分析的需求,我们主要做的数据处理步骤如下:


  1. 删除重复值

  2. 从districts字段中提取省份数据

  3. 计算销售额,销售额=saleCount(月销量) * qunarPrice(价格)


代码如下:

# 导入包
import numpy as np
import pandas as pd 
import os 
from pyecharts.charts import Bar, Pie, Map, Page, BMap, Scatter
from pyecharts import options as opts 


# 获取文件路径
data_files = os.listdir('./data/')

# 从磁盘中循环读取数据
df_all = pd.DataFrame()
for file in data_files:
    df_one = pd.read_excel('./data/{}'.format(file))
    df_all = df_all.append(df_one, ignore_index=True)

# 复制一份
df_qa = df_all.copy()

# 删除重复值
df_qa.drop_duplicates(inplace=True)

# 提取省份
df_qa['province'] = df_qa.districts.str.split('·').apply(lambda x:x[0]) 
# 计算销售额
df_qa['sales_volume'] = df_qa['saleCount'] * df_qa['qunarPrice']



数据可视化

3



我们使用的工具是pyecharts,我们主要对以下几个方面的信息进行可视化分析。


  1. 各星级景点数量
  2. 全国各省份景点数量Top15
  3. 各省份销量热力图
  4. 景点门票销量排行分析Top20


各星级景点数量



首先对全国景点星级的数据进行整理,发现全国4A景点占比达到15.85%,3A为4.23%,5A最少占比仅为2.48%。而没有星级的景点比重高达77.44%。

 

代码实现:

# 景点星级分布
star_num = df_qa['star'].value_counts() 

# 数据对
data_pair = [list(z) for z in zip(star_num.index, star_num.values.tolist())]

# 饼图
pie1 
= Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie1.add
        series_name="num",
        radius=["35%""60%"],
        data_pair=data_pair,
        label_opts=opts.LabelOpts(
            position="outside",
            formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",
            background_color="#eee",
            border_color="#aaa",
            border_width=1,
            border_radius=4,
            rich={
                "a": {"color""#999""lineHeight"22"align""center"},
                "abg": {
                    "backgroundColor""#e3e3e3",
                    "width""100%",
                    "align""right",
                    "height"22,
                    "borderRadius": [4400],
                },
                "hr": {
                    "borderColor""#aaa",
                    "width""100%",
                    "borderWidth"0.5,
                    "height" 0,
                },
                "b": {"fontSize"16"lineHeight"33},
                "per": {
                    "color""#eee",
                    "backgroundColor""#334455",
                    "padding": [24],
                    "borderRadius"2,
                },
            },
        ),
)
pie1.set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", pos_top='30%', orient="vertical"), 
                     title_opts=opts.TitleOpts(title='全国景点星级分布'))
pie1.set_series_opts(
    tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} 
{b}: {c} ({d}%)"
)
    )
pie1.render() 


全国各省份景点数量Top15

那么景点在全国的分布情况如何呢?通过整理分析可以看到,景点数量前三的分布是辽宁、北京和福建。令人意外的是,辽宁的景点数量居然以微弱的优势超过了北京,不过其中很多是没有星级的景点。


 代码实现:

# 国内城市top15
city_top10 = df_qa.province.value_counts()[:15]

# 条形图
bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar1.add_xaxis(city_top10.index.tolist())
bar1.add_yaxis("省份", city_top10.values.tolist())
bar1.set_global_opts(title_opts=opts.TitleOpts(title="全国景点数量Top10"),
                     visualmap_opts=opts.VisualMapOpts(max_=1200))
bar1.render() 


各省份景点门票销量热力图



再看到各省市景门票销售的情况,从图中可以看到四川、北京、云南、辽宁等地的景点门票销量都特别高,在全国名列前茅。


代码实现:

saleCount_num = df_qa.groupby('province')['saleCount'].sum().sort_values(ascending=False) 

# 地图
map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))
map1.add("" , [list(z) for z in zip(saleCount_num.index.tolist(), saleCount_num.values.tolist())],
         maptype
='china'
map1.set_global_opts(title_opts=opts.TitleOpts(title='各省份销量热力图'),
                     visualmap_opts=opts.VisualMapOpts(max_=80000))
map1.render() 


景点门票销量排行分析Top20


我们再来具体来看看哪些景点最受欢迎。


经过分析发现前三分别是北京野生动物园、七彩云南欢乐世界、梵净山。其次上海欢乐谷、成都大熊猫基地紧随其后。看来随着温度上升,在这次难得的五天小长假,带着一家人久违的出去逛逛动物园、爬爬山、看看大熊猫都是大家忠爱的选择。


结语


最后C君还是要提醒大家,五一”小长假的来临,不少人都有出行计划,景区也正在有序恢复开放。但同时疫情仍未结束,大家在出行时一定要注意个人防护哦~


关注CDA数据分析师公众号
回复关键字“五一出行” 
获取详细数据代码

CDA数据分析师 


本文出品:CDA数据分析师(ID: cdacdacda)


CDA数据分析师
五一幸运狂欢周抽奖活动
劳动节大奖不停,抽到手软!!

👇👇👇

📚推荐阅读 READ MORE


(点击下方图片阅读)

美国确诊超100万!教你用Python画出全球疫情动态图

 

📌CDA课程咨询


喜欢本篇内容请点个“在看”哦!❤️

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62435