d3.jsで鳥類目録

こちらの記事を見てやってみたくなったので、鳥類目録第7版とpythonで真似してみました。
http://kuteken.hatenablog.com/entry/2013/12/25/025118

データの準備

鳥類目録第7版を利用します。こちらから
http://www.bird-research.jp/1_shiryo/7ed/

データの変換

取ってきたデータをEXCELで以下のようなCSVに変換します。

キジ目,キジ科,エゾライチョウ
キジ目,キジ科,ライチョウ
以下同じ

Pythonで上記CSVを階層構造を持ったJSONに変換します。
以下のコードをcsv2json.pyで保存します。

# -*- coding: utf-8 -*-
import csv, itertools, json

def cluster(rows):
    melist=[]
    for key, group in itertools.groupby(rows,key=lambda r: r[0]):
       group_rows = [row[1:] for row in group]
       if len(group_rows[0]) == 1:
            me={"name":key,"children" :[{"name":g[0]} for g in group_rows]}
       else:  
            me={"name":key,"children":cluster(group_rows)}
       melist.append(me)
    return melist
    
rows = list(csv.reader(open('bird.csv', 'r')))
print json.dumps({"name":"data","children":cluster(rows)}, indent=1,ensure_ascii=False)

以下のように実行してflare.jsonファイルに保存します。

python csv2json.py > flare.json

d3.jsで表示

こちらのサンプルからhtmlのソースを取ってきてindex.htmlで保存します。
http://bl.ocks.org/mbostock/4063550

flare.jsonとindex.htmlを同じフォルダに保存します。
フォルダに移動して以下のコマンドでローカルサーバーを起動します。
※cross-orginの問題で単純にブラウザで開いても見れないため

python -m SimpleHTTPServer 5000

http://localhost:5000/ にアクセスすると表示されているはず。


感想

  • d3.jsの構造は理解できていませんが、簡単にそれっぽくなってうれしい。
  • http://nytimes.github.io/svg-crowbar/ これでsvgで保存したけど、フォントやらなんやらが上手く表示されなくて残念。
  • http://tech-sketch.jp/2013/10/d3js-svg-convert-to-png.html これみて画像に保存したけど、同じくぐちゃーってなって、そのままでは上手くいかない。
  • 確認種とかは、もっと上手い見せ方があるはずなので、色々ためしてみたい。

以上です。