最も星が多い市区町村を調べた

# はじめに
もうすぐ七夕（決してこの記事の投稿が7月に間に合わなかったわけではなく、北海道では8月に七夕をやる地域も多いのです）。
普段、星に興味がなくてもこの日ぐらいは天の川が見えないか、夜空を見上げる人も少なくないのではないでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/ea434318-a405-056f-c3ca-9aa5a2fa1354.png)


でもせっかく星を見るなら少しでも多く見たいものですよね。
そこで今回は、日本の中で最も星が多い場所を調べてみました。

といっても、ここでは「夜空に浮かぶ星」ではなく住所の中の「星」を数えてみようと思います。

どういうことかというと、日本の住所の中で「星」という文字を多く含む住所が最も多い市町村はどこか。を調べてみようということです。
例えば、北海道札幌市手稲区には「手稲星置」という住所があり、これによって札幌市手稲区には「星」が1つあるとします。
(札幌市手稲区の町名の一部)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/fb0e2a30-0da9-d83a-64a3-fabf9abed6a6.png)

このように町名までの住所で「星」がつく住所の数を市区町村単位で集計し、どの市町村が最も星を含む住所が多いのか。を調べてみたいと思います。

# 使用したデータ
全国の丁目まで含めた住所はe-statの統計データを使用しました。
データの説明と全国分小地域（町丁・字等）データの取得については以下を参照ください。

https://qiita.com/nbayashi/items/46319da02614439d69ca


フォルダ内には各都道府県ごとにファイルがある状態。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/001248ba-6931-a462-6286-f021496689d6.png)

各ファイルの中身はこのようになっており、CITYNAMEに市町村名、NAMEに町丁・字名が入っているので、これらのカラムを使用する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/5652c4fd-04ca-64e3-4ef2-fa1ab06f63f7.png)



今回は取得した全国分の小地域（町丁・字等）データのリストをRで読み込んで処理するところから書きます。


# 処理の流れ
- 都道府県ごとになっている町名csvデータを一つに結合する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/e982e6b6-5d96-ac51-680c-e0a3143a705c.png)


- 不要なデータをフィルタリングして削除する
s-statの統計データのリストは、HYOSYO列という地域階層レベルを示すカラムがあり、1~4の値が入力されている。

> 1：市区町村、2：大字・町名（異なる字・丁目の地域を含まないもの）、3：大字・町名が同じ字・丁目の合計、4：字・丁目を表す。
 参考：https://ton2net.com/census_2020/#google_vignette


今回はHYOSYOカラムが1と3になっているものは対象外にしたいので削除する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/690e9ba1-5ecc-49b8-6edb-59c64ed88173.png)

- 町字の表記から「星」という文字の数がいくつ含まれているかカウントする
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/a6c19f97-b9e1-fa2a-6a0c-584fdf4873d4.png)
上の図では、「札幌市手稲区」に「手稲星置」という町名に星が1つ含まれているので、カウント数は１となる


- カウントされた星の数を市区町村単位で集計してその順位を発表する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/64ce5b08-38c8-f20b-6e3e-f6a01ab67514.png)


# 実際の処理
## 必要ライブラリの読み込み
```R
library(dplyr)
library(readr)
library(stringr)
```
## 都道府県ごとになっている町名csvデータを一つに結合する
フォルダ内の全てのcsvファイルを取得し、1つずつ読み込んで下に繋げていく処理をする。

フォルダ内のデータのリストを取得するには`list.files`を使用する。今回のファイルの拡張子はtxtなので`pattern="txt"`とする

取得したtxtファイルの中身はカンマ区切りなので`read.csv`で順番に読み込む。

その上で、HYOSYOの列が２もしくは4のみのデータだけにフィルタリングします。


読み込んだcsvを`rbind`でどんどん連結させていく。

一連の処理をつなげるとこうなる。
```R
# CSVフォルダ内になる全ての.txtファイルを取得
file_list <- list.files("csv", pattern="txt")


for (i in 1:length(file_list)){
  data <- read.csv(paste("csv/",file_list[i],sep=""),fileEncoding="CP932")

  # HYOSYOが２か4のもののみに絞る
  data2 <- filter(data, HYOSYO == 2 | HYOSYO == 4)

  #1つ目のファイルならそのままそれをmerged_dataに、２目以降のファイルならmerged_dataに結合
  if (i == 1){
    merged_data <- data2
  }else{
    merged_data <- rbind(merged_data,data2)
  }
}


```

## 町字の表記から「星」という文字の数がいくつ含まれているかカウントする


指定した文字列に特定の文字が含まれている回数をカウントするのはstringrパッケージの`str_count`を使用する。
使い方は`str_count(文字列, 検索キーワード)`。

```R
# 検索するキーワードと対象のカラム名を指定
keyword <- "星"
searchColumn <- "NAME"

# 対象のカラムの値の文字列内のキーワードの出現回数を調べて、wordCountカラムに入力
merged_data$wordCount <- str_count(merged_data[,searchColumn],keyword)


# キーワードの出現回数が1以上のデータのみにフィルタリング
filtered_data <- filter(merged_data,wordCount >= 1)
```

結果
キーワードの出現回数の多い順で見るとこのようになる。
中には「星」が複数回出現する町名もあることがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/7e32f1e7-3274-428c-2054-65ceba6b11df.png)



## 市区町村単位で「星の数」を集計する
次に市区町村の名前（今回のデータでいうCITYNAMEのカラム値）でwordCountの数を集計したい。
特定のカラムの値でグループ化して他の列の数値の集計をとるにはdplyerパッケージの`group_by`した上で`summarise`することで可能です。
今回は市区町村名が入っているCITYNAMEでグループ化してwordCountの値を集計するので以下のようになります。

```R
# dissolve by CITYNAME
dissolved_data<- filtered_data %>%
  dplyr::group_by(CITYNAME) %>%
  dplyr::summarise(kyword.Total = sum(wordCount))

```

# 結果発表
最も「星」が多くみられる市区町村は・・・。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/cbf30bda-2b36-eaf2-c354-d9aba9ef3ddf.png)


交野市（大阪府）ということがわかりました。




交野市内の「星」がつく町名の一覧を取得

```R
filter(filtered_data,CITYNAME =="交野市")$NAME
```

```

[1] "南星台一丁目"   "南星台二丁目"   "南星台三丁目"   "南星台四丁目"  
 [5] "南星台五丁目"   "大字星田"       "星田山手一丁目" "星田山手二丁目"
 [9] "星田山手三丁目" "星田山手四丁目" "星田山手五丁目" "星田一丁目"    
[13] "星田二丁目"     "星田三丁目"     "星田四丁目"     "星田五丁目"    
[17] "星田六丁目"     "星田七丁目"     "星田八丁目"     "星田九丁目"    
[21] "星田北一丁目"   "星田北二丁目"   "星田北三丁目"   "星田北四丁目"  
[25] "星田北五丁目"   "星田北六丁目"   "星田北七丁目"   "星田北八丁目"  
[29] "星田北九丁目"   "星田西一丁目"   "星田西二丁目"   "星田西三丁目"  
[33] "星田西四丁目"   "星田西五丁目"  

```

「南星台」や「星田山手」が一丁目〜五丁目、「星田」や「星田北」が一丁目〜九丁目まであったりと、「星」がつく○丁目が多く存在することが勝因であると考える。



# 星マップ

いきなり「結果は交野市でした」と言われても、「交野市ってどこやねん」って方のために、「星」がつく住所マップを作成しました。

https://nbayashi.github.io/star_map/


星がつく住所の多さでクラスタリングして見せています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/039e5dfb-f2c5-ef35-b3ce-f538dbc8de7e.png)

右のメニューには星の多さ順に市町村が並べられていて、市町村名をクリックするとその場所に飛んでいき、星がつく住所の地区を見ることができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/f5ea6f81-454d-d30d-f767-1960c52cae6e.png)