- LinuxサーバーのMySQLデータベースにRスクリプトからアクセス
- Linuxサーバーの R で作成したチャートを ssh 接続元のクライアントに表示
Linux へ R
Linux サーバーに yum を使って R をインストールした最大の弊害は、インストール前の Java 8 の環境を Java 6 に変えられてしまうこと。おかげで、同じサーバで Java 8 でコンパイルしていたシステムは動かなくなった...。この原因に気づくまで、めっちゃ焦った。環境構築て地味だが意外と落とし穴が多い(苦手な作業...)。
どの R パッケージが Java環境に影響したかは不明だが、以下のコマンドで Java 8 に変えれば大丈夫。
# alternatives --config java
R 自体にも問題があった。初期パッケージを入れただけでは、回帰分析で「収束できません」のようなエラーが出る。この回避には、以下のコマンドで R パッケージをアップデートする。
update.pakages()
R から MySQL接続
Linux サーバにRを入れる最大の目的がこれ。DBアクセスを外部から許可する案は、セキュリティー上の理由から外した。また、サーバー上のシステムを R と連携させる案もあるので、R 環境をサーバーに構築するのが妥当と考えた。
以下、R から MySQL のDBへのアクセス結果。
> library(RMySQL)
> con <- dbConnect(dbDriver("MySQL"), dbname="DB名", user="ユーザー名", password="DBパスワード")
> mytb <- dbGetQuery(con, "select * from テーブル名")
警告メッセージ:
1: .local(conn, statement, ...) で:
Unsigned INTEGER in col 0 imported as numeric
2: .local(conn, statement, ...) で:
unrecognized MySQL field type 7 in column 2 imported as character
3: .local(conn, statement, ...) で:
Unsigned INTEGER in col 17 imported as numeric
4: .local(conn, statement, ...) で:
Unsigned INTEGER in col 18 imported as numeric
> class(mytb)
[1] "data.frame"
> ncol(mytb)
[1] 19
> nrow(mytb)
[1] 9304
テーブルアクセスの際に出る警告は今のところは無視...。
clsss()コマンドの結果から、DBテーブルを R の dataフレームとして扱えるのは嬉しい。19カラム、9,304行のテーブルに正しくアクセスできていることを確認。これにより、直接DBからデータ取得して、リアルタイムのデータ分析が可能になるのは、非常に大きい。
X クライアント表示
久しぶりに、Unix(厳密には Linux)の X アプリケーションを、クライアント表示した。どういうことかというと、リモートの UnixサーバーでGUIアプリの動作結果を、接続元のクライアントの端末に表示するもの。今時こんなことをする人は少ないのかもしれないが、未だに面白い技術だと思う。
とはいえ、Mac の端末からこれを行うのは初めてで、少し手間取った。そもそもこれをやることになった理由は、Linuxのサーバーで R を動かして、その動作を確認するため。単に R で統計計算するのであれば必要ないが、チャート表示の確認をするにはどうしても必要。
iMac と MacBookAir、どちらもOS は OS X Yosemite(10.10.4)なのだが、微妙に挙動が違った(勘違いかもしれないが...)。MacBookAir が面倒だったので、そちらを優先して書くが、iMac での操作も一部書いた。
ssh 接続は付属のコンソールを使うが、サーバーの結果をGUI表示するには、XQuartz が必要。これは、デフォルトは入っていない模様。
http://xquartz.macosforge.org/landing/
以下、コンソールで実行。
$ Xquartz &
(私の iMac では、以下の xhost コマンドで自動に XQuarz は起動した)
(私の iMac では、以下の xhost コマンドで自動に XQuarz は起動した)
$ export DISPLAY="localhost:0.0"
$ xhost +
$ ssh -X ユーザー@サーバーアドレス
$ ssh -X ユーザー@サーバーアドレス
サーバーからの表示ができない場合は、左のように XQuarz の「ネットワーク・クライアントからの接続を許可」の設定をする必要があるかもしれない。
以降は、サーバーにログイン後の実行。
$ export DISPLAY="クライアントアドレス:0.0"
これ以降、サーバーでGUIアプリはクライアントに表示する、xclock コマンドなどで試すことができる。今回の Linuxサーバーには X関連のアプリケーションを入れていないので、以前 iMac で実行した「ロジスティック回帰分析」を、先にインストール済みの R で分析結果を表示する。なお、ggplot2 の Rパッケージはインストール済み。
$ R
> library(MASS)
> b <- biopsy
> b$classn[b$class=="benign"] <- 0 # 分類化
> b$classn[b$class=="malignant"] <- 1 # 分類化
> ans_v1 <- glm(classn ~ V1, family=binomial(link="logit"), data=b)
> library(ggplot2)
> ggplot(b, aes(x=V1, y=classn)) +
geom_point(position=position_jitter(width=0.3, height=0.06), alpha=0.4, shape=21, size=1.5) +
stat_smooth(method=glm, family=binomial)
以下のように、前回と同じ結果を表示。R のパッケージをアップデートしたので回帰分析のエラーも出なくなった。この描画が徐々に表示されるのを見ながら、遠く離れたネットワーク経由のことを改めて思った(笑)



0 件のコメント:
コメントを投稿