Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2020.10-にゃーにゃーマップvol.4(Uber H3 Index)

w2or3w
October 30, 2020
280

2020.10-にゃーにゃーマップvol.4(Uber H3 Index)

w2or3w

October 30, 2020
Tweet

Transcript

  1. 自己紹介 2019年 6月~ 最初の2,3ヶ月 ぼんやり参加  ↓ 2019年 9月頃 何かやらねば事件 →

    2019年〜10, 11, 12月 1つ目の作品『Mosaic』 ダッシュで制作 &進捗報告at勉強会  ↓ みなぎってきてる (37才)
  2. 自己紹介 みなぎってきてる (37才)  ↓ 2020年 3〜4月 コロナ対策サイトに 関わったりしながら、、 → 2020年

    4〜5月 2つ目の作品 『にゃーにゃーマップ』制作  ↓ ますますみなぎる 38才 となるか!?
  3. 位置情報検索のサーバーレス化 • タイプ • タイトル • 電話番号 • 住所 •

    緯度経度 • h3index9 • h3index8 • h3index7 • : Local Secondary Index インポートするところ 『にゃーにゃーマップ』vol.4 店舗の位置 ↓
  4. 位置情報検索のサーバーレス化 セカンダリインデックス 1.グローバルセカンダリインデックス 2.ローカルセカンダリインデックス DynamoDB の キー と インデックス プライマリーキー

    1.パーティションキー 2.パーティションキー + ソートキー 『にゃーにゃーマップ』の キー と インデックス  プライマリーキー : タイプ + GUID (余談 : 昔は電話番号にしてたけど辞めた )  セカンダリインデックス : タイプ + h3index9 : タイプ + h3index8 : タイプ + h3index7 この中にある(=h3index) 複数店舗情報をSelect !! ↑ タイプ (※テーブル作成時にしか作れない。 ) (※プライマリーキーは重複できない。   セカンダリインデックスは重複できる。 ) 『にゃーにゃーマップ』vol.4
  5. 位置情報検索のサーバーレス化 『にゃーにゃーマップ』vol.4 ありがとう DynamoDB !! \ めでたし !! / \

    これぞサーバーレス !! / ※ データ量やアクセス量が増加し続けた場合、   どこかでサーバーレスではない方が安くなるポイントがあるんだろうなとは思います。
  6. クローリングとインポートの自動化 『にゃーにゃーマップ』vol.4 1. Webサイト(やオープンデータ)をスクレイピングして、 共通フォーマットCSVを作成する。 • type : food /

    drink / life / mask / outdoor / hotspring / plant • title : 店舗名称 • address : 住所 (フォーマット特に指定なし) • tel : 電話番号 (ハイフン無し) • homepage : 店舗ホームページのアドレス • fb, insta, twitter : 各種SNSのアドレス • media1~5 : その他メディアのアドレス • locoguide_id : ロコガイドの混雑ランプ対応している場合はその ID • star : 認証店舗(1)やGoToEat(2)をビットフラグで保持 スクレイピングは Python の Beautiful Soup というライブラリを利用したよ
  7. クローリングとインポートの自動化 『にゃーにゃーマップ』vol.4 2. 共通フォーマットCSVをDynamoDBへインポートする。 新たに情報を取りにいったり、既存データはマージする。 • type, title, address, media1~5,

    locoguide_id, star => csv値の値をそのままマージ • latlon : Google Places API「title address」で検索して取得する • tel, homepage : csv値 (無い場合 Google Places API 「title address」で検索して取得してみる) • fb, insta, twitter : csv値 ( + homepageのindexをクローリングして探してみる) • h3-9,8,7 : h3.geo_to_h3(lat, lon)で取得する • has_xframe_options : homepage, media1~5 レスポンスヘッダに「X-Frame-Options」があるかどうか? (=IFrame表示を許可しているか?) クローリングだけでは捕りきれない情報はググって補完! \ ないしょだよ /
  8. クローリングとインポートの自動化 『にゃーにゃーマップ』vol.4 S3 データレイク + Athena を レプリカにする Data Catalog

    (Glue) type=food |- h3_9=892e6441a2fffff |- aaaa(guid).json |- bbbb(guid).json : h3(9)(=約300m圏内) を パーティションとして分割 select * from “table” where “type” = ‘food’ and “h3_9” = ‘892e6441a2fffff’ and “tel” = ‘0530000000’ limit 10 ちゃんとパーティションで絞り込んであ げないと料金がもったいない! パーティション分割、大事!
  9. クローリングとインポートの自動化 『にゃーにゃーマップ』vol.4 S3 データレイク + Athena を レプリカにする 手順: 1.

    S3にファイルを保存しておく。 2. Glueのクローラを作成し、実行する。 (入力元はS3、出力先は新規データカタログとする) 3. Athenaでクエリ出来ることを確認する。 ※インポートで発生するデータ同期時に、  パーティションが増えた場合はデータカタログへ追加する必要あり。  (そうしないとAthenaで参照できない) alter table "tablename" add if not exists partition ( “p_type”='food', “h3_9”='892e6441a2fffff' ) location 's3://bucketname/type=food/h3_9=892e6441a2fffff/'