経産省発のnpmモジュールをAlteryxから実行して住所の正規化とジオコーディングを試す

2020.06.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、データアナリティクス事業本部プロダクト営業部プリセールススペシャリストの兼本です。

5月末のある日、弊社社内Slackで以下の記事が話題になりました。

記事の内容としては、経済産業省が推進する IMI(Infrastructure for Multilayer Interoperability:情報共有基盤) の一環として国内住所の正規化を実行するツールが公開され、実際に利用してみたというとても興味深い内容です。

さて、Alteryxを使えば、緯度経度から簡単に空間ポイントやポリゴンを作成して空間分析を行えます。しかしながら、日本の住所に対する正規化やジオコーディングに関しては、外部のサービスを利用するか独自のワークフローを作成する必要がありました。

もしかして、このツールを使えば住所の正規化が簡単になるのでは?ということで実際にやってみました。

なお、IMIでは今回ご紹介する住所変換コンポーネント以外にもさまざまなツールが公開されています。

  • 住所変換コンポーネント
  • 法人種別名の抽出コンポーネント
  • 全角-半角統一コンポーネント
  • データバリデーションコンポーネント
  • 電話番号正規化パッケージ一式
  • 日付型正規化パッケージ一式
  • 産業分類候補生成パッケージ一式

ご興味のある方がいらっしゃいましたら以下サイトをご確認ください。

IMIコンポーネントのインストール

住所変換コンポーネントは、Node.jsのパッケージ管理ツールであるnpmのパッケージとして公開されていますので、利用するにあたっては事前にNode.jsをインストールする必要があります。 というわけで、Node.jsの公式サイトでインストーラをダウンロードしてインストールします。

インストールが完了したら、住所変換コンポーネントのパッケージアーカイブimi-enrichment-address-2.0.0.tgzをダウンロードして、コマンドラインから以下のコマンドを実行します。 ここは冒頭でご紹介したGeoloniaさんのブログに記載された方法をそのまま利用させていただきました。Geoloniaさん、ありがとうございます。

>curl https://info.gbiz.go.jp/tools/imi_tools/resource/imi-enrichment-address/imi-enrichment-address-2.0.0.tgz -o imi-enrichment-address-2.0.0.tgz
>tar -xzvf imi-enrichment-address-2.0.0.tgz
>cd package
>npm install

パッケージをインストールしたら、以下のコマンドを実行してNode.js のサーバを起動します。

>npm start

Webブラウザを起動して、http:\\localhost:8080に接続し、以下のような画面が表示されればセットアップは完了です。

ブラウザ上で住所の正規化を試すこともできますが、このツールはWeb APIも用意されているため、AlteryxからAPIをコールします。

AlteryxからWeb APIを呼び出す

AlteryxからWeb APIを呼び出すには、ダウンロードツールを使います。

まずは習作としてシンプルなワークフローを作成してみます。

  • テキストインプットツールでは、Web APIのURLとjsonデータを入力しています。弊社秋葉原オフィスの住所を入力してみました。
{
"@type":"場所型",
"住所":{
  "@type":"住所型",
  "表記":"東京都千代田区神田佐久間町1丁目11"
  }
}
  • ダウンロードツールでは、Node.jsサーバに対して、jsonデータをPOSTします。

実行すると以下のようなjsonデータを返してくれます。このケースはきれいに正規化されていますね。すごい!

{
  "@type": "場所型",
  "住所": {
    "@type": "住所型",
    "表記": "東京都千代田区神田佐久間町1丁目11",
    "都道府県": "東京都",
    "都道府県コード": "http://data.e-stat.go.jp/lod/sac/C13000",
    "市区町村": "千代田区",
    "市区町村コード": "http://data.e-stat.go.jp/lod/sac/C13101",
    "町名": "神田佐久間町",
    "丁目": "1",
    "番地": "11"
  },
  "地理座標": {
    "@type": "座標型",
    "緯度": "35.697979",
    "経度": "139.774222"
  }
}

返されたデータには緯度経度もありましたので、ポイント作成ツールを使って空間ポイントを作成してみました。 が、Geoloniaさんのブログにもある通り、街区レベル位置参照情報までしか返してもらえず、実際のオフィスの位置からは微妙にずれてしまいました。残念……。

マクロを使用して複数の住所データを渡す

Web APIは、1件づつデータを渡す前提の作りになっているようで、複数レコードをまとめて渡すとエラーになってしまいます。

注記) 後で気が付いたのですが、APIを短サイクルで連続呼び出ししたことでツールがロック制御に失敗してエラーになるようでした。 スロットルツールを使用してAPI呼び出しを30回/分程度に抑えることで、マクロを使用しなくてもエラーなく処理できることを確認できましたが、住所データの渡し方によっては、APIから返されるjsonデータの構造が変わり後続処理が失敗するため、マクロを使用してスキーマの変更に対処することをお奨めします。

このため、先ほど作成したワークフローを元にしたバッチマクロを作成して、複数レコードのデータを1レコードずつ処理するようにします。

続いて、APIに渡す住所データを用意します。それなりの件数があり、適度に揺らいでいるデータが欲しいので、黄色と赤のロゴで有名な某焼き鳥チェーン店の店舗一覧をWebスクレイピングしました。

全国に600店舗以上あるのですね。 取得した住所データを先ほど作成したマクロに渡します。

APIから返されたデータを一覧にしたのが、こちらです。弊社オフィスの近くにも何店舗かあります。

ただし、いくつかの住所に関しては一致する住所がないというエラーになってしまいました。

まとめ

いかがでしたでしょうか。今回は経産省発のnpmモジュールをAlteryxから実行して住所の正規化とジオコーディングを試してみました。 住所をはじめ、正規化に手間のかかるデータはいろいろあります。これらのデータを簡単に正規化できる仕組みやツールがオープンソースで公開されるというのは、大変ありがたいですね。

以上、最後まで読んでいただきありがとうございました。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400