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

发表于:2021-1-04 10:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:Python中文社区

  笔者以旅游热门城市厦门为例,用Python获取了去哪儿网的相关景点数据,包括景点名称、地区、评分、销量、价格、坐标等字段,对数据进行可视化并作简单分析,以求找到性价比较高的景点。
  数据获取
  去哪儿网数据采集相对简单,找到真实url后,构造参数拼接,用request请求到json数据,以追加模式将数据存储为csv文件即可。
  爬虫核心代码如下:
  # -*- 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,headersheaders=headers)  
      sleep(random.uniform(1, 2))  
      try:  
          resres_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() 
  删除重复数据
  网站存在一定的重复数据,需要进行剔除。
  dfdf = 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)

 
  可视化分析
  景点介绍
  通过对厦门景点介绍文本进行词云图绘制,我们很容易看出厦门的特点。典型的海滨休闲城市,帆船、鼓浪屿、游艇等词被大量提及,建筑、博物馆等词也有一定提及,体现出厦门浓厚的人文气息。
  #绘制词云图  
  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')
 
  景点分布
  利用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") 
  评分TOP10景点
  从景点评分来看,厦门大学评分最高,5分满分。其次是鼓浪屿和南普陀寺,分别为4.9分和4.6分。难怪有人说,没去过厦大和鼓浪屿,相当于没来过厦门。
  dfdf_score = df.pivot_table(index='name',values='score')  
  df_score.sort_values('score',inplace=True,ascending=False)  
  df_score[:10]
  月销量TOP10景点
  从门票月销量来看,鼓浪屿排第一,月销量1230,其次是厦门园林植物园和鼓浪屿往返轮渡。厦门方特梦幻王国也有600以上的月销量。
  dfdf_saleCount = df.pivot_table(index='name',values='saleCount')  
  df_saleCount.sort_values('saleCount',inplace=True,ascending=False)  
  df_saleCount[:10] 
  价格TOP20景点
  从景点价格来看,玩游艇、直升机、帆船类的活动花销较大,另外,厦门方特价格也不便宜,如果对价格不敏感可以考虑,如果是穷游可以提前避开。
  dfdf_qunarPrice = df.pivot_table(index='name',values='qunarPrice')  
  df_qunarPrice.sort_values('qunarPrice',inplace=True,ascending=False)  
  df_qunarPrice[:20] 
  月销售额TOP20景点
  由于厦门近一个月景点销量的变化幅度小于价格的变化幅度,销售额受价格影响更大。从以下图中也可以看出,月销售额较大的景点仍然是游艇、方特之类。
  df["saleTotal"] = df["qunarPrice"]*df["saleCount"]  
  dfdf_saleTotal = df.pivot_table(index='name',values='saleTotal')  
  df_saleTotal.sort_values('saleTotal',inplace=True,ascending=False)  
  df_saleTotal[:20]
 
  景点等级分布
  从厦门景点等级分布来看,3A以上等级景点占比不到5%。
  dfdf_star = df["star"].value_counts() 
  df_stardf_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() 
  df[df["star"]!='无'].sort_values("star",ascending=False) 
  以下为筛选出的部分3A及以上景点:
  小结
  通过以上简单的分析,我们大致可以获得以下几点启发:
  1.厦门是典型的海滨休闲城市,具有丰富的海洋和人文景观;
  2.厦门旅游景点主要集中分布在思明区,其他区域较为分散;
  3.厦门大学口碑最高,其次才是鼓浪屿;
  4.鼓浪屿门票销量遥遥领先厦门其他景点;
  5.消费较高的景点或活动包括游艇、帆船和方特。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号