1
/
5

-Qiita記事Part.22-DuckDB + Jupyter + Kepler.gl で位置情報データの可視化を試す

こんにちは、ナイトレイインターン生の鈴木です。

先日、自身の研究に自社サービス「CITY INSIGHT分析ダッシュボード」を使ってみたという内容の記事を書かせていただきました。まさか、インターン先のサービスを卒論で使うことができるとは思っていなかったので自分としても研究内容にサービスを使えたこと、実際に使わせていただけたことに驚きと嬉しさがありました。


さて、本題に移ります。

こちらでは、Wantedlyをご覧の方に、ナイトレイのエンジニアがどのようなことをしているか知っていただきたく、Qiitaに公開している記事をストーリーに載せています。
少しでも私たちに興味を持ってくれた方は下に表示される募集記事もご覧ください↓↓


はじめに

はじめまして、徳竹です。 株式会社ナイトレイで主に位置情報の分析や可視化等に携わっています。

今回は、社内で紹介されていたDuckDBに関する下記の記事が気になったので試してみました!

https://zenn.dev/notrogue/articles/1193d0ab8d8eda

普段の業務ではSQLを使うことが多いので、DuckDBの特徴としてあげられている下記の点が特に気になりました。

  • Pandas・dplyrなどに比べ、高速(クエリの最適化を行う)、SQL(表現力や移植性)が使える、トランザクションが使える
  • ParquetやCSVの読み書き、Pands DataFrameの読み書き ローカルだけではなく、HTTP(S)、S3からも取得できるようです

この記事ではDuckDBを使って緯度経度情報を持つCSVを読み込み、Kepler.glで可視化(位置情報を扱う会社の記事なので🌏!)しています。

DuckDBをインストール

今回はpython環境にインストールしてみました。

公式HPにあるように、PythonだけでなくRなど色々な環境でつかえるとのこと。

インストール方法は公式にある通り、下記でOKです。

なお、公式のGoogle Collab notebookのサンプルも公開されているので、そちらを参考にサクッと使うのもおすすめです!

pip install duckdb

今回は、Jupyterで使ってみたいので、こちらも公式ドキュメントを参考に下記のものもインストールします。

pip install notebook
pip install jupysql
pip install duckdb-engine
pip install pandas

加えて、kepler.glで可視化もしたいのでこちらもインストール。

pip install kepler.gl

使ってみる

Jupyter Notebookを開いて、必要なライブラリのインポート

import duckdb
import pandas as pd

%load_ext sql


jupysqlの設定

%config SqlMagic.autopandas = True # Pandasデータフレーム化
%config SqlMagic.feedback = False # フィードバック表示
%config SqlMagic.displaycon = False # 接続先情報表示


メモリ上にDBを構築してDuckDBに接続

%sql duckdb:///:memory:


CSVからテーブル作成

国土数値情報からダウンロードした東京都の郵便局データをQGISでCSV化したものを使いたいと思います。

# CSVを読み込んでテーブルを作成
%%sql
create table yuubin as
select *
from read_csv_auto('tokyo_yuubin.csv'); #郵便局データの読み込み
# 作成したテーブルに対してクエリを投げてみる

%%sql
select *
from yuubin;

↓結果


次は住所に「渋谷」がつく郵便局を調べてみましょう!

%%sql
select *
from yuubin
where P30_006 like '渋谷%';

↓結果


Kepler.glで地図にプロットしてみる

読み込んだCSVの緯度経度(latitude, longitude)をもとにKepler.glをつかって地図にプロットしてみましょう!

まずはkepler.glをインポート

from keplergl import KeplerGl

続いて、先程作成したテーブルをデータフレームに格納します。

%%sql
df <<
select *
from yuubin;

最後に、そのデータフレームをkeplerで読み込みます。

map_yuubin = KeplerGl(height=400)
map_yuubin.add_data(data=df, name='yuubin')
map_yuubin

そうすると、下図のようにインタラクティブなマップが表示され、グリグリ動かせます。 色を変えたり、マーカーサイズを変更したりと操作可能です。

今回は本当にさわりの部分のみを試してみましたが、色々と活用できそうな気配なので研究していきたいと思います!


最後に

私たちの会社、ナイトレイでは一緒に事業を盛り上げてくれるGISチームメンバーを募集しています! 現在活躍中のメンバーは開発部に所属しながらセールス部門と密に動いており、 慣れてくれば顧客とのフロントに立ち進行を任されるなど、顧客に近い分やりがいを感じやすいポジションです。

このような方は是非Wantedlyからお気軽にご連絡ください(もしくは recruit@nightley.jp まで)

✔︎ GISの使用経験があり、観光・まちづくり・交通系などの分野でスキルを活かしてみたい
✔︎ ビッグデータの処理が好き!(達成感を感じられる)
✔︎ 社内メンバーだけではなく顧客とのやり取りも実はけっこう好き
✔︎ 地理や地図が好きで仕事中も眺めていたい

一つでも当てはまる方は是非こちらの記事をご覧ください 。 二つ当てはまった方は是非エントリーお待ちしております(^ ^)

「位置情報×モビリティ.まちづくりetc事業領域拡大の為GISエンジニア募集」

https://www.wantedly.com/projects/1031814

▼ナイトレイとは?

https://www.wantedly.com/companies/nightley

株式会社ナイトレイでは一緒に働く仲間を募集しています
2 いいね!
2 いいね!
同じタグの記事
今週のランキング
株式会社ナイトレイからお誘い
この話題に共感したら、メンバーと話してみませんか?