+ All Categories
Home > Documents > RとQtによる PostgreSQL / PostGISデータの...

RとQtによる PostgreSQL / PostGISデータの...

Date post: 27-May-2020
Category:
Upload: others
View: 15 times
Download: 0 times
Share this document with a friend
36
2014/12/5 PostgreSQL カンファレンス 2014 R と Qt による PostgreSQL / PostGIS データの 可視化ツール リンク元 … http://kenpg2.seesaa.net/article/409350942.html
Transcript
Page 1: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

2014/12/5 PostgreSQL カンファレンス 2014

R と Qt による PostgreSQL / PostGIS データの 可視化ツール

リンク元 … http://kenpg2.seesaa.net/article/409350942.html

Page 2: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

2ツール開発の目的

1 … PostgreSQL / PostGIS データをシームレスに可視化したい

2 … R との連携作業のプラットフォームを作りたい

Page 3: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

3開発したツール pgQR(仮称)の土台

・ GUI アプリケーションフレームワーク「Qt」(言語は C++)

・ Qt アプリに R を埋め込むライブラリ「RInside」

・ グラフィック出力・表示に SVG と WebKit を利用

Qt 公式ウェブサイト http://qt-project.org/

RInside 開発者のサイト http://dirk.eddelbuettel.com/

Page 4: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

4PostGIS について

公式ウェブサイト http://postgis.net/

・PostgreSQL の拡張の一つ(スタックビルダからもインストール可能)

・地理情報システム(GIS)用のデータ型と関数を追加

・ジオメトリ(線・面・点)とラスタ(画像)両方に対応

・長所 … 数値や文字と同じように地理データを SQL で扱える

・短所 … 数値や文字と同じようにクエリ結果を見ても「?」

Page 5: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

5PostGIS だけのビュワーなら

・QGIS というオープンソースの GIS ソフトウェアがよく使われる

公式ウェブサイト http://www.qgis.org/

・豊富な機能を持つ汎用的な GIS ソフト

・最新バージョン 2.6 の Windows インストーラは 317MB

・R の前は、自分もよく使っていた

・pgAdminIII プラグインのビュワーを開発している人もいるが…

ブログ(フランス語)http://ageoguy.blogspot.jp/

・Windows で、QGIS のライブラリ+ Python を使用

・自分が試した範囲では、動いたことがない

Page 6: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

6R について

公式ウェブサイト http://www.r-project.org/

・オープンソースの統計処理言語

・独自の GUI が付属 … コンソール + グラフィック出力ウィンドウ

・グラフ作成が手軽 … plot(...) だけで「何か描ける」

・地理データの可視化も手軽 … plot(...) だけで 〃⇋ plot(dataframe)

plot(polygons)

Page 7: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

7R と PostgreSQL / PostGIS の連携(1)

・R から PostgreSQL の数値・文字データを読み込む : 簡単

・パッケージ RPostgreSQL を使う

library(RPostgreSQL)

con = dbConnect(host='...', port=5432, dbname='...' ……)

sql = '.......'

dat = dbGetQuery(con, sql)

・PostGIS の地理データを読み込む : いろいろ面倒

・あらかじめクエリで、地理データをテキスト化(WKT 形式) ・パッケージ rgeos を使い、R の地理データに戻す。など…

PostgreSQL への接続を自動化したい ⇋

今回のツールで実現両方のデータ処理を共通化したい

Page 8: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

8R と PostgreSQL / PostGIS の連携(2)

・PostgreSQL のクエリ操作と R 実行をシームレスに行う、過去の試み

・ R のコードを PostgreSQL 内に文字データとして保存し、 pgAdminIII の自作プラグインで R を起動してコードを渡す (2012 年 PgDay で紹介)

・ PostgreSQL への組み込み言語 PL/R を使う (2013 年 PostgreSQL カンファレンス、2014 年アンカンファレンスで紹介)

・ PL/R は制約があるので(クエリに日本語を使えない、DO 文にできない等) さらに PL/Python を使って補う

… いずれも柔軟性が少なく、「無理矢理」感も強かった …

手探りの世界を突き抜けて、今回のツールで新しい段階へ

Page 9: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

9ツール pgQR(仮称)開発・実行環境

・CentOS 6.6 x64(VMware Player 上の仮想マシン)

・Qt 5.3

・PostgreSQL 9.3.5 / PostGIS 2.1.3

・R 3.1.2

・R への追加パッケージ

RInside 0.2.11 … Qt アプリに R を埋め込む

RPostgreSQL 0.4 … PostgreSQL とのやり取り

rgeos 0.3-8 … WKT 形式を地理データに戻す

maptools 0.8-30 … 地理データをプロット

RSVGTipsDevice 1.0-4 … グラフ等を SVG に出力

Page 10: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

ツール pgQR(仮称)構成要素

Page 11: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

11

1 データベース接続

2 SQL 入力

3 SQL 結果テーブル

4 R スクリプト入力

5 グラフィック表示

6 メッセージ表示

いずれも Dockable = 移動・切り離し・表示 / 非表示が自由

6 つのパーツ(QDockWidgets)

1 4

5

6

2

3

Page 12: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

126 つのパーツの基本関係(1)

エラーまたは 非参照系クエリ

・ PostgreSQL と R を別々に使う

print 文があれば

実行実行

2 SQL 入力

5 グラフィック表示6 メッセージ表示

1 データベース接続

ツール起動

4 R スクリプト入力

3 SQL 結果テーブル

手動でコピペ

Page 13: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

136 つのパーツの基本関係(2)

・ PostgreSQL / PostGIS の結果テーブルを可視化する

実行

2 SQL 入力

5 グラフィック表示

1 データベース接続

ツール起動

アプリ内部での R の動作

1) PostgreSQL に接続して SQL を実行 2) 結果を取得してグラフ / 地図化

3 SQL 結果テーブル

メニュー実行 (グラフ or 地理データ表示)

実行内容が 4 R スクリプト入力欄にセットされる。確認や再実行が簡単

Page 14: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

146 つのパーツの基本関係(3)

・ PostgreSQL / PostGIS へのクエリを直に可視化する

2 SQL 入力

5 グラフィック表示

1 データベース接続

ツール起動

アプリ内部での R の動作

1) PostgreSQL に接続して SQL を実行 2) 結果を取得してグラフ / 地図化

メニュー実行 (グラフ or 地理データ表示)

実行内容が 4 R スクリプト入力欄にセットされる。確認や再実行が簡単

テーブルへの表示をスキップ。 アプリ本体からはクエリを実行しない

Page 15: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

156 つのパーツの基本関係(4)

・ PostgreSQL / PostGIS へのクエリ結果を、テンプレートで処理

2 SQL 入力

5 グラフィック表示

1 データベース接続

ツール起動

アプリ内部での R の動作

1) PostgreSQL に接続して SQL を実行2) 取得したデータをテンプレートに渡す3) テンプレートからの文字出力、グラフ

や地図がそれぞれ表示される

分析用のテンプレート メニュー実行

実行内容が 4 R スクリプト入力欄にセットされる。確認や再実行が簡単

6 メッセージ表示

Page 16: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

166 つのパーツの基本関係(5)

・ PostgreSQL / PostGIS データを、SQL で直接 HTML / SVG 化

2 SQL 入力

5 グラフィック表示

1 データベース接続

ツール起動

アプリ内部の動作

1) PostgreSQL に接続して SQL を実行2) 取得した HTML / SVG データをそのまま

QWebView に表示

R を経由せず、PostGIS データをSVG で可視化できる

・SVG はテキスト形式なので、SQL を工夫すれば直接 SVG を作成できる

・SVG に適宜 HTML タグ、CSS、JavaScript を加えれば、そのままWeb ページになる

SQL To SVG のメニュー実行

Page 17: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

171 データベース接続(QLineEdit)

・ psql と同じ接続文字列を 1 行で入力

-h ホスト名またはアドレス -p ポート番号 -d データベース名 -U ユーザ名

・メニューでデータベース接続を実行 → パスワードダイアログ

Page 18: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

182 SQL 入力(QTextEdit)

・ 普通に SQL を入力し、メニューから実行

・ 選択部分があれば、そこだけ実行

・ 右クリックとショートカット … Undo, Redo, Cut, Paste など(QTextEdit に元から備わっている)

・追加予定 : キーワードハイライト、検索・置換

Page 19: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

193 SQL 結果表示テーブル(QTableView)

・ 基本、SELECT 結果をそのまま表示

・ ただし bytea 型と PostGIS データは データがある印の「...」だけを表示

・ 各列の表示文字数、全体の表示行数の 上限を設定可能

・ 元のデータ型、アプリ内部の Qt の型の 両方を表示可能

Page 20: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

20

・ 3 SQL 入力と基本的に同じ。実行先を R に替えたもの

・ ただし PostgreSQL へ接続するコードを書く場合、パスワードは空に

R 実行時: アプリ側で自動的にパスワードダイアログを開き、 内部で接続文字列にパスワードを加えて PostgreSQL へ渡す

4 R スクリプト入力(QTextEdit)

Page 21: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

215 グラフィック表示(QWebView)

・ 基本 : R が出力したグラフ / 地図などの SVG を読み込んで表示

・ 複数のグラフ / 地図があれば 縦に並べて表示

(普通の Web ページと同様)

・ 複数のグラフ / 地図への移動 リンクを、JavaScript で付加

(アプリ内部で自動挿入)

Page 22: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

225 グラフィック表示欄に Web ドキュメント

・ QWebView に URL を渡せば、WebKit ベースのブラウザ代わりに

・ 現在はアドレスバー等がないので、基本、リンクをたどるだけ

・右クリックで「戻る」「進む」「再読み込み」のみ可能 ・リンク先によっては、開けない場合あり

Page 23: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

236 メッセージ表示(QTextEdit)

・ 基本 : データベース接続の実行結果、SQL エラーなどを表示

・ R の print 文 の結果表示も 兼ねる

Page 24: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

ツール pgQR(仮称)使用と動作の実際

Page 25: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

25起動時と View メニュー

・ なぜか起動時は、グラフィック表示部(QWebView)が最も大きくなる

・各ウィジェットの位置、大きさ、表示 / 非表示は自由に変えられる

・フルスクリーン化、フォント変更も可能

今後検討 : 任意時点の表示設定を「お気に入り」として 保存し、再利用できるようにしたい

Page 26: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

26データベースに接続できたら

・ メッセージ欄に DB Connected : qt_sql_default_connection と表示される

・Qt にデフォルトで備わっている、汎用的な データベース接続モジュール QtSql を使用

※ QtSql では PostgreSQL の NOTICE, INFO を受け取れないようなので、libpq の利用を今後検討

Page 27: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

27テーブルの先頭を表示し、グラフのテスト

グラフにする列を選択し、右クリックでグラフ種別を選ぶだけ

Page 28: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

28

・ グラフの各メニューは、特定の フォルダ下にある R スクリプト 一つ一つと対応

・選択されたメニューに対応する R スクリプトを自動実行

・ テーブルでの右クリックと、 メニューバーの Pg Data は同じ

グラフ描画は、外部の R スクリプトが行う

実行されたスクリプトは アプリ内に読み込まれる。

確認や修正実行が簡単

Page 29: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

29グラフ化する列を増やした場合(1)

・ 基本的に、R スクリプトを任意の列数に対応させている

・グラフの種類によって、複数列の処理の仕方が変わるEx. 棒グラフ … 3 通り(別々のグラフ、縦に積む、横に並べる) 円グラフ … 1 通り(別々のグラフ)

棒グラフのパターン 1 各列が別々のグラフ

Page 30: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

30グラフ化する列を増やした場合(2)

・ 棒グラフのように複数パターンのグラフがある場合

・グラフィック表示欄に、縦に並べて表示・各グラフに飛ぶフローティングリンクの JavaScript を、アプリが自動追加

Page 31: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

31デモ(1)ウィンドウ関数の移動平均をグラフ化

Page 32: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

32デモ(2)MADLib のロジスティック回帰

Page 33: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

33デモ(3)PostGIS ジオメトリとメッシュデータ

Page 34: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

34デモ(4)SQL で動的な SVG を作成し、動かす

Page 35: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

35ツール pgQR(仮称)位置づけと今後

1. 主眼はデータの概括、チェック、分析の試行、可視化手法の検討✦ 分析の中でも「軽い」部分を、手軽に PostgreSQL と R を連携させて行う

2. pgAdminIII の置き換えではなく、グラフ / PostGIS 用の補完物✦ クエリ以外の機能は、自分の場合 pgAdmin で足りる

3. R 本体の置き換えでなく、PostgreSQL 連携用の補完物✦ アプリに埋め込んだ R は、どうしても不安定さが残る✦ 重い処理や、グラフを微調整しながら出力を繰り返す時には不向き

これから取り込みたいこと

1. グラフ / 分析用テンプレートの充実2. SQL / R スクリプトエディタ部分の機能向上3. できれば他の OS への展開も…

Page 36: RとQtによる PostgreSQL / PostGISデータの 可視化ツールkenpg2.up.seesaa.net/image/20141205_slide_for_blog.pdf · ・ PostgreSQL / PostGISの結果テーブルを可視化する

以上です。 ご清聴ありがとうございました。

リンク元 … http://kenpg2.seesaa.net/article/409350942.html


Recommended