43
11

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

Last updated at Posted at 2024-08-07

はじめに

もうすぐ七夕(決してこの記事の投稿が7月に間に合わなかったわけではなく、北海道では8月に七夕をやる地域も多いのです)。
普段、星に興味がなくてもこの日ぐらいは天の川が見えないか、夜空を見上げる人も少なくないのではないでしょうか。
image.png

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

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

どういうことかというと、日本の住所の中で「星」という文字を多く含む住所が最も多い市町村はどこか。を調べてみようということです。
例えば、北海道札幌市手稲区には「手稲星置」という住所があり、これによって札幌市手稲区には「星」が1つあるとします。
(札幌市手稲区の町名の一部)
image.png

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

使用したデータ

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

フォルダ内には各都道府県ごとにファイルがある状態。
image.png

各ファイルの中身はこのようになっており、CITYNAMEに市町村名、NAMEに町丁・字名が入っているので、これらのカラムを使用する。
image.png

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

処理の流れ

  • 都道府県ごとになっている町名csvデータを一つに結合する
    image.png

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

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

今回はHYOSYOカラムが1と3になっているものは対象外にしたいので削除する。
image.png

  • 町字の表記から「星」という文字の数がいくつ含まれているかカウントする
    image.png
    上の図では、「札幌市手稲区」に「手稲星置」という町名に星が1つ含まれているので、カウント数は1となる

  • カウントされた星の数を市区町村単位で集計してその順位を発表する
    image.png

実際の処理

必要ライブラリの読み込み

library(dplyr)
library(readr)
library(stringr)

都道府県ごとになっている町名csvデータを一つに結合する

フォルダ内の全てのcsvファイルを取得し、1つずつ読み込んで下に繋げていく処理をする。

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

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

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

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

一連の処理をつなげるとこうなる。

# 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が2か4のもののみに絞る
  data2 <- filter(data, HYOSYO == 2 | HYOSYO == 4)

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


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

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

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

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


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

結果
キーワードの出現回数の多い順で見るとこのようになる。
中には「星」が複数回出現する町名もあることがわかる。
image.png

市区町村単位で「星の数」を集計する

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

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

結果発表

最も「星」が多くみられる市区町村は・・・。

image.png

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

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

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

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

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

星マップ

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

星がつく住所の多さでクラスタリングして見せています
image.png

右のメニューには星の多さ順に市町村が並べられていて、市町村名をクリックするとその場所に飛んでいき、星がつく住所の地区を見ることができます
image.png

43
11
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
11