初めてのCartoDB その1: shp と csv を読み込む


[FOSS4G Advent Calendar 2015 二個目](http://qiita.com/advent-calendar/2015/foss4gvol2) の記事として、2回にわたって投稿します。

CartoDBを使えば，お手持ちのデータやダウンロードして手に入るデータをもとに，気軽に空間的な可視化ができ，データの空間的な考察ができるようになること，そして，PostGISの機能を使うことでより深いデータ解析が行えることを見ていただければと思います。

# CartoDB とは
CartoDB は，Location Intelligence (LI) のための，クラウド環境で使える新しいツールです。
従来のGISとは異なり，誰もが極めて手軽に LI を自分の課題に持ち込むことができます。
空間情報の可視化や解析，そのためのプロセッシング，データの共有を担うサービスであり，ユーザが課題の本質に集中できることも大きな特徴です。

# CartoDB を始めよう
## ユーザ登録
[CartoDB](https://cartodb.com/) で，ユーザ登録します。今回はフリープランで[^1]行います。
[^1]: データ権限が Public しか選べないので注意
SIGN UP で ユーザ名，メールアドレス，パスワードを入力して登録し，ログインします。
## データの準備（shpファイル 編）
今回は，国土交通省 国土数値情報 の [行政区域データ](http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03.html)（埼玉県）をお借りして，読み込みます。
CartoDB では，shpファイル群 を含む zip を指定することで，shp を追加できます。
zipファイル名は shp と同一の必要があるので，違う場合は変更したり作り直したりして同じにしましょう。
## Map の作成
CartoDB の dashboad で 右上の NEW MAP を クリックすると，Add datasets 画面になります。
ここで，Connect dataset を選び，先ほどの zip を画面にドラッグ&ドロップ し，行政区域のデータを追加します。

<img width="90%" alt="01.png" src="https://qiita-image-store.s3.amazonaws.com/0/104969/7cefcb59-e9be-35b8-a122-82dba5a482ff.png">

そうすると，Map の作成とともに，読み込んだデータがいいかんじで表示されます。

### DATA VIEW と MAP VIEW
画面中央の上にあるボタンを見ると，現在 MAP VIEW になっているので，DATA VIEW に切り替えます。
そうすると，行政区域の属性データをみることができます。

<img width="90%" alt="02.png" src="https://qiita-image-store.s3.amazonaws.com/0/104969/95b2333e-04cb-d628-d055-bc954072b96f.png">

### Map layer wizard でラベルの表示

MAP VIEW に戻し，次は行政区域データの表示を少し変更します。
今表示されているローマ字の市町村名は背景図の OSM のものなので，属性データの市区町村名を表示します。

1. 右側のサイドバーの筆のマーク（wizard）を開くと，デフォルトで SIMPLE という見た目に設定されていることがわかります。
1. その一番下にある，Label Text を，n03_004（市区町村名）にして，
1. Label Font を unifont Medium[^2] にします。

[^2]: 日本語データはこのフォントで表示できます。

<img width="90%" alt="03.png" src="https://qiita-image-store.s3.amazonaws.com/0/104969/4b9dc3f1-f3a2-a5ce-1088-25bcef13f12d.png">

市町村名のラベルを表示できました[^3]。
[^3]: OSMのラベルが気になる人は，左下の Change basemap で，CartoDB の左から3つめ，Positron (labels below) にしてください。

## データの準備（csv 編）
次に，環境省 [いきものログ](http://ikilog.biodic.go.jp) の投稿情報の csv を使用させていただき，CartoDB に読み込みます。

1. いきものログの「簡単に検索する」で，なにか好きな生きものの種名を入力し，埼玉県 を選び，検索
1. 検索結果の一番下まで行き，「CSV形式」でダウンロード
1. zip の中の，ikilog_yyyymmdd….txt （ファイル名が短い方）を Excel で開き，1行目が列名，2行目以降がデータになるよう整形し，csv として保存

少しややこしいので，整形済みの埼玉県のスズメ報告データを以下に置いておきます。

- <a href="http://chizudb.jp/ac/ikilog_suzume_saitama_utf8.csv" target="_blank">埼玉県スズメ報告データ</a>
（『環境省いきものログ（埼玉県内のスズメ報告，2015.12.15 時点）』の一部の属性を抽出したものです）

### データの追加
shpファイルは Map 作成と同時に読み込みをしましたが，今度は今の Map に追加します。
右側のサイドバーの一番上の ＋ をクリックし，先ほどと同様に csv を ドラッグ＆ドロップ してください[^4]。
[^4]: ここで「Encoding detection error」で追加できない場合は，メモ帳などで文字コード：UTF8で保存しなおしてみてください。
読み込めたら，DATA VIEW で確認します。

## テーブル結合
行政区域とスズメのデータを読み込めたところで，試しにこの2つを結合してみたいと思います。

1. 行政区域データを選択し，DATA VIEW に切り替える
1. サイドバーの下から3つめ，Merge Datasets をクリック
1. Column join（属性結合）を選択
1. 左側：n03_004，右側：対象がスズメデータになっていることを確認し，county を選択して，NEXT STEP をクリック
1. それぞれすべての属性が選択されているので必要なものを選び，MERGE DATA SETS をクリック

<img width="90%" alt="04.png" src="https://qiita-image-store.s3.amazonaws.com/0/104969/43bfaf93-5570-dd6e-cac0-a55b7143eabe.png">

結合結果が出力されました。オレンジが重なって濃くなっているほど，スズメデータ数が多いようです。
DATA VIEW も見てみると，行政区域データは区名だけなのに対し，スズメデータは市＋区名のため，一部がうまく結合されず別の行になってしまいました[^5]。
[^5]: SQLでいうと FULL JOIN が実行されます。
これを解決するには，スズメデータをあらかじめ Excel で区名だけにしてもいいですが，「初めてのCartoDB その2」では，CartoDB 上で少し工夫して対処したいと思います。

# 参考サイト
- [地図DB](http://chizudb.jp)：CartoDBに関するもっと詳細な情報を掲載しています。