1 目的

ジオコーディング(アドレスジオコーディング,アドレスマッチングともいう)とは,住所情報を使って対応する緯度経度(ジオコード)を付加することをいう.

  • 防犯対策推進を目的に,都道府県別の犯罪オープンデータが都道府県警察により公開されている.公開されている犯罪発生情報は「ひったくり」,「車上ねらい」,「自動販売機ねらい」,「自動車盗」,「自転車盗」など.
  • 発生地の情報については,市区町村コードの他,「都道府県」,「市区町村」,「町丁目(空欄の場合もある)」が記載されている(発生地はジオコーディングによって点で示されるが,発生付近).
  • ここでは,神奈川県警察のオープンデータサイトから犯罪発生情報をダウンロードし,発生地点及び発生分布を可視化.

ライブラリ:sftidyverse

library(sf)
library(tidyverse)

2 ジオコーディング

境界データのダウンロード

Kanagawa_map <-
  read_sf("N03-20210101_14_GML/N03-21_14_210101.shp")

犯罪オープンデータのダウンロード

car_theft <-
  read.csv("kanagawa_2018zidousyatou.csv",
                    fileEncoding="CP932")

#自動車盗の中身
car_theft %>% 
  head()

ジオコーディング

car_theftの6列目(都道府県),7列目(市区町村),8列目(町丁目)に発生地の情報がある.これを使い,ジオコーディング.

  • 東京大学空間情報科学研究センターが提供するCSVアドレスマッチングサービスを利用.

  • 詳細はチュートリアルを参照.

  • CSVアドレスマッチングサービスからパラメータ設定.ジオコード付きのデータを作成.

    • 対象範囲:神奈川県街区レベル(経緯度・世界測地系).
    • 住所を含むカラム番号:6,7,8
      • 6列目,7列目,8列目にあることを指示.
    • 「その他」は初期値(デフォルト)のままでおそらく大丈夫.
    • 変換したいファイル名:kanagawa_2018zidousyatou.csvを選択し,送信.
    • ダウンロードしたファイルはkanagawa_2018zidousyatou_1.csvとして保存.
      • 再度,car_theftとしてファイルを読込(read.csv()).
      • fXが経度,fYが緯度が新たに加わったことが確認できる.
car_theft <-
  read.csv("kanagawa_2018zidousyatou_1.csv",
           fileEncoding="CP932")

#自動車盗の中身
car_theft %>% 
  head()

発生地点の可視化

ggplot()で発生地点を可視化.

ggplot()+
  geom_sf(data=Kanagawa_map, fill="white")+
  geom_point(data=car_theft, aes(x=fX, y=fY), 
             size=1)+
  labs(x="", y="",
  caption="出典:国土交通省国土数値情報,神奈川県警察オープンデータサイト")+
  ggtitle("自動車盗発生地点(2018年)")+
  theme_bw()+
  theme(plot.caption=element_text(hjust=0))

3 応用

3.1 ヒートマップ

点が密集している場所では自動車盗が多いことが予想されるが,同じ発生地点で自動車盗が複数回起きている場合は点が完全に重なり,地図上では複数回起きていることを確認できない.

  • これを回避する方法として,ポイントデータの周辺(領域)を自動車盗数に応じて色分けする方法が挙げられる.ここでは,geom_bin2d()stat_density_2d()を使い,色分けする.
    • geom_bin2d():長方形(タイル)の領域をつくり,その領域内の自動車盗数に応じて色を付ける.このような地図はヒートマップ(密度マップ)とよばれる.
ggplot()+
  geom_sf(data=Kanagawa_map, fill="dark gray")+
  geom_bin2d(data=car_theft, aes(x=fX, y=fY))+
  scale_fill_viridis_c(option="G",
                       direction=-1)+
  geom_sf(data=Kanagawa_map, fill="NA")+
    labs(fill="盗数", x="", y="",
  caption="出典:国土交通省国土数値情報,神奈川県警察オープンデータサイト")+
  ggtitle("自動車盗分布(2018年)")+
  coord_sf(datum=NA)+
  theme_dark()+
  theme(plot.caption=element_text(hjust=0))

カーネル密度推定

  • stat_density_2d():ポイントのない地点も含め,より連続的な領域を考え,色分けする.領域内の自動車盗数はカーネル密度推定によって求める.
    • fill=stat(level):色分けをレベル(この場合,自動車盗数)の違いに応じて行うように指示.
    • geom="polygon":領域を色分けするように指示.このオプションを指示しない場合は,同色の等高線が表示.
    • bins=7:階級(ビン)数の指定.このオプションを指示しないことも考えられるが,階級が多すぎると雑然とした印象.連続にならない箇所も出現.
  • theme_dark():背景を暗くするように指示.
ggplot()+
  geom_sf(data=Kanagawa_map, fill="dark gray")+
  stat_density_2d(data=car_theft,
                  aes(x=fX, y=fY,
                      fill=after_stat(level)),
                  geom="polygon", bins=7)+
  scale_fill_viridis_c(option="G",
                       direction=-1)+
  geom_sf(data=Kanagawa_map, fill="NA")+
  labs(fill="盗数", x="", y="",
  caption="出典:国土交通省国土数値情報,神奈川県警察オープンデータサイト")+
  ggtitle("カーネル密度推定による自動車盗分布(2018年)")+
  coord_sf(datum=NA)+
  theme_dark()+
  theme(plot.caption=element_text(hjust=0))

  • binsを指定しない場合.
ggplot()+
  geom_sf(data=Kanagawa_map, fill="dark gray")+
  stat_density_2d(data=car_theft,
                  aes(x=fX, y=fY,
                      fill=after_stat(level)),
                  geom="polygon")+
  scale_fill_viridis_c(option="G",
                       direction=-1)+
  geom_sf(data=Kanagawa_map, fill="NA")+
  labs(fill="盗数", x="", y="",
  caption="出典:国土交通省国土数値情報,神奈川県警察オープンデータサイト")+
  ggtitle("カーネル密度推定による自動車盗分布(2018年)")+
  coord_sf(datum=NA)+
  theme_dark()+
  theme(plot.caption=element_text(hjust=0))

自転車盗の発生地点とカーネル密度推定の可視化

平成30年発生の自転車盗は点の重っている地点が多く,密集もしている.

  • コードは繰り返しのため示さない.

自転車盗の分布(カーネル密度推定)は次のような地図になる.

  • 緯度経度付きのデータファイル名はbicycle_theftとした.
    • 階級(bins)のオプションは外して可視化.
ggplot()+
  geom_sf(data=Kanagawa_map, fill="dark gray")+
  stat_density_2d(data=bicycle_theft,
                  aes(x=fX, y=fY,
                      fill=after_stat(level)),
                  geom="polygon")+
  scale_fill_viridis_c(option="G",
                       direction=-1)+
  geom_sf(data=Kanagawa_map, fill="NA")+
  labs(fill="盗数", x="", y="",
  caption="出典:国土交通省国土数値情報,神奈川県警察オープンデータサイト")+
  ggtitle("カーネル密度推定による自転車盗分布(2018年)")+
  coord_sf(datum=NA)+
  theme_dark()+
  theme(plot.caption=element_text(hjust=0))

Rによる地理空間データの可視化