首页 > 编程语言 >8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表

时间:2023-09-07 16:04:29浏览次数:39  
标签:pyecharts title Python list df 可视化 攻略 import opts



目录

  • 前言
  • 环境使用
  • 模块使用
  • 数据来源分析
  • 代码实现
  • 导入模块
  • 请求数据
  • 解析
  • 保存
  • 数据可视化
  • 导入模块、数据
  • 年份分布情况
  • 月份分布情况
  • 出行时间情况
  • 费用分布情况
  • 人员分布情况


前言

2023年的中秋节和国庆节即将来临,好消息是,它们将连休8天!这个长假为许多人提供了绝佳的休闲机会,让许多人都迫不及待地想要释放他们被压抑已久的旅游热情,所以很多朋友已经开始着手规划他们的旅游行程。

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_css

今天我们来分析下去哪儿的旅游攻略数据,看看吃、住、游玩在价位合适的情况下,怎样才能玩的开心

环境使用

Python 3.8
Pycharm

模块使用

requests
parsel
csv

数据来源分析

  1. 明确需求

这次选的月份为10 ~ 12月,游玩费用为1000 ~ 2999这个价位

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_python_02


2. 抓包分析

按F12,打开开发者工具,点击搜索,输入你想要的数据

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_html_03

找到数据链接

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_python_04

https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat&&month=10_11_12&avgPrice=2

代码实现

导入模块

import requests
import parsel
import csv

请求数据

模拟浏览器: <可以直接复制>
response.text 获取响应文本数据
response.json() 获取响应json数据
response.content 获取响应二进制数据
我们使用requests.get()方法向指定的URL发送GET请求,并获取到响应的内容

url = f'https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat&&month=10_11_12&&avgPrice=2'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)

解析

先取响应文本数据

selector = parsel.Selector(response.text)

css选择器::根据标签属性提取数据内容,看元素面板, 为了帮助找到数据标签,

lis = selector.css('.list_item')
for li in lis:
    title = li.css('.tit a::text').get()
    user_name = li.css('.user_name a::text').get()
    date = li.css('.date::text').get()
    days = li.css('.days::text').get()
    photo_nums = li.css('.photo_nums::text').get()
    fee = li.css('.fee::text').get()
    people = li.css('.people::text').get()
    trip = li.css('.trip::text').get()
    places = ''.join(li.css('.places ::text').getall()).split('行程')
    place_1 = places[0].replace('途经:', '')
    place_2 = places[-1].replace(':', '')
    href = li.css('.tit a::attr(href)').get().split('/')[-1]
    link = f'https://travel.qunar.com/travelbook/note/{href}'
    dit = {
        '标题': title,
        '昵称': user_name,
        '日期': date,
        '耗时': days,
        '照片': photo_nums,
        '费用': fee,
        '人员': people,
        '标签': trip,
        '途径': place_1,
        '行程': place_2,
        '详情页': link,
    }
    print(title, user_name, date, days, photo_nums, fee, people, trip, place_1, place_2, link, sep=' | ')

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_信息可视化_05

保存

f = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '昵称',
    '日期',
    '耗时',
    '照片',
    '费用',
    '人员',
    '标签',
    '途径',
    '行程',
    '详情页',
])
csv_writer.writeheader()

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_信息可视化_06

数据可视化

导入模块、数据

import pandas as pd

df = pd.read_csv('data.csv')
df.head()

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_python_07

年份分布情况

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['年份'].value_counts().to_list()
info = df['年份'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="年份分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_数据_08

月份分布情况

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['月份'].value_counts().to_list()
info = df['月份'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="月份分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_html_09

出行时间情况

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['耗时'].value_counts().to_list()
info = df['耗时'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="出行时间情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_数据_10

费用分布情况

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['费用'].value_counts().to_list()
info = df['费用'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="费用分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_python_11

人员分布情况

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['人员'].value_counts().to_list()
info = df['人员'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="人员分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表_css_12


适合练手的25个Python案例源码分享,总有一个你想要的


标签:pyecharts,title,Python,list,df,可视化,攻略,import,opts
From: https://blog.51cto.com/u_15652786/7398126

相关文章

  • Python实现自动登录+获取数据
    前言Dy这个东西想必大家都用过,而且还经常刷,今天就来用代码,获取它的视频数据环境使用Python3.8Pycharm模块使用requestsseleniumjsonre一.数据来源分析1.明确需求明确采集网站以及数据内容网址:https://www.dy.com/user/MS4wLjABAAAAB0-gppwu15DtJJZmMpgUqakr7Jw_pmr7skR3I......
  • Lnton羚通AI算法算力平台在海域可视化监管海域动态远程视频智能监管平台的构建方案
    一、方案背景随着科技的不断进步,智慧海域管理平台已成为海洋领域监管的关键工具。相比传统的视频监控方式,智慧海域管理平台通过建设近岸海域视频监控网、海洋环境监测网和海上目标探测网络等,实现了海洋管理的数字化转型。传统的监控方式需要大量人力物力,而智慧海域管理平台实现了......
  • Automate the Boring Stuff with Python(读后感)
    这里主要就是记录下这本书的主要内容,自己以后想起来的时候可以直接看这个博客整本书的内容看目录就很清楚了,所以下面就是目录加自己的一点心得体会Python编程基础基础中的基础,但有个很重要的轮子PrettyPrint:把输出打印的更漂亮自动化任务这是重点,一次性肯定记不下来,智能以后......
  • 【爬虫笔记】Python爬虫简单运用爬取代理IP
    一、前言近些年来,网络上的爬虫越来越多,很多网站都针对爬虫进行了限制,封禁了一些不规则的请求。为了实现正常的网络爬虫任务,爬虫常用代理IP来隐藏自己的真实IP,避免被服务器封禁。本文将介绍如何使用Python爬虫来获取代理IP,以及如何在爬虫中使用代理IP。二、获取代理IP获取代理IP有两......
  • python基础 06while循环和for循环
    while循环当你需要重复干一件事情的时候,叫做循环age=17whileTrue:inp_age=int(input('age:'))ifinp_age>age:print('猜大了')elifinp_age<age:print('猜小了')else:print('猜对了')......
  • 【ROS2机器人入门到实战】可视化点云-雷达消息合成
    5.可视化点云-雷达消息合成写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是爱吃鱼香ROS的小鱼。上一节完成了指定角......
  • Python判断多个文件夹的文件夹名是否包含“分公司”或“营销中心”怎么处理?(方法一)
    大家好,我是皮皮。一、前言前几天在Python最强王者群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。大佬们请问下 判断多个文件夹的文件夹名是否包含“分公司”或“营销中心” 有没有什么简便的办法可以实现呀?二、实现过程这里粉丝自己其实已经给了一......
  • 软件测试|Python random模块,超乎想象的强大
    Python的random模块是一个非常强大的工具,用于生成随机数和随机选择。它提供了许多函数和方法,可以满足各种随机化需求。本文将介绍random模块的基本功能和常见用法,以帮助读者更好地理解和利用这个模块。返回整数random.randange()语法如下:random.randrange(stop)random.ran......
  • 趣味微项目:玩转Python编程,轻松学习快乐成长!
    ......
  • 如何用python连接Linux服务器
    1.安装paramiko库pipinstallparamiko2.使用paramiko库连接linux#导入库importparamiko#创建一个sshclient对象ssh=paramiko.SSHClient()#允许连接不在know_host中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#连接主机ssh.connect(hostname="......