R语言:天气数据抓取RNCEP简介
之前提到过的前同事Dr. Christian Weichsel,他曾经在项目中给我推荐过一个R语言的包:RNCEP,可以很方便的根据经纬度和时间爬取历史天气数据。这里就简单介绍一下,就当薪火相传了。
天气数据的抓取,在实际工作中还是比较常见的,常用于相关性分析,和给数据挖掘增加外部特征。当然可以去noaa网站上手动下载,不过有了RNCEP也着实方便了R用户。NOAA是美国国家海洋和大气管理局,记录了自测量器诞生以来地球的所有历史气象数据,可追溯到17世纪。
准备工作,在R中安装需要的包
install.packages("RNCEP")
在MacOS中,还需要安装xquartz,然后重启才能正常使用,shell中
brew cask install xquartz
首先,看看最简单的如何输入经纬度和时间来得到气候数据
library(lubridate)
library(RNCEP)
library(tidyverse)
get_weather=function(RYear,RMonth,Lon,Lat){
wx.extent <- NCEP.gather(variable='air',level=850,months.minmax=c(RMonth,RMonth),years.minmax=c(RYear,RYear),lat.southnorth=c(Lat,Lat), lon.westeast=c(Lon,Lon),reanalysis2=FALSE,return.units=TRUE)-273.15
wx.ag <- NCEP.aggregate(wx.data=wx.extent, YEARS=TRUE, MONTHS=TRUE,DAYS=TRUE, HOURS=FALSE, fxn='mean')
wx <- NCEP.array2df(wx.ag, var.names=NULL)
w <- wx[1,4]
return(w)
}
w=get_weather(2017,1,103,31)
然后,就会自动从noaa数据库中抓取气候数据了。这个函数的输入就分别是年、月、经度、纬度,例子中取得就是2017年1月,经度103,纬度31的气候。至于什么气候,取决于gather里的变量,这里的air表示的是气温,还有高度,湿度,风力,降雨量等,参考其CRAN上的文档。
如果,想取一段时间内所有气象站的气候数据,可以参考如下代码:
wx.ag.t1 <- NCEP.aggregate(wx.data=wx.t1, YEARS=TRUE, MONTHS=TRUE,DAYS=TRUE,
HOURS=FALSE,fxn = 'mean')
View(wx.ag.t1)
flight <- NCEP.flight(beg.loc=c(58.00,7.00),
end.loc=c(53.00,7.00), begin.dt='2007-10-01 18:00:00',
flow.assist='NCEP.Tailwind', fa.args=list(airspeed=12),
path='loxodrome', calibrate.dir=FALSE, calibrate.alt=FALSE,
cutoff=0, when2stop='latitude', levels2consider=c(850,925),
hours=12, evaluation.interval=60, id=1, land.if.bad=FALSE,
reanalysis2 = FALSE, query=TRUE)
wx.t1 <- NCEP.gather(variable='air.2m', level='gaussian',
months.minmax = c(1,12),years.minmax = c(2017,2017),
lat.southnorth = c(30,31), lon.westeast = c(104,104),
reanalysis2 = FALSE, return.units = TRUE)-273.15
wx.t2 <- NCEP.gather(variable='shum.2m', level='gaussian',
months.minmax = c(1,12),years.minmax = c(2017,2017),
lat.southnorth = c(30,31), lon.westeast = c(104,104),
reanalysis2 = FALSE, return.units = TRUE)
wx.df1 <- NCEP.array2df(wx.data=wx.t1, var.names='temperature')
wx.df2 <- NCEP.array2df(wx.data=wx.t2, var.names='humidity')
wx.df <- wx.df1 %>%
inner_join(wx.df2)
View(wx.df)
write_csv(wx.df, "hum.csv")
取气候数据和画地图,是我所剩不多的R技能了。下篇会继续如何在python中获取天气数据,我是YueTan,欢迎关注