14
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonライブラリcesiumpyでバブルチャート、3D棒グラフを描画

Last updated at Posted at 2017-12-03

cesiumpy の紹介

 cesiumpyとは、Jupyter Notebook上でCesiumを表示・制御を実現するライブラリです。sinhrks 様が作成し,HatenaBlogに詳細な説明が御座います。

 Jupyter Notebook上で地図表示を行うライブラリは、LeafletをベースとしたFoliumがあります。手軽に地図上にデータを手軽に表示したい場合には非常に便利です。

Jupyter Notebookについて

 Webブラウザ上にプログラムコードと実行結果の表示が可能で、データサイエンスに関わる人に広く使われています。有名なものなので、説明と環境構築手順は割愛させていただきます。

cesiumpyの導入

1.インストール

python のライブラリ管理ツールである、pipコマンドで簡単にインストール可能です。

$ pip install cesiumpy

2. Jupyter NotebookでCesiumの表示

コマンドライン上で、Jupyter Notebookを起動します。

$ jupyter notebook

Webブラウザ上に、Jupyter Notebookが表示されたら、新しいNotebookを作成します。
fig2.png

地図の表示
ライブラリのインポートしビューワの表示コマンド cesiumpy.Viewer()を実行します。
スクリーンショット 2017-12-03 7.45.54.png

私のPython 2.7.10 では、エラーが初回だけ表示されます。
もう一度実行すると、問題なく地図が表示されます。

スクリーンショット 2017-12-03 7.52.47.png ※ 著作権が怖い為、地図をOpenStreetMapに差し替えてあります

CSVデータからバブルチャートの作成

CSVデータを読み込み、地図上に位置情報と値を半径で表示してみます。
今回は、埼玉県のオープンデータサイトから、埼玉県朝霞市の「【朝霞市】保育園・幼稚園情報」を用いて、地図上に施設位置と、収容人数を表現します。

下準備

このデータは、文字コードがShift-JISなのですが、pythonの文字コード変換でエラーが出たため、予めUTF-8に変換します。

CSVファイルのダウンロード

$ wget https://opendata.pref.saitama.lg.jp/data/dataset/69f4f927-221c-45f9-a4c1-cab5e073abce/resource/e2d31889-b457-48aa-8c16-8c4befb29aa4/download/07hoikuennyoutien-asakashi.csv

文字コードの変換

$ nkf -Sw 07hoikuennyoutien-asakashi.csv > 07hoikuennyoutien-asakashi_utf-8.csv 

CSVデータの読み込み

 データ解析を支援する機能を提供するライブラリであるpandasと、データを簡単に取り扱うためのライブラリである、numpyというライブラリを利用します。
pandasのpd.read_csv("ファイルパス")関数でCSVファイルを、読み込みデータフレーム形式として、保存します。デフォルトでは、1行目がヘッダ行として列名として利用されます。下記のサイトが参考になります。
Pandas で CSV ファイルやテキストファイルを読み込む

import pandas as pd
import numpy as np
filename = '07hoikuennyoutien-asakashi_utf8.csv'
df = pd.read_csv( filename )

データの登録と地図表示

 最初の行でcesiumpyを初期化した後に、for i, row in df.iterrows():で、CSVから取り込んだデータの行数だけ繰り返し処理を実施します。
row['カラム名']で該当行のカラムの値をアクセスしています。

v = cesiumpy.Viewer()
for i, row in df.iterrows():
    l = row['施設_収容人数[総定員]人数']
    p = cesiumpy.Point(position=[row['施設_経度'], row['施設_緯度'], 0] 
                       ,  pixelSize=l/10, color='blue')
    v.entities.add(p)
v
スクリーンショット 2017-12-03 16.12.09.png

表示

スクリーンショット 2017-12-03 16.40.10.png

3D棒グラフの描画

円柱(Cylinder)オブジェクトを追加し、3次元棒グラフを作成します。
データは、先程読み込んだデータを用います。


v = cesiumpy.Viewer()
for i, row in df.iterrows():
    l = row['施設_収容人数[総定員]人数']
    cyl = cesiumpy.Cylinder(position=[row['施設_経度'], row['施設_緯度'] ],  
                            length=l*10,topRadius=50, bottomRadius=50, material='aqua')
    v.entities.add(cyl)
v
スクリーンショット 2017-12-03 18.33.48.png

まとめ

jupyter notebookの基本である、データの読み込みから、可視化まで実施してみました。
3D地図を簡単に表示出来るcesiumpyはとても魅力的に思えました。

 今回のコードは、githubに公開しておりますので、参考にして下さい。

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?