Appendix D — Calculate Potential Evapotranspiration (PET)
潜在蒸発散量 Potential evapotranspiration; PETを計算します。 方法はThornthwaite method(Thornthwaite 1948)です。 パッケージはSPEIを使用します(Beguería and Vicente-Serrano 2023)。
ライブラリの読み込み
データの読み込み
このリポジトリの解析では、環境変数 PROJECT_DATA_DIR にデータの保存先を指定しています。 必要に応じて、適宜変更してください。
data_dir <- Sys.getenv("PROJECT_DATA_DIR")
# data_dir <- "data" # もし環境変数が設定されていない場合は、直接パスを指定してください。
sf_climate <- readRDS(file.path(
data_dir,
"climate_mesh_data_joined/climate_mesh_data.rds"
))計算用データフレームの作成
緯度、月平均気温を抽出します。
latitudes <- sf_climate$latitude
df_temp <- sf_climate[, grep("mean_temperature", names(sf_climate))]
df_temp <- st_drop_geometry(df_temp) # ジオメトリを削除
df_temp <- df_temp[, 1:12] # 年平均気温を除外
keep <- complete.cases(df_temp) # NAを含まない行
removed_rows <- which(!keep) # 削除される元の行番号
df_temp_clean <- df_temp[keep, ]
sf_climate_clean <- sf_climate[keep, ]
row.names(df_temp_clean) <- sf_climate_clean$mesh_code_3rdPETの計算
SPEI::thornthwaite() 関数を使用してPETを計算します。 もしメッセージを抑制したい場合は、引数にverbose = FALSEを追加してください。
n <- nrow(df_temp_clean) # サンプル数
pet_month <- matrix(NA, n, 12)
for (i in seq_len(n)) {
pet_month[i, ] <- SPEI::thornthwaite(
Tave = as.numeric(df_temp_clean[i, ]),
lat = latitudes[i],
verbose = FALSE
)
}PETデータの整形
pet_monthマトリックスをデータフレームに変換し、列名を設定します また、年間PETも計算します。
df_pet <- as.data.frame(pet_month)
names(df_pet) <- paste0("PET", 1:12)
df_pet$PET_year <- rowSums(df_pet)データの結合
mesh_code_3rdをキーにして、PETデータを元の気候データと結合します。 結合後、ジオメトリを削除して、データフレームとして保存します。
df_pet$mesh_code_3rd <- row.names(df_temp_clean)
sf_merged <- merge(
sf_climate,
df_pet,
by = "mesh_code_3rd",
all.x = TRUE,
sort = FALSE
)
df_merged <- st_drop_geometry(sf_merged)データの保存
RDS形式とCSV形式で保存します。 必要に応じて、保存先のパスを変更してください。
References
Beguería, Santiago, and Sergio M. Vicente-Serrano. 2023. SPEI: Calculation of the Standardized Precipitation-Evapotranspiration Index. https://doi.org/10.32614/CRAN.package.SPEI.
Thornthwaite, C. W. 1948. “An Approach Toward a Rational Classification of Climate.” Geographical Review 38 (1): 55–94. https://doi.org/10.2307/210739.