五一假期马上就要来了,你是准备去浪了?还是在家里宅着呢?那你知道你的准备去哪浪了吗?本文我们通过爬取某网站数据来简单分析一下。

数据爬取

首选,我们打开,在搜索框输入一个省级行政区划进行搜索,以浙江为例,如图所示:

再将页面向下拉,F12 打开开发者工具,点击下一页看一下 URL,如图所示:

通过观察 URL 我们可以看出 keyword 和 page 是动态的,一个是输入条件值,另一个是页码值,当我们需要翻页爬取时可以进行动态赋值,再将开发者工具切到 Response,我们可以发现返回的数据是 JSON 格式的,如图所示:

这里我们以 34 个省级行政区划作为 keyword 进行分页爬取,主要爬取代码实现如下:

def get_city_data(cities, pages):cityNames = []sightNames = []stars = []scores = []qunarPrices = []saleCounts = []districtses = []points = []intros = []frees = []addresses = []for city in cities:for page in range(1, pages+1):try:print(f'正在爬取{city}第{page}页数据...')time.sleep(random.uniform(1.5, 2.5))url = f'https://piao.qunar.com/ticket/list.json?from=mpl_search_suggest&keyword={city}&page={page}'print('url:', url)result = requests.get(url, headers=headers, timeout=(2.5, 5.5))status = result.status_codeif(status == 200):# 每页数据response_info = json.loads(result.text)print('数据:', response_info)sight_list = response_info['data']['sightList']for sight in sight_list:sightName = sight['sightName']  # 名称star = sight.get('star', None)  # 星级score = sight.get('score', 0)  # 评分qunarPrice = sight.get('qunarPrice', 0)  # 价格saleCount = sight.get('saleCount', 0)  # 销量districts = sight.get('districts', None)  # 行政区划point = sight.get('point', None)  # 坐标intro = sight.get('intro', None)  # 简介free = sight.get('free', True)  # 是否免费address = sight.get('address', None)  # 地址cityNames.append(city)sightNames.append(sightName)stars.append(star)scores.append(score)qunarPrices.append(qunarPrice)saleCounts.append(saleCount)districtses.append(districts)points.append(point)intros.append(intro)frees.append(free)addresses.append(address)except:continuecity_dic = {'cityName': cityNames, 'sightName': sightNames, 'star': stars,'score': scores, 'qunarPrice': qunarPrices, 'saleCount': saleCounts,'districts': districtses, 'point': points, 'intro': intros,'free': frees, 'address': addresses}city_df = pd.DataFrame(city_dic)city_df.to_csv('cities.csv', index=False)

数据分析

现在数据有了,我们再来简单分析一下。

位置分布

首选,我们来看一下景区的位置分布情况。

先看一下景区的整体分布情况,主要代码实现如下:

for city in df[(df.iloc[:, 5] > 0)].iloc[:, 0]:if city != "":cities.append(city)
data = Counter(cities).most_common(100)
gx = []
gy = []
for c in data:gx.append(c[0])gy.append(c[1])
(Map(init_opts=opts.InitOpts(theme=ThemeType.MACARONS, height="500px")).add('数量', [list(z) for z in zip(gx, gy)], 'china').set_global_opts(title_opts=opts.TitleOpts(title='各地景区数量分布'),visualmap_opts=opts.VisualMapOpts(max_=150, is_piecewise=True),)
).render_notebook()

看一下效果:

再看一下各地景区的销量情况,主要代码实现如下:

df_item = df[['cityName','saleCount']]
df_sum = df_item.groupby('cityName').sum()
(Map(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC, height="500px")).add('销量', [list(z) for z in zip(df_sum.index.values.tolist(), df_sum.values.tolist())], 'china').set_global_opts(title_opts=opts.TitleOpts(title='各地景区销量分布'),visualmap_opts=opts.VisualMapOpts(max_=150000, is_piecewise=True))
).render_notebook()

看一下效果:

最热景区

我们接着看 TOP10 热门景区有哪些?它们的价格又是多少呢?主要代码实现如下:

sort_sale = df.sort_values(by='saleCount', ascending=True)
(Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS, width='125%')).add_xaxis(list(sort_sale['sightName'])[-10:]).add_yaxis('销量', sort_sale['saleCount'].values.tolist()[-10:]).add_yaxis('价格', sort_sale['qunarPrice'].values.tolist()[-10:]).reversal_axis().set_global_opts(title_opts=opts.TitleOpts(title='最热景区TOP10'),yaxis_opts=opts.AxisOpts(name='名称', axislabel_opts=opts.LabelOpts(rotate=-30)),xaxis_opts=opts.AxisOpts(name='销量/价格'),).set_series_opts(label_opts=opts.LabelOpts(position="right"))
).render_notebook()

看一下效果:

从图中我们可以看出 TOP10 热门景区的价格大多数都在 500 以内,算是比较亲民了。如果你的朋友喜欢热闹,他(她)可能去了热门景区。

再接着看热门景区的介绍情况,这里我们选取 T100 数据,通过词云来看一下。主要实现代码如下:

sort_sale = df.sort_values(by='saleCount', ascending=True)
stylecloud.gen_stylecloud(text=cts_str, max_words=100,collocations=False,font_path="SIMLI.TTF",icon_name="fab fa-firefox",size=800,output_name="hot.png")

看一下效果:

最豪景区

我们再看一下票价 TOP10 景区有哪些?它们的销量怎么样呢?主要代码实现如下:

sort_price = df.sort_values(by='qunarPrice', ascending=True)
(Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMA)).add_xaxis(list(sort_price['sightName'])[-10:]).add_yaxis('价格', sort_price['qunarPrice'].values.tolist()[-10:]).add_yaxis('销量', sort_price['saleCount'].values.tolist()[-10:]).reversal_axis().set_global_opts(title_opts=opts.TitleOpts(title='最豪景区TOP10'),yaxis_opts=opts.AxisOpts(name='名称'),xaxis_opts=opts.AxisOpts(name='价格/销量'),).set_series_opts(label_opts=opts.LabelOpts(position="right"))
).render_notebook()

看一下效果:

如果你的朋友是一个热爱旅游的土豪,他(她)很有可能去了土豪景区了。

再接着看一下土豪景区的介绍情况,这里我们还是选取 T100 数据,通过词云来看一下。

主要代码实现如下:

sort_price = df.sort_values(by='qunarPrice', ascending=True)
stylecloud.gen_stylecloud(text=cts_str, max_words=100,collocations=False,font_path="SIMLI.TTF",icon_name="fas fa-yen-sign",#最豪size=800,output_name="money.png")

看一下效果:

景区星级

我们再来看一下各省级行政区划的 5A 级景区数量情况,主要代码实现如下:

df_sum = df[df['star']=='5A'].groupby('cityName').count()['star']
(Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS)).add_xaxis(df_sum.index.values.tolist()).add_yaxis('数量', df_sum.values.tolist()).set_global_opts(title_opts=opts.TitleOpts(title='各地5A景区数量'),datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_='inside')],)
).render_notebook()

看一下效果:

如果你的朋友热爱旅游且对 5A 级景区情有独钟,他(她)可能去了 5A 景区的城市了。

最后,我们看一下 T200 热门景区的星级比例情况是怎样的?主要代码实现如下:

sort_data = df.sort_values(by=['saleCount'], ascending=True)
rates = list(sort_data['star'])[-200:]
gx = ["3A", "4A", "5A"]
gy = [rates.count("3A"),rates.count("4A"),rates.count("5A")
]
(Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS)).add("", list(zip(gx, gy)), radius=["40%", "70%"]).set_global_opts(title_opts=opts.TitleOpts(title="销量TOP200景区星级比例", pos_left = "left")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%", font_size=12))
).render_notebook()

看一下效果:

从图中我们可以看出 90% 以上的景区均为 4/5A 级。

好了,本文就到这里了,文中我们对去哪网售票数据中的几个指标进行了简单的分析,可以做个简单的参考,当然了,如果你感兴趣的话,还可以继续对其他指标进行分析。

文中源码已经打包整理好,关注下方公众号或点击蓝色字体领取

五一应该去哪里自驾游?哪里人最少,哪里不堵车?这份攻略你必须拥有。相关推荐

  1. 帮我写一个在广州自驾游去汕头和潮汕两个地方共两天的攻略

    好的,这是一份广州自驾游去汕头和潮汕两天游的攻略. 第一天: 上午:从广州出发,驱车前往汕头,约2小时路程. 中午:到达汕头后,先在当地享用午餐. 下午:游览汕头环岛,参观红树林公园.潮阳码头.澄海名 ...

  2. 玩儿计算机最快的人,电脑玩吃鸡最全攻略,让你吃鸡快人一步

    电脑玩吃鸡最全攻略,让你吃鸡快人一步 电脑玩吃鸡最全攻略,让你吃鸡快人一步 随着腾讯首款吃鸡手游<光荣使命>的上线,虽然之前内测一周预约量已经突破 2500 万,但随着 11 月 29 日 ...

  3. h1z1加载服务器锁定状态,h1z1进不去游戏锁定状态出错 | 手游网游页游攻略大全...

    发布时间:2017-06-16 H1Z1是一款末日求生类大逃杀游戏,人气非常火爆,各大直播站都能见到H1Z1的身影.近期有不少新手玩家的涌入,但是运行游戏的时候遇到了问题,就是打不开游戏,进不了游戏中 ...

  4. 人类一败涂地老是正在连接服务器,人类一败涂地别人要去总是正在连接服务器 | 手游网游页游攻略大全...

    发布时间:2015-10-24 Cosplay并不是一定要高度还原角色形象,你可以走幽默路线,可以自称一派,演绎自己风格.下面这批图片是圣迭戈动漫大展上的作品,看看他们那自信的表情,虽然没有真正的忠实 ...

  5. 尼尔机械纪元游乐园怎么去机器人村_《尼尔机械纪元》图文流程攻略 主线剧情全收集及支线任务图文攻略...

    第16页:9S线-第三章-机械人村庄(游乐园) 展开 9S线-第三章-机械人村庄(游乐园) step1.进入通往游乐园大门的下水道时会看见一部短片,是讲述Pod042(2B所持有)与Pod(153)传 ...

  6. mc多人联机无法显示服务器,我的世界1.7.2多人联机服务器教程_蚕豆网攻略

    我的世界创世神1.7.2多人联机服务器教程(附资源包下载),相信MC玩家对我的世界创世神一定不陌生,它是国内Minecraft玩家组建的多人联机服务器,现在,最新的1.7.2多人联机服务器正式公开,国 ...

  7. 无限幻斗那个服务器人多,无限幻斗英雄系统攻略 英雄系统解析

    在无限幻斗,玩家当然不是一个人孤身奋战,从刚开始进入游戏后,玩家就可以召唤属于自己的英雄共同战斗.下面我们来看看无限幻斗的英雄系统吧. 英雄虽然不是无限幻斗中特有的玩法,但是英雄的作用在无限幻斗中却与 ...

  8. 韩服传说对决服务器未响应,传说对决韩服为什么进不去 | 手游网游页游攻略大全...

    发布时间:2016-02-21 旗帜的传说2闪退进不去怎么办 旗帜的传说2闪退进不去游戏解决方法,旗帜的传说2很多游戏玩家反馈旗帜的传说2闪退进不去怎么办?接下来给大家分享一下玩家"大智如驴 ...

  9. 文摘_安全经过广州火车站攻略(去广州的必看)

    2005-09-06 08:23:31 主题:安全经过广州火车站攻略(去广州的必看) 谁是谁的谁 等级: 在线:2127分钟 发表:74篇 本文网址:http://bbs7.news.163.com/ ...

最新文章

  1. Kubernetes-基于EFK进行统一的日志管理
  2. Android移动开发之【Android实战项目】Textview各项属性(全)
  3. 水晶报表错误:bobj is not defined
  4. Android在线开发工具 App Inventor
  5. php微信公众号开发入门
  6. 让Team Exploer自动登录TFS
  7. 线性规划图解法求最优解_干货 | 线性规划知识点汇总
  8. python init函数_在Python中解释类__init __()函数内部和外部的变量。
  9. nssl1511-我的世界【堆,贪心】
  10. ElasticSearch 文档的添加、获取、更新、删除_05
  11. android 怎么调用js项目_APP逆向神器之Frida【Android初级篇】
  12. 报表自动化就是连接数据库?错,它打开了数据仓库的大门
  13. 小技巧 ----- 关于Java中的System.arraycopy()
  14. 解压rar_【RAR安卓】RAR解压v5.91.build93去广告版,解压多种压缩包 与WinRAR完美兼容!...
  15. 十年Smartbi项目经理:BI应用在银行业的发展历程和展望
  16. 查看dmp文件oracle版本,Oracle的DMP文件修改版本号
  17. VS 制作自定义安装程序
  18. java中的枚举与注解
  19. vue3循环遍历图片渲染无效果
  20. 学习诸如 Oculus Rift 等虚拟现实设备开发需要掌握哪些知识和技术?

热门文章

  1. 我的Serverless实战—基于Serverless搭建一个简单的WordPress个人博客图文详解-JJZ
  2. 查看google浏览器里的证书
  3. android无感知拍照github,装X指南之通过 VirtualApp 实现免 Root 权限 Hook
  4. 宝妈每天一小时,在家用手机做情感励志短视频,收益稳定200多
  5. 计算机 修改 虚拟ip,怎么样在电脑中设置虚拟IP地址?
  6. 【安全头条】美国政府起诉 Kochava 出售敏感的地理位置数据
  7. 计算机毕设(附源码)JAVA-SSM基于Web美食网站设计
  8. 【大数据AI人工智能】创造意义的是人类,不是机器
  9. 第2关:java入门
  10. Java IO - 分类