美国国家气候数据中心(NCDC)数据下载与处理

1、数据下载网址:

ftp://ftp.ncdc.noaa.gov/pub/data/noaa/isd-lite/
注:用Google Chrome浏览器打开
数据源为NCDC(美国国家气候数据中心,National Climatic Data Center),隶属于NOAA(美国国家海洋及大气管理局,National Oceanic and Atmospheric Administration)

2、所需站点ID筛选

站点ID在isd-history里根据所属国家进行查询,中国的缩写为CH,将中国区的站点ID、经纬度全部筛选出,导入arcgis中显示为点数据NCDC_station.shp,用研究区边界对NCDC_station.shp进行裁剪,得到研究区内的站点分布,打开属性表导出,得到自己所需的站点ID,根据站点ID在网站进行对应下载,如下图所示。
打开裁剪出的站点属性表并导出,得到所需站点ID

3、站点数据下载

网站上为1901年~最新年份的数据,按年份分文件夹,每个年份的文件夹内为.gz格式的站点数据,站点文件命名格式为××××××(站点ID)-99999-××××(年份),找到自己所需的站点,点击即可下载。

4、数据格式解读

下载的数据没有表头,网站有对于各列数据含义的解读文件 isd-lite-format.txt
其中各列数据的中文含义分别是年、月、日、小时、气温、露点温度、气压、风向、风速、云量、累积降雨量-1小时、累积降雨量-6小时
NCDC数据2022年某个站点文件格式

5、为数据添加表头并输出为excel文件

用python对站点数据进行处理,代码引自他人教程

import pandas as pd
import numpy as np

data = pd.read_table('自己的文件路径/592871-99999-2022',header=None)
'''
原始数据中以空格分隔的12列数据,分别为:
年、月、日、小时、温度、露点温度、气压、风向、风速、云量、1小时降雨量和6小时降雨量。
'''
# 构建空列表用于存放提取出来的各列数据
data_list = []
for line in data.values:
    line_temp = [int(x) for x in line[0].split(' ') if x != '']
    data_list.append(line_temp)


df = pd.DataFrame(data_list,columns=['年','月','日','小时','温度','露点温度','气压','风向','风速','云量','1小时雨量','6小时雨量'])


# 对数据中-9999的缺失值进行NaN替换
df = df.replace(-9999,np.nan)
# 数据说明文档中表示原始数据中温度、露点温度、气压、风速、降雨量的换算系数为10,所以要对原始数据中的对应数据除以10,进行换算。
df['温度'] = df['温度']/10
df['露点温度'] = df['露点温度']/10
df['气压'] = df['气压']/10
df['风速'] = df['风速']/10
df['1小时雨量'] = df['1小时雨量']/10
df['6小时雨量'] = df['6小时雨量']/10
# 为了便于后续重采样分析数据,给数据增加一个DataFrame列
df['Date'] = pd.PeriodIndex(year=df['年'],month=df['月'],day=df['日'],hour=df['小时'],freq='H')
df = df.set_index(df['Date'])
df.drop(columns= 'Date',inplace=True)
print(df)
# 保存为同名excel
df.to_excel('想输出的文件路径592871-99999-2022.xlsx')

6、将数据进行重采样,逐小时变为逐日

用python的数据重采样将逐小时数据处理成逐日数据,

import pandas
import pandas as pd
data1=pd.read_excel('自己的文件路径578530-99999-2022.xlsx',usecols=['Date','温度'])
data1['Date']=pd.to_datetime(data1['Date'])
data1=data1.set_index('Date')
T1_mean = data1.resample('d').mean() #mean取日均温,若处理降雨数据则为sum,日总降雨量
T1_max = data1.resample('d').max() #max取日最高温
T1_min = data1.resample('d').min()  #min取日最低温
daily_T1 = pandas.concat([T1_mean,T1_max,T1_min])
print(daily_T1)
data2=pd.read_excel('F:/NOAA_NCDC_2022/2022download/578660-99999-2022.xlsx',usecols=['Date','温度'])
data2['Date']=pd.to_datetime(data2['Date'])
data2=data2.set_index('Date')
T2_mean = data2.resample('d').mean()
T2_max = data2.resample('d').max()
T2_min = data2.resample('d').min()
daily_T2 = pandas.concat([T2_mean,T2_max,T2_min])
print(daily_T2)
data3=pd.read_excel('F:/NOAA_NCDC_2022/2022download/579720-99999-2022.xlsx',usecols=['Date','温度'])
data3['Date']=pd.to_datetime(data3['Date'])
data3=data3.set_index('Date')
T3_mean = data3.resample('d').mean()
T3_max = data3.resample('d').max()
T3_min = data3.resample('d').min()
daily_T3 = pandas.concat([T3_mean,T3_max,T3_min])
print(daily_T3)
#将excel写入对象writer
writer = pd.ExcelWriter(r"想输出的路径.xlsx", engine='xlsxwriter')
# 分别将表T1、T2、T3写入Excel中的sheet1、sheet2、sheet3
# 命名为daily_T1、daily_T2、daily_T3
daily_T1.to_excel(writer, sheet_name='daily_T1')
daily_T2.to_excel(writer, sheet_name='daily_T2')
daily_T3.to_excel(writer, sheet_name='daily_T3')
# 保存读写的内容
writer.save()

补充:批量重采样

对生成的各个站点的excel格式的数据进行批量的重采样

# -*- coding: utf-8 -*-
import pandas as pd
import os

folder_path = 'E:/存储站点数据的文件夹路径/'  # 文件夹路径
output_folder = 'E:/Output/'   # 输出文件夹路径
file_list = []  # 存储文件列表

# 遍历文件夹中的文件
for file_name in os.listdir(folder_path):
    if file_name.endswith('.xlsx'):  # 只处理以.xlsx结尾的文件
        file_path = os.path.join(folder_path, file_name)  # 拼接文件路径
        file_list.append(file_path)  # 将文件路径添加到文件列表中

# 批量处理文件
for file in file_list:
    # 生成输出文件名
    output_file = os.path.join(output_folder, os.path.basename(file).replace('.xlsx', '_Daily_T.xlsx'))

    data = pd.read_excel(file, usecols=['Date', '温度'])
    data['Date'] = pd.to_datetime(data['Date'])
    data = data.set_index('Date')
    T_mean = data.resample('D').mean()
    T_max = data.resample('D').max()
    T_min = data.resample('D').min()
    daily_T = pd.concat([T_mean, T_max, T_min], axis=1)

    # 输出到Excel文件
    daily_T.to_excel(output_file, index=True)  # 保留索引
    print("变量已成功写入Excel文件:", output_file)

#合并文件

# 文件夹路径
folder_path = 'E:Output/'  #修改为你存储文件的路径

# 获取文件夹中的所有Excel文件
file_list = [file for file in os.listdir(folder_path) if file.endswith('.xlsx')]

# 创建一个空的DataFrame用于存储合并结果
combined_data = pd.DataFrame()

# 批量处理文件
for file in file_list:
    file_path = os.path.join(folder_path, file)  # 拼接文件路径
    data = pd.read_excel(file_path)  # 读取Excel文件
    combined_data = pd.concat([combined_data, data], axis=1)  # 按列合并数据

# 输出合并后的表格
print(combined_data)

# 输出合并结果到新的Excel文件
output_file = 'E:/combined_Daily_T.xlsx' 
combined_data.to_excel(output_file, index=False)
print("合并结果已保存为新的Excel文件:", output_file)

下载处理NCDC数据,可以使用Python来完成。首先,你需要安装wget模块,可以使用以下命令安装:pip install wget。 然后,你可以使用以下代码来下载NCDC数据: ```python import wget url = 'ftp://ftp.ncdc.noaa.gov/pub/data/noaa/your_file_name.nc' output_path = 'path_to_save_file/your_file_name.nc' wget.download(url, output_path) ``` 请将"your_file_name.nc"替换为你要下载的文件名,并将"path_to_save_file"替换为你要保存文件的路径。 下载完成后,你可以使用Python的netCDF4模块来处理NCDC数据。你可以使用以下代码来读取和处理数据: ```python import netCDF4 as nc file_path = 'path_to_saved_file/your_file_name.nc' data = nc.Dataset(file_path) # 在这里进行数据处理和分析 ``` 请将"your_file_name.nc"替换为你下载的文件名,并将"path_to_saved_file"替换为你保存文件的路径。 希望这可以帮助到你! #### 引用[.reference_title] - *1* [将nc文件日数据处理为月数据](https://blog.csdn.net/weixin_43522348/article/details/129647939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [使用python处理美国气象数据](https://blog.csdn.net/jc_benben/article/details/86020114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值