You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于R语言的单波段多栅格季节性探索性数据分析(EDA)方法问询

用R处理年度季节性栅格探索性数据分析(EDA)的方案

一、前期准备:栅格读取与数据整理

1. 加载核心工具包

优先选高效的terra处理栅格,配合数据处理和可视化包:

# 首次运行安装依赖包
install.packages(c("terra", "dplyr", "lubridate", "ggplot2", "tidyr"))

# 加载包
library(terra)
library(dplyr)
library(lubridate)
library(ggplot2)
library(tidyr)

2. 批量读取栅格并提取时间信息

假设栅格文件名包含可解析的日期(如20090105.tif对应2009年第1周),批量读取后拆分年份、周数:

# 获取所有栅格文件路径
raster_paths <- list.files(path = "你的栅格文件夹路径", pattern = "\\.tif$", full.names = TRUE)

# 从文件名提取日期并拆解年份、周数(根据实际命名规则调整)
file_dates <- basename(raster_paths) %>% 
  gsub("\\.tif$", "", .) %>% 
  ymd()

year_info <- year(file_dates)
week_info <- week(file_dates)

3. 按年份分组栅格

用terra的栅格集合工具按年份拆分数据:

# 创建栅格集合
raster_stack <- sprc(raster_paths)

# 按年份分组存储栅格索引
year_groups <- split(1:length(raster_stack), year_info)

二、季节性EDA核心操作

1. 计算年度周度均值

针对每个年份,计算每周栅格的全局均值(如需分区均值可调整代码):

# 定义函数:计算单年份的周度均值
calc_year_weekly_mean <- function(year_idx) {
  year_rasters <- raster_stack[year_idx]
  weekly_means <- sapply(year_rasters, function(r) global(r, mean, na.rm = TRUE)[[1]])
  data.frame(
    Year = unique(year_info[year_idx]),
    Week = week_info[year_idx],
    Mean_Value = weekly_means
  )
}

# 批量计算所有年份的周度均值
year_weekly_data <- lapply(year_groups, calc_year_weekly_mean) %>% 
  bind_rows()

2. 季节性可视化

(1)年度周度趋势对比折线图

直观展示各年份的季节性波动规律:

ggplot(year_weekly_data, aes(x = Week, y = Mean_Value, color = factor(Year))) +
  geom_line(alpha = 0.7) +
  labs(x = "周数", y = "栅格均值", color = "年份") +
  theme_minimal() +
  scale_x_continuous(breaks = seq(0, 52, 4))

(2)周度数值分布箱线图

识别不同周数的数值分布特征,定位稳定季节性区间:

ggplot(year_weekly_data, aes(x = factor(Week), y = Mean_Value)) +
  geom_boxplot(fill = "lightblue", alpha = 0.6) +
  labs(x = "周数", y = "栅格均值") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

(3)年度季节性偏差热力图

对比各年份与整体均值的偏差,快速定位异常年份:

# 计算所有年份每周的整体均值
overall_weekly_mean <- year_weekly_data %>% 
  group_by(Week) %>% 
  summarise(Overall_Mean = mean(Mean_Value, na.rm = TRUE))

# 计算偏差并绘图
year_deviation <- year_weekly_data %>% 
  left_join(overall_weekly_mean, by = "Week") %>% 
  mutate(Deviation = Mean_Value - Overall_Mean)

ggplot(year_deviation, aes(x = Week, y = factor(Year), fill = Deviation)) +
  geom_tile() +
  scale_fill_gradient2(low = "blue", mid = "white", high = "red") +
  labs(x = "周数", y = "年份", fill = "与整体均值的偏差") +
  theme_minimal()

三、进阶分析(可选)

  • 空间季节性分析:按周数计算多年空间均值,对比季节性空间分布:
# 按周数分组计算像元均值
seasonal_stack <- tapp(raster_stack, week_info, mean, na.rm = TRUE)
# 绘制空间对比图
plot(seasonal_stack)
  • 时间序列季节性分解:拆分单年份的趋势、季节性、残差成分:
# 以2023年为例
year_2023 <- year_weekly_data %>% filter(Year == 2023)
ts_data <- ts(year_2023$Mean_Value, frequency = 52)
stl_result <- stl(ts_data, s.window = "periodic")
plot(stl_result)

内容的提问来源于stack exchange,提问作者Farinz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:33:16