์ฐ๋ถ ์ ์ด ํ๋ฅ ์์ธก ์์คํ ์ ํ๋ฐ๋ ์์ญ์ ์ฌ์ ์ 1km ์ ๊ณฑ ๋ฒ์ ๋ด 33๋ง๊ฐ๋ก ๊ฒฉ์ํํ๊ณ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ขํ ๊ธฐ๋ฐ ์ฐ๋ถ ๋ฐ์ ์ง์ ์ ๊ธฐ์,ํ๊ฒฝ ์ ๋ณด๋ฅผ ํ ๋๋ก ์ ์ด ํ๋ฅ ์ ์์ธกํด ์๊ฐํํ์ฌ ์ ๊ณตํ๋ค.
์๋๋ ์ด 21๊ฐ ์งํ์ ๋ํ ๊ธฐ์, ํ๊ฒฝ ์ ๋ณด์ ๋ฐ์ดํฐ ์์ง ๋ฐ ์ ์ฒ๋ฆฌ ๊ณผ์ ๋ฐ ๊ตฌํ ์ฝ๋์ ๋ชจ๋ธ ํ์ต ๊ณผ์ ์ ์์ธํ ๋ค๋ฃฌ๋ค.
์ด ์คํฌ๋ฆฝํธ๋ ๋ํ๋ฏผ๊ตญ ์ ์ญ(์๋ 33.0ยฐ ~ 38.5ยฐ, ๊ฒฝ๋ 124.5ยฐ ~ 130.5ยฐ)์ ๊ธฐ์ค์ผ๋ก 0.01๋ ๊ฐ๊ฒฉ์ ๊ฒฉ์ ์ ๋ก ๋๋๊ณ , ๊ฐ ๊ฒฉ์์ ๋ํด ์๋ยท๊ฒฝ๋ ๋ฒ์ ๋ฐ ์ค์ฌ์ ์ ๊ณ์ฐํ์ฌ CSV ํ์ผ๋ก ์ ์ฅํฉ๋๋ค.
์ด ๊ฒฉ์ ํ์ผ์ NDVI, FFMC, DMC, ๊ธฐ์ ๋ฐ์ดํฐ ๋ฑ ๋ค์ํ ๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฒฉ์ ๋จ์๋ก ์ ๋ ฌํ ๋ ํ์ฉ๋ฉ๋๋ค.
- ์ด ์ฝ 330,000๊ฐ์ ๊ฒฉ์ ์ ํฌํจ
- ์ด ์ค๋ช :
| ์ปฌ๋ผ๋ช | ์ค๋ช |
|---|---|
| grid_id | ๊ฒฉ์ ๊ณ ์ ID (0๋ถํฐ ์์ํ๋ ๋ฒํธ) |
| lat_min | ๊ฒฉ์์ ์ต์ ์๋ |
| lat_max | ๊ฒฉ์์ ์ต๋ ์๋ |
| lon_min | ๊ฒฉ์์ ์ต์ ๊ฒฝ๋ |
| lon_max | ๊ฒฉ์์ ์ต๋ ๊ฒฝ๋ |
| center_lat | ๊ฒฉ์ ์ค์ฌ ์๋ |
| center_lon | ๊ฒฉ์ ์ค์ฌ ๊ฒฝ๋ |
python generate_korea_grids.py
๋๋ Jupyter Notebook์์ ์ ๋จ์๋ก ์คํ ๊ฐ๋ฅํฉ๋๋ค.
- ๋ํ๋ฏผ๊ตญ ๋ฒ์ ์ค์ :
- ์๋: 33.0ยฐ ~ 38.5ยฐ
- ๊ฒฝ๋: 124.5ยฐ ~ 130.5ยฐ
- ํด์๋ ์ค์ :
res = 0.01(์ฝ 1.1km ํด์๋)
- 2์ค ๋ฃจํ๋ฅผ ํตํด ์๋ยท๊ฒฝ๋ ๋ธ๋ก ์์ฑ:
- ๊ฐ ์ ์ ์/๊ฒฝ๋ ๋ฒ์ ๊ณ์ฐ
- ์ค์ฌ์ ๊ณ์ฐ
- ๊ณ ์ ID ๋ถ์ฌ
- ๋ชจ๋ ๊ฒฉ์ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธ๋ก ์ ์ฅ ํ
pandasDataFrame์ผ๋ก ๋ณํ - ์ต์ข CSV๋ก ์ ์ฅ
pandas
์ค์น:
pip install pandas
SPEI ๋ฐ์ดํฐ๋ฅผ ์๋ ํ๋ซํผ์์ ์์งํ์์ต๋๋ค. Global SPEI database
๐ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๊ฐ 1km ๊ฒฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฐ๋ ์ง์ญ ๋ถ์์ด๊ณ , ๋ชฉ์ ์ด ๋จ๊ธฐ/์ค๊ธฐ ๊ฐ๋ญ ๋ชจ๋ํฐ๋ง ๋๋ ์ํ ์์ธก์ด๊ธฐ์ SPEI-06 ๋ก ๊ฒฐ์ ํ์๊ณ .nc ํํ์ ํ์ผ์ ๋ก์ปฌ์ ๋ค์ด๋ก๋ํ์์ต๋๋ค.

์ด ์คํฌ๋ฆฝํธ๋ SPEI 6๊ฐ์ ์ง์(SPEI06) ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฐ๋ ์ ์ญ ๊ฒฉ์์ ๋ํด ์ต๊ทผ 6๊ฐ์ ํ๊ท ๊ฐ์ ๊ณ์ฐํ์ฌ CSV๋ก ์ ์ฅํฉ๋๋ค. ๊ณ์ฐ ์ค๊ฐ์ ๋๊ฒจ๋ ์ฒดํฌํฌ์ธํธ ๊ธฐ๋ฅ์ ํตํด ์ด์ด์ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_0.01deg.csv |
ํ๋ฐ๋ ๊ฒฉ์ ์ ๋ณด (grid_id, ์ยท๊ฒฝ๋ ๋ฒ์ ํฌํจ) |
spei06.nc |
SPEI NetCDF ํ์ผ (๋ณ์: lon, lat, time, spei) |
- ๊ธฐ์ค์ด ๋๋ ํ๋ฐ๋ ๊ฒฉ์(
grid_id,lat_min,lat_max,lon_min,lon_max)๋ฅผ ๋ถ๋ฌ์ต๋๋ค. - SPEI06 NetCDF ํ์ผ๋ก๋ถํฐ ์๋, ๊ฒฝ๋, ์๊ฐ, SPEI ๊ฐ์ ์ฝ์ด์ต๋๋ค.
- ์ ์ฒด ์๊ฐ ์ค์์ ๊ฐ์ฅ ์ต๊ทผ 6๊ฐ ์์ ์ ์ธ๋ฑ์ค๋ฅผ ์ ํํฉ๋๋ค.
- ์ด 6๊ฐ ์์ ์ ํ๊ท ๊ฐ์ ๊ณ์ฐํ์ฌ ์ ์ฅํ๊ฒ ๋ฉ๋๋ค.
checkpoint.matํ์ผ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ, ์ด์ ๊ณ์ฐ ์ค๋จ ์์น(start_idx)๋ถํฐ ์ด์ด์ ๊ณ์ฐํฉ๋๋ค.- ์กด์ฌํ์ง ์์ผ๋ฉด ์ฒ์๋ถํฐ ์์ํฉ๋๋ค.
- ๊ฐ ๊ฒฉ์ ์ค์ฌ ์ขํ์ ๊ฐ์ฅ ๊ฐ๊น์ด NetCDF ์ขํ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ SPEI ๊ฐ์ ์ถ์ถํฉ๋๋ค.
- ์ต๊ทผ 6๊ฐ์์ ํ๊ท ๊ฐ์ ๊ณ์ฐํ์ฌ ์ ์ฅํฉ๋๋ค.
- ๊ฒฐ์ธก๊ฐ(
>1e30)์NaN์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- 5,000๊ฐ ๊ฒฉ์๋ง๋ค ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ
checkpoint.mat์ ์ ์ฅํฉ๋๋ค. - ๊ฐ์ ์ข ๋ฃ๋ ์ค๋ฅ ๋ฐ์ ์ ์ด์ด์ ์ฌ์์ ๊ฐ๋ฅํ๋๋ก ํฉ๋๋ค.
- ๋ชจ๋ ๊ฒฉ์์ ๋ํ ํ๊ท ๊ฐ ๊ณ์ฐ์ด ์๋ฃ๋๋ฉด ๊ฒฐ๊ณผ๋ฅผ
korea_spei06_recent_avg_all.csv๋ก ์ ์ฅํฉ๋๋ค.
- ๋ชจ๋ ๊ณ์ฐ์ด ์๋ฃ๋๋ฉด
checkpoint.mat๋ ์ญ์ ๋์ด ์ด๊ธฐํ๋ฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_spei06_recent_avg_all.csv |
๊ฐ ๊ฒฉ์๋ณ ์ต๊ทผ 6๊ฐ์ SPEI ํ๊ท ๊ฐ (grid_id, spei_recent_avg) |
checkpoint.mat |
์ค๊ฐ ๊ณ์ฐ ์ํ ์ ์ฅ ํ์ผ (์๋ ์์ฑ ๋ฐ ์ต์ข ์ญ์ ๋จ) |
์ด ์คํฌ๋ฆฝํธ๋ ํ๋ฐ๋ ์ ์ญ์ ๊ฒฉ์ ์ ๋ณด์ ์ต๊ทผ 6๊ฐ์๊ฐ SPEI ํ๊ท ๊ฐ์ grid_id ๊ธฐ์ค์ผ๋ก ๋ณํฉํ์ฌ ํตํฉ๋ CSV ํ์ผ๋ก ์ ์ฅํฉ๋๋ค. ๋ณํฉ ๋ฐฉ์์ Left Join์ ํด๋นํ๋ฉฐ, ๊ฒฉ์ ์ ๋ณด๋ ๋ชจ๋ ์ ์ง๋ฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_0.01deg.csv |
ํ๋ฐ๋ ๊ธฐ์ค ๊ฒฉ์ ์ ๋ณด (grid_id, ์ยท๊ฒฝ๋ ๊ฒฝ๊ณ ํฌํจ) |
korea_spei06_recent_avg_all.csv |
๊ฐ ๊ฒฉ์๋ณ ์ต๊ทผ 6๊ฐ์ SPEI ํ๊ท ๊ฐ (grid_id, spei_recent_avg) |
- ๊ธฐ์ค ๊ฒฉ์ ์ ๋ณด์, ํด๋น ๊ฒฉ์์ ๋ํ ์ต๊ทผ 6๊ฐ์ SPEI ํ๊ท ๊ฐ์ ๊ฐ๊ฐ ๋ถ๋ฌ์ต๋๋ค.
- ๋ ํ
์ด๋ธ์
grid_id๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณํฉํฉ๋๋ค. - ๋ณํฉ ๋ฐฉ์์ Left Join์ผ๋ก, ๊ธฐ์ค ๊ฒฉ์์ ํฌํจ๋ ๋ชจ๋
grid_id๋ ์ ์ง๋๋ฉฐ, ํด๋นํ๋ SPEI ๊ฐ์ด ์์ ๊ฒฝ์ฐ์๋ง ๋ณํฉ๋ฉ๋๋ค. - ๊ฒฉ์๋ ๊ทธ๋๋ก ์ ์ง๋๋ฉฐ, SPEI ๊ฐ์ด ์๋ ๊ฒฝ์ฐ๋
NaN์ผ๋ก ํ์๋ฉ๋๋ค.
- ๋ณํฉ์ด ์๋ฃ๋๋ฉด ์์ 6๊ฐ ํ(
head)์ ์ถ๋ ฅํ์ฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. - ์ต์ข
๊ฒฐ๊ณผ๋
korea_grids_with_spei.csvํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_with_spei.csv |
๊ฒฉ์ ์ ๋ณด์ ์ต๊ทผ 6๊ฐ์ ํ๊ท SPEI ๊ฐ์ด ๋ณํฉ๋ ์ต์ข ๊ฒฐ๊ณผ ํ์ผ |
| grid_id | lat_min | lat_max | lon_min | lon_max | center_lat | center_lon | spei_recent_avg |
|---|---|---|---|---|---|---|---|
| 0 | ... | ... | ... | ... | โฆ | โฆ | NaN |
| 1 | ... | ... | ... | ... | โฆ | โฆ | -0.231 |
| ... | ... | ... | ... | ... | โฆ | โฆ | ... |
์ด ์คํฌ๋ฆฝํธ๋ korea_grids_with_spei.csv ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก, ์ต๊ทผ 6๊ฐ์๊ฐ์ SPEI ํ๊ท ๊ฐ์ ํ๋ฐ๋ ์ง๋ ์์ ์์ ๊ฒฉ์ ํํ๋ก ์๊ฐํํฉ๋๋ค. ์๊ฐํ๋ geoscatter๋ฅผ ์ฌ์ฉํด ๊ฐ ๊ฒฉ์์ ์ค์ฌ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ์ ์ผ๋ก ํ์๋ฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_with_spei.csv |
๊ฒฉ์๋ณ ์ยท๊ฒฝ๋ ๊ฒฝ๊ณ ๋ฐ ์ต๊ทผ 6๊ฐ์ SPEI ํ๊ท ๊ฐ ํฌํจ ํ์ผ |
์งํ ๋ถ์๋ (์งํ ๊ฒฝ์ฌ๋)ย ย ๋ฐ์ดํฐ๋ฅผ ์๋ ํ๋ซํผ์์ ์์งํ์์ต๋๋ค. ํ๊ฒฝ ๋น ๋ฐ์ดํฐ ํ๋ซํผ- ๋ฐ์ดํฐ ๊ฒ์
๐ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ค GEOTIFF Slope_All.tif๋ฐ์ดํฐ ํ์ผ์ ์ฌ์ฉํ์์ต๋๋ค.
๋จผ์ ํ์ด์ฌ์ผ๋ก ๋์ฉ๋ GeoTIFFSlope_All.tif๋ฐ์ดํฐ ํ์ผ์์ ํ ์ค์ฉ ์๋/๊ฒฝ๋ ๋ณํ์ ์ํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ์์ด lat_grid์ lon_grid๋ฅผ ๋ง๋๋ ์์
์ ์ํํ์์ต๋๋ค.
์ด๋ ํ๋ฐ๋ ์์ญ์ 33๋ง๊ฐ์ ๋์ฉ๋ ๊ฒฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ํด๋น ๊ณผ์ ์ ์งํํ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ฐ ์๋, ๊ฒฝ๋ ๊ฒฉ์ ์ ๋ณด์ ๋ํ์ฌ "lat_grid.npy", "lon_grid.npy" ์ด๋ฆ์ผ๋ก ์ ์ฅํ์์ต๋๋ค.
๐ฉ๐ผ
์์ ํ์ด์ฌ์ผ๋ก ์์งํ ๊ฐ ์๋, ๊ฒฝ๋ ๊ฒฉ์ ์ ๋ณด "lat_grid.npy", "lon_grid.npy" ํ์ผ์ MATLAB์์ ์ฌ์ฉํ๊ธฐ ์ํด .mat ํ์ผ๋ก ํฉ์ณ ์ ์ฅํด๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ํ์ผ์ ๋ถ๋ฌ์ slope ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ๊ฒฉ์๋ง๋ค ํ๊ท ๊ฒฝ์ฌ๋(mean slope)๋ฅผ ๊ณ์ฐํ๋ ์์
์ ์งํํ์ต๋๋ค.
๋ค๋ง ๋ฐ์ดํฐ ์์ง ์๊ฐ์ ์ค์ด๊ธฐ ์ํด์ ์งํ ๋ฐ์ดํฐ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ํด์ ์์ญ์ด NoData๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ํ์
ํด ์ก์ง์ ํด๋นํ๋ ๊ฒฉ์๋ง ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์ ํ์์ต๋๋ค.
์์ ์์งํ๋ SPEI ๋ฐ์ดํฐ์ ํน์ฑ์ ์ฌ์ฉํ์ฌ ์งํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ์ ํ์๊ณ ํด๋น ํน์ฑ์ ์ด์ ๊ฐ์ต๋๋ค.
SPEI๋ฐ์ดํฐ(korea_spei06_recent_avg_all.csv)๋ ์ก์ง ๊ฒฉ์๋ง ์ ํจ๊ฐ, ๋ฐ๋ค๋NaN- ๋ฐ๋ผ์
slope_by_grid๊ณ์ฐ ์:- ํด๋น ๊ฒฉ์์
SPEI๊ฐNaN์ด๋ฉด โ ๊ฒฝ์ฌ๋๋NaN์ฒ๋ฆฌ ํ skip
- ํด๋น ๊ฒฉ์์
๋ฐ๋ผ์ ์ด ์ฝ๋๋ ํ๋ฐ๋ 1km ๊ฒฉ์ ๊ธฐ๋ฐ์ ํ๊ท ์งํ ๊ฒฝ์ฌ๋(mean_slope)๋ฅผ ๊ณ์ฐํ์ฌ ๊ฐ ๊ฒฉ์๋ณ๋ก ์ ์ฅํ๋ MATLAB ์คํฌ๋ฆฝํธ์
๋๋ค. ํนํ ์ก์ง ๊ฒฉ์๋ง ๋์์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ์ฅ์๊ฐ ์ฐ์ฐ์ ๋๋นํด ์ฒดํฌํฌ์ธํธ ๊ธฐ๋ฅ๊ณผ ์ฃผ๊ธฐ์ ์ ์ฅ ๊ธฐ๋ฅ์ ํฌํจํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
latlon_grids.mat |
์ ์ฒด ์ง์ญ์ ์๋(lat) / ๊ฒฝ๋(lon) ๋งคํธ๋ฆญ์ค |
Slope_All.tif |
์ ์ฒด ๊ฒฝ์ฌ๋ ์งํ ๋ฐ์ดํฐ (GeoTIFF ํ์) |
korea_grids_0.01deg.csv |
ํ๋ฐ๋ ๊ฒฉ์ ์ ๋ณด (์/๊ฒฝ๋ ๊ฒฝ๊ณ ํฌํจ) |
korea_spei06_recent_avg_all.csv |
SPEI ๊ธฐ๋ฐ ์ก์ง ์ฌ๋ถ ํ๋จ์ฉ ๋ฐ์ดํฐ (spei_recent_avg ์ฌ์ฉ) |
- ์๋/๊ฒฝ๋ ๊ทธ๋ฆฌ๋ ๋ฐ GeoTIFF ํ์์ ๊ฒฝ์ฌ๋ ๋ฐ์ดํฐ(
Z)๋ฅผ ๋ถ๋ฌ์ต๋๋ค. - ์ ์ฒด ๊ฒฉ์ ์ ๋ณด์ ์ก์ง ๋ง์คํฌ๋ก ์ฌ์ฉํ SPEI ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
spei_recent_avg๊ฐ์ดNaN์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ก์ง๋ก ๊ฐ์ฃผํ์ฌis_land๋ฒกํฐ ์์ฑ- ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก
grid_id๋ฅผ ํํฐ๋งํ์ฌ ์ก์ง ๊ฒฉ์๋ง ์ ๋ณํฉ๋๋ค.
saveStep: ์ฃผ๊ธฐ์ ์ผ๋ก ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๊ฐ๊ฒฉ (๊ธฐ๋ณธ 5,000๊ฐ ๋จ์)checkpoint.mat: ์ค๊ฐ ์ํ ์ ์ฅ ํ์ผ (์ด์ ์ค๋จ ์ง์ ๋ถํฐ ์ด์ด์ ์คํ ๊ฐ๋ฅ)- ๊ฒฐ๊ณผ ์ ์ฅ์ฉ
meanSlope๋ฐฐ์ด ์ด๊ธฐํ
- ์ด์ ์ ์ค๋จ๋ ๊ณ์ฐ์ด ์๋ค๋ฉด
checkpoint.mat์์ ์ํ๋ฅผ ๋ถ๋ฌ์ ์ด์ด์ ์คํํฉ๋๋ค. - ์์ผ๋ฉด ์๋ก ์์ํฉ๋๋ค.
- ๊ฐ ์ก์ง ๊ฒฉ์์ ๋ํด:
- ๊ฒฉ์์ ์/๊ฒฝ๋ ๋ฒ์ ๋ด์ ํฌํจ๋๋ ๊ฒฝ์ฌ๋ ๊ฐ์ ์ถ์ถ
- NaN์ ์ ์ธํ ๊ฐ๋ค์ ํ๊ท ์
meanSlope[i]์ ์ ์ฅ
- 100๊ฐ ๋จ์๋ก ์งํ๋ฅ ์ ์ถ๋ ฅํ๊ณ ,
saveStep๋จ์๋ก ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ CSV ํ์ผ๋ก ์ ์ฅํฉ๋๋ค. checkpoint.mat๋ ํจ๊ป ์ ์ฅํ์ฌ ์ค๋จ ์ ์ด์ด์ ์คํ ๊ฐ๋ฅ
- ์ ์ฒด ๊ฒฐ๊ณผ๋ฅผ
slope_by_grid.csv๋ก ์ ์ฅ - ์ค๊ฐ ์ํ ํ์ผ
checkpoint.mat๋ ์ต์ข ์๋ฃ ํ ์ญ์ ๋ฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
slope_by_grid.csv |
์ ์ฒด ์ก์ง ๊ฒฉ์์ ๋ํ ํ๊ท ๊ฒฝ์ฌ๋ ๊ฒฐ๊ณผ |
slope_partial_XXXX.csv |
์ค๊ฐ ์ ์ฅ๋ ๊ฒฝ์ฌ๋ ๊ฒฐ๊ณผ (XXXX๋ index ์) |
checkpoint.mat |
๊ณ์ฐ ์ค๋จ ์ ์ฌ์คํ์ ์ํ ์ฒดํฌํฌ์ธํธ (์ต์ข ์ ์ฅ ํ ์ญ์ ๋จ) |
| grid_id | lat_min | lat_max | lon_min | lon_max | mean_slope |
|---|---|---|---|---|---|
| 1 | 33.00 | 33.01 | 126.00 | 126.01 | 4.21 |
| ... | ... | ... | ... | ... | ... |
์ด ์คํฌ๋ฆฝํธ๋ ํ๋ฐ๋ 0.01ยฐ ๊ฐ๊ฒฉ์ ๊ฒฉ์ ์ ๋ณด(korea_grids_0.01deg.csv)์ ๊ฐ ๊ฒฉ์์ ํ๊ท ๊ฒฝ์ฌ๋(mean_slope)๋ฅผ ๋ณํฉํ์ฌ ์๋ก์ด ํ์ผ(korea_grids_with_slope.csv)๋ก ์ ์ฅํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_0.01deg.csv |
์ ์ฒด ๊ธฐ์ค ๊ฒฉ์ ์ ๋ณด (์๋, ๊ฒฝ๋ ๊ฒฝ๊ณ ํฌํจ) |
slope_by_grid.csv |
๊ฒฉ์๋ณ ํ๊ท ๊ฒฝ์ฌ๋ (grid_id, mean_slope) |
- ๊ธฐ์ค์ด ๋๋ ๊ฒฉ์ ์ ๋ณด์, ํด๋น ๊ฒฉ์์ ๋ํ ํ๊ท ๊ฒฝ์ฌ๋ ๊ฐ์ ์ ์ฅํ ๋ ๊ฐ์ CSV ํ์ผ์ ๋ถ๋ฌ์ต๋๋ค.
- ๋ ํ์ผ์
grid_id๊ธฐ์ค์ผ๋ก ๋ณํฉํฉ๋๋ค. - ๋ชจ๋ ๊ธฐ์ค ๊ฒฉ์ ์ ๋ณด๋ ์ ์ง๋๋ฉฐ, ๊ฒฝ์ฌ๋ ๊ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ด ๋ณํฉ๋์ด ํฌํจ๋ฉ๋๋ค.
- ๊ฒฝ์ฌ๋ ์ ๋ณด๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฉ์์ ๊ฒฝ์ฐ,
mean_slope๊ฐ์NaN์ผ๋ก ํ์๋ฉ๋๋ค.
- ๋ณํฉ๋ ๊ฒฐ๊ณผ๋
korea_grids_with_slope.csvํ์ผ๋ก ์ ์ฅ๋๋ฉฐ, ๊ฐ ๊ฒฉ์์ ์ยท๊ฒฝ๋ ๊ฒฝ๊ณ์ ํ๊ท ๊ฒฝ์ฌ๋ ๊ฐ์ด ํจ๊ป ํฌํจ๋ฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_with_slope.csv |
๊ธฐ์ค ๊ฒฉ์ ์ ๋ณด์ ํ๊ท ๊ฒฝ์ฌ๋๊ฐ ๋ณํฉ๋ ์ต์ข ๊ฒฐ๊ณผ ํ์ผ |
์ด ์คํฌ๋ฆฝํธ๋ korea_grids_with_slope.csv ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฐ๋ ์ก์ง ๊ฒฉ์๋ณ ํ๊ท ์งํ ๊ฒฝ์ฌ๋๋ฅผ ์์ ๋จ๊ณ๋ณ๋ก ์๊ฐํํ๋ MATLAB ์ฝ๋์
๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_with_slope.csv |
๊ธฐ์ค ๊ฒฉ์ ์ ๋ณด + ํ๊ท ๊ฒฝ์ฌ๋(mean_slope)๊ฐ ํฌํจ๋ ๋ณํฉ ํ์ผ |
SMAP ๋ฐ์ดํฐ๋ ์๋ ํ๋ซํผ์์ ์์งํ์ต๋๋ค. Earthdata Login
๐ ํด๋น ํ๋ซํผ์์ ์ ์ฒด SMAP .h5 ํ์ผ์ ์ง์ ๋ค์ด๋ก๋ํ๊ณ ํด๋น ํ์ผ์์ ํ๋ฐ๋ ์์ญ๋ง MATLAB์์ ๋ถ๋ถ ์ถ์ถํ์์ต๋๋ค.
NASA์ SMAP L3 SPL3SMP ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ก์ง(land surface)์ ํ ์ ์๋ถ๋ง ํฌํจํ๊ณ ํด์(๋ฐ๋ค) ์์ญ์ NaN (๊ฒฐ์ธก๊ฐ) ์ผ๋ก ํ์ํ๊ธฐ ๋๋ฌธ์ ์งํ ๋ฐ์ดํฐ ์์ง ๊ณผ์ ์์ ์งํํ๋ ๊ฒ์ฒ๋ผ spei ๋ฐ์ดํฐ์ ํน์ฑ(๋ฐ์ดํฐ๊ฐ ์ก์ง์์๋ง ์ ์ฉ)์ ํ์ฉํด ์ก์ง ๊ฒฉ์๋ง ์์งํ์์ต๋๋ค.
๋ค๋ง SMAP ๋ฐ์ดํฐ ์ผ๋ถ์ ์๋์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
๐ฉ๐ผ์์ธ
- ์์ฑ ์์ ํ์ง ๋ฌธ์
- ๊ฐ์, ๋, ๊ตฌ๋ฆ, RFI, ์งํ ๋ฑ์ผ๋ก ํ์ง ์ ํ ์ NaN ๋ฐ์
retrieval_qual_flag๊ฐ ๋์ ๊ฒฝ์ฐ NaN- ํด์ ๊ทผ์ฒ ํฝ์ ๋ ํ์ง ๋ถ์์
- SMAP ํฝ์
์ค์ฌ๊ณผ ๊ฒฉ์ ์ค์ฌ ๊ฑฐ๋ฆฌ ๋ฌธ์
- SMAP ํด์๋๋ ์ฝ 36km
- 1km ๊ฒฉ์ ์ค ์ผ๋ถ๋ ๊ฐ๊น์ด SMAP ํฝ์ ์ด ์์ด ๋งคํ ์คํจ
โ ์ต์ข ์ฒ๋ฆฌ ๋ฐฉ์
- SPEI ๊ฐ ๊ธฐ์ค์ผ๋ก ๋ฐ๋ค/์ก์ง ๊ฒฉ์ ๊ตฌ๋ถ
- ์ก์ง ๊ฒฉ์๋ง SMAP ์๋ถ๊ฐ ์์ง
- NaN์ธ ์ก์ง ๊ฒฉ์๋ ๋ณด๊ฐ(interpolation) ์ ์ฉ
์ด ์คํฌ๋ฆฝํธ๋ **SMAP ๋ฐ์ดํฐ(HDF5 ํฌ๋งท)**๋ฅผ ํ๋ฐ๋ 0.01๋ ๊ฒฉ์์ ๋งคํํ์ฌ, ์ก์ง ๊ฒฉ์์ ์๋ถ๊ฐ์ ํ ๋นํ๊ณ , ๊ฒฐ์ธก๊ฐ์ ๋ํด ์ต๊ทผ์ ๋ณด๊ฐ์ ์ํํ ํ ์ต์ข ํ์ผ๋ก ์ ์ฅํ๋ ์์ ์ ์ํํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_0.01deg.csv |
์ ์ฒด ํ๋ฐ๋ ๊ฒฉ์ ์ ๋ณด (grid_id, ์ยท๊ฒฝ๋ ๊ฒฝ๊ณ ํฌํจ) |
korea_spei06_recent_avg_all.csv |
์ก์ง ์ฌ๋ถ ํ๋จ์ ์ํ SPEI ํ๊ท ๊ฐ (NaN ์ฌ๋ถ๋ก ์ก์ง ํ๋จ) |
SMAP_L3_SM_P_20250630_R19240_001.h5 |
SMAP ํ ์ ์๋ถ ๋ฐ์ดํฐ (.h5 ํ์) |
- ์ ์ฒด ๊ฒฉ์ ์ ๋ณด(
grid_id,lat_min,lat_max,lon_min,lon_max)์ ์ก์ง ์ฌ๋ถ ํ๋จ์ฉ SPEI ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค. - ์ก์ง ๊ฒฉ์๋ง ์ถ์ถํ๊ธฐ ์ํด SPEI ๊ฐ์ด
NaN์ด ์๋ ๊ฒฉ์๋ฅผ ํํฐ๋งํฉ๋๋ค. - SMAP HDF5 ํ์ผ์์ ์๋, ๊ฒฝ๋, ์๋ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
- ์๋ 33
39๋, ๊ฒฝ๋ 124132๋ ๋ฒ์๋ก ํ๋ฐ๋ ์์ญ๋ง ์ ํํฉ๋๋ค. - ์ ํ๋ ์์ญ์ ์ยท๊ฒฝ๋ ๋ฐ ์๋ถ๊ฐ(
soil_moisture)์ ๋ณ๋๋ก ์ ์ฅํฉ๋๋ค.
- ๊ฐ ์ก์ง ๊ฒฉ์ ์ค์ฌ ์ขํ์ ๋ํด ๊ฐ์ฅ ๊ฐ๊น์ด SMAP ํฌ์ธํธ๋ฅผ ์ฐพ์ ์๋ถ๊ฐ์ ํ ๋นํฉ๋๋ค.
- ์ด๋ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ์ ๊ณฑ์ ๊ธฐ์ค์ผ๋ก ์ต๊ทผ์ ์ ์ ์ ํํฉ๋๋ค.
- ์๋ถ๊ฐ์ด ์๋ ์ก์ง ๊ฒฉ์์ ๋ํด์๋
scatteredInterpolant๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ต๊ทผ์ ๋ณด๊ฐ๋ฒ์ผ๋ก ๋์ฒด๊ฐ์ ์์ฑํ ์ค๋น๋ฅผ ํฉ๋๋ค. - ๋ณด๊ฐ ๋์์ ์ก์ง ๊ฒฉ์ ์ค์ฌ ์ขํ ๊ธฐ์ค์ผ๋ก ์ค์ ํฉ๋๋ค.
- ์ ์ฒด ๊ฒฉ์(์ก์ง + ๋ฐ๋ค)์ ๋ํด:
- ์ก์ง์ธ ๊ฒฝ์ฐ: ์๋ถ๊ฐ์ด ์์ผ๋ฉด ๊ทธ๋๋ก ์ฌ์ฉ, ์์ผ๋ฉด ๋ณด๊ฐ๊ฐ ์ฌ์ฉ
- ๋ฐ๋ค์ธ ๊ฒฝ์ฐ:
NaN์ ์ง
- ์ต์ข
์๋ถ๊ฐ(
smap_20250630_filled)์gridsํ ์ด๋ธ์ ์ถ๊ฐํ ๋ค,smap_20250630_all_grids_with_interpolated_land.csv๋ก ์ ์ฅํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
smap_20250630_all_grids_with_interpolated_land.csv |
์ ์ฒด ๊ฒฉ์์ ๋ํด ๋ณด๊ฐ ํฌํจ ์ต์ข
SMAP ์๋ถ๊ฐ ์ถ๊ฐ๋ ๊ฒฐ๊ณผ ํ์ผ (smap_20250630_filled) |
์ด ์คํฌ๋ฆฝํธ๋ smap_20250630_all_grids_with_interpolated_land.csv ํ์ผ์ ์ฌ์ฉํ์ฌ, ์ก์ง ๊ฒฉ์์ ์๋ถ๊ฐ์ ํ๋ฐ๋ ์ง๋ ์์ ์์ ์ ํํ๋ก ์๊ฐํํฉ๋๋ค. ๋ณด๊ฐ ํฌํจ ์๋ถ๊ฐ(smap_20250630_filled)์ ๋ฐํ์ผ๋ก, ์ง๋ฆฌ์ ๊ณต๊ฐ ํด์์ ์ํ ์๊ฐ์ ์๋ฃ๋ฅผ ์์ฑํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
smap_20250630_all_grids_with_interpolated_land.csv |
์ ์ฒด ๊ฒฉ์์ ๋ํด ๋ณด๊ฐ ํฌํจ SMAP ์๋ถ๊ฐ์ด ํฌํจ๋ ๊ฒฐ๊ณผ ํ์ผ (center_lat, center_lon, smap_20250630_filled) |
๊ธฐ์ ๋ฐ์ดํฐ๋ ์๋ ํ๋ซํผ์์ ์์งํ์์ต๋๋ค. ERA5 hourly data on single levels from 1940 to present
๐ ์์ ๋งํฌ์์2025๋ 6์ 26์ผ ํ๋ฃจ์น์ ์๊ฐ๋๋ณ(0:00 ~ 24:00) ๊ธฐ์ ์งํ 5๊ฐ๋ฅผ NetCDF ๋ฐ์ดํฐ ํ์ผ๋ก ์๋ ๋ค์ด๋ก๋ํ์์ต๋๋ค.
(2025๋ 6์ 30์ผ ๊ธฐ์ค)
์ด ์คํฌ๋ฆฝํธ๋ ECMWF ERA5 ์ฌ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ, **ํ๋ฐ๋ 0.01๋ ๊ฒฉ์ ์ค์ฌ ์ขํ ๊ธฐ์ค์ผ๋ก ์ฃผ์ ๊ธฐ์ ์์(๊ธฐ์จ, ์ต๋, ๋ฐ๋, ๊ฐ์๋)**๋ฅผ ์ถ์ถํ์ฌ ์ ์ฅํฉ๋๋ค. ๊ฐ ๊ฒฉ์๋ง๋ค ๊ฐ์ฅ ๊ฐ๊น์ด ERA5 ์ง์ ์ ๊ฐ์ ์ ํํ๋ฉฐ, ํ๋ฃจ์น ๋ฐ์ดํฐ๋ฅผ ํ๊ท ๋๋ ๋์ ๋ฐฉ์์ผ๋ก ๊ณ์ฐํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_0.01deg.csv |
๊ฒฉ์ ์ค์ฌ ์ขํ ๋ฐ grid_id ํฌํจํ ๊ธฐ์ค ๊ฒฉ์ ์ ๋ณด |
data_stream-oper_stepType-instant.nc |
ERA5 ์๊ฐ๊ฐ ๋ฐ์ดํฐ (๊ธฐ์จ, ์ด์ฌ์ , ๋ฐ๋ ๋ฑ) |
data_stream-oper_stepType-accum.nc |
ERA5 ๋์ ๊ฐ ๋ฐ์ดํฐ (๊ฐ์๋) |
- ๊ธฐ์ค ๊ฒฉ์ CSV์์ ๊ฐ ์
์ ์ค์ฌ ์๋(
center_lat) ๋ฐ ๊ฒฝ๋(center_lon)์grid_id๋ฅผ ์ฝ์ด์ต๋๋ค.
instant.ncํ์ผ์์ ๊ธฐ์จ(t2m), ์ด์ฌ์ (d2m), 10m ๋ฐ๋(u10,v10)์ ๋ถ๋ฌ์ต๋๋ค.accum.ncํ์ผ์์ ๋์ ๊ฐ์๋(tp)์ ๋ถ๋ฌ์ต๋๋ค.- ๋จ์ ๋ณํ:
- ๊ธฐ์จ: K โ ยฐC
- ๊ฐ์๋: m โ mm
- ํ์(
wind_speed)๊ณผ ํํฅ(wind_deg)์ ๊ณ์ฐํฉ๋๋ค. - ๊ธฐ์จ๊ณผ ์ด์ฌ์ ์จ๋๋ฅผ ํ์ฉํด ์๋์ต๋(
rh)๋ฅผ ๊ณ์ฐํฉ๋๋ค (Tetens ๊ณต์ ๊ธฐ๋ฐ).
- ํ๋ฃจ์น ๋ฐ์ดํฐ๋ฅผ ์๊ฐ ์ถ(
valid_time) ๊ธฐ์ค์ผ๋ก ํ๊ท (mean) ๋๋ ํฉ๊ณ(sum)๋ก ์ง๊ณํฉ๋๋ค.- ์: ๊ธฐ์จ, ํ์, ์ต๋ โ ํ๊ท ๊ฐ
- ๊ฐ์๋ โ ๋์ ๊ฐ
- ๊ฐ ๊ฒฉ์ ์ค์ฌ ์ขํ์ ๋ํด ERA5 ๋ฐ์ดํฐ์ ์ต๊ทผ์ ๊ฒฉ์๊ฐ์ ์ถ์ถํฉ๋๋ค.
- ๋ณ์๋ณ๋ก
extract_nearest()ํจ์๋ก ์ต๊ทผ์ latitude,longitude์ ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.
- ๊ฐ ๊ฒฉ์์ ๋ํด ์ถ์ถ๋ ๊ธฐ์ ์์๋ฅผ ํ๋์ ํ ์ด๋ธ๋ก ์ ๋ฆฌํฉ๋๋ค.
weather_by_grid_20250630.csvํ์ผ๋ก ์ ์ฅํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
weather_by_grid_20250630.csv |
๊ฐ grid_id์ ๋ํด ์ถ์ถ๋ 5๊ฐ ๊ธฐ์ ๋ณ์ ํฌํจ (temp_C, humidity, wind_speed, wind_deg, precip_mm) |
์ด ์คํฌ๋ฆฝํธ๋ weather_by_grid_20250624.csv์ ERA5 ๊ธฐ๋ฐ ๊ธฐ์ ์์๋ฅผ ํ๋ฐ๋ ์ก์ง ๊ฒฉ์ ์ค์ฌ ์ขํ์ ๋งคํํ์ฌ ์ง๋ ์์ ์๊ฐํํฉ๋๋ค. 5๊ฐ์ง ๋ณ์(๊ธฐ์จ, ์๋์ต๋, ํ์, ํํฅ, ๊ฐ์๋)์ ๋ํด **์์ ์ ์๊ฐํ(scatter map)**๋ฅผ ์ ๊ณตํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
korea_grids_0.01deg.csv |
๊ฒฉ์ ์ค์ฌ ์ขํ ๋ฐ grid_id ํฌํจ ๊ธฐ์ค ๊ฒฉ์ ์ ๋ณด |
weather_by_grid_20250624.csv |
๊ฐ ๊ฒฉ์์ ERA5 ๊ธฐ๋ฐ ๊ธฐ์ ๋ณ์ (๊ธฐ์จ, ์ต๋, ๋ฐ๋, ๊ฐ์๋ ๋ฑ) |
1๏ธโฃ ๊ธฐ์จ
2๏ธโฃ ์ต๋
3๏ธโฃ ํ์
4๏ธโฃ ํํฅ
5๏ธโฃ ๊ฐ์๋

๋ณธ ์คํฌ๋ฆฝํธ๋ 250m ํด์๋์ NDVI GeoTIFF ์ด๋ฏธ์ง(NDVI_LATEST_250m_fixed.tif)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, korea_grids_0.01deg.csv ํ์ผ์ ์ ์๋ ๊ฐ ๊ฒฉ์ ์์ญ ๋ด์ ์ ํจ NDVI ํฝ์
๊ฐ ํ๊ท ์ ๊ณ์ฐํ์ฌ ์ ์ฅํฉ๋๋ค.
- ๊ฐ ํ์ ํ๋์ ๊ฒฉ์ ์ ๋ณด๋ฅผ ํฌํจ
- ํ์ ์ด:
grid_id,lat_min,lat_max,lon_min,lon_max
- 250m ํด์๋์ NDVI ์ด๋ฏธ์ง
- NDVI ๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก -1.0 ~ 1.0 ๋ฒ์์ด๋, ์ด ์คํฌ๋ฆฝํธ๋ 0๋ณด๋ค ํฐ ๊ฐ๋ง ์ ํจ๋ก ๊ฐ์ฃผ
python ndvi_grid_avg.py
(์ ์ฝ๋๋ฅผ .py ํ์ผ๋ก ์ ์ฅํ ๊ฒฝ์ฐ)
pandas๋ฅผ ์ด์ฉํด ๊ฒฉ์ ์ ๋ณด CSV๋ฅผ ์ฝ์ด์ดrasterio๋ฅผ ํตํด NDVI GeoTIFF ์ด๋ฏธ์ง ์ด๊ธฐ- ๊ฐ ๊ฒฉ์ ์
์ ๋ํด:
- ๊ฒฉ์ ์์ญ์ ์๋/๊ฒฝ๋ ์ขํ๋ฅผ ํฝ์ ์ธ๋ฑ์ค๋ก ๋ณํ
- ํด๋น ์์ญ์์ NDVI ๊ฐ์ ์ถ์ถ
- NDVI ๊ฐ ์ค 0๋ณด๋ค ํฐ ๊ฐ๋ง ์ ํจ๊ฐ์ผ๋ก ๊ฐ์ฃผํ์ฌ ํ๊ท ๊ณ์ฐ
- ๊ฒฐ๊ณผ๋ฅผ
NDVI_processed_average.csvํ์ผ๋ก ์ ์ฅ
-
๊ธฐ์กด ๊ฒฉ์ ์ ์ ์ ๋ณด์
NDVIํ๊ท ์ด์ด ์ถ๊ฐ๋จ -
์์:
grid_id,lat_min,lat_max,lon_min,lon_max,NDVI 10001,36.94,36.95,128.44,128.45,0.4821 10002,36.95,36.96,128.44,128.45,0.3712 ...
pandasnumpyrasterio
์ค์น ๋ฐฉ๋ฒ:
pip install pandas numpy rasterio
๋ณธ ์คํฌ๋ฆฝํธ๋ GEOS-5 ๊ธฐ๋ฐ NetCDF ํ์ผ๋ก๋ถํฐ **์ฐ๋ฃ ์๋ถ ์ง์(FFMC, DMC, DC)**๋ฅผ ์ถ์ถํ์ฌ, korea_grids_0.01deg.csv ๋ด์ ๊ฐ ๊ฒฉ์ ์ค์ฌ ์ขํ์ ๋ํด ์ต๊ทผ์ ์๊ฒฝ๋ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์งํ๊ฐ์ ํ ๋นํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ CSV ํ์ผ๋ก ์ ์ฅํ๋ ๋ฐ ๋ชฉ์ ์ด ์์ต๋๋ค.
- ๊ฒฉ์ ์ ์ CSV ํ์ผ (
korea_grids_0.01deg.csv)- ๊ฐ ํ์ ํ๋์ ๊ฒฉ์ ์ ์ ์๋ฏธ
- ํ์ ์ด:
grid_id,center_lat,center_lon,lat_min,lat_max,lon_min,lon_max
- ์ฐ๋ฃ ์๋ถ NetCDF ํ์ผ (
FWI.GEOS-5.Daily.Default.YYYYMMDD00.YYYYMMDD.nc)- ๊ธฐ์์ฒญ ์ ๊ณต GEOS-5 ๊ธฐ๋ฐ FWI ์ ํ
- ๋ณ์:
GEOS-5_FFMC: Fine Fuel Moisture CodeGEOS-5_DMC: Duff Moisture CodeGEOS-5_DC: Drought Code
- ์ขํ ๋ณ์:
lat: ์๋ ๋ฐฐ์ดlon: ๊ฒฝ๋ ๋ฐฐ์ด
python fuel_moisture_extraction.py
- CSV ๋ฐ NetCDF ํ์ผ ๋ก๋
pandas์xarray๋ฅผ ์ฌ์ฉํด ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
- ๊ฐ ๊ฒฉ์์ ์ค์ฌ ์๊ฒฝ๋์ ๋ํด ์ต๊ทผ์ GEOS-5 ๊ฒฉ์ ์ธ๋ฑ์ค ์ฐพ๊ธฐ
np.argmin(np.abs(...))๋ฐฉ์์ผ๋ก ๊ฒฉ์ ์ขํ์ ๊ฐ์ฅ ๊ฐ๊น์ด NetCDF ํฌ์ธํธ๋ฅผ ์ฐพ์ต๋๋ค.
- ํด๋น ์ง์ ์ FFMC, DMC, DC ๊ฐ์ ์ถ์ถ
NaN์ฌ๋ถ ํ์ธ ํ ๋ฐ์ฌ๋ฆผ
- ์ต์ข
๊ฒฐ๊ณผ๋ฅผ
fuel_moisture_nearest.csv๋ก ์ ์ฅ- ๊ฐ ํ์ ๊ฒฉ์๋ณ ๊ฒฐ๊ณผ (FFMC, DMC, DC)
fuel_moisture_nearest.csv
-
์ด ๊ตฌ์ฑ:
grid_id,min_lat,max_lat,min_lon,max_lon,FFMC,DMC,DC
-
๊ฐ ์์:
grid_id,min_lat,max_lat,min_lon,max_lon,FFMC,DMC,DC 10001,36.94,36.95,128.44,128.45,89.21,52.76,342.10
pandasnumpyxarraynetCDF4(๊ฐ์ ์ ์ผ๋ก ํ์ํ ์ ์์)
์ค์น:
pip install pandas numpy xarray netCDF4
๋ณธ ์คํฌ๋ฆฝํธ๋ ๊ฐ ๊ฒฉ์ ์
์ ์ค์ฌ์ผ๋ก 8๋ฐฉํฅ(NW, N, NE, W, E, SW, S, SE)์ ๋ํด ํํฅ๊ณผ ๊ฒฝ์ฌ ๋ฐฉํฅ์ ๊ณ ๋ คํ ์ ์ด ํ๋ฅ ์ ๊ณ์ฐํ์ฌ .csv ํ์ผ๋ก ์ ์ฅํฉ๋๋ค.
์ด๋ FARSITE ํ์ฐ ๋ชจ๋ธ์ ๊ฐ์ํํ ํ๋ฅ ๊ธฐ๋ฐ ์๋ฎฌ๋ ์ด์ ์ ๋ ฅ๊ฐ ์์ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
๊ฒฉ์ ์ค์ฌ์ ๊ณผ ์ฐ๋ฃ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ๋ ฅ ํ ์ด๋ธ
| ์ปฌ๋ผ๋ช | ์ค๋ช |
|---|---|
grid_id |
๊ฒฉ์ ID |
center_lat, center_lon |
๊ฒฉ์ ์ค์ฌ ์/๊ฒฝ๋ |
avg_fuelload_pertree_kg |
ํ๊ท ๋๋ฌด๋น ์ฐ๋ฃ๋ (ROS ๊ณ์ฐ์ฉ) |
wind_deg |
ํํฅ (๋, 0~360ยฐ) |
โป slope_dir์ ์ฝ๋ ๋ด์์ ์ ์ญ ์ค์ ๋จ (135๋๋ก ๊ณ ์ )
readtable๋ก ์ก์ง ๊ฒฉ์ ๋ฐ์ดํฐ(input_data_land_only.csv) ๋ถ๋ฌ์ค๊ธฐ
- ์ด 8๊ฐ ๋ฐฉํฅ: NW, N, NE, W, E, SW, S, SE
- ๊ฐ ๋ฐฉํฅ์ ๋ฒกํฐ(
dx,dy) ๋ฐ ๋ฐฉ์๊ฐ(theta_ij) ๊ณ์ฐ
๊ฐ ๋ฐฉํฅ์ ๋ํด ๋ค์์ ๊ณ์ฐ:
P(d) = exp(-d_ij^2 / sigma^2) * (1 + G) * ros;
G = ฮฑ * cos(ฮธ_ij - wind_dir) + ฮฒ * cos(ฮธ_ij - slope_dir)
d_ij: ๊ฑฐ๋ฆฌ (์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ, 1 ๋๋ โ2)ros: Rate of Spread (์ฐ๋ฃ๋ ๊ธฐ๋ฐ, ์์ ๊ณ์ฐ์ ์ฌ์ฉ)G: ๋ฐ๋ ๋ฐ ๊ฒฝ์ฌ ๋ฐฉํฅ์ ์ํฅalpha,beta: ์ํฅ ๊ฐ์ค์น (๊ธฐ๋ณธ 0.5)- ์ต์ข
P๋ ์ ๊ทํํ์ฌ 8๋ฐฉํฅ ํ๋ฅ ํฉ์ด 1์ด ๋๋๋ก ํจ
- ์ถ๋ ฅ ํ์ผ:
farsite_transfer_probs.csv - ์ด ๊ตฌ์ฑ:
grid_id,center_lat,center_lon,P_NW, ...,P_SE
| ์ปฌ๋ผ๋ช | ์ค๋ช |
|---|---|
| grid_id | ๊ฒฉ์ ID |
| center_lat | ์ค์ฌ ์๋ |
| center_lon | ์ค์ฌ ๊ฒฝ๋ |
| P_NW ~ P_SE | 8๋ฐฉํฅ ์ ์ด ํ๋ฅ (ํฉ๊ณ: 1.0) |
| ๋ณ์ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|
sigma |
๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ํ์ฐ ๊ฐ์ ์ธ์ | 1.0 |
alpha |
ํํฅ ์ํฅ ๊ฐ์ค์น | 0.5 |
beta |
๊ฒฝ์ฌ ๋ฐฉํฅ ์ํฅ ๊ฐ์ค์น | 0.5 |
slope_dir |
๊ณ ์ ๊ฒฝ์ฌ ๋ฐฉํฅ (๋ ๋จ์) | 135 |
๋ณธ ์คํฌ๋ฆฝํธ๋ FARSITE ๋ฐฉ์์ผ๋ก ๊ณ์ฐ๋ 8๋ฐฉํฅ ํ์ฐ ํ๋ฅ (P_NW ~ P_SE)์ ๋์์ผ๋ก, ๋ฐฉํฅ๋ณ ํ๊ท ๊ฐ์ ๊ธฐ๋ฐํ ์๋ ๊ฐ์ค์น ๋ณด์ ์ ์ํํ๊ณ ์ ๊ทํ๋ ํ์ฐ ํ๋ฅ ์ ์ฌ๊ณ์ฐํ์ฌ ์ ์ฅํฉ๋๋ค.
์ด๋ ํน์ ๋ฐฉํฅ์ผ๋ก์ ์ ์ด ํ๋ฅ ์ด ๊ณผ๋ํ๊ฑฐ๋ ๋ถ๊ท ํํ ๊ฒฝ์ฐ, ์ ์ฒด ๋ถํฌ๋ฅผ ํต๊ณ์ ์ผ๋ก ์ฌ์กฐ์ ํ๊ธฐ ์ํ ๋ณด์กฐ์ ํ์ฒ๋ฆฌ ๋จ๊ณ์ ๋๋ค.
- ๊ฒฉ์๋ณ ์์ FARSITE ํ์ฐ ํ๋ฅ ์ ํฌํจํ๋ CSV
- ํ์ ์ด:
grid_id,center_lat,center_lonP_NW,P_N,P_NE,P_W,P_E,P_SW,P_S,P_SE
mean_probs(d) = mean(P_d, 'omitnan');
- NaN ๊ฐ์ ์ ์ธํ๊ณ ์ ์ฒด ๋ฐฉํฅ ํ๊ท ์ ๊ณ์ฐ
inv_weights = 1 ./ mean_probs;
- ํ๊ท ํ๋ฅ ์ด ์์์๋ก ๊ฐ์ค์น๋ฅผ ๋ ํฌ๊ฒ ๋ถ์ฌ (๋ ํ์ฐ๋๋ ๋ฐฉํฅ ๋ณด์ ๋ชฉ์ )
inv_weights = inv_weights / max(inv_weights);
- ๊ฐ์ฅ ํฐ ๊ฐ์ค์น๋ฅผ 1๋ก ๋ง์ถค (์๋์ ์ค์ผ์ผ ์ ์ง)
- ๊ฐ ์
์ ๋ํด 8๋ฐฉํฅ ํ์ฐ ํ๋ฅ ์
inv_weights๋ฅผ ๊ณฑํ๊ณNaN์ ์ธ ํ ์ ๊ทํ
writetable(corrected, 'corrected_farsite_probs.csv');
- ์ ๊ทํ๋ ํ๋ฅ ํ ์ด๋ธ์ ์ ์ฅ
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
corrected_farsite_probs.csv |
๋ณด์ ๋ 8๋ฐฉํฅ ํ์ฐ ํ๋ฅ ํ ์ด๋ธ (ํฉ๊ณ = 1) |
์ถ๋ ฅ ์ด:
grid_id,center_lat,center_lon,P_NW, ...,P_SE
๐ ์๋ ๊ณ์ฐ๋ ๋ฐฉํฅ๋ณ ๊ฐ์ค์น:
P_NW: 1.000
P_N : 0.912
P_NE: 0.865
...
- ์ด ๊ฐ์ ์ดํ ํ์ฐ ์๋ฎฌ๋ ์ด์ ์์ ๋ฐฉํฅ ํธํฅ ์กฐ์ ๊ทผ๊ฑฐ๋ก ํ์ฉ ๊ฐ๋ฅ
- MATLAB (R2019b ์ด์ ๊ถ์ฅ)
input_data_farsite_Nan.csv๊ฐ ์ฌ์ ์ ๊ณ์ฐ๋์ด ์์ด์ผ ํจ
๋ณธ ์คํฌ๋ฆฝํธ๋ ์ ์ฒด ๊ฒฉ์ ์
๋ ฅ ๋ฐ์ดํฐ(Mapped_Land_Grid_Data.csv)์์, grid_id ๊ธฐ์ค์ผ๋ก ํ์ต/ํ
์คํธ ์ธํธ๋ฅผ ๋๋์ด FARSITE ๊ธฐ๋ฐ ๋ชจ๋ธ ํ์ต์ ์ฌ์ฉํ ์ ์๋๋ก ์ ๋ฆฌํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
Mapped_Land_Grid_Data.csv |
์ ์ฒด ์ ๋ ฅ ํผ์ฒ ๋ฐ์ดํฐ์ (์งํ, ๊ธฐ์, NDVI ๋ฑ ํฌํจ) |
cfis_train_label.csv |
ํ์ต์ ์ฌ์ฉ๋ ๊ฒฉ์์ grid_id ๋ชฉ๋ก |
cfis_test_label.csv |
ํ
์คํธ์ ์ฌ์ฉ๋ ๊ฒฉ์์ grid_id ๋ชฉ๋ก |
- ์
๋ ฅ ํผ์ฒ ๋ฐ์ดํฐ ์ ์ฒด (
Mapped_Land_Grid_Data.csv) ๋ถ๋ฌ์ค๊ธฐ
- CFIS ๋ผ๋ฒจ ํ์ผ๋ก๋ถํฐ ํ์ต/ํ
์คํธ์ฉ
grid_id์ถ์ถ
ismember๋ฅผ ์ด์ฉํดgrid_id๊ธฐ์ค์ผ๋ก ํ ๋ฒํธ(index)๋ฅผ ์ถ์ถcfis_*_label.csv์ ์๋ ์์ ๊ทธ๋๋ก ์ ๋ ฌ๋จ
- ํด๋น
grid_id๊ฐinput_data์ ์์ ๊ฒฝ์ฐ ์ ์ธ
farsite_train_label.csv๋ฐfarsite_test_label.csv๋ก ๊ฐ๊ฐ ์ ์ฅ
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
farsite_train_label.csv |
ํ์ต์ ์ฌ์ฉํ ์ ๋ ฅ ํผ์ฒ ๋ฐ์ดํฐ |
farsite_test_label.csv |
ํ ์คํธ์ ์ฌ์ฉํ ์ ๋ ฅ ํผ์ฒ ๋ฐ์ดํฐ |
๊ฐ ํ์ผ์ Mapped_Land_Grid_Data.csv์ ๋์ผํ ์ด ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ , ํํฐ๋ง๋ ๊ฒฉ์ ์ ๋ณด๋ง ํฌํจํฉ๋๋ค.
MATLAB์์ ์ด 33๋ง ๊ฐ ๊ฒฉ์์ ๋ํด CFIS ๊ธฐ๋ฐ ์๋ฎฌ๋ ์ด์ ์ 100ํ ์ํํด ๊ฐ ์ ์ ๋ฐํํ๋ฅ Pignite ๋ฐ ํ์ฐํ๋ฅ Pspread๋ฅผ ๊ณ์ฐํ๊ณ ์ค๊ฐ ์๋ ์ ์ฅ๊ณผ ์ฒดํฌํฌ์ธํธ ๊ธฐ๋ฅ์ ํฌํจํ ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌํํ์์ต๋๋ค.
| ๋จ๊ณ | ์ค๋ช |
|---|---|
| โ ์ ๋ ฅ ๋ถ๋ฌ์ค๊ธฐ | ๊ฒฉ์๋ณ ๊ธฐ์ยท์งํยท์์ ๋ฑ ์งํ (input_data_set.csv) |
| โก ๋ฐํํ๋ฅ ๊ณ์ฐ | ๊ฐ ์ ์ Pignite ๊ณ์ฐ |
| โข ์๋ฎฌ๋ ์ด์ Nํ ๋ฐ๋ณต | ๊ฐ ๊ฒฉ์๋ง๋ค CFIS ๋ชจ๋ธ ๊ธฐ๋ฐ ํ์ฐ ์งํ |
| โฃ ๊ฒฐ๊ณผ ๋์ | ์ ๋ณ ๋ฒ์ง ํ์ ๋์ (spread_count) |
| โค ํ์ฐํ๋ฅ ๊ณ์ฐ | Pspread=๋ฒ์งํ์/ N |
| โฅ ์๋ ์ ์ฅ | 1๋ง ๊ฐ ๋จ์ ์ ์ฅ, checkpoint ๊ธฐ๋ฅ ํฌํจ |
โCFIS์์ ๋ฐํํ๋ฅ (Pโโแตขโโ) ์ ํ์ฐํ๋ฅ (Pโโแตฃโโ๐น) ์ ํ์ ๋ ๊ณ ์ ๊ณต์์ด ์์ต๋๋ค.
- ๋ฐํ ํ๋ฅ Pignite : ๋จ์ํ๋ sigmoid ํ๊ท์
| ๋ณ์ | ์๋ฏธ |
|---|---|
| NDVI | ์์๋ (๋ง์์๋ก ๋ฐํโ) |
| SPEI | ๊ฐ๋ญ ์ ๋ (๊ฑด์กฐํ ์๋ก ๋ฐํโ) |
| T | ๊ธฐ์จ (๋์์๋ก ๋ฐํโ) |
| SMAP | ํ ์ ์๋ถ (๋ง์์๋ก ๋ฐํโ) |
| H | ์๋ ์ต๋ |
| P | ๊ฐ์๋ |
- ํ์ฐ ํ๋ฅ Pspread : ๋ฐฉํฅ์ฑ ์์ด ๊ฐ๋จํ ๊ฐ์คํฉ ํํ
| ๋ณ์ | ์๋ฏธ | ์ ๊ทํ ๊ธฐ์ค |
|---|---|---|
| ํ์ | ์ ์ ํ์ (m/s) | Vmax=10 (์์) |
| ๊ฒฝ์ฌ๋ | ์ ์ ๊ฒฝ์ฌ (%) | Smax=45 (์์) |
| F | ์ฐ๋ฃ ์ธ์ (0~1 ๋ฒ์๋ก ์ ๊ทํ๋ ๊ฐ) | ์ง์ ์ ๊ทํ ํ์ |
| ฮฑ\alpha | ์ค์ผ์ผ ์กฐ์ ์์ (ex. 0.8~1.2) | ์ ์ฒด ํ์ฐ ๊ฐ๋ ์กฐ์ |
โ ์ด์ ์ค์ ๋ ผ๋ฌธ๊ณผ ์๋ฎฌ๋ ์ด์ ์ฐ๊ตฌ์์ ์์ฃผ ์ฐ์ด๋ ๊ฐ๋จํ๋ฉด์๋ ๋ํ์ ์ธ ๊ณต์ ํํ์ ์ฑํํด ์ ์ฉํ์ต๋๋ค.
- ์๋ฎฌ๋ ์ด์ ๊ณผ ๋ฌด๊ดํ๊ฒ ์ฒ์๋ถํฐ ๊ณ์ฐ๋ ์ ์ ์ธ ๊ฐ
- ์ฆ, ์ ๋ ฅ ์งํ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐ๋ ๊ฐ ๊ฒฉ์์ ๋ฐํ ํ๋ฅ
N_SIM = 300๋ฐ๋ณต๊ณผ๋ ๋ฌด๊ดํ๊ฒ ํ ๋ฒ๋ง ๊ณ์ฐ๋์ด ์ ์ฅ
- ์๋ฎฌ๋ ์ด์ ์ 300๋ฒ ๋ฐ๋ณตํ ํ, ์ค์ ๋ก ํด๋น ์ ์ด ๋ช ๋ฒ ๋ฒ์ก๋์ง์ ๋ํ ๋น์จ
๐๏ธ
-
cfis_simulation.mโ ์ ์ฅ๋ ์ด์ ์ ๋ณด ๋ถ๋ฌ์ CFIS ์๋ฎฌ๋ ์ด์ ์คํ
-
getNeighbors.mโ์ค์ฌ ์๊ฒฝ๋ ๊ธฐ๋ฐ 2km ์ด๋ด ์ด์ ์ถ์ถ ํจ์
-
generate_neighbors_cache.mโ ์ก์ง ๊ฒฉ์์ ๋ํด ์ด์ ๊ณ์ฐ โ ์ค๊ฐ ์ ์ฅ ํฌํจ
-
NDVI_land_only.csv,input_data_set.csvโ ์ ๋ ฅ ๋ฐ์ดํฐ
generate_neighbors_cache.m์คํ โneighbors_cache_land.mat์์ฑ๋จcfis_land_simulation_per_cell_3.m์คํ โcfis_land_result_percell_6.csv์ถ๋ ฅ๋จ
์ด ์คํฌ๋ฆฝํธ๋ ํ๋ฐ๋ ์ก์ง ๊ฒฉ์์ ๋ํด ์ธ์ ๊ฒฉ์(์ด์)๋ฅผ ๊ณ์ฐํ๊ณ , ์ค๊ฐ ์ ์ฅ ๋ฐ ์ฒดํฌํฌ์ธํธ ๊ธฐ๋ฅ์ ํตํด ๋๊ท๋ชจ ์ฒ๋ฆฌ์์๋ ์์ ์ ์ผ๋ก ์ฌ์์์ด ๊ฐ๋ฅํ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์งํ๋ฅ ๋ฐ๊ฐ ํฌํจ๋์ด ์์ด ๋๊ท๋ชจ ์คํ ์ ์ฒ๋ฆฌ ์ํฉ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
NDVI_land_only.csv |
์ก์ง๋ก ํ๋จ๋ ๊ฒฉ์ ID ๋ชฉ๋ก (grid_id) |
input_data_set.csv |
์ ์ฒด ๊ฒฉ์ ์ ๋ณด (grid_id, center_lat, center_lon) ํฌํจ |
NDVI_land_only.csvํ์ผ์์ ์ก์ง ๊ฒฉ์ ID๋ง ์ถ์ถinput_data_set.csv์์grid_id๊ธฐ์ค์ผ๋ก ์ก์ง ๊ฒฉ์๋ง ํํฐ๋ง
- ์ด์ ์คํ ์ ์ ์ฅ๋
neighbors_10000.mat,neighbors_20000.mat๋ฑ ์ค๊ฐ ๋ธ๋ก ํ์ผ์ด ์กด์ฌํ ๊ฒฝ์ฐ, ํด๋น ๋ธ๋ก์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ฌ์ค๊ณ ์ด์ด์ ๊ณ์ฐ์ ์ฌ๊ฐํจ
-
๊ฐ ๊ฒฉ์์ ๋ํด ์ฌ์ฉ์ ์ ์ ํจ์
getNeighbors(i, lat, lon)์ ํธ์ถํ์ฌ ์ด์ ๊ฒฉ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑ(์ผ๋ฐ์ ์ผ๋ก ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ๋๋ ์ธ์ ์๊ฒฝ๋ ๊ธฐ๋ฐ ๊ณ์ฐ)
- 40์นธ์ ASCII ์งํ ๋ฐ๋ฅผ ํ์ฉํ์ฌ ํ์ฌ ์งํ๋ฅ (%)๊ณผ ๊ณ์ฐ ์ค์ธ ๊ฒฉ์ ๊ฐ์๋ฅผ ์ค์๊ฐ์ผ๋ก ์ถ๋ ฅ
BLOCK_SIZE = 10000๋จ์๋ก ๊ณ์ฐ์ด ์๋ฃ๋ ๋๋ง๋คneighbors_XXXX.matํ์์ผ๋ก ์ค๊ฐ ๊ฒฐ๊ณผ ์ ์ฅ- ์ ์ฅ๋ ํ์ผ์๋
block_neighbors๋ฆฌ์คํธ๊ฐ ํฌํจ๋๋ฉฐ, ๋ค์ ์คํ ์ ์ฒดํฌํฌ์ธํธ๋ก ํ์ฉ ๊ฐ๋ฅ
- ์ ์ฒด ๊ณ์ฐ ์๋ฃ ํ, ์ ์ฒด ์ด์ ์ ๋ณด(
neighbors)๋ฅผneighbors_cache_land.mat์ ์ต์ข ์ ์ฅ
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
neighbors_10000.mat, neighbors_20000.mat, ... |
๊ฐ ๋ธ๋ก ๋จ์๋ก ๊ณ์ฐ๋ ์ด์ ์ ๋ณด ์ค๊ฐ ์ ์ฅ ํ์ผ |
neighbors_cache_land.mat |
์ ์ฒด ์ก์ง ๊ฒฉ์์ ๋ํ ์ด์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ต์ข ์บ์ ํ์ผ |
(Haversine ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ์ด์ ๊ฒฉ์ ํ์)
getNeighbors ํจ์๋ ํน์ ๊ฒฉ์(idx)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ๊ฒฝ 2km ์ด๋ด์ ์๋ ์ด์ ๊ฒฉ์์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค. ์ง๊ตฌ ๊ณก๋ฅ ์ ๊ณ ๋ คํ Haversine ๊ณต์์ ์ฌ์ฉํ์ฌ ์๊ฒฝ๋ ๊ธฐ๋ฐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ์ํํฉ๋๋ค.
| ์ธ์๋ช | ์ค๋ช |
|---|---|
idx |
๊ธฐ์ค์ด ๋๋ ๊ฒฉ์์ ์ธ๋ฑ์ค (1๋ถํฐ ์์ํ๋ ์ ์) |
center_lat |
๋ชจ๋ ๊ฒฉ์์ ์ค์ฌ ์๋ ๋ฐฐ์ด (๋ฒกํฐ) |
center_lon |
๋ชจ๋ ๊ฒฉ์์ ์ค์ฌ ๊ฒฝ๋ ๋ฐฐ์ด (๋ฒกํฐ) |
| ์ด๋ฆ | ์ค๋ช |
|---|---|
neighbors |
๊ธฐ์ค ๊ฒฉ์ idx๋ก๋ถํฐ 2.0km ์ด๋ด์ ์กด์ฌํ๋ ์ด์ ๊ฒฉ์์ ์ธ๋ฑ์ค ๋ฐฐ์ด (์๊ธฐ ์์ ์ ์ธ) |
- Haversine ๊ณต์์ ์ฌ์ฉํด ๊ฒฉ์ ๊ฐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ (๋จ์: km)
- ๊ธฐ์ค ๊ฒฉ์์ ๋ชจ๋ ๋ค๋ฅธ ๊ฒฉ์ ๊ฐ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- ๊ฑฐ๋ฆฌ
d โค 2.0km์ธ ๊ฒฉ์์ ์ธ๋ฑ์ค๋ฅผneighbors๋ฐฐ์ด์ ์ถ๊ฐ
d = 2R * asin( sqrt( sinยฒ(ฮฯ/2) + cos(ฯโ)ยทcos(ฯโ)ยทsinยฒ(ฮฮป/2) ) )
| ๊ธฐํธ | ์ค๋ช |
|---|---|
R |
์ง๊ตฌ ๋ฐ์ง๋ฆ (6371 km) |
ฯ |
์๋ (๋ผ๋์) |
ฮป |
๊ฒฝ๋ (๋ผ๋์) |
ฮฯ |
์๋ ์ฐจ |
ฮฮป |
๊ฒฝ๋ ์ฐจ |
(์ด์ ์บ์ + ์งํ๋ฅ ํ์ + ์ค๊ฐ ์ ์ฅ ํฌํจ)
์ด ์คํฌ๋ฆฝํธ๋ CFIS(Cellular Fire Ignition and Spread) ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก, ํ๋ฐ๋ ์ก์ง ๊ฒฉ์์ ๋ํด ์ฐ๋ถ ๋ฐ์ ๋ฐ ํ์ฐ ์๋ฎฌ๋ ์ด์
์ Nํ ๋ฐ๋ณตํ๊ณ , ๊ฒฉ์๋ณ ํ์ฐ ํ๋ฅ (Pspread)์ ๊ณ์ฐํ์ฌ ์ ์ฅํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
input_data_set.csv |
๊ฒฉ์๋ณ ๊ธฐ์ยทํ๊ฒฝ ์ ๋ ฅ ๋ณ์ ํฌํจ |
NDVI_land_only.csv |
์ก์ง๋ก ํ๋จ๋ ๊ฒฉ์์ ID ๋ชฉ๋ก (grid_id) |
neighbors_cache_land.mat |
๊ฐ ์ก์ง ๊ฒฉ์๋ณ ์ด์ ์ธ๋ฑ์ค ๋ฆฌ์คํธ ์บ์ ํ์ผ |
- ์ ์ฒด ๊ฒฉ์ ์ค ์ก์ง ๊ฒฉ์๋ง ํํฐ๋งํ์ฌ ์๋ฎฌ๋ ์ด์ ๋์ ์ค์
- ์ก์ง ๊ฒฉ์์ ์(
nGrids)๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ฎฌ๋ ์ด์ ๋ฐ๋ณต
- ๋ค์ํ ๊ธฐ์ยท์งํ ๋ณ์ ๊ธฐ๋ฐ ๋ก์ง์คํฑ ํ๊ท ํํ๋ก ๊ณ์ฐ
- ์ฌ์ฉ ๋ณ์:
NDVI,spei_recent_avg,temp_C,smap_20250630_filled,humidity,precip_mm
-
๋จ์ ๊ฐ์ค ํ๊ท ์ผ๋ก ๊ณ์ฐ
Pspread = ฮฑ ร (0.4 ร ํ์์ ๊ทํ + 0.4 ร ๊ฒฝ์ฌ์ ๊ทํ + 0.2 ร ์ฐ๋ฃ๋์ ๊ทํ)
neighbors_cache_land.mat์์ ๊ฐ ๊ฒฉ์๋ณ ์ธ์ ๊ฒฉ์ ๋ฆฌ์คํธ(neighbors{i}) ๋ถ๋ฌ์ค๊ธฐ
- ๊ฒฉ์๋ณ ๋ฐํ ์ฌ๋ถ ๋ฌด์์ ๊ฒฐ์
- ๋ถ์ด ๋ ๊ฒฉ์์์ ์ด์ ๊ฒฉ์์
Pspread(i)ํ๋ฅ ๋ก ์ ์ด burned๋ฐฐ์ด์ ํ์ฐ ์ฌ๋ถ ์ ์ฅ โ ๋์ ํ์spread_count์ ๊ธฐ๋ก
- ๋งค ์๋ฎฌ๋ ์ด์ ๋ง๋ค ASCII ์งํ๋ฅ ๋ฐ ๋ฐ ํ๊ท ํ์ฐ๋ฅ ์ถ๋ ฅ
sim % 10 == 0์ผ ๋ ์ฒดํฌํฌ์ธํธ ์ ์ฅ(cfis_land_checkpoint.mat) ๋ฐ ์ค๊ฐ ๊ฒฐ๊ณผ CSV ์ ์ฅ(cfis_land_XXXX.csv)
- ์ ์ฒด ์๋ฎฌ๋ ์ด์
์ข
๋ฃ ํ
cfis_land_result.csv์ ์ ์ฅ - ์ ์ฅ ํญ๋ชฉ:
grid_idPignite: ๋ฐํ ํ๋ฅBurnedCount: ๋ถ์ด ๋ถ์ ํ์SimTotal: ์๋ฎฌ๋ ์ด์ ์ด ํ์Pspread:BurnedCount / SimTotal(ํ์ฐ ํ๋ฅ )
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
cfis_land_result.csv |
์ ์ฒด ์ก์ง ๊ฒฉ์์ ๋ฐํ ๋ฐ ํ์ฐ ํ๋ฅ ๊ฒฐ๊ณผ |
cfis_land_XXXX.csv |
N์๋ฎฌ๋ ์ด์ ๋ง๋ค ์ ์ฅ๋๋ ์ค๊ฐ ๊ฒฐ๊ณผ (10ํ ๋จ์) |
cfis_land_checkpoint.mat |
์ค๊ฐ ์ ์ฅ ์ฒดํฌํฌ์ธํธ ํ์ผ (๊ฐ์ ์ข ๋ฃ ๋๋น) |
(์๊ฒฝ๋ ์ ๋ณด ํฌํจ ์ต์ข ๊ฒฐ๊ณผ ์์ฑ)
์ด ์คํฌ๋ฆฝํธ๋ CFIS ์ฐ๋ถ ์๋ฎฌ๋ ์ด์
๊ฒฐ๊ณผ(cfis_land_result_percell_6.csv)์ ๊ฐ ๊ฒฉ์์ ์๊ฒฝ๋ ์ ๋ณด๋ฅผ ๋ณํฉํ์ฌ ์ต์ข
์ ์ผ๋ก ๊ณต๊ฐ ๊ธฐ๋ฐ ๋ถ์์ ํ์ฉ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ ํ์ผ์ ์์ฑํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
only_land_grid.csv |
์ก์ง๋ก ๊ฐ์ฃผ๋๋ ๊ฒฉ์์ grid_id ๋ชฉ๋ก |
cfis_land_result_percell_6.csv |
CFIS ์๋ฎฌ๋ ์ด์ ๊ฒฐ๊ณผ (๊ฒฉ์๋ณ ๋ฐํ/ํ์ฐ ํ๋ฅ ๋ฑ ํฌํจ) |
input_data_set.csv |
๊ฒฉ์๋ณ ์ง๋ฆฌ์ ๋ณด ๋ฐ ์ ์ฒด ์ ๋ ฅ ์งํ ํฌํจ ์๋ณธ ํ์ผ |
- ์ธ ๊ฐ์ ์ฃผ์ ๋ฐ์ดํฐ ํ์ผ(
land,cfis,input)์readtable๋ก ๋ถ๋ฌ์ต๋๋ค.
- CFIS ๊ฒฐ๊ณผ์์ ์ก์ง๋ก ๊ฐ์ฃผ๋๋ ๊ฒฉ์(
grid_id)๋ง ํํฐ๋งํ์ฌcfis_land์์ฑ
input_data_set.csv์์ ๋ค์ ์์น ๊ด๋ จ ์ด๋ง ์ถ์ถ:lat_min,lat_max,lon_min,lon_max,center_lat,center_lon
grid_id๋ฅผ ๊ธฐ์ค์ผ๋กcfis_land์ ์์น ์ ๋ณด(input_coords)๋ฅผ ๋ณํฉ- ๋ณํฉ ๋ฐฉ์์ Left Join(
Type = 'left')์ผ๋ก, CFIS ๊ฒฐ๊ณผ ๊ธฐ์ค์ผ๋ก ์์น ์ ๋ณด ๋งคํ
- ์ต์ข
๊ฒฐ๊ณผ ํ์ผ์์
grid_id๋ฐ๋ก ๋ค์์ ์์น ์ ๋ณด 6๊ฐ ์ด์ ๋ฐฐ์น - ๋๋จธ์ง ์ด์ ๊ธฐ์กด ์์๋ฅผ ์ ์งํ ์ฑ ๋ค์ ์์น์ํด
- ๋ณํฉ ๋ฐ ์ด ์ ๋ ฌ์ด ์๋ฃ๋ ์ต์ข
ํ
์ด๋ธ์
cfis_land_result_percell_6_with_coords.csv๋ก ์ ์ฅ
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
cfis_land_result_percell_6_with_coords.csv |
CFIS ๊ฒฐ๊ณผ + ๊ฒฉ์ ์์น ์ ๋ณด๊ฐ ํฌํจ๋ ์ต์ข ๋ถ์์ฉ ํ์ผ |
(ํ์ต/ํ ์คํธ์ฉ 7:3 ๋น์จ๋ก CSV ์ ์ฅ)
์ด ์คํฌ๋ฆฝํธ๋ CFIS ๊ธฐ๋ฐ ์ฐ๋ถ ํ์ฐ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ(cfis_land_result_percell_6_with_coords.csv)๋ฅผ ๋จธ์ ๋ฌ๋ ํ์ต์ ์ํ ์
๋ ฅ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์ ์ฒ๋ฆฌ ๋ฐ ๋ถํ ํ๋ ๊ณผ์ ์ ์ํํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
cfis_land_result_percell_6_with_coords.csv |
๊ฐ ๊ฒฉ์์ CFIS ์๋ฎฌ๋ ์ด์ ๊ฒฐ๊ณผ + ์์น ์ ๋ณด ํฌํจ๋ ์ต์ข ๋ฐ์ดํฐ |
- ์ ์ฒด CFIS ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ
readtable๋ก ๋ถ๋ฌ์ต๋๋ค.
Pignite์ด์์ NaN ๊ฐ์ ๋ฐํ ๊ฐ๋ฅ์ฑ ์์์ผ๋ก ๊ฐ์ฃผํ์ฌ 0์ผ๋ก ๋์ฒดํฉ๋๋ค.Pspread์ด์ ์กด์ฌํ๋ NaN์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ์ฌ ์ด์์น ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ถํ ์ ํธํฅ์ ๋ฐฉ์งํ๊ธฐ ์ํด seed ๊ณ ์ ํ ๋๋ค ์
ํ๋ง์ ์ํํฉ๋๋ค (
rng(42)).
- ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ 70% ํ์ต์ฉ, 30% ํ ์คํธ์ฉ์ผ๋ก ์ธ๋ฑ์ค ๊ธฐ๋ฐ ๋ถํ ํฉ๋๋ค.
- ํ์ต ๋ฐ์ดํฐ๋
cfis_train_label.csv๋ก, ํ ์คํธ ๋ฐ์ดํฐ๋cfis_test_label.csv๋ก ์ ์ฅํฉ๋๋ค. - ์ ์ฅ๋ ๋ ํ์ผ์ ์ดํ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ํ์ต/๊ฒ์ฆ์ ์ฌ์ฉ๋ฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
cfis_train_label.csv |
์ ์ฒด์ 70%๋ก ๊ตฌ์ฑ๋ ํ์ต์ฉ ๋ฐ์ดํฐ |
cfis_test_label.csv |
์ ์ฒด์ 30%๋ก ๊ตฌ์ฑ๋ ํ ์คํธ์ฉ ๋ฐ์ดํฐ |
๐ฏ ๋ชฉํ:
-
์ ๋ ฅ: 7๊ฐ์ง ์งํ + FARSITE ๋ฐฉํฅ์ฑ ๋ฐ์ดํฐ(8๋ฐฉํฅ) = ์ด 21๊ฐ ํผ์ฒ
-
์ถ๋ ฅ:
pSpread(์ฐ์๊ฐ, ํ๊ท ๋ฌธ์ ) -
ํ์ผ:
farsite_train_label.csv,cfis_train_label.csvํ์ผ๋ช ๋ด์ฉ farsite_train_label.csv๐ ์ ๋ ฅ ํผ์ฒ 21๊ฐ ํฌํจ (8๊ฐ FARSITE ๋ฐฉํฅ + 13๊ฐ ์งํ ์ถ์ ) cfis_train_label.csv๐ ์ ๋ต ๊ฐ ( pSpread) ํฌํจ -
์งํ๋ฅ ์ถ๋ ฅ
-
๋ชจ๋ธ ์ ์ฅ
-
ํธ๋ฆฌ ๊ฐฏ์๋ ์ผ๋จ 300๊ฐ๋ก ์งํํ๊ณ ์ฑ๋ฅ์ ํ์ธํด๊ฐ๋ฉฐ ์กฐ์ ํ์์ต๋๋ค.
(21๊ฐ ์ ๋ ฅ ์งํ ๊ธฐ๋ฐ, 300 ํธ๋ฆฌ ๊ตฌ์ฑ)
์ด ์คํฌ๋ฆฝํธ๋ CFIS ์๋ฎฌ๋ ์ด์
๊ฒฐ๊ณผ๋ฅผ ์ ๋ต(label)์ผ๋ก ์ฌ์ฉํ๊ณ , FARSITE ๊ธฐ๋ฐ์ 21๊ฐ ํ๊ฒฝยท๊ธฐ์ ์งํ๋ฅผ ์
๋ ฅ ํผ์ฒ๋ก ํ์ฉํ์ฌ Random Forest ํ๊ท ๋ชจ๋ธ์ ํ์ตํฉ๋๋ค. ํ์ต์ด ์๋ฃ๋๋ฉด ๋ชจ๋ธ๊ณผ grid_id ๋งคํ ์ ๋ณด๋ฅผ ํจ๊ป ์ ์ฅํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
farsite_train_label.csv |
๊ฒฉ์๋ณ 21๊ฐ ์ ๋ ฅ ์งํ ํฌํจ ํ์ต์ฉ ํผ์ฒ ๋ฐ์ดํฐ |
cfis_train_label.csv |
CFIS ๊ธฐ๋ฐ ํ์ฐ ํ๋ฅ (Pspread)์ด ํฌํจ๋ ์ ๋ต ๋ฐ์ดํฐ |
- ์
๋ ฅ ํผ์ฒ(
X_raw)์ ์ ๋ต ๋ฒกํฐ(Y)๋ฅผ ๊ฐ๊ฐ์ CSV ํ์ผ์์ ๋ถ๋ฌ์ต๋๋ค. cfis_train_label.csv์Pspread์ด์ด ์กด์ฌํ๋์ง ๊ฒ์ฆํ๊ณ ์์ผ๋ฉด ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
- ์์ธก ๋์์ธ
grid_id,lat_min,lat_max,center_lat๋ฑ ๊ณต๊ฐ ์ขํ ๊ด๋ จ ์ด์ ์ ๊ฑฐ - ์ต์ข
์ ์ผ๋ก 21๊ฐ ์งํ๋ง ์ถ์ถํ์ฌ
X๋ก ์ ์ฅ - ํฅํ ๊ฒฐ๊ณผ ๋งคํ์ ์ํด
grid_id๋ ๋ณ๋ ์ ์ฅ
- Random Forest ํ๊ท ๋ชจ๋ธ(TreeBagger) ์ฌ์ฉ
- ํธ๋ฆฌ ์๋ ๊ธฐ๋ณธ 300๊ฐ(
nTrees = 300) - OOB(Out-Of-Bag) ์์ธก๊ณผ ๋ณ์ ์ค์๋ ์ธก์ ๊ธฐ๋ฅ ํ์ฑํ
- ๋ณ๋ ฌ ์ฐ์ฐ์ ๋นํ์ฑํ(
UseParallel = false)
TreeBagger๋ฅผ ํตํด ํ๊ท ๋ชจ๋ธ ํ์ต- ์งํ ์ค 10๊ฐ ๋จ์๋ก ํ์ต ์ํฉ์ ์ถ๋ ฅ
- ํ์ต ์๊ฐ ์ธก์ ์ ์ํด
tic/toc์ฌ์ฉ
- ํ์ต ์๋ฃ ํ ํ์์คํฌํ ๊ธฐ๋ฐ์ ๊ณ ์ ์ด๋ฆ์ผ๋ก
.matํ์ผ๋ก ์ ์ฅ - ๋ชจ๋ธ(
Mdl)๊ณผ ํจ๊ปgrid_ids๋ ์ ์ฅํ์ฌ ์ถํ ๊ฒฐ๊ณผ ๋งคํ์ ํ์ฉ ๊ฐ๋ฅ
| ํ์ผ๋ช ์์ | ์ค๋ช |
|---|---|
random_forest_pspread_model_300trees_YYYYMMDD_HHMMSS.mat |
ํ์ต๋ ๋ชจ๋ธ๊ณผ grid_id ์ ๋ณด๊ฐ ์ ์ฅ๋ ๊ฒฐ๊ณผ ํ์ผ |
(Random Forest ๊ธฐ๋ฐ ๋ชจ๋ธ ๊ฒฐ๊ณผ ํ์ธ ๋ฐ ์ค์ ๋ณ์ ๋ถ์)
์ด ์คํฌ๋ฆฝํธ๋ ํ์ต๋ Random Forest ํ๊ท ๋ชจ๋ธ์ ๋ถ๋ฌ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์์ธกํ ํ, ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ง๋์ ์๊ฐํํ๊ณ , RMSE/MAE ๋ฑ์ ์ ๋์ ์งํ, ๊ทธ๋ฆฌ๊ณ ๋ณ์ ์ค์๋(Feature Importance) ๋ถ์์ ์ํํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
random_forest_pspread_model_*.mat |
ํ์ต ์๋ฃ๋ Random Forest ๋ชจ๋ธ (Mdl)๊ณผ grid_id ์ ์ฅ๋ .mat ํ์ผ |
farsite_test_label.csv |
ํ ์คํธ์ฉ ์ ๋ ฅ ํผ์ฒ (21๊ฐ ์งํ + ์์น ์ ๋ณด ํฌํจ) |
cfis_test_label.csv |
ํ
์คํธ์ฉ ์ ๋ต ํ์ฐ ํ๋ฅ (Pspread) ๋ฒกํฐ |
.matํ์ผ๋ก ์ ์ฅ๋ ๋ชจ๋ธ(Mdl)์ ๋ก๋- ํ
์คํธ ๋ฐ์ดํฐ์
grid_id, ์ค์ฌ ์๊ฒฝ๋(center_lat,center_lon) ์ ์ฅ - ํ์ต ์ ์ธ ๋์(
grid_id, ์์น ์ ๋ณด ๋ฑ)์ ์ ๊ฑฐํ๊ณ 21๊ฐ ์ ๋ ฅ ํผ์ฒ๋ง ์ถ์ถ
predict()ํจ์๋ก ์์ธก ์ํ โY_pred- ์ ๋ต(
Y_true)๊ณผ ๋น๊ตํ์ฌ ์ฑ๋ฅ ์งํ ๊ณ์ฐ:- RMSE (Root Mean Squared Error)
- MAE (Mean Absolute Error)
[RESULT] RMSE: 0.0947
[RESULT] MAE : 0.0225| ์งํ | ๊ฐ | ํด์ |
|---|---|---|
| RMSE | 0.0947 | ํ๊ท ์ ์ผ๋ก ์ฝ ยฑ0.095 ์ ๋ ์์ธก ์ค์ฐจ๊ฐ ๋ฐ์ |
| MAE | 0.0225 | ํ๊ท ์ ๋ ์ค์ฐจ๋ ์ฝ 2.25% ์์ค์ ์ค์ฐจ๋ฅผ ๊ฐ์ง |
pSpread๊ฐ์ด [0, 1] ๋ฒ์์ ํ๋ฅ ๊ฐ์ด๋ผ๋ ๊ฑธ ๊ฐ์ํ๋ฉด, ์ค์ฐจ 0.0225๋ 2% ์์ค์ ์์ธก ์ค์ฐจ- RMSE 0.095๋ ๋ชจ๋ธ์ด ๊ฝค ์์ ์ ์ผ๋ก ์์ธกํ๊ณ ์๋ค๋ ๋ป์ ๋๋ค.
๐ ๋ชจ๋ธ ์์ธก ๊ฒฐ๊ณผ๊ฐ ์๊ฐํ

๐ ์ ๋ต ๊ฒฐ๊ณผ๊ฐ ์๊ฐํ

์ค์ฐจ๊ฐ ๋น ๋ฅด๊ฒ ์ค๊ณ ์๋ ดํ๋ฉด ๋ชจ๋ธ์ด ์ ํ์ต๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
-
์ด๋ฐ 0~50๊ฐ ํธ๋ฆฌ ์ฌ์ด์ ๊ธ๊ฒฉํ ๊ฐ์
โ ๋ชจ๋ธ์ด ๋น ๋ฅด๊ฒ ํ์ตํ๋ฉด์ ์์ธก๋ ฅ์ ํค์ฐ๊ณ ์๋ค๋ ๋ป์ ๋๋ค.
-
์ดํ 100๊ฐ ํธ๋ฆฌ ์ดํ์๋ ๊ฑฐ์ ํํํ๊ฒ ์๋ ด
โ ์ฑ๋ฅ์ด ์์ ํ๋๊ณ ๋ ๋ง์ ํธ๋ฆฌ๋ฅผ ์ถ๊ฐํด๋ ์ฑ๋ฅ ํฅ์์ด ๋ฏธ๋ฏธํฉ๋๋ค.
ํธ๋ฆฌ ์ 300๊ฐ๋ ์ถฉ๋ถํ ์์ ์ ์ธ ์ํ์ด๊ณ ํธ๋ฆฌ ์๋ฅผ ๋ ๋๋ ค๋ ์ค์ฐจ ๊ฐ์ ํจ๊ณผ๋ ๊ฑฐ์ ์๊ธฐ ๋๋ฌธ์ 300๊ฐ๋ ์ ์ ํ ์ค์ ๊ฐฏ์์์ต๋๋ค.
๐ฉ๐ผ
ํ์ต์ํจ Random Forest ๊ธฐ๋ฐ Pspread ์์ธก ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ์์ ํ๊ฐ์ฒ๋ผ ์์ ์ ์ด๊ธฐ ๋๋ฌธ์ ํ์ต ๋ชจ๋ธ์ ํตํ ๊ฒฉ์๋ณ ์ฐ๋ถ ์ ์ด ์์ธก ๊ฒฐ๊ณผ ์ถ๋ ฅ ์ฝ๋๋ฅผ ์ต์ข ์ ์ผ๋ก ๊ตฌํํ์์ต๋๋ค.
(์๊ฒฝ๋ ํฌํจ ์์ธก CSV ์์ฑ์ฉ)
์ด ์คํฌ๋ฆฝํธ๋ ํ์ต๋ Random Forest ๋ชจ๋ธ์ ๋ถ๋ฌ์ ํ ์คํธ ๋ฐ์ดํฐ์ ๋ํด ์ฐ๋ถ ํ์ฐ ํ๋ฅ (Pspread)์ ์์ธกํ๊ณ , ๊ฐ ๊ฒฉ์์ ์์น ์ ๋ณด์ ํจ๊ป ๊ฒฐ๊ณผ ํ ์ด๋ธ์ ๊ตฌ์ฑ ๋ฐ ์ ์ฅํฉ๋๋ค.
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
farsite_test_label.csv |
ํ ์คํธ์ฉ ์ ๋ ฅ ํผ์ฒ ๋ฐ ๊ฒฉ์ ์์น ์ ๋ณด ํฌํจ |
cfis_test_label.csv (์ ํ) |
์ค์ Pspread ๊ฐ (์ฑ๋ฅ ํ๊ฐ์ฉ ๋น๊ต ๊ฐ๋ฅ) |
random_forest_pspread_model_*.mat |
ํ์ต๋ Random Forest ๋ชจ๋ธ(Mdl)๊ณผ grid_id ํฌํจ๋ .mat ํ์ผ |
- ๊ฒฉ์์
grid_id, ์๊ฒฝ๋(lat_min,lat_max,lon_min,lon_max,center_lat,center_lon) ์ ๋ณด๋ฅผ ํฌํจํ ์ ์ฒด ๋ฐ์ดํฐ ๋ก๋ - ์์ธก์ ์ฌ์ฉํ 21๊ฐ ์
๋ ฅ ํผ์ฒ๋ง ์ถ์ถํ์ฌ
X_test๋ก ๊ตฌ์ฑ
-
์ ์ฅ๋
.matํ์ผ์์ ํ์ต๋ ๋ชจ๋ธ(Mdl)์ ๋ถ๋ฌ์ต๋๋ค(์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ์ ์๋ค๋ฉด ์๋ต ๊ฐ๋ฅ)
predict(Mdl, X_test)๋กpSpread_pred์์ธก ์ํ
- ๋ค์ ํญ๋ชฉ์ ํฌํจํ ํ
์ด๋ธ์ ์์ฑ:
grid_id,lat_min,lat_max,lon_min,lon_maxcenter_lat,center_lonpSpread_pred(์์ธก ํ์ฐ ํ๋ฅ )
-
ํ์์คํฌํ(
yyyymmdd_HHMMSS)๋ฅผ ํฌํจํ ํ์ผ๋ช ์ผ๋ก CSV ์ ์ฅ์:
predicted_pspread_with_coords_20250729_152010.csv
| grid_id | lat_min | lat_max | lon_min | lon_max | center_lat | center_lon | pSpread_pred |
|---|---|---|---|---|---|---|---|
| 12345 | 37.1 | 37.2 | 127.3 | 127.4 | 37.15 | 127.35 | 0.783 |
| ... | ... | ... | ... | ... | ... | ... | โฆ |
๋ณธ MATLAB ์คํฌ๋ฆฝํธ๋ train_label.csv ํ์ต ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, Gradient Boosting Regression (LSBoost) ๋ชจ๋ธ์ ํ์ตํ์ฌ ์ฐ๋ถ ํ์ฐ ํ๋ฅ (Pspread)์ ์์ธกํ๋ ํ๊ท ๋ชจ๋ธ์ ์์ฑํฉ๋๋ค.
ํ์ต๋ ๋ชจ๋ธ์ .mat ํ์ผ๋ก ์ ์ฅ๋์ด, ํ์ ์์ธก ๋๋ ํ๊ฐ์ ํ์ฉ๋ฉ๋๋ค.
๊ฒฉ์ ๋จ์์ ์ฐ๋ถ ์์ธก ํ์ต ๋ฐ์ดํฐ๋ก, ๋ค์ ์ด(columns)์ ํฌํจํด์ผ ํฉ๋๋ค:
| ์ปฌ๋ผ๋ช | ์ค๋ช |
|---|---|
| avg_fuelload_pertree_kg | ํ๊ท ๋๋ฌด๋น ์ฐ๋ฃ๋ (kg) |
| FFMC, DMC, DC | ์ฐ๋ฃ ์๋ถ ์ง์ (Fine/Duff/Drought) |
| NDVI | ์์ ์ง์ |
| smap_20250630_filled | ํ ์ ์๋ถ ๋ณด๊ฐ๊ฐ |
| temp_C, humidity | ๊ธฐ์จ ๋ฐ ์ต๋ |
| wind_speed, wind_deg | ํ์ ๋ฐ ํํฅ |
| precip_mm | ๊ฐ์๋ |
| mean_slope | ํ๊ท ๊ฒฝ์ฌ๋ |
| spei_recent_avg | ์ต๊ทผ ๊ฐ๋ญ ์ง์ (SPEI) |
| P_NW ~ P_SE | 8๋ฐฉํฅ ํ์ฐ ํ๋ฅ (FARSITE ๊ธฐ๋ฐ) |
| Pspread | ํ๊ฒ๊ฐ, ์ ๋ณ ํ์ฐ ํ๋ฅ (0~1) |
- FARSITE ํ์ฐ ํ๋ฅ 8๋ฐฉํฅ(P_NW~P_SE)์ ํ๊ท ๊ฐ์
farsite_prob์ผ๋ก ๊ณ์ฐํ์ฌ ์ ๋ ฅ ํผ์ฒ์ ์ถ๊ฐ
farsite_cols = {'P_NW','P_N','P_NE','P_W','P_E','P_SW','P_S','P_SE'};
train.farsite_prob = mean(train{:, farsite_cols}, 2);X: 14๊ฐ ํผ์ฒy:Pspread
tree = templateTree('MaxNumSplits', 10);
model = fitrensemble(X, y, ...
'Method', 'LSBoost', ...
'NumLearningCycles', 300, ...
'LearnRate', 0.1, ...
'Learners', tree);- Boosting ๋ฐฉ์: LSBoost (Least Squares)
- ํธ๋ฆฌ ์:
300 - ํ์ต๋ฅ :
0.1 - ํธ๋ฆฌ ์ต๋ ๋ถํ ์:
10
- ํ์ต ์๋ฃ๋ ๋ชจ๋ธ์
gradient_boosting_pspread_model_300trees_yyyymmdd_HHMMSS.matํ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
| ํ์ผ๋ช ์์ | ์ค๋ช |
|---|---|
gradient_boosting_pspread_model_300trees_20250729_142205.mat |
ํ์ต๋ RegressionEnsemble ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ MATLAB .mat ํ์ผ |
save(model_filename, 'model');- MATLAB R2021a ์ด์ ๊ถ์ฅ
Statistics and Machine Learning Toolboxํ์
๋ณธ ์คํฌ๋ฆฝํธ๋ ์ฌ์ ํ์ต๋ Gradient Boosting ๋ชจ๋ธ์ ํ์ฉํด, test_label.csv์ ํฌํจ๋ ๊ฒฉ์๋ณ ์
๋ ฅ ๋ฐ์ดํฐ์ ๋ํด **์ฐ๋ถ ํ์ฐ ํ๋ฅ (pSpread)**์ ์์ธกํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ CSV๋ก ์ ์ฅํฉ๋๋ค.
ํ ์คํธ ๋์ ๊ฒฉ์ ์ ๋ค์ ๋ฐ์ดํฐ๋ก, ๋ค์ ์ด์ด ํฌํจ๋์ด ์์ด์ผ ํฉ๋๋ค:
| ์ปฌ๋ผ๋ช | ์ค๋ช |
|---|---|
| grid_id | ๊ฒฉ์ ๊ณ ์ ID |
| lat_min, lat_max | ๊ฒฉ์ ์๋ ๋ฒ์ |
| lon_min, lon_max | ๊ฒฉ์ ๊ฒฝ๋ ๋ฒ์ |
| center_lat, center_lon | ๊ฒฉ์ ์ค์ฌ์ ์/๊ฒฝ๋ |
| avg_fuelload_pertree_kg | ํ๊ท ๋๋ฌด๋น ์ฐ๋ฃ๋ (kg) |
| FFMC, DMC, DC | ์ฐ๋ฃ ์๋ถ ์ง์ |
| NDVI | ์์ ์ง์ |
| smap_20250630_filled | ๋ณด๊ฐ๋ ํ ์ ์๋ถ |
| temp_C, humidity | ๊ธฐ์จ, ์ต๋ |
| wind_speed, wind_deg | ํ์, ํํฅ |
| precip_mm | ๊ฐ์๋ |
| mean_slope | ํ๊ท ๊ฒฝ์ฌ๋ |
| spei_recent_avg | ์ต๊ทผ ๊ฐ๋ญ ์ง์ |
| P_NW ~ P_SE | FARSITE ํ์ฐ ํ๋ฅ 8๋ฐฉํฅ |
FARSITE์ 8๋ฐฉํฅ ํ์ฐ ํ๋ฅ ํ๊ท ์farsite_prob์ผ๋ก ๊ณ์ฐํ์ฌ ์ ๋ ฅ ํผ์ฒ์ ์ถ๊ฐ
-
ํ์ต ์์ ๋์ผํ 14๊ฐ ํผ์ฒ ์ถ์ถ:
X = test{:, { 'avg_fuelload_pertree_kg', ... 'FFMC', 'DMC', 'DC', ... 'NDVI', 'smap_20250630_filled', ... 'temp_C', 'humidity', ... 'wind_speed', 'wind_deg', ... 'precip_mm', 'mean_slope', 'spei_recent_avg', ... 'farsite_prob' }};
.matํ์ผ์์model๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์ด- ์์ ํ์ผ๋ช
:
gradient_boosting_pspread_model_300trees_20250706_131211.mat
predict(model, X)๋ฅผ ํตํด ๊ฐ ๊ฒฉ์์ ๋ํpSpreadํ์ฐ ํ๋ฅ ์์ธก
- ๊ฒฉ์ ๊ธฐ๋ณธ ์ ๋ณด + ์์ธก ํ์ฐ ํ๋ฅ (
pSpread_pred)์ ํฌํจํ ๊ฒฐ๊ณผ ํ ์ด๋ธ ์์ฑ
- ํ์ผ๋ช
์์:
gbr_predicted_pspread_20250729_150201.csv
| ํ์ผ๋ช ์์ | ์ค๋ช |
|---|---|
gbr_predicted_pspread_20250729_150201.csv |
๊ฒฉ์๋ณ ์์ธก ํ์ฐ ํ๋ฅ ๊ฒฐ๊ณผ ํ ์ด๋ธ |
์ถ๋ ฅ ์ด ๊ตฌ์ฑ:
grid_id,lat_min,lat_max,lon_min,lon_max,center_lat,center_lon,pSpread_pred
- MATLAB R2021a ์ด์
Statistics and Machine Learning Toolbox- ํ์ต๋
.mat๋ชจ๋ธ ํ์ผ (์:gradient_boosting_pspread_mode
๋ณธ ์คํฌ๋ฆฝํธ๋ ํ์ต๋ Gradient Boosting ๋ชจ๋ธ์ ์์ธก ์ ํ๋๋ฅผ ํ๊ฐํ๊ณ , ์๊ฐํ ๋ฐ ์ค์๋ ๋ถ์์ ์ํํฉ๋๋ค.
ํ๊ฐ ์งํ๋ก๋ RMSE ๋ฐ MAE๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์์ธก ๊ฒฐ๊ณผ์ CFIS ๊ธฐ๋ฐ ์ ๋ต์ ๋น๊ตํฉ๋๋ค.
- ์์ธก ์ํ ํ ์ ์ฅ๋ ๊ฒฐ๊ณผ
- ํ์ ์ด:
grid_id,center_lat,center_lon,pSpread_pred
- CFIS ๊ธฐ๋ฐ Ground Truth ํ์ฐ ํ๋ฅ
- ํ์ ์ด:
Pspread
fitrensemble์ผ๋ก ํ์ต๋ RegressionEnsemble ๊ฐ์ฒด ํฌํจ
- ์์ธก ๊ฒฐ๊ณผ(
pSpread_pred)์ ์ค์ ์ ๋ต(Pspread)์ ๋ณํฉ
- RMSE (Root Mean Squared Error)
- MAE (Mean Absolute Error)
- ์ด ์ถ๊ฐ:
Pspread_true,abs_error - ๊ฒฐ๊ณผ ์ ์ฅ:
evaluation_result_yyyymmdd_HHMMSS.csv
- ์์ธก ํ์ฐ ํ๋ฅ ์ง๋
- ์ค์ ํ์ฐ ํ๋ฅ ์ง๋
- ์ ๋ ์ค์ฐจ ์ง๋
predictorImportance(model)์ฌ์ฉ- ์์ 3๊ฐ ์ค์ ํผ์ฒ ์ถ๋ ฅ ๋ฐ ๋ฐ ์ฐจํธ ์๊ฐํ
resubLoss(model, 'Learners', 1:t)๋ก ํ์ต ๊ณก์ ์์ฑ
| ํ์ผ๋ช ์์ | ์ค๋ช |
|---|---|
evaluation_result_20250729_151001.csv |
์์ธก๊ฐ, ์ ๋ต๊ฐ, ์ค์ฐจ๊ฐ ํฌํจ๋ ํ๊ฐ ๊ฒฐ๊ณผ CSV |
| ์๊ฐํ ์ด๋ฆ | ์ค๋ช |
|---|---|
| ๐ฅ ์์ธก ํ์ฐ ํ๋ฅ ์ง๋ | pSpread_pred ์๊ฐํ (jet ์ปฌ๋ฌ๋งต, caxis [0 1]) |
| ๐ ์ค์ ํ์ฐ ํ๋ฅ ์ง๋ | Pspread_true ์๊ฐํ |
| ๐งญ ์์ธก ์ค์ฐจ ์ง๋ | abs_error ์๊ฐํ (parula ์ปฌ๋ฌ๋งต) |
| ๐ ํผ์ฒ ์ค์๋ ๋ฐ ์ฐจํธ | Gradient Boosting ๊ธฐ์ค ๋ณ์ ์ํฅ๋ |
| ๐ ํธ๋ฆฌ ์์ ๋ฐ๋ฅธ ํ์ต ์ค์ฐจ ๊ทธ๋ํ | ๋ชจ๋ธ ์์ ๋ฐ๋ฅธ loss ๋ณํ ์๊ฐํ |
- MATLAB R2021a ์ด์
Statistics and Machine Learning Toolbox- ์ฌ์ ํ์ต๋
.mat๋ชจ๋ธ ํ์ผ ํ์
๐ ๋ชจ๋ธ ์์ธก ๊ฒฐ๊ณผ๊ฐ ์๊ฐํ

๐ ์ ๋ต ๊ฒฐ๊ณผ๊ฐ ์๊ฐํ

๐ Resubstitution Loss ๊ทธ๋ํ
