【Tableau】日本の全市区町村をジオコーディングしたい

## 背景
### Tableauはジオコーディングに対応しているが…
日本の都道府県のジオコーディングはうまくやってくれますが、市区町村はところどころ認識不可となってしまいます。
どういった場所がうまくジオコーディングできていないか、検証していきます。

#### そもそもジオコーディングとは何ぞや？という方は[こちら](https://www.zenrin.co.jp/product/article/geocoding/index.html)を参考に

## 検証方法
### 今回の検証環境、検証使用データ
Tableau Desktop Public Edition 2024.1.0 (20241.24.0208.0337)
[全国地方公共団体コード | 総務省](https://www.soumu.go.jp/denshijiti/code.html)（令和6年1月1日更新）

:::note warn
以下の情報は2024年2月時点の情報です。今後のアップデートにより状況が変化する可能性がありますので、ご了承ください。
:::

市町村データシート（現在の団体）と区データ（政令指定都市）は、あらかじめユニオンしておきます。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/cf9e1f85-f1b4-dcdf-1cce-e3b77bc50adf.png">


### Tableauでのジオコーディング方法
1. 地理的役割を指定します。市区町村名は「市区町村」ではなく「郡」を指定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/ff10126d-a508-05d1-6f06-82a4ae5c62eb.png)

1. 都道府県レベルのデータ（≒市区町村名がNULLの行）をフィルターで除去します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/bb65b805-5324-1055-16b4-0a59bee9a850.png)


## 検証結果
### 1.市区町村名をそのままジオコーディングしてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/a5581821-37cb-0f26-8f1d-6d54f065b1d9.png)

**29市区町村**が歯抜けになっています。

#### 認識できなかった市区町村リスト
|認識できなかった理由|件数|市区町村名|設定値|
|:--|--:|:--|:--|
|政令指定都市|18|**名古屋市**（愛知県）、**北九州市**（福岡県）、**福岡市**（福岡県）、**浜松市**（静岡県）、**大阪市**（大阪府）、**相模原市**（神奈川県）、**川崎市**（神奈川県）、**千葉市**（千葉県）、**静岡市**（静岡県）、**神戸市**（兵庫県）、**新潟市**（新潟県）、**札幌市**（北海道）、**堺市**（大阪府）、**広島市**（広島県）、**熊本市**（熊本県）、**京都市**（京都府）、**岡山市**（岡山県）、**さいたま市**（埼玉県）|区名で読み込む必要あり（例：さいたま市中央区）|
|北方四島|5|**蘂取村**（北海道）、**留夜別村**（北海道）、**留別村**（北海道）、**色丹村**（北海道）、**紗那村**（北海道）|表示できない|
|旧字利用|1|**須恵町**（福岡県）|糟屋郡須**惠**町|
|行政区変更未反映|2|**浜松市中央区**（静岡県）、**浜松市浜名区**（静岡県）|再変更前の行政区で表示する必要あり|
|名称変更未反映|2|**丹波篠山市**（兵庫県）、**那珂川市**（福岡県）|篠山市、筑紫郡那珂川町|
|不明|1|**松前町**（愛媛県）|（※）伊予郡松前町|
* 浜松市は2024年1月1日に行政区の再編があり、天竜区以外の6区が2区に再編
* 丹波篠山市は2019年5月1日に、篠山市から市名変更
* 那珂川市は2018年10月1日に市制施行し、筑紫郡那珂川町から名称変更

### 2. 手動で設定する
自動で認識できなかった市区町村は手動で設定できます。
画面右下の「～ヶ所が不明」をクリックして「場所の編集…」に進んでから、各市区町村の一致する場所を選択していけばOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/2332259f-4305-c27e-ba9d-7dbd02de0b5b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/b4d80a86-ca76-d5ec-a63a-a9dd59fada09.png)

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/83b33fd9-6982-bcde-af3f-d5a222451450.png">



「ドロップダウン リストに一致しない場所のみ表示」にチェックを入れておけば、一致しなかった市区町村のみをリスト表示することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/f33ef943-c7ae-5ac9-f976-22d4dc402f3c.png)

#### （※）"松前町"について
北海道松前町（まつまえちょう）と愛媛県松前町（まさきちょう）は、なぜかデフォルトだとうまく判別してくれません。一致しなかった市区町村リストでどちらかの松前町を選択してしまうと、もう片方の松前町が表示されなくなってしまいます。

例えば、松前町を愛媛県の松前町に設定してしまうと、北海道の松前町が表示されなくなってしまいます。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/1c96958a-8aeb-3f62-1370-a74e098775f6.png">

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/c50fad36-b1c4-1bc6-0b3f-a8fef72160dd.png)


そのため、うまく判別させるために何かしらの対策が必要です。
一例ですが、市区町村名に郡名を付与するという方法があります。

```:市区町村名（一部変換）
IIF( [市区町村名 （漢字）]="松前町" and [都道府県名 （漢字）]="愛媛県"
    ,"伊予郡松前町", [市区町村名 （漢字）] )
```

### 3. 政令指定都市（市レベル行）をフィルターする
団体コードを活用し、以下の計算フィールドでフィルターを作成します。

```:政令指定都市フィルター
// 団体コードの3~5桁目が100~199が政令指定都市と行政区。
// 基本的に政令指定都市の3~5桁目は100になるが、
// 同じ都府県に2つ以上の政令指定都市がある場合は、
// 別途考慮する必要あり。

MID([団体コード],3,3)="100"
or MID([団体コード],3,3)="130"
or (MID([団体コード],3,3)="140"
and NOT [団体コード]="221406") //浜松市天竜区
or MID([団体コード],3,3)="150"
```

#### 対策結果
以上の対策をした結果、浜松市中央区と浜松市浜名区、北方四島を除き、ジオコーディングができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/c9b92497-d70f-8034-d3e8-aa4aa239d16b.png)

### 最後に
いつかアップデートされ、手間をかけずに全市区町村がジオコーディングされるようになってくれることを祈っています。

### （余談）「都道府県名+市区町村名」でジオコーディングしてみたらどうなるのか
以下の計算フィールドで、都道府県名+市区町村名（例：石川県金沢市）のフィールドを作成します。

```:都道府県名+市区町村名
IFNULL([都道府県名 （漢字）],"") + IFNULL([市区町村名 （漢字）],"")
```

その計算フィールドをマークに入れて表示してみると……

なぜか東京都港区が大阪市港区と判定されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898507/b01db4e1-61f3-c294-7647-82616b11d8b8.png)

理由は分かりません。
とりあえず、都道府県名と市区町村名を繋げて読み込んではいけないようです。