概要

このドキュメントでは、Places Insights と Looker Studio を使用して動的な地理空間レポートを作成する方法について説明します。技術的な知識のないステークホルダーが自分で質問に答えられるようにすることで、位置情報データの価値を引き出すことができます。このガイドでは、リクエストごとに SQL を記述することなく、静的なレポートをインタラクティブなヒートマップ スタイルの市場分析ツールに変える方法について説明します。複雑な位置情報データへのアクセスを可能にし、データ エンジニアリングとビジネス インテリジェンスのギャップを埋めます。
このアーキテクチャ パターンを採用すると、次のような重要なメリットが得られます。
- データの視覚的な表現: Places Insights のデータを、空間密度と傾向を即座に伝えるインタラクティブな地図とグラフに変換します。
- SQL を使用しない簡単なデータ探索: 市場アナリストや不動産プランナーなどのチームメンバーは、事前定義されたパラメータ(プルダウンを使用して [City] や [Time of Day] を変更するなど)を使用して、データを動的にフィルタできます。SQL を 1 行も記述せずにデータを探索できます。
- シームレスなコラボレーション: 標準の Looker Studio 共有機能を使用すると、これらのインタラクティブな分析情報を安全に配布できます。
ソリューションのワークフロー
次のワークフローでは、パフォーマンスの高いレポート作成アーキテクチャを確立します。静的なベースラインから完全に動的なアプリケーションに移行し、複雑さを導入する前にデータの正確性を確保します。
前提条件
始める前に、次の手順に沿って Places Insights を設定してください 。無料のツールである Looker Studio に アクセスする必要があります。
ステップ 1: 静的な地理空間ベースラインを確立する
インタラクティブ性を導入する前に、ベースクエリを確立し、Looker Studio で正しくレンダリングされることを確認します。Places Insights と BigQuery の地理空間機能を使用して、H3 インデックス システムを使用してデータを六角形のグリッドに集約します。これにより、Looker Studio の塗り分けマップ カートタイプでビジュアリゼーションに使用できるクエリ出力が生成されます。
1.1 データの接続
次の静的クエリを使用して、初期接続を確立します。固定された場所(ロンドン)とカテゴリ(レストラン)をターゲットにして、データ パイプラインを検証します。
SELECT
h3_index,
`carto-os.carto.H3_BOUNDARY`(h3_index) AS h3_geo,
restaurant_count
FROM (
SELECT WITH AGGREGATION_THRESHOLD
`carto-os.carto.H3_FROMGEOGPOINT`(point, 8) AS h3_index,
COUNT(*) AS restaurant_count
FROM
-- Note: Change 'gb' to your target country code (e.g., 'us')
`places_insights___gb.places`
WHERE
'London' IN UNNEST(locality_names)
AND 'restaurant' IN UNNEST(types)
GROUP BY
h3_index
)
ORDER BY
restaurant_count DESC;
空間集計に関する注意
このクエリでは、Google Cloud BigQuery で一般公開されている
CARTO Analytics
Toolbox(carto-os)の関数を使用します。
H3_FROMGEOGPOINT 関数は、特定のロケーション ポイントを H3
セルに変換します。これは、世界を六角形のグリッドセルに分割するシステムです。
この変換を使用するのは、Looker Studio の塗り分けマップで色をレンダリングするにはポリゴン(シェイプ)が必要なためです。点を六角形に変換することで、何千もの重複する点をプロットするのではなく、特定の地域のビジネスの密度を可視化できます。
集計しきい値に関する注意
すべての Places Insights クエリには、WITH AGGREGATION_THRESHOLD 句が必要です。
このプライバシー保護により、集計数が 5 以上の場合にのみデータが返されます。
このビジュアリゼーションのコンテキストでは、H3 グリッドセルに含まれるレストランが 5 つ未満の場合、そのセルは結果セットから完全に除外され、地図上には空として表示されます。
Looker Studio でこれを実装するには:
- 新しい空のレポートを作成します。
- データコネクタとして [BigQuery] を選択します。
- 左側のメニューから [カスタムクエリ] を選択し、お支払いプロジェクト ID を選択します。
- 上記の静的ベースクエリ をエディタに貼り付けます。
- [レガシー SQL]、[Enable date range]、[Enable viewer email address] パラメータをクリアします。
- [追加] をクリックします。
1.2 地理空間のビジュアリゼーションを構成する
データが接続されたら、H3 境界データを正しく認識するように Looker Studio を構成します。
- [グラフを追加] メニューから、レポート キャンバスに塗り分けマップ のビジュアリゼーションを追加します。
- ポリゴン ジオメトリを含む
h3_geoフィールドが [地理空間] データ型に設定されていることを確認します。- 接続名の横にある [データソースを編集](鉛筆)アイコンをクリックします。
h3_geoが [Text](ABC)に設定されている場合は、プルダウン メニューを使用して [Geo] > [Geospatial] を選択します。- [完了] をクリックします。
h3_indexフィールドを [Location](一意の識別子として機能)にマッピングします。h3_geoフィールドを [Geospatial Field](ポリゴン ジオメトリとして機能)にマッピングします。restaurant_countフィールドを [Color metric] にマッピングします。
これにより、H3 セルごとのレストランの密度を示す地図がレンダリングされます。濃い青色(デフォルトの色のオプション)は、レストランの数が多いセルを示します。

ステップ 2: 動的パラメータを実装する
レポートをインタラクティブにするために、ユーザーが次のオプションから選択できるコントロールをレポートに追加します。
- 地域区分: レポートの焦点となる都市を制御します。
- 曜日: スキーマの
regular_opening_hoursレコードを活用して、営業している曜日に基づいて場所をフィルタします。 - 時間:
start_timeフィールドとend_timeフィールドを比較して、営業時間に基づいて場所をフィルタします。
これを行うには、ユーザーが選択したパラメータを、実行時に変更された Places Insights クエリに直接渡します。Looker Studio のデータソース エディタで、これらのパラメータを型付き変数として明示的に定義する必要があります。
Looker Studio で [リソース] メニューを選択し、[追加済みのデータソースの管理] をクリックします。表示されたパネルで、先ほど追加した BigQuery カスタム SQL データソースに対して [EDIT] を選択します。
[接続の編集] ウィンドウで、[パラメータを追加] を選択します。次の値を使用して、3 つのパラメータを追加します。
| パラメータ名 | データ型 | 使用可能な値 | 値のリスト(DB と完全に一致する必要があります) | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
p_locality |
テキスト | 値の一覧 |
|
||||||||||||||||
p_day_of_week |
テキスト | 値の一覧 |
|
||||||||||||||||
p_hour_of_day |
テキスト | 値の一覧 |
|
p_hour_of_day パラメータの構成例。

p_hour_of_day パラメータの場合は、[Value] 列に注意してください。SQL クエリで CAST(@p_hour_of_day AS TIME) を使用しているため、Looker Studio から渡される値は厳密な HH:MM:SS 形式(24 時間表記)にする必要があります。
3 つのパラメータをすべて設定して保存したら、BigQuery カスタム SQL 接続を変更して、@ 構文を使用してこれらの変数を参照します。
これを行うには、[接続の編集] をクリックし、次の変更されたクエリを貼り付けます。
SELECT
h3_index,
`carto-os.carto.H3_BOUNDARY`(h3_index) AS h3_geo,
restaurant_count
FROM (
SELECT WITH AGGREGATION_THRESHOLD
`carto-os.carto.H3_FROMGEOGPOINT`(point, 8) AS h3_index,
COUNT(*) AS restaurant_count
FROM
`places_insights___gb.places`
WHERE
-- Dynamic locality filter based on parameter
@p_locality IN UNNEST(locality_names)
AND 'restaurant' IN UNNEST(types)
AND business_status = 'OPERATIONAL'
AND EXISTS (
SELECT 1
FROM UNNEST(
CASE @p_day_of_week
WHEN 'monday' THEN regular_opening_hours.monday
WHEN 'tuesday' THEN regular_opening_hours.tuesday
WHEN 'wednesday' THEN regular_opening_hours.wednesday
WHEN 'thursday' THEN regular_opening_hours.thursday
WHEN 'friday' THEN regular_opening_hours.friday
WHEN 'saturday' THEN regular_opening_hours.saturday
WHEN 'sunday' THEN regular_opening_hours.sunday
END
) AS hours
WHERE hours.start_time <= CAST(@p_hour_of_day AS TIME)
AND hours.end_time >= TIME_ADD(CAST(@p_hour_of_day AS TIME), INTERVAL 1 HOUR)
)
GROUP BY
h3_index
)
ORDER BY
restaurant_count DESC;
[再接続] をクリックして編集内容を保存します。変更されたクエリでは、@p_hour_of_day などの新しい変数に注意してください。これは、先ほど設定したパラメータ名に対応しています。
レポート キャンバスに戻り、これらのパラメータをエンドユーザーに公開します。
- レポートに 3 つのプルダウン リスト コントロールを追加します。
- 各コントロールで、新しく作成したパラメータに対応するように [コントロール フィールド] を設定します。
- コントロール 1:
p_locality - コントロール 2:
p_day_of_week - コントロール 3:
p_hour_of_day
- コントロール 1:
最終的なレポートは次のようになります。プルダウン コントロールのいずれかの値を変更すると、Looker Studio は、地図上に可視化する前に、Places Insights からリクエストされたデータを取得します。
![最終的なインタラクティブ レポート。グラスゴーのレストラン密度マップが表示され、上部に 3 つのプルダウン フィルタが表示されている。[時間] メニューが展開され、選択可能な期間が表示されます。](https://developers-dot-devsite-v2-prod.appspot.com/static/maps/architecture/places-insights-looker-studio/images/final_report.jpg?authuser=8&hl=ja)
ステップ 3: 結果を共有する
Looker Studio に組み込まれている共有 ツール を使用して、レポートを共有します。これにより、閲覧者はプルダウン リストから選択したパラメータに基づいて、可視化を動的に更新できます。
まとめ
このパターンでは、BigQuery のコンピューティング能力を活用して、集約された Places Insights データを Looker Studio に提供する、スケーラブルでインタラクティブなレポート作成ツールを作成します。このアーキテクチャでは、大規模な未加工のデータセットを可視化しようとする際の落とし穴を回避し、エンドユーザーは時間、場所、業種などのさまざまなディメンションでデータをほぼリアルタイムで探索できます。これは、技術的な知識のないステークホルダーがデータを柔軟に探索できる強力なツールです。
次のステップ
Places Insights スキーマのさまざまな部分をパラメータ化して、動的レポートの他のバリエーションを試します。
- 動的な競合他社分析:
brand名のパラメータを作成すると、ユーザーはヒートマップをさまざまな競合他社間で瞬時に切り替えて、市場での相対的な飽和度を確認できます。ブランドデータの可用性については、Places Insights データ についてをご覧ください。 - インタラクティブなサイト選択:
price_level(「中程度」と「高額」など)と最小ratingのパラメータを追加すると、不動産チームは特定のユーザー属性プロファイルに一致する地域を動的にフィルタできます。 - カスタムの商圏: 市区町村名でフィルタするのではなく、ユーザーがカスタムの調査エリアを定義できるようにします。
- 半径ベース: p_latitude、p_longitude、p_radius_meters の 3 つの数値パラメータを作成します。座標は、Geocoding API などの Google Maps Platform API から取得できます。クエリで、これらを ST_DWITHIN 関数に挿入します。
ST_DWITHIN(point, ST_GEOGPOINT(@p_longitude, @p_latitude), @p_radius_meters)
- ポリゴンベース: 複雑なカスタムシェイプ(販売エリアなど)の場合、ユーザーはジオメトリ テキストを簡単に入力できません。代わりに、シェイプ ジオメトリとわかりやすい名前(「ゾーン A」など)を含むルックアップ テーブルを BigQuery に作成します。Looker Studio でテキスト パラメータ
p_zone_nameを作成して、ユーザーがゾーンを選択できるようにし、サブクエリを使用してST_CONTAINS関数のジオメトリを取得します。
- 半径ベース: p_latitude、p_longitude、p_radius_meters の 3 つの数値パラメータを作成します。座標は、Geocoding API などの Google Maps Platform API から取得できます。クエリで、これらを ST_DWITHIN 関数に挿入します。
コントリビューター
- David Szajngarten | デベロッパー リレーションズ エンジニア
- Henrik Valve | DevX エンジニア