集めて共有!Snowflakeで全国犯罪発生情報をシェアするデータベースを構築する

さて、本日私が共有するのは全国版の犯罪発生情報です。
2020.10.22

こんにちは。データアナリティクス事業本部ソリューション部プリセールススペシャリストの兼本です。

弊社たまちゃんの奈良県内の犯罪発生情報を利用したエントリを読んで、なんで奈良限定なんだろうと思ったら、犯罪発生情報は各都道府県警察が管轄内のデータを個別に公開しているようです。

都道府県を跨いでデータを閲覧したい場合はそれぞれの都道府県からデータを集めて集約しないといけないので、これは少しもったいない気がします。

というわけで、各都道府県のデータを集めて集約し、それをSnowflakeのデータ共有の仕組み(Secure Data Sharing)を使って共有してみました。

公開サイトが都道府県ごとに違うのでデータを探すのが大変でしたが、以下は各都道府県の犯罪発生情報のダウンロードサイトもしくはページへのリンクです。(2020年10月20日時点での情報です。)

北海道・東北

都道府県コード 都道府県 2019 2018 備考
1 北海道
2 青森県
3 岩手県
4 宮城県
5 秋田県
6 山形県 ファイル名に県名のついてないものがあります。
7 福島県

関東

都道府県コード 都道府県 2019 2018 備考
8 茨城県
9 栃木県 サイト内検索で「犯罪発生情報」を検索します。
10 群馬県
11 埼玉県
12 千葉県 ファイル名が数字のみで識別できないので注意が必要です。
13 東京都
14 神奈川県

中部

都道府県コード 都道府県 2019 2018 備考
15 新潟県
16 富山県
17 石川県
17 福井県
19 山梨県
20 長野県
21 岐阜県
22 静岡県 テキストファイル(.txt)ファイルとしてダウンロードされます。
23 愛知県

関西

都道府県コード 都道府県 2019 2018 備考
24 三重県
25 滋賀県
26 京都府 ファイル名が数字のみで識別できないので注意が必要です。
27 大阪府
28 兵庫県
29 奈良県
30 和歌山県

中国・四国

都道府県コード 都道府県 2019 2018 備考
31 鳥取県
32 島根県
33 岡山県
34 広島県 ファイル名が数字のみで識別できないので注意が必要です。
35 山口県
36 徳島県
37 香川県
38 愛媛県
39 高知県

九州・沖縄

都道府県コード 都道府県 2019 2018 備考
40 福岡県
41 佐賀県
42 長崎県
43 熊本県
44 大分県
45 宮崎県
46 鹿児島県
47 沖縄県

47都道府県すべての犯罪発生件数データがオープンデータとしてクリエイティブコモンズ4.0ライセンスに基づいて公開されているとか、ひと昔前なら考えられなかったですね。

データの前処理とロード

ダウンロードしたCSVファイルを確認したところ、都道府県ごとにファイルの命名規則やデータフォーマットに若干の個性があったので、Alteryxで軽く前処理をしたうえで、Snowflakeにバルクロードします。

今回作成したワークフローはこちら。

あまり複雑な処理はしていませんが、ファイル内のデータフォーマットに若干の違いがあったので、データ読み込み部分はバッチマクロで対処しています。

セキュアデータ共有の設定

Snowflake上に作成したテーブルをデータシェアリングします。データシェアはデータベースごとに行いますが、共有する際に別のデータベース名を設定でき、公開するテーブルやビューも選択できるので、わざわざ共有のためだけに別のデータベースを構築する必要はありません。

なお、データ共有の処理を実行するには、ACCOUNTADMINロール(またはCREATE SHARES グローバル権限が付与されたロール)を使用する必要があります。

  • コンソールで共有ページを開き、「作成」ボタンを押下します。

  • 共有データベースの名称を入力し、元になるデータベースをリストから選択します。

  • 公開するテーブルとビューをリストから選択します。今回は「crime_case」という名称のテーブルをひとつだけ公開することとします。

  • 設定内容の確認をし、問題なければ次へ進みます。

  • ここでは、公開するデータに間違いがないかをプレビューで確認できます。

  • 最後にこのデータを公開する相手(コンシューマー)を指定します。この作業はスキップして後で実施することも可能です。

  • 今回は検証用に作成した別アカウントをコンシューマに設定して、このユーザにデータを共有します。なお、Data Sharingを行うにはそれぞれのアカウントが同じクラウドサービスかつ同じリージョンである必要があります。

  • データ共有の設定はこれで終了です。本当に数クリックで作業が完了してしまいます。

コンシューマとして設定できるのは、Snowflakeのライセンスを所有しているアカウントのみですが、リーダーアカウントを設定するとSnowflakeのライセンスを持っていないユーザに対してデータを共有することも可能です。

リーダーアカウントについては以下のエントリをご参照ください。

データコンシューマ(利用者)からの見え方

データの共有を受けたアカウントでSnowflakeにアクセスします。

  • ACCOUNTADMINロールでコンソールにアクセスして共有ページを開くと、プロバイダーから共有されたデータベースがリストされているので、利用したいデータベースを選択して「安全な共有からデータベースを作成」ボタンを押下します。

  • アカウント内でのデータベース名を入力し、あくっすを許可するロールを設定します。

  • これで共有されたデータを利用する準備ができました。

  • SQLワークブックからデータベースにアクセスし、無事にデータを取得することができました。

最後に

折角なので、同じくオープンデータとして公開されている日本の人口データと掛け合わせて、データプラットフォームのLookerで可視化をしてみました。

やはり犯罪発生件数は人口に比例して増加しておりますが、細かく見ていると、ひったくりが多い地域、自転車盗が多い地域など地域特性を見出すことができそうです。

SnowflakeのSecure Data Sharing機能はデータをコピーすることなくデータを共有することができるため、大量データを送受信する必要がありません。かつ、常に最新のデータをデータコンシューマに提供することが可能となるため、これからのデータ共有方法としてご検討いただければ幸いです。

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