基于净辐射数据的阴天识别
Identification of cloudy days based on Net Radiation data
如何根据每天的净辐射时间序列(在 FluxNet/AMERIFlux 个站点计算)来识别某一天是多云还是晴天?我在某处读到,晴朗的天空辐射具有正弦曲线行为。如果我们得到不同的行为,这意味着它是由云引起的。我不知道究竟如何解决这个问题?这是示例数据:https://drive.google.com/file/d/1f1YfWgPbg3fxhFG1DTNH9Ex3lTDqLBZp/view?usp=sharing
如果我们获取您的原始数据并将 Time
列从文本转换为我们可以使用的实际日期,这将有助于分析。我们还将删除具有 NaN
值的行:
df <- read.csv("net_rad.csv")
df$Date <- as.POSIXct(strptime(df$Time, "%m/%d/%Y"))
df <- df[!is.nan(df$NET_RAD),]
如果我们绘制每日净辐射图,我们会看到一个清晰的季节性模式:
library(ggplot2)
ggplot(df, aes(Date, NET_RAD)) + geom_line()
我们可以使用季节性分解来查看这些季节性影响,甚至删除它们:
net_rad_ts <- ts(df$NET_RAD, frequency = 365)
net_rad_decomp <- stats::decompose(net_rad_ts)
plot(net_rad_decomp)
我们可以看到,除了季节性变化之外,每个季节都有一个背景趋势和相当大的随机变化。我们还可以看到,夏季的方差似乎高于冬季(这是有道理的)
没有明确的 cut-off 来定义“多云”在净辐射方面的含义,我们可以简单地指定我们想要在考虑一年中的时间后确定太阳辐射低于平均水平的日子和随时间变化的趋势。所以我们可以这样做:
df$cloudy <- as.logical(net_rad_decomp$random < 0)
这使我们能够绘制数据,以黄色显示异常明亮的日子,以灰色显示异常暗淡的日子:
ggplot(df, aes(Date, NET_RAD, colour = cloudy)) +
geom_point() +
scale_color_manual(values = c("gold", "gray40")) +
theme_bw()
这给了我们一个粗略的近似你的答案,在你对“多云”做出一个好的定义之前,这个答案必须足够了
如何根据每天的净辐射时间序列(在 FluxNet/AMERIFlux 个站点计算)来识别某一天是多云还是晴天?我在某处读到,晴朗的天空辐射具有正弦曲线行为。如果我们得到不同的行为,这意味着它是由云引起的。我不知道究竟如何解决这个问题?这是示例数据:https://drive.google.com/file/d/1f1YfWgPbg3fxhFG1DTNH9Ex3lTDqLBZp/view?usp=sharing
如果我们获取您的原始数据并将 Time
列从文本转换为我们可以使用的实际日期,这将有助于分析。我们还将删除具有 NaN
值的行:
df <- read.csv("net_rad.csv")
df$Date <- as.POSIXct(strptime(df$Time, "%m/%d/%Y"))
df <- df[!is.nan(df$NET_RAD),]
如果我们绘制每日净辐射图,我们会看到一个清晰的季节性模式:
library(ggplot2)
ggplot(df, aes(Date, NET_RAD)) + geom_line()
我们可以使用季节性分解来查看这些季节性影响,甚至删除它们:
net_rad_ts <- ts(df$NET_RAD, frequency = 365)
net_rad_decomp <- stats::decompose(net_rad_ts)
plot(net_rad_decomp)
我们可以看到,除了季节性变化之外,每个季节都有一个背景趋势和相当大的随机变化。我们还可以看到,夏季的方差似乎高于冬季(这是有道理的)
没有明确的 cut-off 来定义“多云”在净辐射方面的含义,我们可以简单地指定我们想要在考虑一年中的时间后确定太阳辐射低于平均水平的日子和随时间变化的趋势。所以我们可以这样做:
df$cloudy <- as.logical(net_rad_decomp$random < 0)
这使我们能够绘制数据,以黄色显示异常明亮的日子,以灰色显示异常暗淡的日子:
ggplot(df, aes(Date, NET_RAD, colour = cloudy)) +
geom_point() +
scale_color_manual(values = c("gold", "gray40")) +
theme_bw()
这给了我们一个粗略的近似你的答案,在你对“多云”做出一个好的定义之前,这个答案必须足够了