パッケージ:tidyverse,sf,terra,rnaruralearth,rmapshaper
夜間光データのダウンロード
Average Visible, Stable Lights, & Cloud Free Coverages:雲のない夜の夜間光の平均値を記録.F101992:DMSP-F10によって観測された1992年の夜間光データ.F101992.v4b_web.stable_lights.avg_vis.tif.gzを「すべて展開」し作業フォルダに格納.F101992.v4b_web.stable_lights.avg_vis.tif(夜間光の平均強度を示すデータ)..tif:画像ファイル形式の一つ.terraパッケージに含まれるrast()でデータを読込.オブジェクト名をnight1992とする.install.packages("rnaturalearth"),install.packages("rnaturalearthdata").World_map)から日本地図(Japan_map)を切り抜き.x)110~155度,北緯(y)20度~50度までの範囲.
st_bbox():境界ボックスの作成.crsは世界測地系(4326). 110, 155fareast_boxをst_as_sfc()でポリゴンにする.st_intersects():World_mapからfareast_box_sfcに収まる国(ポリゴン)を検索.st_intersects()を利用するには,オブジェクトが(マルチ)ポイント,(マルチ)ライン,(マルチ)ポリゴンである必要.lengths()>0: 重なるポリゴンを抽出しTRUEに.fareastとする.#sfcオブジェクト(四角形のポリゴン)の作成
fareast_box_sfc <- fareast_box %>%
st_as_sfc()
#重なるポリゴン抽出
fareast <-
lengths(st_intersects(World_map, fareast_box_sfc))>0 World_mapからfareast==TRUEを満たすメッシュを抽出(filter()).
.ですべての変数を残す.fareast_mapとする.dplyr::filter()と指示.日本周辺の可視化3
coord_sf()で範囲を指定しないと,東西の広い範囲を示してしまう.ggplot()+
geom_sf(data=fareast_map, fill="white")+
coord_sf(xlim = c(110, 155), ylim = c(20, 50))+
labs(caption="出典:Natural Earth")+
ggtitle("日本周辺地図")night1992の観測数は膨大なため,これを可視するのも時間がかかる.
fareast_box)内でnight1992を切り抜き,データフレームに変換して可視する.crop():terraパッケージに含まれるcrop()で切り抜くデータを読込.こうすることで観測数を大きく減らせる.ext():切り抜く範囲(数値のリスト)の指示.ここでは,すでに作成したfareast_boxを利用.ggplot()で可視するため,night1992をデータフレーム(as.data.frame())に変更.
xy=TRUEを指定することで,座標情報をデータフレームの列として取り込む.lightに変更.日本周辺の夜間光データの可視化
geom_raster():夜間光強度(night1992_dfのlight列)の可視化.tran=sqrtで夜間光強度の平方根を求める.平方根変換により暗いエリアの微妙な差違も可視.ggplot() +
geom_raster(data=night1992_df,
aes(x=x, y=y, fill=light))+
scale_fill_viridis_c(option="G", trans="sqrt")+
geom_sf(data=fareast_map, fill=NA, color="white")+
theme_void()+
coord_sf(xlim=c(110, 155), ylim=c(20, 50)) +
labs(fill="夜間光強度",
caption="出典:Natural Earth, Earth Observation Group")+
ggtitle("日本周辺夜間光(1992年)")夜間光データのダウンロード
Monthly Cloud-free DNB Composite:雲のない夜の夜間光の月平均値を記録.75N060E:東京を含む日本の夜間光データ.東経(x)60~180度,北緯(y)0度~60度までの範囲のため日本全体を含んでいる.612M:612メガバイト.SVDNB_npp_20200301-20200331_75N060E_vcmslcfg_v10_c202007042300.avg_rade9h.tif(夜間光の平均強度を示すデータ).night203とする.#行政区域の読込
Tokyo_map <- read_sf("N03-20220101_13_GML/N03-22_13_220101.shp")
Saitama_map <-
read_sf("N03-20220101_11_GML/N03-22_11_220101.shp")
Chiba_map <-
read_sf("N03-20220101_12_GML/N03-22_12_220101.shp")
Kanagagawa_map <-
read_sf("N03-20220101_14_GML/N03-22_14_220101.shp")bind_rows():列名の並び順が異なっても,揃えて結合.データは下に加えられてゆく.#離島の市町村ダミーの作成
Tokyo_map <- Tokyo_map %>%
mutate(island=
ifelse(N03_007>=13361 & N03_007<=13421,
1, 0))
#離島の市町村を除いたシェープファイルの作成
Tokyo_map <- Tokyo_map %>%
subset(island!=1)
#1都3県合併
Greater_Tokyo <-
bind_rows(Saitama_map, Chiba_map,
Tokyo_map, Kanagagawa_map)rmapshaperパッケージのms_dissolve()を使用.ms_dissolve():N03_001列に県名が記載されているので,県単位で境界を統合.crsは夜間光データ(nightGTY203)に揃えて世界測地系(4326).1都3県の可視化
GreaterTY_box)でnightGTY203を切り抜き,データフレームに変換して可視する.st_bbox():境界ボックスの作成.mask():ポリゴンに沿って不要な部分をNAに変更.vect():Greater_Tokyo(sfオブジェクト)をterraの
SpatVectorに変換.#緯度経度(数値のリスト)
GreaterTY_box <- Greater_Tokyo %>%
st_bbox()
#夜間光データを東京都にあわせて切り抜き
nightGTY203 <- night203 %>%
crop(ext(GreaterTY_box))
#東京都の境界線に合わせて不要な部分を削除
nightGTY203 <- nightGTY203 %>%
mask(vect(Greater_Tokyo))
#ggpolt()で可視するためデータフレームに変更
nightGTY203_df <- nightGTY203 %>%
as.data.frame(xy=TRUE)%>%
rename(light=3)1都3県の夜間光データの可視化
nW/㎠/sr(ナノワット/平方センチメートル/ステラジアン).範囲は0以上の正の値であり,絶対的な値.ggplot()+
geom_tile(data=nightGTY203_df,
aes(x=x, y=y, fill=light))+
scale_fill_viridis_c(option="G", trans="sqrt")+
geom_sf(data=Greater_Tokyo, fill=NA, color="white")+
theme_void()+
labs(fill="夜間光強度(nW/㎠/sr)",
caption="出典:国土数値情報, Earth Observation Group")+
ggtitle("1都3県夜間光(2020年3月)")nightGTY204_dfとする.
nightGTY203_dfと合併し(オブジェクト名:night_data),変化率(change_rate)を求める. nightGTY203_df <- nightGTY203_df %>%
rename(light_203=light)
nightGTY204_df <- nightGTY204_df %>%
rename(light_204=light)
night_data <-
left_join(nightGTY203_df, nightGTY204_df,
by=c("x", "y"))
night_data <- night_data %>%
mutate(change_rate=((light_204-light_203)/light_203)*100)| 平均 | 標準偏差 | 最小値 | 最大値 | 観察数 | |
|---|---|---|---|---|---|
| 変化率(%) | 0.90 | 19.09 | -91.85 | 1244.68 | 77646 |
night_data <- night_data %>%
mutate(change_rate=case_when(
change_rate>100 ~"(100, 1250)",
change_rate>50 & change_rate<=100 ~ "(50, 100]",
change_rate>10 & change_rate<=50 ~ "(10, 50]",
change_rate>0 & change_rate<=10 ~ "(0, 10]",
change_rate>-10 & change_rate<=0 ~ "(-10, 0]",
change_rate>-50 & change_rate<=-10 ~ "(-50, -10]",
change_rate>-100 & change_rate<=-50 ~ "(-100, -50]"))factor()を用いて凡例の順番を指定.night_data <- night_data %>%
mutate(change_rate=factor(change_rate,
levels=c("(100, 1250)",
"(50, 100]",
"(10, 50]",
"(0, 10]",
"(-10, 0]",
"(-50, -10]",
"(-100, -50]")))geom_sf()を用いて可視するため,データフレームのnight_dataをsfオブジェクトに変換.夜間光強度変化率の可視化
scale_color_brewer():カテゴリーデータ(離散値)の色分け.ggplot() +
geom_sf(data=night_data, aes(color=change_rate)) +
scale_color_brewer(palette="RdBu")+
geom_sf(data=Greater_Tokyo, fill=NA)+
theme_void()+
labs(color="夜間光強度変化率(%)",
caption="出典:国土数値情報, Earth Observation Group") +
ggtitle("1都3県夜間光(2020年3月~4月)")Rによる地理空間データの可視化
チュートリアルホーム
アイコン
Font Awesome 6.7.2
生成AIの使用について
作成過程において,ChatGPTを使用してコードの最適化に関する助言を得た.サービスを利用した後,内容を確認し,必要に応じて編集を行った.
Google Earth Engineを用いて,必要な範囲だけを取得可能な模様.Qitta←検索欄に検索ワード「Google Earth Engine 夜間光」を入力して検索.神奈川大学経済学部浦沢聡士研究室もこのサービスを利用して夜間光データを可視化.↩︎
Natural Earthの利用方法の詳細はNatural Earthの地理空間データの可視化参照.↩︎
地図の国境線については,学術誌(Elsevier,Wiley)では次のような注意書きが求められる場合がある.「Map lines delineate study areas and do not necessarily depict accepted national boundaries」.↩︎
カテゴリー化についてはコミュニティバス路線上の人口密度の可視化を参照.↩︎