用 Python 分析元旦旅游热门城市

技术

元旦 马上就要到了,难得的3天小长假,玩肯定是要去玩的,但 去哪儿玩是个问题 。于是,笔者以旅游热门城市 厦门 为例,用Python获取了去哪儿网的相关景点数据,包括景点名称、地区、评分、销量、价格、坐标等字段,对数据进行可视化并作简单分析,以求 找到性价比较高的景点

数据获取

去哪儿网数据采集相对简单,找到真实url 后,构造参数拼接,用request请求到json数据,以追加模式将数据存储为csv文件即可。

picture.image

爬虫核心代码如下:


          
# -*- coding = uft-8 -*-  
# @Time : 2020/12/25 9:47 下午  
# @Author : 公众号 菜J学Python  
# @File : 去哪儿.py  
  
import requests  
import random  
from time import sleep  
import csv  
import pandas as pd  
from fake_useragent import UserAgent  
  
def get\_data(keyword,page):  
    ua = UserAgent(verify_ssl=False)  
    headers = {"User-Agent": ua.random}  
    url = f'http://piao.qunar.com/ticket/list.json?keyword={keyword}&region=&from=mpl\_search\_suggest&page={page}'  
    res = requests.request("GET", url,headers=headers)  
    sleep(random.uniform(1, 2))  
    try:  
        res_json = res.json()  
        #print(res\_json)  
        sight_List = res_json['data']['sightList']  
        print(sight_List)  
    except:  
        pass  
  
if __name__ == '\_\_main\_\_':  
    keyword = "厦门"  
    for page in range(1,100): #控制页数  
        print(f"正在提取第{page}页")  
        sleep(random.uniform(1, 2))  
        get_data(keyword,page)  

      

数据处理

导入相关包

首先导入数据处理和数据可视化相关第三方库,便于后续操作。


          
import pandas as pd   
import numpy as np  
import matplotlib.pyplot as plt  
import seaborn as sns  
%matplotlib inline  
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置加载的字体名  
plt.rcParams['axes.unicode\_minus'] = False   # 解决保存图像是负号'-'显示为方块的问题   
import jieba  
import re  
from pyecharts.charts import *  
from pyecharts import options as opts   
from pyecharts.globals import ThemeType    
import stylecloud  
from IPython.display import Image
      

导入景点数据

用pandas读取爬取的csv格式景点数据并预览。


          
df = pd.read_csv("/菜J学Python/旅游/厦门旅游景点.csv",names=['name', 'star', 'score','qunarPrice','saleCount','districts','point','intro'])  
df.head()  

      

picture.image

删除重复数据

网站存在一定的重复数据,需要进行剔除。


          
df = df.drop_duplicates()  

      

查看数据信息

查看字段类型和缺失值情况,符合分析需要,无需另作处理。


          
df.info()  

      

          
    <class 'pandas.core.frame.DataFrame'>  
 Int64Index: 422 entries, 0 to 423  
    Data columns (total 8 columns):  
     # Column Non-Null Count Dtype   
    ---  ------      --------------  -----    
     0   name        422 non-null    object   
     1   star        422 non-null    object   
     2   score       422 non-null    float64  
     3   qunarPrice  422 non-null    float64  
     4   saleCount   422 non-null    int64    
     5   districts   422 non-null    object   
     6   point       422 non-null    object   
     7   intro       377 non-null    object   
    dtypes: float64(2), int64(1), object(5)  
    memory usage: 29.7+ KB  

      

描述性统计

从描述性统计表可知,剔除重复数据后,剩余 424个景点 ,门票均价为40元


          
color_map = sns.light_palette('orange', as_cmap=True)  # light\_palette调色板  
df.describe().style.background_gradient(color_map)  

      

picture.image

可视化分析

景点介绍

通过对厦门景点介绍文本进行词云图绘制,我们很容易看出厦门的特点。典型的海滨休闲城市 ,帆船、鼓浪屿、游艇等词被大量提及,建筑、博物馆等词也有一定提及,体现出厦门浓厚的人文气息


          
#绘制词云图  
text1 = get_cut_words(content_series=df['intro'])  
stylecloud.gen_stylecloud(text=' '.join(text1), max_words=100,  
                          collocations=False,  
                          font_path='simhei.ttf',  
                          icon_name='fas fa-heart',  
                          size=653,  
                          #palette='matplotlib.Inferno\_9',  
                          output_name='./offer.png')  
Image(filename='./xiamen.png')  

      

picture.image

景点分布

利用kepler.gl绘制厦门市旅游景点分布地图,同时以圆圈的大小表示门票月销量的大小,我们可以很清晰的看到,厦门市景点集中分布在思明区和湖里区,其他区域分布较为分散。尤其是思明区 ,门票销量遥遥领先其他区域。


          
df["lon"] = df["point"].str.split(",",expand=True)[0]   
df["lat"] = df["point"].str.split(",",expand=True)[1]   
df.to_csv("/菜J学Python/data.csv")  

      

picture.image

评分TOP10景点

从景点评分来看,厦门大学 评分最高,5分满分。其次是鼓浪屿和南普陀寺 ,分别为4.9分和4.6分。难怪有人说,没去过厦大和鼓浪屿,相当于没来过厦门。


          
df_score = df.pivot_table(index='name',values='score')  
df_score.sort_values('score',inplace=True,ascending=False)  
df_score[:10]  

      

picture.image

月销量TOP10景点

从门票月销量来看,鼓浪屿排第一 ,月销量1230,其次是厦门园林植物园 和鼓浪屿往返轮渡。厦门方特梦幻王国 也有600以上的月销量。


          
df_saleCount = df.pivot_table(index='name',values='saleCount')  
df_saleCount.sort_values('saleCount',inplace=True,ascending=False)  
df_saleCount[:10]  

      

picture.image

价格TOP20景点

从景点价格来看,玩游艇、直升机、帆船 类的活动花销较大,另外,厦门方特 价格也不便宜,如果对价格不敏感可以考虑,如果是穷游可以提前避开。


          
df_qunarPrice = df.pivot_table(index='name',values='qunarPrice')  
df_qunarPrice.sort_values('qunarPrice',inplace=True,ascending=False)  
df_qunarPrice[:20]  

      

picture.image

月销售额TOP20景点

由于厦门近一个月景点销量的变化幅度小于价格的变化幅度,销售额受价格影响更大 。从以下图中也可以看出,月销售额较大的景点仍然是游艇、方特 之类。


          
df["saleTotal"] = df["qunarPrice"]*df["saleCount"]  
df_saleTotal = df.pivot_table(index='name',values='saleTotal')  
df_saleTotal.sort_values('saleTotal',inplace=True,ascending=False)  
df_saleTotal[:20]  

      

picture.image

景点等级分布

从厦门景点等级分布来看,3A以上等级景点占比不到5%


          
df_star = df["star"].value_counts()  
df_star = df_star.sort_values(ascending=False)  
#print(df\_star)  
c = (  
        Pie(init_opts=opts.InitOpts(theme=ThemeType.WALDEN))  
        .add(  
            "",  
            [list(z) for z in zip(df_star.index.to_list(),df_star.to_list())]  
        )  
        .set_global_opts(legend_opts = opts.LegendOpts(is_show = False),title_opts=opts.TitleOpts(title="景点等级分布",subtitle="数据来源:去哪儿网\n制图:菜J学Python",pos_top="0.5%",pos_left = 'left'))  
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=16))  
    )  
c.render_notebook()  

      

picture.image


          
df[df["star"]!='无'].sort_values("star",ascending=False)  

      

以下为筛选出的部分3A及以上景点:

picture.image

小结

通过以上简单的分析,我们大致可以获得以下几点启发: 1.厦门是典型的海滨休闲城市,具有丰富的海洋和人文景观; 2.厦门旅游景点主要集中分布在思明区,其他区域较为分散; 3.厦门大学口碑最高,其次才是鼓浪屿; 4.鼓浪屿门票销量遥遥领先厦门其他景点; 5.消费较高的景点或活动包括游艇、帆船和方特。 温馨提示:疫情还未完全散去,元旦游玩尽量避开风险区域。

更多阅读

Top 10 沙雕又有趣的 GitHub 程序

5分钟掌握 Python 对象的引用

程序运行慢?你怕是写的假 Python

特别推荐

picture.image

picture.image

点击下方阅读原文加入 社区会员

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
高性能存储虚拟化方案 NVMe over Fabric 在火山引擎的演进
在云计算中,虚拟化存储扮演着重要角色,其中 iSCSI 协议在业界开放、流行多年。近年来,拥有更优性能的 NVMe over Fabrics 协议也得到了发展。本次分享介绍了 NVMe over Fabrics 在云原生和虚拟化方向的演进工作和成果。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论