Skip to main content

GeoJSON の操作と地図の作成

メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

GeoJSON ファイルを取得する

次に、CSV ファイルの郵便番号と一致 (または少なくとも重複) する郵便番号を含む GeoJSON ファイルが必要です。それをこちらからダウンロードできます。

GeoJSON の形式を変更する

取得した GeoJSON は標準形式です。

{
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "properties": {
            "kind": "ZIP Code Tabulation Area (2012)",
            "external_id": "90001",
            "name": "90001",
            "slug": "90001-zip-code-tabulation-area-2012",
            "set": "/1.0/boundary-set/zip-code-tabulation-areas-2012/",
            "metadata": {
                "AWATER10": 0,
                "CLASSFP10": "B5",
                "ALAND10": 9071359,
                "INTPTLAT10": "+33.9740268",
                "FUNCSTAT10": "S",
                "ZCTA5CE10": "90001",
                "MTFCC10": "G6350",
                "GEOID10": "90001",
                "INTPTLON10": "-118.2495088"
            },
            "resource_uri": "/1.0/boundary/90001-zip-code-tabulation-area-2012/"
        },
        "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
                [
                    [
                        [-118.265151, 33.970249],
                        [-118.265166, 33.974735],
                        [-118.262969, 33.974746],
                        [-118.262981, 33.981836],
                        [-118.265174, 33.981828],
                        [-118.265185, 33.989227],
                        [-118.256436, 33.989317],
                        [-118.256436, 33.989498],
                        [-118.241159, 33.989422],
                        [-118.241126, 33.988174],
                        [-118.240505, 33.988158],
                        [-118.240502, 33.98867],
                        [-118.23899, 33.988664],
                        [-118.239021, 33.989403],
                        [-118.237918, 33.989393],
                        [-118.235685, 33.979486],
                        [-118.235352, 33.979534],
                        [-118.235105, 33.978705],
                        [-118.234324, 33.974732],
                        [-118.234685, 33.974731],
                        [-118.234432, 33.972967],
                        [-118.233915, 33.970674],
                        [-118.233561, 33.970731],
                        [-118.232835, 33.967469],
                        [-118.232995, 33.967467],
                        [-118.232405, 33.965314],
                        [-118.231371, 33.963268],
                        [-118.230013, 33.961768],
                        [-118.231885, 33.961565],
                        [-118.231599, 33.960146],
                        [-118.237366, 33.960152],
                        [-118.23737, 33.958521],
                        [-118.237943, 33.958518],
                        [-118.237949, 33.96015],
                        [-118.24499, 33.960148],
                        [-118.244994, 33.959648],
                        [-118.246648, 33.959637],
                        [-118.246653, 33.959177],
                        [-118.247237, 33.959175],
                        [-118.247225, 33.9597],
                        [-118.253962, 33.959701],
                        [-118.253959, 33.960162],
                        [-118.258573, 33.96016],
                        [-118.258575, 33.959577],
                        [-118.260754, 33.959772],
                        [-118.260753, 33.960149],
                        [-118.265118, 33.96013],
                        [-118.265139, 33.966482],
                        [-118.264629, 33.966483],
                        [-118.264607, 33.967438],
                        [-118.265142, 33.967395],
                        [-118.265151, 33.970249]
                    ]
                ]
            ]
        }
    }, ...]
}

標準 GeoJSON は、ほとんどの用途で良好に動作しますが、CRM Analytics のカスタム地図では問題があります。問題は、地図を表示するときではなく、地図グラフを使用してデータを表示しようとしたときに発生します。これは、CRM Analytics が、データの ID に一致する ID を "type": "Feature" ノードと同じレベルで探すためです。その方法で CSV ファイルの行を地図上の特定の郵便番号地域に照合しています。さらに、ID プロパティの名前は "id" である必要があります。

この例では、使用する明白な ID は、郵便番号の値そのものです。変更するのは、キーを 1 つ上のレベルに移動することです。つまり、"properties" の下のすべてを 1 つ上のレベルに移動させて、GeoJSON を「平ら」にします。コーディングスキルを活かして、これをどのように実現するかを見ていきましょう。

  1. ロサンゼルスの郵便番号について、スクリプトを作成するか、高度な正規表現式を使用して、"external_id" を1 つ上のレベルに移動して、"features" の子になるようにします。
  2. 必ず、新しいキー - 値ノードの名前を "id" に変更します。各 "id" の値は郵便番号で、データセットの [Zipcode (郵便番号)] 列の郵便番号と照合します。
  3. スクリプトの出力が新しい名前のファイルである場合は、ファイルの名前と場所をメモします。GeoJSON を Analytics にアップロードするときにその情報が必要になります。

たとえば、"id" ノードを "type" と同じレベルに作成する間に合わせの Python スクリプトは、次のようになります。

                #!/usr/bin/python
                import json
                import os
                os.chdir(os.path.expanduser('~/Downloads'))
                # standard geojson file
                f = open('test_la_zip_code_areas_2012.geojson', 'r')
                json_contents = json.loads(f.read())
                features = json_contents["features"]
                for i in features:
                    i["id"] = i["properties"]["external_id"]
                json_contents["features"] = features
                # Normalized geojson for Tableau map
                out_file = open("out_la_zip_code_areas_2012.json", "w")
                out_file.write(json.dumps(json_contents))
                out_file.close()
メモ

上記の間に合わせのスクリプトでは、feature オブジェクトを囲むラッパーが削除されます。そのため、これを使用する場合は、次の部分を戻します。

{    
                                                                                                      "type": "FeatureCollection",
                                                                                                      "features": {[
                                                                                                          "comment" : "stuff that was output by the script goes here"
                                                                                                      ]}
                                                                                                  }

これで GeoJSON は次のようになります。

{
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "properties": {
            "kind": "ZIP Code Tabulation Area (2012)",
            "external_id": "90001",
            ...
            },
            "resource_uri": "/1.0/boundary/90001-zip-code-tabulation-area-2012/"
        },
        "id": "90001",
        "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
                [
                        [-118.265151, 33.970249],
                        ...
                    ]
                ]
            ]
        }
    }, ...]
}

すべての id は feature オブジェクトに含まれ、それぞれに実際の郵便番号の値があります。この GeoJSON スニペットを使用しようとしないでください。これは、得られる出力のほんの一部分です。

カスタム地図にデータを表示する

ロサンゼルスの郵便番号データセットを作成したときに、 [Zipcode (郵便番号)] 列のデータ型をディメンションに設定しました。それによって、データを探索するときに郵便番号でグループ化することが可能になります。データを郵便番号でグループ化した後に、ロサンゼルスの郵便番号を表示するカスタム地図でそれを視覚化します。geoJSON ファイルに基づいてカスタム地図を作成する必要があります。

レンズで郵便番号データを探索し、それをカスタム地図上に表示しましょう。

  1. Analytics Studio ホームページで、[Browse (参照)] をクリックし、検索バーに「la_zip_codes」と入力します。
  2. 検索結果からデータセットを選択して、レンズで探索します。ロサンゼルス郵便番号税金データの最初のレンズビュー
  3. このレンズで、[Count of Rows (行数)] 基準をクリックし、[Sum (合計)][TotalWages (賃金総額)] の順にクリックして基準を賃金総額の合計に変更します。必ず、[Bar Length (棒の長さ)] 項目で、変更する基準の名前である [Count of Rows (行数)] をクリックします。
  4. [Bars (横棒)] 項目のプラスボタンをクリックし、[Zipcode (郵便番号)] を選択して、郵便番号でグループ化します。ロサンゼルスの郵便番号税金データで、賃金総額の合計が郵便番号でグループ化されています。
  5. グラフ種別を地図に変更するには、右側の フォーマッティングボタン をクリックし、[Map (地図)] グラフ種別 ([Map (地図)] グラフ種別ボタン) を選択します。デフォルトの地図には、ロサンゼルスの郵便番号は表示されないため、このデータに適していません。実際、事前作成済みの地図種別には、郵便番号でグループ化されたデータを表示できるものはありません。それが可能なカスタム地図を作成しましょう。
  6. カスタム地図種別を作成するには、フォーマッティングボタン をクリックし、[Map (地図)] セクションを展開し、[Map Type (対応付け種別)] の横にある 地図追加ボタン をクリックします。カスタム地図の [Add (追加)] ボタン
  7. GeoJSON ファイルの形式変更を行っていない場合に備えて、形式変更したものが用意されています。こちらのリンクを右クリックし、形式変更済みの GeoJSON ファイルをローカルマシンに保存します。
  8. [New Map (新規地図)] ページの左ペインで、[Upload GeoJSON (GeoJSON をアップロード)] をクリックし、ダウンロードした GeoJSON 定義 (custom_map_project_geojson.json) をアップロードします。

    新しい地図の GeoJSON ファイル、境界、表示ラベル、投影法の種類を選択します。メモ アップロードした GeoJSON ファイルに問題がある場合は、エラーメッセージが表示されます (「Invalid GeoJSON (無効な GeoJSON )」など)。通常それは、形式変更に問題があったことを示しています。
  9. [Map Label (対応付け表示ラベル)] 項目に「L.A. Zipcodes」 (ロサンゼルス郵便番号) と入力します。
  10. [Projection Type (投影法の種類)] 項目で、この地図のデフォルトの投影法の種類として Equirectangular を選択します。この設定は、このカスタム地図を使用する各グラフウィジェットのウィジェットプロパティで上書きできます。Equirectangular は、間取図、街区、郵便番号地域など、単純な幾何学的図形に適しています。従来の地理地図には Mercator が最も適しています。ハワイとアラスカを他の州の近くに配置した米国の地図には AlbersUSA を選択します。ロサンゼルスの地図が Equirectangular 投影法を使用して表示されます。 メモ 中央のペインでは、地図のハンドルをドラッグして境界を変更し、特定の地域にズームインできます。境界は右ペインに示されます。ただし、境界はまだ変更しません。それについては後ほど詳しく説明します。
  11. [Done (完了)] をクリックします。お疲れさまでした。最初のカスタム地図を作成できました。なかなかの出来栄えですね! これで、このカスタム地図種別を他のグラフ (地図グラフ、ジオマップグラフ、バブルマップグラフなど) にも使用できるようになりました。
  12. このレンズをデザイナー内のダッシュボードにクリップするには、レンズをビルダーにクリップするボタン をクリックします。
  13. クエリ名設定ダイアログで、[Display Label (表示ラベル)] 項目に「Total Wages by Zip Code」(郵便番号別賃金総額) と入力し、[Clip to Designer (デザイナーにクリップ)] をクリックします。
  14. ダッシュボードデザイナーで、新しいクエリをキャンバスにドラッグします。必要に応じて、表示される棒グラフが見えるようにウィジェットのサイズを調節します。あまり見栄えのしない地図が表示され、ロサンゼルスがある場所にいくつかの色分けされた郵便番号地域が見えます (海岸線の中央辺りにある小さな染みのことです)。 ウィジェットが表示されます。
  15. 地図を選択して、ウィジェットのプロパティを表示します。
  16. ウィジェットのプロパティで、[Map (地図)] セクションを展開します。[Map Type (対応付け種別)] メニューで、新しい [L. A. Zipcodes (ロサンゼルス郵便番号)] カスタム地図が選択されています。 税金データを含むロサンゼルス郵便番号地図
  17. ダッシュボードに「Los Angeles Tax Data by Zip Code」(ロサンゼルス郵便番号別税金データ) という名前を付けて保存します。

この地図の問題は、南カリフォルニアのすべての郵便番号地域が含まれていることです。これでは、ロサンゼルス地域が小さすぎて役に立ちません。境界ボックスを作成することで、これを修正できます。次はその作業を行います。

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む