Python获取天气数据 并做可视化解读气象魅力

前言

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

前几天的长沙,白天大太阳,晚上下暴雨

一点也琢磨不透天气老人家它的想法

顺便哔哔一点生活小插曲:

前几天的时候,我出门,家里的几扇窗户开着在透气

等我十一点回到家,我的客厅和厨房进了一地的水

太让人伤心了,好啦,话不多说!让我们进入正题吧

用python对天气数据进行采集,并作可视化图表

知识点:

  • 动态数据抓包

  • requests发送请求

  • 结构化+非结构化数据解析

开发环境:

  • python 3.8 运行代码

  • pycharm 2022.3.2 辅助敲代码 专业版

  • requests 发送请求 pip install requests

  • parsel 解析数据 pip install parsel

第三方模块安装:

win + R 输入cmd 输入安装命令 pip install 模块名

(如果你觉得安装速度比较慢, 你可以切换国内镜像源)

完整源码、教程 点击此处跳转文末名片获取 ,我都放在这里了。

代码展示

采集数据

采集代码流程实现

  1. 通过代码的方式访问 数据来源地址

  2. 访问之后 将 数据内容 拿到

  3. 将数据内容中 我们需要的内容取出来 不需要的内容 就剔除掉

  4. 保存到表格当中

代码展示

import requests     # 发送请求的第三方库 用来访问网站的
import parsel       # 第三方库 提取数据的
import csv          # 内置模块 无需安装

创建一个表格文件 csv

mode='a': 追加写入

encoding='utf-8': 编码方式

newline='': 数据空行

f = open('tianqi.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.writer(f)

多页采集

for year in range(2013, 2023):
    for month in range(1, 13):

请求链接

        url = f'https://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D=54511&areaInfo%5BareaType%5D=2&date%5Byear%5D={
     year}&date%5Bmonth%5D={
     month}'
  1. 通过代码的方式访问 数据来源地址
        response = requests.get(url)
  1. 访问之后 将 数据内容 拿到
        json_data = response.json()
  1. 将数据内容中 我们需要的内容取出来 不需要的内容 就剔除掉
        html_data = json_data['data']
        # html_data: 网页代码
        # 网页代码的取值 如何取值?
        # tr: 标签名
        select = parsel.Selector(html_data)
        # 拿到所有的tr
        trs = select.css('tr')  # 方式方法很多, 只要你能匹配到数据 都是好方法
        # 将每个tr单独提取出来
        for tr in trs[1:]:
        源码、解答、教程等加V:qian97378免费领取
            # 针对每个 tr 将其中的td 所有的内容取出来
            # getall(): 取内容
            # ::text: 提取标签里面的文本内容
            tds = tr.css('td::text').getall()
  1. 保存到表格当中
            csv_writer.writerow(tds)
可视化代码展示

导入包

import pandas as pd
import datetime
from pyecharts import options as opts
from pyecharts.charts import *
from pyecharts.commons.utils import JsCode

读入数据

data = pd.read_csv('天气.csv')
data


数据预览

data.sample(5)


分割日期/星期

data[['日期','星期']] = data['日期'].str.split(' ',expand=True,n=1)
data

去除多余字符

data[['最高温度','最低温度']] = data[['最高温度','最低温度']].apply(lambda x: x.str.replace('°','').replace('', '0'))
data.head()

计算下雪天气

data.loc[data['天气'].str.contains('雪'),'下雪吗']='是'
data.fillna('否',inplace=True)

分割日期时间

data['日期'] = pd.to_datetime(data['日期'])
data[['最高温度','最低温度']] = data[['最高温度','最低温度']].astype('int')
data['年份'] = data['日期'].dt.year
data['月份'] = data['日期'].dt.month
data['日'] = data['日期'].dt.day
# 预览
data.sample(5)

各城市初雪的时间

s_data = data[data['下雪吗']=='是']
s_data[(s_data['月份']>=9)].groupby('年份').first().reset_index()

各城市下雪天气分布

s_data.groupby(['城市','年份'])['日期'].count().to_frame('下雪天数').reset_index()

做透视表

data_bj = data[(data['年份'] == 2021) & (data['城市'] == '北京')]
data_bj = data_bj.groupby(['月份',
  • 2
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值