24年10月全球观测气象站点数据更新 | 下载教程

文摘   2024-11-07 08:00   北京  

HadSID

各位在研究的时候可能找不到自己需要的观测的站点数据,这里我们介绍HadISD数据集,该数据集提供了时间上大部分地区的观测站点数据。

HadISD 站点在 1x1 度网格上的分布。这些是 ISD 的子集,至少每 6 小时报告一次,并且有足够长的记录

详细的数据介绍以及下载教程可以看我们之前的推文:Python | Met Office | 爬取全球气象站点数据

HadISD v3.4.1.202409p 的更新已经发布, NOAA NCEI 的数据服务在飓风Helene发生洪水后已恢复上线。许多观测站点数据已更新至 2024 年 9 月 30 日,但由于摄取的数据丢失,可能会出现一些数据缺失。NOAA NCEI 正在解决这些问题。

Hurricane Helene

url更新

最近后台有人问我们download_url的问题,才发现数据已经更新了。

随着HadISD v3.4.1.202409p 的更新, 原本的download_url也更新了。

download_url更新为:https://www.metoffice.gov.uk/hadobs/hadisd/v341_202409p/data/hadisd.3.4.1.202409p_19310101-20241001_{site_id}.nc.gz

在原始的代码上将download_url替换:

download_url = f'https://www.metoffice.gov.uk/hadobs/hadisd/v341_202409p/data/hadisd.3.4.1.202409p_19310101-20241001_{site_id}.nc.gz' 

完整代码

import pandas as pd
import os
import gzip
import requests
site = pd.read_csv('hadisd_station_info_v341_202408p.txt'
                   delim_whitespace=True, header=None
                   names=['id','latitude''longitude''altitude']) 

site_alps = site[(site['longitude'] >= 5) & (site['longitude'] <= 16) &
                 (site['latitude'] >= 44) & (site['latitude'] <= 47.5)]
print(site_alps)

# data saving folder
save_folder_path = r'your_data_path'
os.makedirs(save_folder_path, exist_ok=True)

# download target site data
for site_id in site_alps['id']:
    download_url = f'https://www.metoffice.gov.uk/hadobs/hadisd/v341_202409p/data/hadisd.3.4.1.202409p_19310101-20241001_{site_id}.nc.gz' 
    print(f'downloading {site_id} data from {download_url}')
    response = requests.get(download_url)
    response.raise_for_status() # fault report
    # save file
    # write/read in binary format
    download_file_path = os.path.join(save_folder_path,f'{site_id}.nc.gz')
    
    with open(download_file_path,'wb'as file:
        file.write(response.content)
    print(f'site {site_id} saved')

# decompress .nc.gz -> .nc
folder_path = r'your_data_path'

for filename in os.listdir(folder_path):
    if filename.endswith('.nc.gz'):
        file_path = os.path.join(folder_path, filename)
        with gzip.open(file_path, 'rb'as gz_file:
            filename_nc = os.path.splitext(filename)[0# split filename and extension name (.gz), keep filename
            file_path_nc = os.path.join(folder_path, filename_nc)
            with open(file_path_nc, 'wb'as output_file:
                output_file.write(gz_file.read())
        print(f'{filename} decompressed')
        # del .gz 
        os.remove(file_path)
        print(f'{filename} deleted')

往期回顾

·投稿或转载请联系·
长按可关注


气python风雨
主要发一些涉及大气科学的Python文章与个人学习备忘录
 最新文章