使用R语言或Excel处理txt气象数据(以地面降水日值格点数据为例)(小白用滴)
@目录
一、数据获取
二、数据处理
1、气象站点
2、使用R语言
3、使用Excel
4、噗—
一、数据获取
1、数据下载
从国家气象信息中心-中国气象数据网 (cma.cn) http://data.cma.cn/下载数据:

2、数据解释
中国气象数据共享网站将逐日的降水数据以txt格式分发:

打开txt文件,我们可以看到:

其中前六行简单介绍了数据属性:

第一行"ncols 128"表示实体数据有128列;
第二行"nrows 72"表示实体数据有72行;
第三行"xllcorner 72"表示数据最左下方格点单元的经度范围是72°-72.5°E;
第四行"yllcorner 18"表示数据最左下方格点单元的纬度范围是18°-18.5°N;
第五行"cellsize 0.5"表示网格是0.5°×0.5°的;
第六行"NODATA_value -9999.0"表示中国区域以外的值用-9999.0表示。
从第七行开始是对应网格的降水值,第七行(降水数据第一行)第一列数据网格中心为(72.25°E ,53.75°N),第七行第二列数据网格中心为(72.75°E ,53.75°N),……,数据最后一行最后一列网格中心为(135.75°E ,18.25°N)。降水值保留1位小数。经度单位:度,纬度单位:度,格点降水单位:mm。
二、数据处理
1、气象站点
首先,需要确定所需收集的气象站点的经纬度,从而计算气象站点在0.5°×0.5°网格中的具体位置。(下面以东台气象站为例:)
58251 东台气象站 经纬度(120.17°E ,32.51°N)
将网格视为一个坐标系,为了便于读取数据,以左上角为坐标原点:

从而不难算出,东台气象站(120.17°E ,32.51°N)所在网格位置为第43行第96列(43,96)(该方法跳过了txt文件中的前六行数据属性介绍的数据,因此在R中实现时,需要skip 6行)
2、使用R语言进行批量读取
以下是R语言中实现批量处理的代码
#将工作目录设置为数据文件存放的位置setwd("F:\\precpitation")#批量读取txt文件的内容
#list.files列出指定目录中的文件
files=list.files(pattern = ".txt")
#获得文件数量
length(files)
#对文件进行批量处理
for(i in 1:length(files)){#filename = SURF_CLI_CHN_PRE_DAY_GRID_0.5-20210701.txtfilename=files[i]#filenamea = 20210701filename_cut=substr(filename,31,38)#读取文件名为filename的文件,不检查变量名是否有效,跳过前6行再读取数据data=read.table(file=filename,check.names=FALSE,skip=6)#将所需的站点数据存储到data1中data1<-data.frame(prec=data[43,96])#names函数:获取数据集中所有变量的名字names(data1)<-filename_cut#assign函数:创建变量x,将value赋值给xassign(x=filename_cut,value=data1)}#ls()列出所有对象,将对象名称存储到date中
date<-ls()#合并对象组成所需表格precpitation<-get(date[1])for(i in c(2:(length(date)-6))){precpitation<-cbind(precpitation,get(date[i]))}#将所得数据写入csv文件write.csv(t(precpitation),"precipitation202107_58251.csv")
(以上代码是在 https://blog.csdn.net/qq_36958801/article/details/88664232 中学习到的,但我在R studio中运行出现了这样那样的问题(出现问题后可以先check以下最后写入的csv文件中是否有数据,我在运行出现问题时,也有数据写入,似乎并不影像),后来意外在anaconda中的Rstudio中顺利运行并读取数据。)
下面将介绍如何在Excel中自行查找所需降水量(该方法需要手动处理多个文件,适用数据较少且看到代码就头疼的时候使用)
3、使用Excel
(1)将获取的txt数据重命名为.csv文件后打开,将数据进行分列:



(2)在空白单元格内使用**=INDIRECT(ADDRESS(49,96))** 计算得到第49行96列处单元格的数据(此处为第49行是因为需要算上前6行的数据属性介绍的6行),此处即为东台气象站7月1日的降雨量为0.1mm


4、噗—
因为在网上搜索了很久,没有找到适合自己的方法,所以自己瞎摸索了一下,希望可以帮助到和我一样拿到气象数据一头雾水的友友们!感谢参观XD
- 下一步准备学习一下 使用R语言将天气数据可视化中的方法,将我的降水数据捯饬捯饬~
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
