「ふっけい安心マップ」が公開された。 これは,福岡県警察が配信した「ふっけい安心メール」をもとに,発生場所周辺を地図で表示するものだ。
地図表示にはGoogle Mapのマイマップ機能を利用している。 また,地図で表示される場所は,発生場所をピンポイントで表示するものではなく, メール配信された住所(市区町村もしくは町丁字レベル)の代表地点にマークが表示される。
Google Mapのマイマップなので,上記サイトからKMLをダウンロードすることができる。 ~/Dataフォルダに,それぞれH27.kml,H28.kmlとして保存した。
library(xml2)
kml <- read_xml("~/Data/H27.kml")
type <- xml_text(xml_find_all(kml, ".//d1:Data[@name='罪種']"))
station <- xml_text(xml_find_all(kml, ".//d1:Data[@name='配信警察署']"))
prefecture <- xml_text(xml_find_all(kml, ".//d1:Data[@name='県']"))
address <- xml_text(xml_find_all(kml, ".//d1:Data[@name='住所']"))
df1 <- data.frame(type=type, station=station, prefecture=prefecture, address=address, year="2015")
kml <- read_xml("~/Data/H28.kml")
type <- xml_text(xml_find_all(kml, ".//d1:Data[@name='罪種']"))
station <- xml_text(xml_find_all(kml, ".//d1:Data[@name='配信警察署']"))
prefecture <- xml_text(xml_find_all(kml, ".//d1:Data[@name='県']"))
address <- xml_text(xml_find_all(kml, ".//d1:Data[@name='住所']"))
df2 <- data.frame(type=type, station=station, prefecture=prefecture, address=address, year="2016")
dat <- rbind(df1, df2)
rm(list=c("df1", "df2"))
head(dat)
## type station prefecture address year
## 1 公然わいせつ 筑紫野署 福岡県 筑紫野市桜台 2015
## 2 公然わいせつ 小郡署 福岡県 小郡市寺福童 2015
## 3 公然わいせつ 八幡西署 福岡県 八幡西区八枝四丁目 2015
## 4 公然わいせつ 粕屋署 福岡県 古賀市舞の里五丁目 2015
## 5 公然わいせつ 小倉北署 福岡県 小倉北区馬借三丁目 2015
## 6 公然わいせつ 小倉北署 福岡県 小倉北区香春口 2015
library(stringr)
ktq <- dat[str_detect(dat$address, "北九州市|小倉北区|小倉南区|門司区|戸畑区|若松区|八幡東区|八幡西区"),]
write.csv(ktq, "ktq.csv", row.names=FALSE, fileEncoding="cp932")
head(ktq)
## type station prefecture address year
## 3 公然わいせつ 八幡西署 福岡県 八幡西区八枝四丁目 2015
## 5 公然わいせつ 小倉北署 福岡県 小倉北区馬借三丁目 2015
## 6 公然わいせつ 小倉北署 福岡県 小倉北区香春口 2015
## 13 公然わいせつ 小倉北署 福岡県 小倉北区中津口 2015
## 14 公然わいせつ 小倉南署 福岡県 小倉南区田原新町二丁目 2015
## 23 公然わいせつ 小倉南署 福岡県 小倉南区上曽根新町 2015
ここでは,上で作成したktq.csvに対して,東京大学空間情報科学研究センターの「CSVアドレスマッチングサービス」を利用して住所の緯度経度を付与した。
得られたcsvファイルを,ktq_geo.csvとしてワーキングディレクトリに保存した。
ktq <- read.csv("ktq_geo.csv", fileEncoding="cp932")
library(leaflet)
map <- leaflet(ktq) %>% addTiles() %>% addCircleMarkers(~fX, ~fY, popup=~address, stroke=FALSE, radius=15, fillOpacity=0.4, clusterOptions=markerClusterOptions())
map