都道府県別の隣接行列の作成 （ほぼGPT-4が仕事する）

## 都道府県別の隣接行列の作成
字空間モデルなどを日本で当てはめる際に、県単位で取得されているデータなどに対しては、県ごとの隣接行列が必要となります。ここでは、それに使用するための隣接行列を作成しました。

## データの取得
以下のサイトに、都道府県の隣接関係が記録されているので、これを参考にします。
これを隣接する都道府県に1, 隣接しない都道府県に0を立てた行列を作成します

https://uub.jp/prf/rinsetsu.html

## Advanced data analysis (旧Code Interpreter）
まずこれをCode interpreterに投げ込み、Pythonが読み込める形に整形してもらいましょう。HPをドラッグして、コピペします。HTMLで読み込ませると、いらない情報までついてきて非常に厄介なので、このほうがおすすめです。少し形がおかしいところは手動で変形しましょう。

あとは以下のようにして、コードを使って隣接行列に変形します（Python, Rの両方を用意しました。好きなほうを使ってください）。

## Pythonで実行するだけ
```Python:adjacency_matrix.py
# 都道府県と隣接している都道府県のデータを定義します。
prefectures_data = {
    "北海道": ["青森県"],
    "青森県": ["北海道", "岩手県", "秋田県"],
    "岩手県": ["青森県", "宮城県", "秋田県"],
    "宮城県": ["岩手県", "秋田県", "山形県", "福島県"],
    "秋田県": ["青森県", "岩手県", "宮城県", "山形県"],
    "山形県": ["宮城県", "秋田県", "福島県", "新潟県"],
    "福島県": ["宮城県", "山形県", "茨城県", "栃木県", "群馬県", "新潟県"],
    "茨城県": ["福島県", "栃木県", "埼玉県", "千葉県"],
    "栃木県": ["福島県", "茨城県", "群馬県", "埼玉県"],
    "群馬県": ["福島県", "栃木県", "埼玉県", "新潟県", "長野県"],
    "埼玉県": ["茨城県", "栃木県", "群馬県", "千葉県", "東京都", "長野県", "山梨県"],
    "千葉県": ["茨城県", "埼玉県", "東京都", "神奈川県"],
    "東京都": ["埼玉県", "千葉県", "神奈川県", "山梨県"],
    "神奈川県": ["千葉県", "東京都", "山梨県", "静岡県"],
    "新潟県": ["山形県", "福島県", "群馬県", "富山県", "長野県"],
    "富山県": ["新潟県", "石川県", "長野県", "岐阜県"],
    "石川県": ["富山県", "福井県", "岐阜県"],
    "福井県": ["石川県", "岐阜県", "滋賀県", "京都府"],
    "山梨県": ["埼玉県", "東京都", "神奈川県", "長野県", "静岡県"],
    "長野県": ["群馬県", "埼玉県", "新潟県", "富山県", "山梨県", "岐阜県", "静岡県", "愛知県"],
    "岐阜県": ["富山県", "石川県", "福井県", "長野県", "愛知県", "三重県", "滋賀県"],
    "静岡県": ["神奈川県", "山梨県", "長野県", "愛知県"],
    "愛知県": ["長野県", "岐阜県", "静岡県", "三重県"],
    "三重県": ["岐阜県", "愛知県", "滋賀県", "京都府", "奈良県", "和歌山県"],
    "滋賀県": ["福井県", "岐阜県", "三重県", "京都府"],
    "京都府": ["福井県", "三重県", "滋賀県", "大阪府", "兵庫県", "奈良県"],
    "大阪府": ["京都府", "兵庫県", "奈良県", "和歌山県"],
    "兵庫県": ["京都府", "大阪府", "鳥取県", "岡山県", "徳島県"],
    "奈良県": ["三重県", "京都府", "大阪府", "和歌山県"],
    "和歌山県": ["三重県", "大阪府", "奈良県"],
    "鳥取県": ["兵庫県", "島根県", "岡山県", "広島県"],
    "島根県": ["鳥取県", "広島県", "山口県"],
    "岡山県": ["兵庫県", "鳥取県", "広島県", "香川県"],
    "広島県": ["鳥取県", "島根県", "岡山県", "山口県", "愛媛県"],
    "山口県": ["島根県", "広島県", "福岡県"],
    "徳島県": ["兵庫県", "香川県", "愛媛県", "高知県"],
    "香川県": ["岡山県", "徳島県", "愛媛県"],
    "愛媛県": ["広島県", "徳島県", "香川県", "高知県"],
    "高知県": ["徳島県", "愛媛県"],
    "福岡県": ["山口県", "佐賀県", "熊本県", "大分県"],
    "佐賀県": ["福岡県", "長崎県"],
    "長崎県": ["佐賀県"],
    "熊本県": ["福岡県", "大分県", "宮崎県", "鹿児島県"],
    "大分県": ["福岡県", "熊本県", "宮崎県"],
    "宮崎県": ["熊本県", "大分県", "鹿児島県"],
    "鹿児島県": ["熊本県", "宮崎県"],
    "沖縄県": [],  # 沖縄県は他の都道府県と隣接していない
}

# Creating a list of prefectures based on the order provided in the data (dictionary insertion order)
prefectures_list_ordered = list(prefectures_data.keys())

# Initializing an adjacency matrix with zeros, based on the new order
adjacency_matrix_ordered = np.zeros((len(prefectures_list_ordered), len(prefectures_list_ordered)), dtype=int)

# Filling the adjacency matrix based on the provided order
for i, prefecture1 in enumerate(prefectures_list_ordered):
    for j, prefecture2 in enumerate(prefectures_list_ordered):
        if prefecture2 in prefectures_data[prefecture1]:
            adjacency_matrix_ordered[i, j] = 1  # There is a connection

prefectures_list_ordered, adjacency_matrix_ordered.tolist()  # Returning the list of prefectures and the generated adjacency matrix

```

おわり。

## Rのコードも欲しいですよね。わかります。

```R:adjacency_matrix.R

# 都道府県と隣接している都道府県のデータを定義します。
prefectures_data = list(
  "北海道"=c("青森県"),
  "青森県"=c("北海道", "岩手県", "秋田県"),
  "岩手県"=c("青森県", "宮城県", "秋田県"),
  "宮城県"=c("岩手県", "秋田県", "山形県", "福島県"),
  "秋田県"=c("青森県", "岩手県", "宮城県", "山形県"),
  "山形県"=c("宮城県", "秋田県", "福島県", "新潟県"),
  "福島県"=c("宮城県", "山形県", "茨城県", "栃木県", "群馬県", "新潟県"),
  "茨城県"=c("福島県", "栃木県", "埼玉県", "千葉県"),
  "栃木県"=c("福島県", "茨城県", "群馬県", "埼玉県"),
  "群馬県"=c("福島県", "栃木県", "埼玉県", "新潟県", "長野県"),
  "埼玉県"=c("茨城県", "栃木県", "群馬県", "千葉県", "東京都", "長野県", "山梨県"),
  "千葉県"=c("茨城県", "埼玉県", "東京都", "神奈川県"),
  "東京都"=c("埼玉県", "千葉県", "神奈川県", "山梨県"),
  "神奈川県"=c("千葉県", "東京都", "山梨県", "静岡県"),
  "新潟県"=c("山形県", "福島県", "群馬県", "富山県", "長野県"),
  "富山県"=c("新潟県", "石川県", "長野県", "岐阜県"),
  "石川県"=c("富山県", "福井県", "岐阜県"),
  "福井県"=c("石川県", "岐阜県", "滋賀県", "京都府"),
  "山梨県"=c("埼玉県", "東京都", "神奈川県", "長野県", "静岡県"),
  "長野県"=c("群馬県", "埼玉県", "新潟県", "富山県", "山梨県", "岐阜県", "静岡県", "愛知県"),
  "岐阜県"=c("富山県", "石川県", "福井県", "長野県", "愛知県", "三重県", "滋賀県"),
  "静岡県"=c("神奈川県", "山梨県", "長野県", "愛知県"),
  "愛知県"=c("長野県", "岐阜県", "静岡県", "三重県"),
  "三重県"=c("岐阜県", "愛知県", "滋賀県", "京都府", "奈良県", "和歌山県"),
  "滋賀県"=c("福井県", "岐阜県", "三重県", "京都府"),
  "京都府"=c("福井県", "三重県", "滋賀県", "大阪府", "兵庫県", "奈良県"),
  "大阪府"=c("京都府", "兵庫県", "奈良県", "和歌山県"),
  "兵庫県"=c("京都府", "大阪府", "鳥取県", "岡山県", "徳島県"),
  "奈良県"=c("三重県", "京都府", "大阪府", "和歌山県"),
  "和歌山県"=c("三重県", "大阪府", "奈良県"),
  "鳥取県"=c("兵庫県", "島根県", "岡山県", "広島県"),
  "島根県"=c("鳥取県", "広島県", "山口県"),
  "岡山県"=c("兵庫県", "鳥取県", "広島県", "香川県"),
  "広島県"=c("鳥取県", "島根県", "岡山県", "山口県", "愛媛県"),
  "山口県"=c("島根県", "広島県", "福岡県"),
  "徳島県"=c("兵庫県", "香川県", "愛媛県", "高知県"),
  "香川県"=c("岡山県", "徳島県", "愛媛県"),
  "愛媛県"=c("広島県", "徳島県", "香川県", "高知県"),
  "高知県"=c("徳島県", "愛媛県"),
  "福岡県"=c("山口県", "佐賀県", "熊本県", "大分県"),
  "佐賀県"=c("福岡県", "長崎県"),
  "長崎県"=c("佐賀県"),
  "熊本県"=c("福岡県", "大分県", "宮崎県", "鹿児島県"),
  "大分県"=c("福岡県", "熊本県", "宮崎県"),
  "宮崎県"=c("熊本県", "大分県", "鹿児島県"),
  "鹿児島県"=c("熊本県", "宮崎県"),
  "沖縄県"= character(0)   # 沖縄県は他の都道府県と隣接していない
)


# 都道府県のリストを作成します。
prefectures_list_ordered <- names(prefectures_data)

# 接隣行列を初期化します。
adjacency_matrix_ordered <- matrix(0, nrow=length(prefectures_list_ordered), ncol=length(prefectures_list_ordered))

# 接隣行列を埋めます。
for (i in 1:length(prefectures_list_ordered)) {
  for (j in 1:length(prefectures_list_ordered)) {
    if (prefectures_list_ordered[j] %in% prefectures_data[[i]]) {
      adjacency_matrix_ordered[i, j] <- 1  # 接続がある
    }
  }
}

# 都道府県のリストと生成された接隣行列を返します。
list(prefectures_list_ordered, adjacency_matrix_ordered)  
```

## まとめ
隣接行列が生成されました。
あとは、この行列でこことここのつながりはないに等しいなど1つ1つ条件に合うように変更すれば使い物にはなるかなと思います。

結論ありがとう！ChatGPT！
こういうめんどくさい作業を丸投げできるのはマジで神です。