GeoJSON の操作と地図の作成
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 を「平ら」にします。コーディングスキルを活かして、これをどのように実現するかを見ていきましょう。
- ロサンゼルスの郵便番号について、スクリプトを作成するか、高度な正規表現式を使用して、"external_id" を1 つ上のレベルに移動して、"features" の子になるようにします。
- 必ず、新しいキー - 値ノードの名前を "id" に変更します。各 "id" の値は郵便番号で、データセットの [Zipcode (郵便番号)] 列の郵便番号と照合します。
- スクリプトの出力が新しい名前のファイルである場合は、ファイルの名前と場所をメモします。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()
これで 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 ファイルに基づいてカスタム地図を作成する必要があります。
レンズで郵便番号データを探索し、それをカスタム地図上に表示しましょう。
- Analytics Studio ホームページで、[Browse (参照)] をクリックし、検索バーに「la_zip_codes」と入力します。
- 検索結果からデータセットを選択して、レンズで探索します。
- このレンズで、[Count of Rows (行数)] 基準をクリックし、[Sum (合計)]、[TotalWages (賃金総額)] の順にクリックして基準を賃金総額の合計に変更します。必ず、[Bar Length (棒の長さ)] 項目で、変更する基準の名前である [Count of Rows (行数)] をクリックします。
- [Bars (横棒)] 項目のプラスボタンをクリックし、[Zipcode (郵便番号)] を選択して、郵便番号でグループ化します。
- グラフ種別を地図に変更するには、右側の をクリックし、[Map (地図)] グラフ種別 () を選択します。デフォルトの地図には、ロサンゼルスの郵便番号は表示されないため、このデータに適していません。実際、事前作成済みの地図種別には、郵便番号でグループ化されたデータを表示できるものはありません。それが可能なカスタム地図を作成しましょう。
- カスタム地図種別を作成するには、 をクリックし、[Map (地図)] セクションを展開し、[Map Type (対応付け種別)] の横にある をクリックします。
- GeoJSON ファイルの形式変更を行っていない場合に備えて、形式変更したものが用意されています。こちらのリンクを右クリックし、形式変更済みの GeoJSON ファイルをローカルマシンに保存します。
- [New Map (新規地図)] ページの左ペインで、[Upload GeoJSON (GeoJSON をアップロード)] をクリックし、ダウンロードした GeoJSON 定義 (custom_map_project_geojson.json) をアップロードします。
アップロードした GeoJSON ファイルに問題がある場合は、エラーメッセージが表示されます (「Invalid GeoJSON (無効な GeoJSON )」など)。通常それは、形式変更に問題があったことを示しています。 - [Map Label (対応付け表示ラベル)] 項目に「L.A. Zipcodes」 (ロサンゼルス郵便番号) と入力します。
- [Projection Type (投影法の種類)] 項目で、この地図のデフォルトの投影法の種類として Equirectangular を選択します。この設定は、このカスタム地図を使用する各グラフウィジェットのウィジェットプロパティで上書きできます。Equirectangular は、間取図、街区、郵便番号地域など、単純な幾何学的図形に適しています。従来の地理地図には Mercator が最も適しています。ハワイとアラスカを他の州の近くに配置した米国の地図には AlbersUSA を選択します。 中央のペインでは、地図のハンドルをドラッグして境界を変更し、特定の地域にズームインできます。境界は右ペインに示されます。ただし、境界はまだ変更しません。それについては後ほど詳しく説明します。
- [Done (完了)] をクリックします。お疲れさまでした。最初のカスタム地図を作成できました。なかなかの出来栄えですね! これで、このカスタム地図種別を他のグラフ (地図グラフ、ジオマップグラフ、バブルマップグラフなど) にも使用できるようになりました。
- このレンズをデザイナー内のダッシュボードにクリップするには、 をクリックします。
- クエリ名設定ダイアログで、[Display Label (表示ラベル)] 項目に「Total Wages by Zip Code」(郵便番号別賃金総額) と入力し、[Clip to Designer (デザイナーにクリップ)] をクリックします。
- ダッシュボードデザイナーで、新しいクエリをキャンバスにドラッグします。必要に応じて、表示される棒グラフが見えるようにウィジェットのサイズを調節します。あまり見栄えのしない地図が表示され、ロサンゼルスがある場所にいくつかの色分けされた郵便番号地域が見えます (海岸線の中央辺りにある小さな染みのことです)。
- 地図を選択して、ウィジェットのプロパティを表示します。
- ウィジェットのプロパティで、[Map (地図)] セクションを展開します。[Map Type (対応付け種別)] メニューで、新しい [L. A. Zipcodes (ロサンゼルス郵便番号)] カスタム地図が選択されています。
- ダッシュボードに「Los Angeles Tax Data by Zip Code」(ロサンゼルス郵便番号別税金データ) という名前を付けて保存します。
この地図の問題は、南カリフォルニアのすべての郵便番号地域が含まれていることです。これでは、ロサンゼルス地域が小さすぎて役に立ちません。境界ボックスを作成することで、これを修正できます。次はその作業を行います。