旅游项目分析

利用python爬取数据
import requests
import json
provinces=['广东','广西','湖南','湖北','山东','山西','陕西','江苏','浙江','安徽','江西','福建','台湾','河南','河北'
           ,'海南','甘肃','青海','贵州','四川','云南','内蒙古','宁夏','新疆','西藏','北京','天津','上海','重庆','香港','澳门']
for province in provinces:

    for page in range(1,2):
        res = requests.get('https://travelsearch.fliggy.com/async/queryItemResult.do?searchType='
                           'product&keyword={}&category=SCENIC&pagenum={}'.format(province,page))
        res = json.loads(res.text)
        datalist = res['data']['data']['itemProducts']['data']['list'][0]['auctions']
        for i in datalist:
            

            data = []
            data.append(province)
            itemId=i['fields']['itemId']
            data.append(itemId)
            title=i['fields']['title']
            data.append(title)
            cityName=i['fields']['cityName']
            data.append(cityName)
            comment=i['fields']['comment']
            data.append(comment)

            pc_Url=i['fields']['pc_url']
            data.append(pc_Url)
            soldRecent=i['fields']['soldRecent']
            data.append(soldRecent)
            soldRecentNum=i['fields']['soldRecentNum']
            data.append(soldRecentNum)
            sold365=i['fields']['sold365']
            data.append(sold365)
            discountPrice=i['fields']['discountPrice']
            data.append(discountPrice)
            Price = i['fields']['type']
            data.append(type)
            subTitle = i['fields']['subTitle']
            data.append(subTitle)
            shortInfo = i['fields']['shortInfo']
            data.append(shortInfo)

            Price = i['fields']['price']
            data.append(Price)
            itemTotalScore = i['fields']['itemTotalScore']
            data.append(itemTotalScore)
            h5_url = i['fields']['h5_url']
            data.append(h5_url)
            distance=i['fields']['distance']
            data.append(distance)
            longitude=i['fields']['longitude']
            data.append(longitude)
            latitude=i['fields']['latitude']
            data.append(latitude)
            if len(i['fields']['features'])>0:
                text=i['fields']['features'][0]['text']
                data.append(text)
            else :
                data.append(None)
            featuresNew=i['fields']['featuresNew']
            data.append(featuresNew)
            if len(i['fields']['tagList'])>0:
                tagList=i['fields']['tagList'][0]['text']
                data.append(tagList)
            else :
                data.append(None)

            titleTagInfos=i['fields']['titleTagInfos']
            data.append(titleTagInfos)
            trip_main_busness_type=i['trip_main_busness_type']
            data.append(trip_main_busness_type)


            data_all.append(data)
将数据导入EXCEL
data=pd.DataFrame(data_all)
data.columns=['province','itemId','title','cityName','comment','pc_url','soldRecent','soldRecentNum',
               'sold365','discountPrice','type','subTitle','shortInfo','price','itemTotalScore',
               'h5_url','distance','longitude','latitude','features','featuresNew','tagList',
               'titleTagInfos','trip_main_busness_type']




data.to_excel("./旅游.xlsx")

数据如图:
在这里插入图片描述

清洗数据

之所以将数据保存入EXCEL,是方便数据供下阶段使用,不用再次在网上爬取数据,获取数据之后,必然得对数据进行清洗。
先导入必要的包和查看数据格式:

import pandas as pd
import numpy as np
data=pd.read_excel('旅游.xlsx')
print(data.info())
print(data.head())

数据格式如下:
在这里插入图片描述
进行清洗

# 去重
data.drop_duplicates(subset='itemId',inplace=True)
# 数据转换
def get_sold365(data):
    if data is np.nan:
        return np.nan
    else:
        data=str(data)  # 记得转换为字符型
    if "万" in data:
        print(data)
        return float(data[data.find('售')+1:data.find('万')]) * 10000
    else:
        return float(data[str(data).find('售')+1:data.find('笔')])

print(data['sold365'].apply(get_sold365))
研究的问题
  1. 哪些城市/省份的旅游选择最多?
  2. 哪些城市最受游客青睐?
  3. 最热门的景点
  4. 各省份的好评热门景点
  5. 很热门但是评分不好的景点
  6. 打折力度最大的景点
  7. 各级别景区的门票价格
哪些城市/省份的旅游选择最多?

使用漏斗图展示个城市的旅游选择情况:

count_top12=data['shortInfo'].value_counts()[0:12]

print(count_top12)
from pyecharts.charts import Funnel
from pyecharts import options as opts
funnel = Funnel().add('旅游选择',[list(z) for z in zip(count_top12.index, count_top12.values.astype(float))],
                      sort_='ascending',label_opts=opts.LabelOpts(position="inside")
                      ).set_global_opts(title_opts=opts.TitleOpts(title='旅游选择最多的前12个城市',pos_bottom=True))
funnel.render("funnel.html")

结果如图:
在这里插入图片描述
接下来,计划使用地图展现各个省份的旅游选择情况:
注意:使用地图时,由于省份名称不得包括“省”,“市”字,需处理省份名称字段数据。

count_province = data['province'].value_counts()
province=[pro.replace('省','') for pro in count_province.index]
province=[pro.replace('市','') for pro in count_province.index]
from pyecharts.charts import Geo
geo=Geo(init_opts=opts.InitOpts(width='880px',height='600px'))
geo.add_schema(maptype='china')
geo.add('geo',[list(z) for z in zip(province,count_province.values.astype(float))])
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),title_opts=opts.TitleOpts(title='全国各省份旅游选择数量图'))
geo.render("geo.html")

结果如下:
在这里插入图片描述
由地图可知,西部的旅游选择总体上比东部的多。

哪些城市最受游客青睐

先分析一下售票情况

city_sale_top10=data.groupby('shortInfo')['soldRecentNum'].sum().sort_values(ascending=False)[0:10]
from pyecharts.charts import Bar
bar=Bar(init_opts=opts.InitOpts(width='880px',height='600px'))
bar.add_xaxis(list(city_sale_top10.index))
bar.add_yaxis('最近一个月售出门票数',list(city_sale_top10.values.astype(float)))
bar.set_global_opts(legend_opts=opts.LegendOpts(pos_top='5%'),title_opts=opts.TitleOpts(title='最近一个月售出门票Top10城市'))
bar.render('bar.html')

结果如下:
在这里插入图片描述
接下来是评分情况

city_score_mean=data[(data['itemTotalScore']>0)&(data['comment']>30)
                      ].groupby('shortInfo')['itemTotalScore'].mean() #选取评论人数大于30且项目评分大于0的项目

print(city_score_mean)
from pyecharts.charts import WordCloud
wordcloud=WordCloud()
wordcloud.add('',[list(z) for z in zip(city_score_mean.index,city_score_mean.values.astype(float)*100)])
wordcloud.set_global_opts(title_opts=opts.TitleOpts(title='评分情况'))
wordcloud.render('word.html')

结果如下:
在这里插入图片描述
分数越高,字体就会越大。
由这部分分析可发现,虽然西部旅游选择比较多,但是游客比较热衷选择东部旅游景点,并且,对于东部旅游景点总体评分,高于西部旅游景点总体评分。

最热门的景点
hot_title=data.sort_values(by='soldRecentNum',ascending=False)[['title','soldRecentNum']][:10]
hot_bar=Bar(init_opts=opts.InitOpts(width='880px',height='600px',theme=ThemeType.ESSOS))
hot_bar.add_xaxis(list(hot_title['title']))
hot_bar.add_yaxis('',list(hot_title['soldRecentNum']))
hot_bar.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=25))
                       )
hot_bar.set_global_opts(tooltip_opts=opts.TooltipOpts(is_show=True,axis_pointer_type='cross'))
hot_bar.render('hot_bar.html')

结果如下:
在这里插入图片描述
上海迪士尼度假区的最近一个月门票出售数量很高,约是门票出售数量第二高的灵隐飞来峰的三倍。

各省份的好评热门景点
def province_top1(data):
    return data.head(1)
pro_top1=data.sort_values(by=['province', 'itemTotalScore', 'soldRecentNum'],ascending=False).groupby('province').apply(province_top1)[['title','soldRecentNum','itemTotalScore']].reset_index()
pro_top1.drop(columns='level_1',inplace=True)
pro_top1.to_excel('各省份的好评热门景点.xlsx')

结果如下:
在这里插入图片描述

热门但是评分不太高的景点
data_=data[(data['soldRecentNum']>100)&(data['itemTotalScore']<4.8)&(data['itemTotalScore']>0)][['shortInfo', 'title', 'soldRecentNum', 'itemTotalScore']]
data_.to_excel('热门但是评分不太高的景点.xlsx')

结果如下:
在这里插入图片描述

打折力度最大的景点
data['discount']=np.round((1-(data['price']-data['discountPrice'])/data['price'])*10,2)
dis_data=data.sort_values(by='discount')[['shortInfo','title','price','discountPrice','discount']]
dis_data.to_excel("打折力度最大的景点.xlsx")

结果如下:
在这里插入图片描述

各级别景区的门票价格
level_data=data.groupby('tagList')['price'].mean()
bar_level=Bar()
bar_level.add_xaxis(list(level_data.index))
bar_level.add_yaxis("",list(np.round(level_data.values,2).astype(float)))
bar_level.render('bar_level.html')

在这里插入图片描述

由结果可见,星级越高,则平均门票价钱也越高。

文章在GitHub原文的代码上做了稍微修改,原文地址点击: LaborDay

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值