原始数据包括各站点逐日数据、全球站点数据
1.获取国内站点历史数据(1333)
2.清洗数据-筛选出6h雨水监测数据
import pandas as pd
import numpy as np
import os
columns=['year','month','day','hour','air_temperature',
'dew_point_temperature','sea_level_pressure','wind_direction',
'wind_speed_rate','sky_coverage','rain_1h','rain_6h']
file_name=[]
#遍历文件夹保存文件名
for i in os.listdir('data/2021'): #根据文件夹修改时间即可
file_name.append(i)
rain_site=pd.DataFrame(columns=['site','rain'])
#遍历文件读取数for f in file_name:
for f in file_name:
name=f[:6] #将站点编号保存
data=pd.read_csv(f'data/2021/{f}',header=None) # #根据文件夹修改时间即可
col=pd.DataFrame(columns=columns)
for i in range(len(data)):
row=data.loc[i,0]
all=pd.DataFrame(row.split()).T
all.columns=columns
col=pd.concat([col,all])
rain=col[['year','month','day','rain_6h']]
rain=rain.astype(float)
rain=rain.reset_index()
rain=rain[['year','month','day','rain_6h']]
#将合并后的数据-9999转化为空值并舍弃
for j in range(len(rain)):
if rain.loc[j,'rain_6h']== -9999.0:
rain.loc[j,'rain_6h']=None
final=rain.dropna()
month=pd.DataFrame(final.groupby(['month']).sum()) #计算每月的降水总量
value=month['rain_6h'].mean()
#将name和value值保存在字典中
rain_site_example=pd.DataFrame({'site': [name],'rain': [value]})
#保存数据
rain_site=pd.concat([rain_site,rain_site_example])
print(rain_site)
rain_site.to_csv('rain_site.csv')
3.将筛选后的站点与国内站点历史数据匹配
这一步是将含有数据的坐标拼接,并在地图上可视化
(提供的数据是WGS1984坐标系下的,地图底图是CGCS2000,为了方便转换,因此筛选数据的时候将高程值加入,这样在ArcMap中可以直接重新定义投影)
import pandas as pd
year=[2015,2016,2017,2018,2019,2020,2021]
for y in year:
rain_site=pd.read_csv(f'{y}_rain.csv')
site_code=pd.read_csv('data/china_site.csv')
rain_site.columns=['miss','USAF','rain']
sum=pd.merge(rain_site,site_code)
file=sum.dropna()
file=file[['LAT','LON','rain','ELEV(M)']]
file['Year']=2015
file=file.set_index('Year')
file.to_csv(f'china_{y}.csv')
4.利用Kriging插值获得2015年全国范围内的年月均降水数
2015年全国的年月均降水量自东南向西北有一个明显的降低趋势