外部データをrとleafletでメッシュの地図にプロットする

こんにちは。今回は私が前回leafletで困ったことについてまとめようと思います！
...本題に入ると、メッシュで地図にleafletを使って可視化することについて書いていきます。
##使用環境
r version 3.6.1
rstudio Version 1.2.1335

#使用するデータ
まず緯度経度のデータの場合、メッシュの状態（今回は500ｍメッシュ）変形してください。
今回は[e-stat](https://www.e-stat.go.jp/)の統計データを使います。
こちらの地図で見る統計(統計GIS)にはすでにメッシュ形式でデータが用意されています。
今回は事業所・企業統計調査の500ｍメッシュ（4次メッシュ）の2006年の東京都（M5339）のデータを使います。

```
library(dplyr)
library(rgdal)
library(leaflet)
df<-read.csv("tblT000389H5339.txt",skip = 1)　　　　　　#データ読み込み
colnames(df)<-c("KEY_CODE","事業所数","従業者数")　　　　#列名を変える
> head(df)
   KEY_CODE 事業所数 従業者数
1 533900043        1        0
2 533900051        2       14
3 533900053        3       27
4 533900071        1       77
5 533900073        1        5
6 533900074        1        2
```
#shpファイルの読み込み
今度は[e-stat](https://www.e-stat.go.jp/)から境界データをダウンロードします。
地図で見る統計(統計GIS)で境界データの4次メッシュ（500ｍメッシュ）を選択し、世界測地系緯度経度・Shapefileを選び、M5339をダウンロードしてください。
データをダウンロードするとMESH05339.shx、MESH05339.shp、MESH05339.prj、MESH05339.dbfの四つのファイルがダウンロードされているはずです。
そしてかならずこの四つのファイルを**すべて同じ作業ファイルに**移してください！
この四つすべてないとデータの読み込みができないので注意してください！
そしてreadOGRで読み込みをし、sp::mergeでデータ結合をしてください。

```
#データ読み込み
shape <- readOGR("MESH05339.shp",stringsAsFactors = FALSE, encoding = "UTF-8")  

#データ結合
shape2<-sp::merge(shape, df2, by="KEY_CODE", all=F,duplicateGeoms = TRUE)
```

#leafletで地図にプロット
##色の設定
プロットしたいデータが連続した数値データの場合、colorNumeric()を使います。
補足：カテゴリデータの場合はcolorFactor()を使います。


```
#色の設定
pal <- colorNumeric("Blues", domain = shape2@data$事業所数, reverse=F)

# 地図にプロット
shape2 %>% 
  leaflet() %>% 
  # addProviderTiles() : 背景のタイルを指定
  addProviderTiles(providers$CartoDB.Positron) %>%
  setView(lat = 35.66, lng = 139.76, zoom = 10)%>%
  # addPolygons() : 塗り分け地図の描画
  addPolygons(fillOpacity = 0.5,
              weight=1,
              color = "#666",
              fillColor = ~pal(shape2@data$事業所数),  #ここ変える
              
  ) %>% 
  # addLegend() : 凡例の設定
  addLegend(position='bottomright',  pal = pal, values = ~事業所数,title = "事業所数")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/443845/69aaa6da-1acc-cc3d-3129-c4f4d7a2b4ac.png)
プロットしてみるとあまりうまくプロットできませんでした。
実際にデータを見てみましょう。~~（普通は最初にデータ見るとは思いますが・・・）~~


```
> summary(df)
    KEY_CODE            事業所数          従業者数      
 Min.   :533900043   Min.   :   1.00   Min.   :    0.0  
 1st Qu.:533924076   1st Qu.:   9.00   1st Qu.:   79.0  
 Median :533944624   Median :  29.00   Median :  283.0  
 Mean   :533942295   Mean   :  71.96   Mean   :  867.3  
 3rd Qu.:533962984   3rd Qu.:  71.00   3rd Qu.:  748.0  
 Max.   :533977991   Max.   :4015.00   Max.   :75698.0  

```
やっぱり最大値が以上に高いですね。
色の設定を変えてみましょう。

```
#カテゴリの設定
df2<-df%>%
  dplyr::mutate(flag=ifelse(事業所数<29,0,ifelse(事業所数>=29&事業所数<71,1,ifelse(事業所数>=71&事業所数<500,2,3))))
#データ結合
shape2<-sp::merge(shape, df2, by="KEY_CODE", all=F,duplicateGeoms = TRUE)
#色の設定（本当はもう一色書きますがちょうどいい色が見つからなかったのでこうしました。）
pal <- colorFactor(palette=c("white","skyblue","blue"),shape2@data$flag)

# 地図にプロット
shape2 %>% 
  leaflet() %>% 
  # addProviderTiles() : 背景のタイルを指定
  addProviderTiles(providers$CartoDB.Positron) %>%
  setView(lat = 35.66, lng = 139.76, zoom = 10)%>%
  # addPolygons() : 塗り分け地図の描画
  addPolygons(fillOpacity = 0.5,
              weight=1,
              color = "#666",
              fillColor = ~pal(shape2@data$flag),  #ここ変える
              
  ) %>% 
  # addLegend() : 凡例の設定
  addLegend(position='bottomright',  pal = pal, values = ~flag,title = "事業所数")

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/443845/2ea9de07-4ef5-d9f8-009c-4e0e94bf7418.png)
今回は中央値と第三四分位と任意で500でカテゴリとして色の設定をしました。
先ほどよりはうまくできました。


もし、colorNumeric()でプロットする最大の値を変える方法や色をグラデーションにする方法を知っている方がいましたら、教えてもらえると幸いです。

##参考
[leafletではじめるRによる地図プロット](https://kazutan.github.io/kazutanR/leaflet_d.html)
[チョコレート狂地図leafletバージョン](https://notchained.hatenablog.com/entry/2015/11/01/111922)
こちらは英語のサイトですが大変参考になりました。
[leaflet for R](https://rstudio.github.io/leaflet/)