2014/12/5 PostgreSQL カンファレンス 2014 R と Qt による PostgreSQL / PostGIS データの 可 視 化 ツール リンク 元 http://kenpg2.seesaa.net/article/409350942.html
ツール 開 発 の 目 的 2 1 PostgreSQL / PostGIS データをシームレスに 可 視 化 したい 2 R との 連 携 作 業 のプラットフォームを 作 りたい
開 発 したツール pgqr( 仮 称 )の 土 台 3 GUI アプリケーションフレームワーク Qt ( 言 語 は C++) Qt アプリに R を 埋 め 込 むライブラリ RInside グラフィック 出 力 表 示 に SVG と WebKit を 利 用 Qt 公 式 ウェブサイト http://qt-project.org/ RInside 開 発 者 のサイト http://dirk.eddelbuettel.com/
PostGIS について 4 公 式 ウェブサイト http://postgis.net/ PostgreSQL の 拡 張 の 一 つ(スタックビルダからもインストール 可 能 ) 地 理 情 報 システム(GIS) 用 のデータ 型 と 関 数 を 追 加 ジオメトリ( 線 面 点 )とラスタ( 画 像 ) 両 方 に 対 応 長 所 数 値 や 文 字 と 同 じように 地 理 データを SQL で 扱 える 短 所 数 値 や 文 字 と 同 じようにクエリ 結 果 を 見 ても?
PostGIS だけのビュワーなら 5 QGIS というオープンソースの GIS ソフトウェアがよく 使 われる 公 式 ウェブサイト http://www.qgis.org/ 豊 富 な 機 能 を 持 つ 汎 用 的 な GIS ソフト 最 新 バージョン 2.6 の Windows インストーラは 317MB R の 前 は 自 分 もよく 使 っていた pgadminiii プラグインのビュワーを 開 発 している 人 もいるが ブログ(フランス 語 )http://ageoguy.blogspot.jp/ Windows で QGIS のライブラリ+ Python を 使 用 自 分 が 試 した 範 囲 では 動 いたことがない
R について 6 公 式 ウェブサイト http://www.r-project.org/ オープンソースの 統 計 処 理 言 語 独 自 の GUI が 付 属 コンソール + グラフィック 出 力 ウィンドウ グラフ 作 成 が 手 軽 plot(...) だけで 何 か 描 ける 地 理 データの 可 視 化 も 手 軽 plot(...) だけで plot(dataframe) plot(polygons)
R と PostgreSQL / PostGIS の 連 携 (1) 7 R から PostgreSQL の 数 値 文 字 データを 読 み 込 む : 簡 単 パッケージ RPostgreSQL を 使 う library(rpostgresql) con = dbconnect(host='...', port=5432, dbname='...' ) sql = '...' dat = dbgetquery(con, sql) PostGIS の 地 理 データを 読 み 込 む : いろいろ 面 倒 あらかじめクエリで 地 理 データをテキスト 化 (WKT 形 式 ) パッケージ rgeos を 使 い R の 地 理 データに 戻 す など PostgreSQL への 接 続 を 自 動 化 したい 今 回 のツールで 実 現 両 方 のデータ 処 理 を 共 通 化 したい
R と PostgreSQL / PostGIS の 連 携 (2) 8 PostgreSQL のクエリ 操 作 と R 実 行 をシームレスに 行 う 過 去 の 試 み R のコードを PostgreSQL 内 に 文 字 データとして 保 存 し pgadminiii の 自 作 プラグインで R を 起 動 してコードを 渡 す (2012 年 PgDay で 紹 介 ) PostgreSQL への 組 み 込 み 言 語 PL/R を 使 う (2013 年 PostgreSQL カンファレンス 2014 年 アンカンファレンスで 紹 介 ) PL/R は 制 約 があるので(クエリに 日 本 語 を 使 えない DO 文 にできない 等 ) さらに PL/Python を 使 って 補 う いずれも 柔 軟 性 が 少 なく 無 理 矢 理 感 も 強 かった 手 探 りの 世 界 を 突 き 抜 けて 今 回 のツールで 新 しい 段 階 へ
ツール pgqr( 仮 称 ) 開 発 実 行 環 境 9 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 に 出 力
ツール pgqr( 仮 称 ) 構 成 要 素
6 つのパーツ(QDockWidgets) 11 1 データベース 接 続 2 SQL 入 力 3 SQL 結 果 テーブル 4 R スクリプト 入 力 5 グラフィック 表 示 6 メッセージ 表 示 1 4 2 3 5 6 いずれも Dockable = 移 動 切 り 離 し 表 示 / 非 表 示 が 自 由
6 つのパーツの 基 本 関 係 (1) 12 PostgreSQL と R を 別 々に 使 う ツール 起 動 1 データベース 接 続 4 R スクリプト 入 力 2 SQL 入 力 手 動 でコピペ 実 行 エラーまたは 非 参 照 系 クエリ 3 SQL 結 果 テーブル print 文 があれば 実 行 6 メッセージ 表 示 5 グラフィック 表 示
6 つのパーツの 基 本 関 係 (2) 13 PostgreSQL / PostGIS の 結 果 テーブルを 可 視 化 する ツール 起 動 1 データベース 接 続 2 SQL 入 力 アプリ 内 部 での R の 動 作 1) PostgreSQL に 接 続 して SQL を 実 行 2) 結 果 を 取 得 してグラフ / 地 図 化 実 行 3 SQL 結 果 テーブル メニュー 実 行 (グラフ or 地 理 データ 表 示 ) 実 行 内 容 が 4 R スクリプト 入 力 欄 に セットされる 確 認 や 再 実 行 が 簡 単 5 グラフィック 表 示
6 つのパーツの 基 本 関 係 (3) 14 PostgreSQL / PostGIS へのクエリを 直 に 可 視 化 する ツール 起 動 1 データベース 接 続 2 SQL 入 力 アプリ 内 部 での R の 動 作 1) PostgreSQL に 接 続 して SQL を 実 行 2) 結 果 を 取 得 してグラフ / 地 図 化 テーブルへの 表 示 をスキップ アプリ 本 体 からはクエリを 実 行 しない メニュー 実 行 (グラフ or 地 理 データ 表 示 ) 実 行 内 容 が 4 R スクリプト 入 力 欄 に セットされる 確 認 や 再 実 行 が 簡 単 5 グラフィック 表 示
6 つのパーツの 基 本 関 係 (4) 15 PostgreSQL / PostGIS へのクエリ 結 果 を テンプレートで 処 理 ツール 起 動 1 データベース 接 続 2 SQL 入 力 アプリ 内 部 での R の 動 作 1) PostgreSQL に 接 続 して SQL を 実 行 2) 取 得 したデータをテンプレートに 渡 す 3) テンプレートからの 文 字 出 力 グラフ や 地 図 がそれぞれ 表 示 される 分 析 用 のテンプレート メニュー 実 行 実 行 内 容 が 4 R スクリプト 入 力 欄 に セットされる 確 認 や 再 実 行 が 簡 単 6 メッセージ 表 示 5 グラフィック 表 示
6 つのパーツの 基 本 関 係 (5) 16 PostgreSQL / PostGIS データを SQL で 直 接 HTML / SVG 化 ツール 起 動 1 データベース 接 続 2 SQL 入 力 アプリ 内 部 の 動 作 1) PostgreSQL に 接 続 して SQL を 実 行 2) 取 得 した HTML / SVG データをそのまま QWebView に 表 示 SVG はテキスト 形 式 なので SQL を 工 夫 すれば 直 接 SVG を 作 成 できる SVG に 適 宜 HTML タグ CSS JavaScript を 加 えれば そのまま Web ページになる SQL To SVG の メニュー 実 行 R を 経 由 せず PostGIS データを SVG で 可 視 化 できる 5 グラフィック 表 示
1 データベース 接 続 (QLineEdit) 17 psql と 同 じ 接 続 文 字 列 を 1 行 で 入 力 -h ホスト 名 またはアドレス -p ポート 番 号 -d データベース 名 -U ユーザ 名 メニューでデータベース 接 続 を 実 行 パスワードダイアログ
2 SQL 入 力 (QTextEdit) 18 普 通 に SQL を 入 力 し メニューから 実 行 選 択 部 分 があれば そこだけ 実 行 右 クリックとショートカット Undo, Redo, Cut, Paste など (QTextEdit に 元 から 備 わっている) 追 加 予 定 : キーワードハイライト 検 索 置 換
3 SQL 結 果 表 示 テーブル(QTableView) 19 基 本 SELECT 結 果 をそのまま 表 示 ただし bytea 型 と PostGIS データは データがある 印 の... だけを 表 示 各 列 の 表 示 文 字 数 全 体 の 表 示 行 数 の 上 限 を 設 定 可 能 元 のデータ 型 アプリ 内 部 の Qt の 型 の 両 方 を 表 示 可 能
4 R スクリプト 入 力 (QTextEdit) 20 3 SQL 入 力 と 基 本 的 に 同 じ 実 行 先 を R に 替 えたもの ただし PostgreSQL へ 接 続 するコードを 書 く 場 合 パスワードは 空 に R 実 行 時 : アプリ 側 で 自 動 的 にパスワードダイアログを 開 き 内 部 で 接 続 文 字 列 にパスワードを 加 えて PostgreSQL へ 渡 す
5 グラフィック 表 示 (QWebView) 21 基 本 : R が 出 力 したグラフ / 地 図 などの SVG を 読 み 込 んで 表 示 複 数 のグラフ / 地 図 があれば 縦 に 並 べて 表 示 ( 普 通 の Web ページと 同 様 ) 複 数 のグラフ / 地 図 への 移 動 リンクを JavaScript で 付 加 (アプリ 内 部 で 自 動 挿 入 )
5 グラフィック 表 示 欄 に Web ドキュメント 22 QWebView に URL を 渡 せば WebKit ベースのブラウザ 代 わりに 現 在 はアドレスバー 等 がないので 基 本 リンクをたどるだけ 右 クリックで 戻 る 進 む 再 読 み 込 み のみ 可 能 リンク 先 によっては 開 けない 場 合 あり
6 メッセージ 表 示 (QTextEdit) 23 基 本 : データベース 接 続 の 実 行 結 果 SQL エラーなどを 表 示 R の print 文 の 結 果 表 示 も 兼 ねる
ツール pgqr( 仮 称 ) 使 用 と 動 作 の 実 際
起 動 時 と View メニュー 25 なぜか 起 動 時 は グラフィック 表 示 部 (QWebView)が 最 も 大 きくなる 各 ウィジェットの 位 置 大 きさ 表 示 / 非 表 示 は 自 由 に 変 えられる フルスクリーン 化 フォント 変 更 も 可 能 今 後 検 討 : 任 意 時 点 の 表 示 設 定 を お 気 に 入 り として 保 存 し 再 利 用 できるようにしたい
データベースに 接 続 できたら 26 メッセージ 欄 に DB Connected : qt_sql_ default_connection と 表 示 される Qt にデフォルトで 備 わっている 汎 用 的 な データベース 接 続 モジュール QtSql を 使 用 QtSql では PostgreSQL の NOTICE, INFO を 受 け 取 れないようなので libpq の 利 用 を 今 後 検 討
テーブルの 先 頭 を 表 示 し グラフのテスト 27 グラフにする 列 を 選 択 し 右 クリックでグラフ 種 別 を 選 ぶだけ
グラフ 描 画 は 外 部 の R スクリプトが 行 う 28 テーブルでの 右 クリックと メニューバーの Pg Data は 同 じ グラフの 各 メニューは 特 定 の フォルダ 下 にある R スクリプト 一 つ 一 つと 対 応 選 択 されたメニューに 対 応 する R スクリプトを 自 動 実 行 実 行 されたスクリプトは アプリ 内 に 読 み 込 まれる 確 認 や 修 正 実 行 が 簡 単
グラフ 化 する 列 を 増 やした 場 合 (1) 29 基 本 的 に R スクリプトを 任 意 の 列 数 に 対 応 させている グラフの 種 類 によって 複 数 列 の 処 理 の 仕 方 が 変 わる Ex. 棒 グラフ 3 通 り( 別 々のグラフ 縦 に 積 む 横 に 並 べる) 円 グラフ 1 通 り( 別 々のグラフ) 棒 グラフのパターン 1 各 列 が 別 々のグラフ
グラフ 化 する 列 を 増 やした 場 合 (2) 30 棒 グラフのように 複 数 パターンのグラフがある 場 合 グラフィック 表 示 欄 に 縦 に 並 べて 表 示 各 グラフに 飛 ぶフローティングリンクの JavaScript を アプリが 自 動 追 加
デモ(1)ウィンドウ 関 数 の 移 動 平 均 をグラフ 化 31
デモ(2)MADLib のロジスティック 回 帰 32
デモ(3)PostGIS ジオメトリとメッシュデータ 33
デモ(4)SQL で 動 的 な SVG を 作 成 し 動 かす 34
ツール pgqr( 仮 称 ) 位 置 づけと 今 後 35 1. 主 眼 はデータの 概 括 チェック 分 析 の 試 行 可 視 化 手 法 の 検 討 分 析 の 中 でも 軽 い 部 分 を 手 軽 に PostgreSQL と R を 連 携 させて 行 う 2. pgadminiii の 置 き 換 えではなく グラフ / PostGIS 用 の 補 完 物 クエリ 以 外 の 機 能 は 自 分 の 場 合 pgadmin で 足 りる 3. R 本 体 の 置 き 換 えでなく PostgreSQL 連 携 用 の 補 完 物 アプリに 埋 め 込 んだ R は どうしても 不 安 定 さが 残 る 重 い 処 理 や グラフを 微 調 整 しながら 出 力 を 繰 り 返 す 時 には 不 向 き これから 取 り 込 みたいこと 1. グラフ / 分 析 用 テンプレートの 充 実 2. SQL / R スクリプトエディタ 部 分 の 機 能 向 上 3. できれば 他 の OS への 展 開 も
以 上 です ご 清 聴 ありがとうございました リンク 元 http://kenpg2.seesaa.net/article/409350942.html