ある地点周辺の統計地図の作成,および統計量の計算を試みる.ここでは,商店街を一点で表し,その商圏を描写.
参考:横浜市内商店街の商圏実態
今回は利用しないが,下記のような情報源もある.
ライブラリ:sf
,tidyverse
,units
read_sf()
):行政区域をKanagawa
と名付ける.
st_transform()
:地理座標系の投影変換(JGD2011
→WGS84
).Kanagawa
から横浜市の行政区域を抜き出し(filter()
),Yokohama
と名付ける.filter()
),periphery
と名付ける.#笹山商店街のポイント(世界測地系)
Sasayama_ss_sfg <-
st_point(c(139.567458, 35.4870312))
#世界測地系を指定
Sasayama_ss_sfc <-
st_sfc(Sasayama_ss_sfg, crs="WGS84")
#六角橋商店街のポイント(世界測地系)
Rokkakubashi_ss_sfg <-
st_point(c(139.6260256, 35.4875658))
#世界測地系を指定
Rokkakubashi_ss_sfc <-
st_sfc(Rokkakubashi_ss_sfg, crs="WGS84")
対象商店街周辺の行政区域の可視化
#完成図
ggplot()+
geom_sf(data=periphery, fill="white")+
geom_sf(data=Sasayama_ss_sfc,
color="deeppink", size=3)+
geom_sf(data=Rokkakubashi_ss_sfc,
color="green", size=3)+
labs(caption="出典:国土数値情報(国土交通省)")+
ggtitle("横浜市内対象商店街の位置")+
theme_bw()
統計データ:500mメッシュ
市区町村別メッシュ・コード一覧(3次メッシュの情報)から保土ケ谷区や神奈川区のコードの最初の4桁が5339からはじまることがわかる.
人口
統計地理情報システム > 統計データダウンロード > 国勢調査 > 2020年 > 4次メッシュ(500mメッシュ) > 人口及び世帯 > 都道府県で絞込みはコチラ > 14 神奈川県 > M5339 3
read.table()
を用いてデータを読込.pop
と名付ける.
#人口
pop <-
read.table("tblT001101H5339/tblT001101H5339.txt",
header=TRUE, sep=",",
fileEncoding = "CP932")
#便宜上1行目削除(データ名が2行にわたるため)
pop %>%
slice(-1) ->
pop
#メッシュデータと結合するため,KEY_CODEのデータ型変換
pop %>%
mutate(KEY_CODE=as.character(KEY_CODE)) ->
pop
境界
メッシュデータの人口総数を地図上に可視するには,シェープファイルと結合する必要がある.そこで,境界データをダウンロードし,結合する.
統計地理情報システム > 境界データダウンロード > 4次メッシュ(500mメッシュ) > 世界測地系緯度経度・Shapefile > 都道府県で絞込みはコチラ > 13 神奈川県 > M5339
read.sf()
を用いてデータを読込.mesh
と名付けるmesh
とpop
をKEY_CODE
で結合.
T001101001
:人口総数(人)T001101019
:65歳以上人口総数(人)mesh <-
read_sf("HDDSWH5339/MESH05339.shp")
#データ結合
mesh_pop <-
left_join(mesh, pop, by=c("KEY_CODE"))
#人口総数,65歳以上人口総数を数値(integer:整数)に変更
mesh_pop <-
mesh_pop %>%
mutate(population=as.integer(T001101001),
elderly=as.integer(T001101019),
elderly_ratio=elderly/population*100)
高齢者割合の可視化
mesh
の境界ボックス(Bounding
box)は広範囲に及ぶ.ここでは,周辺区(periphery
)だけを示したい.そこで,周辺区(periphery
)とmesh
の重複する部分を抽出する.
st_intersection()
を用いて,2つのシェープファイル(mesh
とperiphery
)の重複部分を抽出.
#準備(投影変換JSD2000→WGS84)
mesh_wgs84 <-
mesh_pop %>%
st_transform("WGS84")
#このおまじないがないと次の結合できない
st_agr(mesh_wgs84)="constant"
st_agr(periphery)="constant"
#高齢者割合が加わったメッシュデータの完成
periphery_mesh <-
st_intersection(x=mesh_wgs84,
y=periphery)
高齢者割合の可視化
NA
(欠損値)は情報(ここでは高齢者割合)が含まれないことを意味する.ggplot()+
geom_sf(data=periphery_mesh, aes(fill=elderly_ratio))+
scale_fill_viridis_c(option="G", direction=-1)+
geom_sf(data=Sasayama_ss_sfc,
color="deeppink", size=3)+
geom_sf(data=Rokkakubashi_ss_sfc,
color="green", size=3)+
geom_sf(data=periphery, fill="NA",
linewidth=0.8)+
labs(fill="高齢者割合(%)", caption="出典:国土数値情報(国土交通省),
国勢調査4次メッシュ(総務省統計局)")+
ggtitle("2020年の高齢者割合")+
theme_void()
st_buffer()
:円(ポリゴン)を作成.
dist
:円の距離.set_units()
:単位を付与.ここでは1200m
を指示.Sasayama_ss_sfc %>%
st_buffer(dist=set_units(1200, m)) ->
Sasayama_buffer
Rokkakubashi_ss_sfc %>%
st_buffer(dist=set_units(1200, m)) ->
Rokkakubashi_buffer
商圏の可視化
ggplot()+
geom_sf(data=periphery_mesh, aes(fill=elderly_ratio))+
scale_fill_viridis_c(option="G", direction=-1)+
geom_sf(data=Sasayama_ss_sfc,
color="deeppink", size=3)+
geom_sf(data=Sasayama_buffer, color="deeppink",
fill="NA", linewidth=0.8)+
geom_sf(data=Rokkakubashi_ss_sfc,
color="green", size=3)+
geom_sf(data=Rokkakubashi_buffer, color="green",
fill="NA", linewidth=0.8)+
geom_sf(data=periphery, fill="NA",
linewidth=0.6)+
labs(fill="高齢者割合(%)", caption="出典:国土数値情報(国土交通省),
国勢調査4次メッシュ(総務省統計局)")+
ggtitle("一次商圏と高齢者割合")+
theme_void()
st_intersects()
:mesh_wgs84
から円(buffer
)ポリゴンと重なるメッシュを検索.
lengths()>0
:重なるメッシュを抽出しTRUE
に.mesh_wgs84
はメッシュ形状のみ.periphery_mesh
との交差(st_intersects()
)にしてしまうと行政区域が邪魔するので注意.#エラーが出ないためのおまじない
sf_use_s2(FALSE)
#笹山商店街の商圏の高齢者
Sasayama_elderly <-
lengths(st_intersects(mesh_wgs84,
Sasayama_buffer))>0
#六角橋商店街の商圏の高齢者
Rokkakubashi_elderly <-
lengths(st_intersects(mesh_wgs84,
Rokkakubashi_buffer))>0
periphery_mesh
からSasayama_elderly==TRUE
を満たすメッシュを抽出(filter()
).
.
ですべての変数を残す.Sasayama_mesh
と名付ける.#笹山商圏内の重なるメッシュの抽出
mesh_wgs84 %>%
filter(., Sasayama_elderly==TRUE) ->
Sasayama_mesh
#六角橋商圏内の重なるメッシュの抽出
mesh_wgs84 %>%
filter(., Rokkakubashi_elderly==TRUE) ->
Rokkakubashi_mesh
一次商圏メッシュの可視化
ggplot()+
geom_sf(data=periphery_mesh, aes(fill=elderly_ratio))+
scale_fill_viridis_c(option="G", direction=-1)+
geom_sf(data=Sasayama_ss_sfc,
color="deeppink", size=3)+
geom_sf(data=Sasayama_buffer,
color="deeppink",
fill="NA", linewidth=0.6)+
geom_sf(data=Sasayama_mesh,
color="pink", fill="NA",
linewidth=0.8)+
geom_sf(data=Rokkakubashi_ss_sfc,
color="green", size=3)+
geom_sf(data=Rokkakubashi_buffer,
color="green", fill="NA",
linewidth=0.6)+
geom_sf(data=Rokkakubashi_mesh,
color="darkgreen", fill="NA",
linewidth=0.8)+
labs(fill="高齢者割合(%)",
caption="出典:国土数値情報(国土交通省),
国勢調査4次メッシュ(総務省統計局)")+
ggtitle("一次商圏メッシュ")+
theme_void()
buffer
)ポリゴンと重なるメッシュ(一次商圏メッシュ)が取り出せていることが確認できる.distinct()
で削除.#重複するメッシュ(KEY_CODE)を取り除く
#(.keep_all=TRUE)その他の変数残す
Sasayama_mesh %>%
distinct(KEY_CODE,.keep_all=TRUE)->
Sasayama_mesh
NA
)が含まれる場合も統計値を計算できない.欠損値を無視して計算するには追加的なコード(na.rm=TRUE
)が必要だが,ここでは欠損値がないため指示していない.
sum_pop
と65歳以上人口総数(人)sum_eld
を計算し,sum_eld
をsum_pop
から割ることにより高齢者割合を計算.Sasayama_mesh %>%
summarize(sum_pop=
sum(population),
sum_eld=
sum(elderly),
"笹山高齢者割合"=sum_eld/sum_pop*100)
sum_pop | sum_eld | 笹山高齢者割合 | geometry |
---|---|---|---|
54367 | 17183 | 31.60557 | POLYGON ((139.55 35.4875, 1… |
Rokkakubashi_mesh %>%
summarize(sum_pop=
sum(population),
sum_eld=
sum(elderly),
"六角橋高齢者割合"=sum_eld/sum_pop*100)
sum_pop | sum_eld | 六角橋高齢者割合 | geometry |
---|---|---|---|
112589 | 23345 | 20.73471 | POLYGON ((139.625 35.475, 1… |
OSMデータによる商店街の可視化では笹山商店街,六角橋商店街を事例として,商店街の店舗数を計算.
#データを作成
商店街 <- c("笹山商店街", "六角橋商店街")
店舗数 <- c(17, 153)
一次商圏内高齢者割合 <- c(31.6, 20.8)
#データフレームを作成
商店街データ <- data.frame(商店街, 店舗数, 一次商圏内高齢者割合)
#結果を表示
商店街データ
商店街 | 店舗数 | 一次商圏内高齢者割合 |
---|---|---|
笹山商店街 | 17 | 31.6 |
六角橋商店街 | 153 | 20.8 |
Rによる地理空間データの可視化
OSMデータによる商店街の可視化では笹山商店街,六角橋商店街を事例として,商店街の店舗の可視化や店舗数の計算を試みている. ↩︎
この図はmapview()
を用いている.mapview()
を用いた地理空間データの可視化についてはインタラクティブな地図によるデータの可視化参照.↩︎
統計地理情報システムの国勢調査からは1995年から2020年(5年ごと)までの人口総数(男女),世帯総数などがわかる(アクセス日:2022-10-29).2015年からは年齢別人口,外国人人口など詳しく記録されている.↩︎
準備に示されているR
コードの類似コードはコミュニティバス路線上の人口密度の可視化に説明あり.↩︎