《关于我读取nc数据遇到的问题》

故事的起因,是我在做美赛模拟的时候……
《关于我读取nc数据遇到的问题》_第1张图片
天呐,好好看
于是
我便开始研究怎么做一个这样的温度图

但是,突然想起,我还没有数据呢

所以,第一步:找数据
找数据的过程实在过于复杂离谱,以至于笔者不愿自述翻车经过,最终拿到的数据来源英国气象局哈德利中心观测数据集
之后是第二步,由于拿到的数据是nc格式,在我能打开的软件中都是乱码,所以第二步是研究如何查看nc中的数据。这一步主要是应用不同的软件进行处理,我查到的主流软件是matlab,python和R,但苦于没学过matlab,就用python试了一下,未果。但此时csdn上的大多数教程都是读取某一时间点的数据然后画一个很好看的温度图,类似这样
《关于我读取nc数据遇到的问题》_第2张图片

但咱缺这个吗?
不缺,美赛要求是做预测,所以只拿一个时间点数据是没用的,我们要拿到某个点一系列的数据,于是便进入了我的苦苦寻找之旅,之后找到了知乎上@张敬信的文章【R语言】2020美赛A题海平面温度数据读取与筛选
参考可得,但苦于未学过R,只能照猫画虎,而上面的代码不是足够细致,只给了关键部分,于是费劲九牛之力东拼西凑下做出了完整的代码

library(ncdf4)                                      
setwd('D:\\HadISST_sst.nc\\')             
nc <- nc_open( 'HadISST_sst.nc')   
lon_inds <- which(-18 < lon & lon < 5)
lat_inds <- which(52 < lat & lat < 65)
t_inds <- which(t > ymd("1950-01-01"))
Adats <- temps[lon_inds, lat_inds, t_inds]
dim(Adats)
lons <- lon[lon_inds]
lats <- lat[lat_inds]
ts <- t[t_inds]
ts_ind <- which(ts > ymd("1970-1-1"))
print(Adats[2, 3, ts_ind])

然后拿到的数据如下

[1]7.889232 7.618458 7.613299 7.700492 8.659487 9.963133 11.004625
[8] 12.101729 10.902960 9.304408 8.722803 8.414193 8.172655 7.878663
[15] 7.995408 8.064617 8.797396 10.226385 11.996298 12.667596 11.293398
[22] 10.305099 8.989571 8.592402 8.160093 7.673799 8.047358 7.846298
[29] 8.607189 10.360067 11.617097 11.933345 11.147330 9.926020 8.806125
[36] 8.065253 7.800888 7.710335 8.029990 7.945684 8.138223 9.348089
[43] 11.507521 13.020615 11.883932 9.727770

这46个数据是第 2 个经度(-16.5度),第 3 个纬度(62.5度),2018 年至今(2021年10月)总共46个月的温度,之后的操作就是改改参数,拿到一组组数据就行了,代码行的解释可移步知乎连接,已经非常详细了
下一个应该是存到excel里,目前还没做,做完再更。
另外,R的配置可以在csdn搜索;。
完结撒花
————————————————————————

f <- Adats[2, 3, ts_ind]
write.table (f,file ="f.txt",col.names=FALSE) 

加两行代码导出txt
——————————————————————`

name=paste(1:23,".txt",sep=' ')
for(i in 1:23)
{
  f <- Adats[i, 3, ts_ind]
write.table (f,name[i],col.names=FALSE,row.names=F) 
}

批量处理同一经度数据

你可能感兴趣的:(visual,studio,code,r语言)