190713_FOSS4G_TORIMAKU.pdf

 190713_FOSS4G_TORIMAKU.pdf

Dfa36f596af5e15d0b28bac7516b1f81?s=128

One compath

July 13, 2019
Tweet

Transcript

  1. ONE COMPATH 位置情報 × マーケティングはじめました

  2. ONE COMPATH って何者

  3. 2019年4月1日に生まれた新会社

  4. ONE COMPATHとは COM⇒共に ひとつの組織、ひとつの指針 一歩一歩のイノベーション COMPASS? PATH⇒道を作る

  5. 会社概要 所在地 港区芝浦 社員数 116名(2019年4月時点/出向者含む) 資本金 600百万円 代表取締役社長CEO 早川 礼

    事業内容 インターネットメディア事業
  6. 家族が増えました

  7. ONE COMPATHのサービス 1,100万人/月 11万店舗/20万枚 3,000万人のデータ 利用率No.1電子チラシサービス※ ※マクロミル・翔泳社共同インターネット調査 2018年12月 1,200万人/月 POI

    700万件 250企業 日本初のインターネット地図サービス お出かけが楽しくなる 位置情報活用型戦国 スタンプラリーゲーム ふたり専用コミュニケーションアプリ あなたの一歩が、宝にかわる。 プラットフォーム型ウォーキングアプリ
  8. None
  9. エリアデータマートTORIMAKUとは DMP 興味関心 属性情報 生活エリア CRM施策 商圏分析 顧客管理 集客・プロモーション 天気・気温

    エリア特性 周辺施設 気象状況や周辺の生活環境などのエリアに紐づく 環境データを集約し、提供するデータサービス
  10. 性別 年代 嗜好 特定行動.. ターゲティング精度向上

  11. ターゲティング精度の限界 課題1 リーチボリュームの低下 課題2 パーソナル特性 以外の要因 ターゲティング 精度上げ止まり 収益インパクト 縮小

    予算消化が 進まない ターゲティング精度向上 性別 年代 嗜好 特定行動..
  12. パーソナル特性による行動決定要因 外部環境による行動決定要因 母数の補完 効率化の加速 ・クリエイティブ ・キャッチコピー DMP的アプローチ ココロ コミュニケーション リーチ母数低下

    効率化の限界 TORIMAKU的アプローチ
  13. TORIMAKU概要 データ種別 データの粒度 データ加工 提供形式 気象データ ジオデモデータ API バルク 1kmメッシュ

    都道府県~町丁字 正規化 偏差化
  14. TORIMAKUの強み マーケティング 利用に特化した メニューが少ない データフォーマットが 統一されていない 利用するために 初期投資が必要 価格面・利用範囲面などの 調整が個別に必要

    マーケティング活用には 複雑なデータの正規化が必要 サーバ構築・API開発など 一定の初期投資が必要 位置情報加工が得意なONE COMPATHが吸収
  15. 東京のあるエリアに住んでいる名無しのAさん TORIMAKUがない世界 位置情報しか分からない…

  16. TORIMAKUのある世界 中華麺の消費支出が高いトリ 付近に中華料理屋があるトリ 外食の消費支出が高いトリ 昨日より5度暑いトリ 冷 や し 中 華

    は じ め ま し た Click!! 東京のあるエリアに住んでいる名無しのAさん
  17. TORIMAKUでできること クライアント:旅行代理店A社 与件:北海道旅行者を獲得したい

  18. 特徴をTORIMAKUで分析すると… TORIMAKU 分析 北海道に来た名無しさん達 平均年収が高い 北海道に来がちな人 国内パック旅行費が高い 航空運賃が高い 麺類外食が多い スポーツ用品費が多い

  19. TORIMAKU API 「北海道に来がちな人」ですか? YESトリ Click!!

  20. TORIMAKU API YESトリ YESトリ Noトリ 39.729429,140.1092876に住んでいる人は北海道に来がちですか? 〒108-0023のエリアに住んでいる人は北海道に来がちですか? 大阪府大阪市西区に住んでいる人は北海道に来がちですか?

  21. ターゲティング条件に活用することが可能 北海道に来がちな条件を備えている 北海道に来がちな条件を備えていない 北海道に来がちな条件を備えている 性別 年齢 旅行履歴 郵便番号 男性 30代

    静岡に1度行った 108-0023 性別 年齢 旅行履歴 住所 女性 40代 岩手に1度行った 大阪府大阪市西区 Tさん Mさん 性別 年齢 旅行履歴 緯度経度 ?? ?? ???? 39.729429,140.1092876 Kさん 旅行代理店A社 TORIMAKU API
  22. 保有している位置情報は様々 北海道に来がちな条件を備えている 北海道に来がちな条件を備えていない 北海道に来がちな条件を備えている 性別 年齢 旅行履歴 郵便番号 男性 30代

    静岡に1度行った 108-0023 性別 年齢 旅行履歴 住所 女性 40代 岩手に1度行った 大阪府大阪市西区 Tさん Mさん 性別 年齢 旅行履歴 緯度経度 ?? ?? ???? 39.729429,140.1092876 Kさん 旅行代理店A社 TORIMAKU API
  23. 保有している位置情報に合わせて 柔軟にデータを提供したい

  24. 位置の指定 座標(緯度経度) 都道府県 メッシュコード リクエスト 人口は100万人トリ 郵便番号 小地域コード(11桁) 人口 世帯数

    ビール消費量 13203002001 ~ ~ ~ 13203002002 ~ ~ ~ 都道府県コード(2桁) 人口 世帯数 ビール消費量 13 ~ ~ ~ 14 ~ ~ ~ レスポンス つまり、なにがしたいのか
  25. 座標(緯度経度) 都道府県 メッシュコード リクエスト 郵便番号 変換が必要でした 変換 都道府県コード(11桁) 人口 世帯数

    ビール消費量 13 ~ ~ ~ 14 ~ ~ ~ 座標(緯度経度) 都道府県コード(2桁) 市区町村コード(5桁) 小地域コード(11桁) メッシュコード 小地域コード(11桁) 人口 世帯数 ビール消費量 13203002001 ~ ~ ~ 13203002002 ~ ~ ~ 位置の指定
  26. 緯度経度から小地域コードが取得できない 座標(緯度経度) 都道府県コード(2桁) 市区町村コード(5桁) 小地域コード(11桁) メッシュコード 既にあるデータセットと互換性があった 計算式で解決 国勢調査独自のコード体系のため 互換性がない

    既にあるデータセットと互換性があった
  27. 今日話すこと 座標(緯度経度) 小地域コード(11桁) これを解決するまでの道のりをご紹介します 国勢調査独自のコード体系のため 互換性がない

  28. そのまえに...小地域コードとは 北海道/札幌市白石区/東札幌5条1丁目1-1 都道府県コード 01(JIS 2桁) 市区町村コード 104(JIS 2桁) 小地域コード 260501(独自定義

    6桁) GISで利用可能な境界域のオープンデータが提供されています。 市区町村を町丁・字等によって 細分した地域を表すコードです おおむね市区町村内の 「△△町」「〇〇2丁目」「字□□」 などの区域に対応しています。
  29. QGISでデータを見るとこんな感じ 01104260501

  30. つまり逆ジオコーディング 地名や住所から地理座標を付与することをジオコーディングといいます。 北海道札幌市白石区東札幌5条1丁目1-1 →緯度:43.056194 経度141.385690 緯度経度から都道府県名や市区町村名を付与することを逆ジオコーディ ングといいます。 緯度:43.056194 経度141.385690 →

    北海道札幌市白石区東札幌5条1丁目1-1 緯度経度から小地域コードを付与するのは逆ジオコーディング 緯度:43.056194 経度141.385690 → 01104260501
  31. 元データについて e-Stat (政府統計の総合窓口)が提供している 小地域境界データ(町丁・字等)を元に作成しています。

  32. 話をもどしまして 座標(緯度経度) 小地域コード(11桁) これを解決するまでの道のりをご紹介します 国勢調査独自のコード体系のため 互換性がない

  33. 作り方の検討がつきません! タスケテクダサイ シェープファイルからメッシュ単位に区切って GeoTIFF作ってるんですよ、 ソースはこれです! URL …ありがとうございます(GeoTIFF?なんだろう) …みてみます(全然わかんないですが) 社内でのやり取り 私

    私 先輩
  34. 地理参照情報が埋め込まれたビットマップ画像 画像の左上の座標が埋め込まれていたり 測地系が埋め込まれていたり 1pxあたりの座標の 増分、減分が埋め込まれていたり そもそもGeoTIFFとは

  35. .tif ②ST_Intersects, ST_MakeEnvelopeを利用して メッシュ単位にデータ分割 ③gdal_rasterizeを利用して GeoTIFF形式でファイル出力 Shape形式からGeoTIFF形式への変換 .Shape ①shp2pgsqlを利用して Postgresにデータ格納

    .tif .tif
  36. gdal_rasterizeコマンド gdal_rasterize -a_nodata 0 -ot UInt32 -te 139 35.3333 140

    36 -tr 0.00011111111111 0.00011111111111 -a address_code -of Gtiff -sql "~~~" sample.tif 実行したコマンド
  37. あれ?なにかおかしい UINT32は符号なし2ビット=0~4,294,967,295 4294967295 13203002001

  38. UINT32以上の型がない…おわったかも…orz

  39. こうなったら!! UINT64指定してやる! ドキュメントに載ってないけど!

  40. gdal_rasterizeコマンド gdal_rasterize -a_nodata 0 -ot UInt64 -te 139 35.3333 140

    36 -tr 0.00011111111111 0.00011111111111 -a address_code -of Gtiff -sql "~~~" sample.tif 実行したコマンド
  41. できてるー!

  42. 13203002001 で確認してみると

  43. GeoTIFFは作れた! 次は読み込んでみよう 社内のリバースジオコーダーは Java Advanced Imaging API (JAI) で実装してあったのでソースコードを拝借して… 実行!

    Exception:~~~~ ~~~~ ~~~~ ~~~~ ~~~~
  44. UINT64に対応していない

  45. GDAL Python API 試してみた。 import os, errno from osgeo import

    gdal, gdalconst from affine import Affine ds = gdal.Open(ファイルパス, gdalconst.GA_ReadOnly) if ds is None: raise FileNotFoundError(errno.ENOENT, None,ファイルパス) geotransform = ds.GetGeoTransform() affine = Affine.from_gdal(*geotransform) original_image = ds.GetRasterBand(1).ReadAsArray() col, row = ~affine * (float(経度), float(緯度)) original_image[int(row)][int(col)]
  46. できてるー!

  47. すごいぞGDAL Python API

  48. 問題発生

  49. それぞれ試してみたが、求めるパフォーマンスに到底及ばず… 数十秒...かかる 1次メッシュコードで分けて169ファイル。容量70G 2次メッシュコードで分けて4735ファイル。容量30GB 生成したGeoTIFFファイル重すぎる

  50. もうキャッシュするしかない! キャッシュしようと思うので メモリ32GBのサーバーをください。 16GBでがんばって うそー! 私 私 上司

  51. キャッシュ軽量化 ここって同じ小地域コード(11桁)が 1px毎に入ってるから、 軽量化できそう。

  52. キャッシュ軽量化 1 2 2 2 2 2 3 3 3

    3 1 2 2 2 2 2 3 3 3 3 2 2 2 2 2 2 3 3 3 3 2 2 2 2 2 2 3 3 3 3 2 2 2 2 2 3 3 3 3 3 2 2 2 2 2 3 3 3 3 3 2 2 2 2 3 3 3 3 3 3 2 2 2 2 3 3 3 3 3 3 2 2 2 3 3 3 3 3 3 3 2 2 2 3 3 3 3 3 3 3 1 12345678901 2 12345678902 3 12345678903 12345678901 12345678902 12345678902 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678901 12345678902 12345678902 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678902 12345678902 12345678902 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678902 12345678902 12345678902 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678902 12345678902 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678903 12345678902 12345678902 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678903 12345678902 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678903 12345678903 12345678902 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678903 12345678903 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678903 12345678903 12345678903 12345678902 12345678902 12345678902 12345678903 12345678903 12345678903 12345678903 12345678903 12345678903 12345678903
  53. まだいける。軽量化 1 2 2 2 2 2 3 3 3

    3 1 2 2 2 2 2 3 3 3 3 2 2 2 2 2 2 3 3 3 3 2 2 2 2 2 2 3 3 3 3 2 2 2 2 2 3 3 3 3 3 2 2 2 2 2 3 3 3 3 3 2 2 2 2 3 3 3 3 3 3 2 2 2 2 3 3 3 3 3 3 2 2 2 3 3 3 3 3 3 3 2 2 2 3 3 3 3 3 3 3 1 12345678901 2 12345678902 3 12345678903 もっと圧縮 numpy.savez_compressed 13GBまで小さくなり、ぎりぎりセーフ
  54. 緯度経度から小地域コードが取得できる! 座標(緯度経度) 都道府県コード(2桁) 市区町村コード(5桁) 小地域コード(11桁) メッシュコード 既にあるデータセットと互換性があった 計算式で解決 新規作成して解決 既にあるデータセットと互換性があった

  55. 座標(緯度経度) 都道府県 メッシュコード リクエスト 郵便番号 変換ができるようになりました 変換 都道府県コード(11桁) 人口 世帯数

    ビール消費量 13 ~ ~ ~ 14 ~ ~ ~ 小地域コード(11桁) 人口 世帯数 ビール消費量 13203002001 ~ ~ ~ 13203002002 ~ ~ ~ 位置の指定 人口は100万人トリ レスポンス
  56. まとめ FOSS4Gを利用することで 比較的簡単に リバースジオコーダーを作成することが出来る。 UINT64に対応していてくれて 本当に本当に助かった データの形式がシンプルに行列なので、 Numpyとも相性がよく、助かった! 6/26(水)無事リリース完了

  57. でも... じつはまだ問題が残ってます まとめておきながら...

  58. あれ?なんだ?この隙間 NoData 13122028004 11237042005 出来上がったGeoTIFFを確認すると隙間が…

  59. 隙間できてる 重なってる 元データのシェープファイルで 既に県境がしっかりとしていなかった

  60. 行政区画データで補完しようと思ったが、 余計にずれが発生する場合もあるため保留になっています なんとかしようと思ったが

  61. 良い案ご存知の方、懇親会でお待ちしてます。

  62. None