【python】采集天气数据并作可视化,怀念一下之前得好天气

news2024/11/15 7:55:19

前言

这几天,长沙得天气突然爆冷,每天上班跟渡劫一样

生怕一不小心,风就把伞吹跑了,人湿点无所谓,但是我得伞不能有事

现在得我无比怀念之前得好天气,今天我就来采集一下天气数据并作个可视化怀念一下它~

开发环境

  • Python 3.8 / 编译器

  • Pycharm 2021.2版本 / 编辑器

Echarts是一个开源的数据可视化JS库,

pyecharts是一款将python与echarts结合的强大的数据可视化工具

先来获取我们想要的天气数据

请求数据

因为是静态网站,所以数据还是很好找到的,F12打开开发者工具,刷新下网站就行了

url = 'http://******/weather1d/101250101.shtml'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
response = requests.get(url=url, headers=headers)

解析数据

用正则可以直接匹配我我们想要的数据

html_data = re.findall('var hour3data=(.*)', response.text)[0]
json_data = json.loads(html_data)
print(json_data)

提取数据

for index in json_data['7d']:
    print(index)
    for i in index:
        dit = {
            '时间': i.split(',')[0],
            '天气': i.split(',')[2],
            '温度': i.split(',')[3],
            '风向': i.split(',')[4],
            '风级': i.split(',')[5],
        }
        print(dit)

保存数据

把数据保存到csv文件里,而且数据很干净,后面做可视化不用再进一步进行清洗

f = open('data.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '时间','天气','温度','风向','风级'
])
csv_writer.writeheader()

数据可视化

我们都知道python上的一款可视化工具matplotlib,

而前些阵子做一个Spark项目的时候用到了百度开源的一个可视化JS工具-Echarts,

可视化类型非常多,但是得通过导入js库在Java Web项目上运行,

平时用Python比较多,于是就在想有没有Python与Echarts结合的轮子。

Google后,找到一个国人开发的一个Echarts与Python结合的轮子:pyecharts

城市温度变化柱状图(一周气温变化)

x = Faker.choose()
tl = Timeline()
time_list = [i for i in range(23, 32)]
for i, date, temperature in zip(time_list, date_list, temperature_list):
    bar = (
        Bar()
        .add_xaxis(date)
        .add_yaxis("长沙温度", temperature)
        .set_global_opts(
            title_opts=opts.TitleOpts("长沙3月{}日温度".format(i)),
            graphic_opts=[
                opts.GraphicGroup(
                    graphic_item=opts.GraphicItem(
                        rotation=JsCode("Math.PI / 4"),
                        bounding="raw",
                        right=100,
                        bottom=110,
                        z=100,
                    ),
                    children=[
                        opts.GraphicRect(
                            graphic_item=opts.GraphicItem(
                                left="center", top="center", z=100
                            ),
                            graphic_shape_opts=opts.GraphicShapeOpts(
                                width=400, height=50
                            ),
                            graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                                fill="rgba(0,0,0,0.3)"
                            ),
                        ),
                        opts.GraphicText(
                            graphic_item=opts.GraphicItem(
                                left="center", top="center", z=100
                            ),
                            graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                                text="长沙3月{}日温度".format(i),
                                font="bold 26px Microsoft YaHei",
                                graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                                    fill="#fff"
                                ),
                            ),
                        ),
                    ],
                )
            ],
        )
    )
    tl.add(bar, "3月{}日".format(i))

tl.render_notebook()

全省每小时温度分布图(3天气温变化)

file = "weather_henan_allcities.xlsx"
data = pd.read_excel(file) #reading file
time_line_final = list(data['小时'].iloc[0:24])

from pyecharts import options as opts
from pyecharts.charts import Map,Timeline
#定义一个timeline和map的组合图
def timeline_map(data):
    tl = Timeline().add_schema(play_interval =300,height=40,is_rewind_play=False,orient = "horizontal",is_loop_play = True,is_auto_play=False)#设置播放速度、是否循环播放等参数
    for h in time_line_final:
        x =data[data["小时"]==h]['城市'].values.tolist() #选取指定城市
        y=data[data["小时"]==h]['温度'].values.tolist() #选取时间的温度
        map_shape = (
            Map()
            .add("{}h时气温(℃)".format(h),[list(z) for z in zip(x, y)],"湖南") #打包输入地区及对应降温度数据
            .set_series_opts(label_opts=opts.LabelOpts("{b}")) #配置系列参数,{b}为显示地区数据
            .set_global_opts(
                title_opts=opts.TitleOpts(title="每小时气温分布"), #全局参数中设置标题
                visualmap_opts=opts.VisualMapOpts(max_=300,  #设置映射配置项的最大值
                                                  is_piecewise=True, #设置是否为分段显示
                                                  pos_top = "60%", #映射配置项距图片上部的距离
                                                  pieces=[
                                                        {"min": 13, "label": '>13℃', "color": "#FF0000"},  # 分段指定颜色及名称
                                                        {"min": 10, "max": 12, "label": '10-13℃', "color": "#FF3333"},
                                                        {"min": 7, "max": 9, "label": '7-9℃', "color": "#FF9999"},
                                                        {"min": 0, "max": 6, "label": '0-6℃', "color": "#FFCCCC"}])
        ))
        tl.add(map_shape, "{}h".format(h)) #将不同日期的数据加入到timeline中
    return tl
timeline_map(data).render("rainfall.html")

尾语

大家觉得有用的话可以来个免费的点赞+收藏+关注,

防止下次我悄悄更新了好东西你却不知道 !!!

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 特性(Attribute)

一、特性(Attribute)定义 特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。 特性使用中括号…

ArduPilot之开源代码框架

ArduPilot之开源代码框架 1. 系统框架2. 工程框架2.1 工程目录2.2 代码组成2.3 运行流程 4. 硬件传感器总线4.1 I2C4.2 SPI4.3 UART4.4 CAN 5. 软件设计概念6. 总结7. 参考资料 在研读ArduPilot的过程,尝试用一些中文的词汇来描述,可能会造成某些理解上的…

sparksql select后插入自己 报错 Cannot overwrite a path that is also being read from

问题现象 spark.version < 3.0.1 执行下面语句报错: Cannot overwrite a path that is also being read from ... 哪些情况算同时读写自己? 如果读自己和写自己在一个spark stage中,就算同时读写自己. spark.table("tb1")// 其他stransform.write.mode("…

运维监控工具PIGOSS BSM扩展指标介绍

PIGOSS BSM运维监控工具&#xff0c;除系统自带指标外&#xff0c;还支持添加SNMP扩展指标、脚本扩展指标、JMX扩展指标、自定义JDBC指标等&#xff0c;今天本文将介绍如何添加SNMP扩展指标和脚本扩展指标。 添加SNMP扩展指标 前提&#xff1a;需要知道指标的oid 例子&#xff…

刚毕业在深圳做程序员,我来聊聊月薪1万在大城市生活能剩下多少

我今年刚毕业&#xff0c;然后在大城市做IT&#xff0c;可能工资大概1万左右。现在讨论一下&#xff0c;月薪1万在大城市最后能留下多少。以下是兴哥的一位刚毕业没多久的程序员朋友&#xff0c;给大家分享一下程序员的薪资水平&#xff0c;在大城市生活 &#xff0c;一个月会剩…

JDBC重点

JDBC初识 DriverManager 将第三方数据库厂商的实现驱动jar注册到程序中可以根据数据库连接信息获取connection Connection 和数据库建立的连接,在连接对象上,可以多次执行数据库curd动作 可以获取statement和 preparedstatement,callablestatement对象 Statement | Prepare…

网络基础,InetAddress,Socket,TCP,UDP

概念&#xff1a;两台设备之间通过网络实现数据运输网络通信&#xff1a;将数据通过网络从一台设备传输到另一台设备java.net包下提供了一系列的类或接口&#xff0c;供程序员使用&#xff0c;完成网络通信网络&#xff1a;两台或多台设备通过一定物理设备连接起来构成了网络根…

go1.20环境安装以及beego框架配置

打开网址下载安装包选择对应安装包来下载安装(个人是windows&#xff0c;下载的1.20.3版本) 默认情况下会安装在C盘&#xff0c;但是我安装在了D盘目录 根据安装提示一步步next&#xff0c;直至完成 go get 在1.18版本之后就弃掉了&#xff0c;换成了install 配置自己的work…

Spring Cloud Alibaba全家桶——微服务链路追踪SkyWalking

前言 本文小新为大家带来 微服务链路追踪SkyWalking 相关知识&#xff0c;具体内容包括SkyWalking简介&#xff0c;SkyWalking环境搭建部署&#xff0c;SkyWalking接入微服务&#xff0c;SkyWalking持久化跟踪数据&#xff0c;自定义SkyWalking链路追踪&#xff0c;SkyWalking集…

ARM相关重点

一、概念&#xff1a; 指令&#xff1a;就是一条汇编指令 指令集&#xff1a;很多条汇编指令的集合 架构&#xff1a;随着ARM产品的迭代升级&#xff0c;对ARM指令集的命名 armv1~armv6已经淘汰 armv7~armv8市面正在使用的 armv9:2021年刚上市 内核&#xff1a;根据不同的a…

SpringCloud分布式请求链路跟踪——Sleuth

Sleuth 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 随着微服务越来越多&#xff0c;可能会出现A调B&#xff0c;B调C、D等多重调用的情况&#xff0c;出现问题不易排查。 Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案&#xff0c…

软件测试高频面试题【附答案解析】

面试指导 软件测试理论刷题篇mysql数据库刷题库linux操作系统刷题篇软件测试工程师面试篇 一. 软件测试理论刷题篇 1.软件测试的意义是什么&#xff1f; 思路&#xff1a;什么是软件测试→软件测试的含义 什么是软件测试&#xff1a;在规定的条件下对程序进行操作&#xf…

【错误:A component required a bean of type ‘xxx‘ that could not be found.解决办法】

在学谷粒商城项目的时候出现了以下问题&#xff1a; *************************** APPLICATION FAILED TO START *************************** Description: A component required a bean of type org.redisson.Redisson that could not be found. Action: Consider defining a…

优思学院|西门子精益六西格玛的历程

最新阅读了一份案例报告&#xff0c;报告中仔细研究了西门子公司实施精益六西格玛的历程&#xff0c;也谈到它们利用了线上课程后&#xff0c;取得了更大的成功。 2014年&#xff0c;西门子工业自动化部门&#xff08;IA&#xff09;的高管们认识到他们必须采取措施来加强内部效…

English Learning - L2 第 16 次小组纠音 弱读和语调 2023.4.22 周六

English Learning - L2 第 16 次小组纠音 弱读和语调 2023.4.22 周六 共性问题help /help/ 中的 e 和 lsorry /ˈsɒri/ 中的 ɒ 和 ilook out /lʊk aʊt/ 中的 ɒ 和 aʊdont /dəʊnt/ 中的 əʊemergency /ɪˈmɜːʤənsɪ/ 中的 ɜːname /neɪm/ 中的 eɪright /raɪt/…

甘肃vr全景数字化展厅提高企业品牌认知度和销售效果

相比传统式展厅给观众们呈现的是静态的视觉体会&#xff0c;缺乏实时交互水平。而720VR全景虚拟展厅能够提供高度真实的展览体验&#xff0c;融合视、听、触等各种感官享受&#xff0c;带来颠覆的沉浸式体验。 即便社恐的你也能在虚拟现实的世界游刃有余&#xff0c;想看哪里点…

flutter protobuf插件的安装和使用

1.安装插件 2.在pubspec.yaml添加插件 protobuf: ^2.1.0protoc_plugin: ^20.0.13.安装protoc brew install protobuf检查是否安装成功 protoc --version4.安装dart brew tap dart-lang/dart brew install dartdart 安装好后&#xff0c;就有pub命令了。输入dart 命令行 和d…

【Linux】Linux背景常见的基本指令

文章目录 一、Linux背景二、Linux下基本指令ls 指令pwd 命令cd 指令tree 指令touch 指令mkdir 指令rmdir 指令rm 指令man 指令cp 指令mv 指令cat 指令more 指令less 指令head 指令tail 指令date 指令cal 指令find 指令grep 指令zip 指令unzip 指令tar 指令bc 指令uname 指令重要…

uniapp初始环境搭建,出于猎奇,也出于热爱编程

1 安卓环境 官方文档有些看不懂&#xff0c;这里还是自己写一下&#xff0c;毕竟我已经不想在回来带angular了&#xff0c;还是使用vue3吧&#xff0c;年纪打了&#xff0c;没用的知识学多了也是浪费时间。出于猎奇&#xff0c;也出于热爱编程。 1.1 生成签名证书 Android平台签…

linux系统启动过程与0号和1号进程

讲到linux 0号进程和1号进程就涉及到linux 系统的启动&#xff0c;我们就从linux启动过程开始。 1、linux 启动整体过程 当系统第一次启动或重启的时候&#xff0c;处理器将执行一个已知地方的代码。对应个人电脑&#xff0c;这个地方是存在主板上内存内的BIOS 当一个启动设备…