CartoDBの活用(2)

この記事は1年以上前に書かれました。
内容が古くなっている可能性がありますのでご注意下さい。


今回はCartoDBCARTOと名前が変わりました)らしく、マップによるデータビジュアライゼーションをしてみます。横浜市の250mメッシュ人口を、鉄道駅から1.5Km圏内と圏外によって異なる色の濃淡で表現します。

シェープファイルのインポート
シェープファイルは複数のファイルから構成されます。CARTOでは、それらを1つのZIPファイルにまとめてからインポートします。
横浜市の250mメッシュ人口は、統計GIS メッシュ集計データからダウンロードしたtoukeigis.zipを使用します。toukeigis.zipをCARTOにインポートすると、「Encoding Error (2006)」というエラーになります。これは、toukeigis.zipの中にあるファイルの名前に、全角文字が使用されているためです。
そこで、toukeigis.zipを一旦展開してファイル名を変更します。

ren 横浜市統計GIS.* YokohamaGIS.*

yokohamagis.zipファイルにまとめて、CARTOにインポートします。
CREATE MAPボタンをクリックすると、地図が表示されます。

レイヤを選択し、STYLEタブで「FILL」の右にあるボタンをクリックし、表示形式をSOLIDからBY VALUEに変更して「z1」を選択すると、平成22年国勢調査:総人口による濃淡表示になります。

表示に使用するカラムを変更することで、人口増減や高齢化率増減等、異なるデータによるビジュアライズが可能です。

鉄道駅のシェープファイルは、国土数値情報 鉄道データからダウンロードしたN02-14_GML.zipを使用します。
CARTOにインポートすると、n02_14_stationとn02_14_RailroadSectionの2つのデータセットが作成されます。使用するのは前者です。
DATA VIEWで見ると、文字化けしています。これは、CARTOは文字コードUTF-8を使用するのに対し、国土数値情報はShift_JISを使用しているためです。

今回は文字情報は特に必要ないため、このまま使用します。

バッファの作成
新しいデータセットyokohama_stationsを作成し、以下のSQL文を入力します。

SELECT
  DISTINCT s.cartodb_id,
  ST_Transform(
    ST_Buffer(
      s.the_geom::geography, 1500
    )::geometry,
    3857
  ) As the_geom_webmercator
FROM yokohamagis y, n02_14_station s
WHERE ST_Intersects(y.the_geom, s.the_geom)

鉄道駅のデータセットには日本全国の駅が含まれているため、ST_Intersects()で横浜市のメッシュと交差している駅だけを選択し、ST_Buffer()で1.5Kmバッファを作成して返します。
[APPLY]ボタンをクリックし、PREVIEWをクリックすると以下のようなマップが表示されます。

鉄道駅から半径1.5Kmが円で表されています。
このyokohama_stationsデータセットはクエリでデータを作成しているだけで、実際にデータは含んでいません。そのため、yokohama_stationsテーブルをクエリで参照しても、何も返されません。そこで、左上のデータセット名の隣りにあるメニューから「Create Dataset from query」を実行して、クエリで作成したデータを含むyokohama_stations_copyデータセットを作成します。

マップの作成
空のマップを作成し、レイヤを選択して以下のSQL文を入力します。

SELECT DISTINCT y.*
FROM yokohamagis y, yokohama_stations_copy s
WHERE
ST_Within(
  ST_Centroid(y.the_geom),
  s.the_geom)

ST_Centroid()で得られる重心点が鉄道駅から半径1.5Kmのバッファに含まれるメッシュのみを取得します。
STYLEタブで表示形式をBY VALUEにし、色を緑の濃淡に変更すると以下のようになります。

マップに空のレイヤを追加し、以下のSQL文を入力します。

SELECT *
FROM yokohamagis
EXCEPT
SELECT DISTINCT y.*
FROM yokohamagis y, yokohama_stations_copy s
WHERE
ST_Within(
  ST_Centroid(y.the_geom),
  s.the_geom)

半径1.5Kmのバッファに含まれないメッシュを取得しています。
表示形式をBY VALUEに変更すると以下のようになります。

地図の凡例を見ると、レイヤによって最小値と最大値が異なっています。そこで、LEGENDタブでLEFT LABELとRIGHT LABELの値を修正します。

マップに表示するコントロールを変更したり、マップとデータセットのメタデータを編集して著作権やライセンス等に関する情報を入力すれば完成です。

さらに、鉄道駅から1.5Km外のうちバス停から250m内の人口は青の濃淡で表し、バス停位置のアイコン表示を追加すると、以下のようなマップになります。

CARTOの活用 1234