概要

このドキュメントでは、Places Insights と Looker Studio を使用して動的な地理空間レポートを作成する方法について説明します。技術者以外の関係者が自分で質問に答えられるようにすることで、位置情報の価値を引き出します。このガイドでは、リクエストごとに SQL を記述することなく、静的レポートを市場分析用のインタラクティブなヒートマップ スタイルのツールに変換する方法について説明します。複雑な位置情報データへのアクセスを可能にし、データ エンジニアリングとビジネス インテリジェンスのギャップを解消します。
このアーキテクチャ パターンを採用すると、次のような重要なメリットが得られます。
- データの視覚的表現: Places Insights のデータをインタラクティブな地図やグラフに変換し、空間密度と傾向をすぐに把握できるようにします。
- SQL を使用しない簡素化された探索: マーケット アナリストや不動産プランナーなどのチームメンバーが、事前定義されたパラメータを使用してデータを動的にフィルタリングできます(例: プルダウンを使用して「市区町村」や「時間帯」を変更する)。SQL を 1 行も記述せずにデータを探索できます。
- シームレスなコラボレーション: 標準の Looker Studio 共有機能を使用すると、インタラクティブな分析情報を安全に配布できます。
ソリューションのワークフロー
次のワークフローは、パフォーマンスの高いレポート アーキテクチャを確立します。静的なベースラインから完全に動的なアプリケーションに移行し、複雑さを導入する前にデータの正確性を確保します。
前提条件
始める前に、こちらの手順に沿ってプレイス分析を設定してください。無料ツールの 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 を使用する]、[期間を有効にする]、[閲覧者のメールアドレスを有効にする] の各パラメータをオフにします。
- [追加] をクリックします。
1.2 地理空間の可視化を構成する
データが接続されたら、H3 境界データを正しく認識するように Looker Studio を構成します。
- [グラフを追加] メニューから、レポート キャンバスに塗り分け地図のビジュアリゼーションを追加します。
- ポリゴン ジオメトリを含む
h3_geoフィールドが [地理空間] データ型に設定されていることを確認します。- 接続名の横にある [データソースを編集](鉛筆)アイコンをクリックします。
h3_geoが [Text](ABC)に設定されている場合は、プルダウン メニューを使用して [Geo] > [Geospatial] を選択します。- [完了] をクリックします。
h3_indexフィールドを Location(一意の識別子として機能)にマッピングします。h3_geoフィールドを [地理空間フィールド](ポリゴン ジオメトリとして機能)にマッピングします。restaurant_countフィールドを [色の指標] にマッピングします。
これにより、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 は地図に表示する前に、リクエストされたデータをプレイス インサイトから取得します。
![最終的なインタラクティブ レポート。グラスゴーのレストラン密度マップが表示され、上部に 3 つのプルダウン フィルタが表示されている。[時間] メニューが展開され、選択可能な期間が表示されます。](https://google-developers.gonglchuangl.net/static/maps/architecture/places-insights-looker-studio/images/final_report.jpg?authuser=1&hl=ja)
ステップ 3: 結果を共有する
Looker Studio に組み込まれている共有ツールを使用して、レポートを共有します。これにより、閲覧者はプルダウン リストから選択したパラメータに基づいて、可視化を動的に更新できます。
まとめ
このパターンでは、BigQuery の計算能力を活用して集計されたプレイス分析情報を Looker Studio に提供する、スケーラブルでインタラクティブなレポートツールを作成します。このアーキテクチャでは、大規模な未加工データセットを可視化しようとする際の落とし穴を回避し、エンドユーザーが時間、場所、業種などのさまざまなディメンションでデータをほぼリアルタイムで探索できる柔軟性を提供します。これは、技術的な知識のない関係者がデータを柔軟に探索できる強力なツールです。
次のステップ
Places Insights スキーマのさまざまな部分をパラメータ化して、動的レポートの他のバリエーションを試してみます。
- 動的な競合他社分析:
brand名前のパラメータを作成して、ユーザーがヒートマップをさまざまな競合他社間で瞬時に切り替え、市場での相対的な飽和度を確認できるようにします。ブランドデータの可用性については、プレイス分析のデータについてをご覧ください。 - インタラクティブなサイト選択:
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」)。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