JAB-HCCのshinyアプリ
2015年、虎の門病院肝臓センターからこんな報告がありました。
本邦における B 型慢性肝疾患からの肝発癌予測リスクスコアモデル(Japanese risk estimations of HBV-related HCC:JAB-HCC)の作成
https://www.jstage.jst.go.jp/article/kanzo/56/9/56_477/_pdf
Cox 比例ハザードモデルを用いて、リスクスコアモデルを作成したというお話です。抗ウイルス療法無治療のB型慢性肝疾患症例1143例で検討されています。これだけの症例をしっかりデータ取れるのは、さすが虎ノ門です。古い症例はHBV-DNA測定系が違うはずですが、保存血清で全症例に現行のリアルタイムPCR方で再測定した結果を用いているとのこと…羨ましいかぎりです。
肝発癌に寄与する因子として抽出された,年齢,性別,肝硬変の有無,ALT 値,
AFP 値,血小板数,HBeAg の有無,HBVDNA 量の計8 因子は、各項目の重み付けを行い、点数の総和を検査するだけで、リスクを判定することができます。
患者さんに説明する際にも、核酸アナログを内服するリスク、内服しないリスクを説明しやすくなりとても重宝しておりました。たしかどこかの製薬会社のパッフレットにも早見表のようなものがあった気がします。ところが先日患者さんに説明しようとした際に、あれ!スコア表が無いぞ…汗
文献が見つかったので良かったのですが、資料を探す暇もおしいので、shinyアプリにしておきました。当院はshiny-severにアップしてあるので、ブラウザのお気に入りから、すぐ使えます。
shinyを勉強するのに参考になればと思い、汚いコードですが晒しておきます。すこし直せばいろいろなスコア計算のアプリができるので、よく使うものは自分用にスコア計算アプリを作ってみてはどうでしょうか。
library(shiny) library(shinythemes) ui <- fluidPage(theme = shinytheme("flatly"), titlePanel("JAB-HCC(Japanese risk estimations of HBV-related HCC)"), fluidRow( column(2, numericInput("age", label = h4("年齢:"), value = 50) ), column(2, radioButtons("gender", label = h4("性別:"), c("男性" = "1","女性" = "2")) ), column(2, radioButtons("LC_JAB", label = h4("肝硬変"), choices = list("無し" = 0, "有り" = 4), selected = 0) ), column(2,numericInput("Plt", label = h4("Plt"), value = 25, step=1) ), column(2,numericInput("ALT", label = h4("ALT"), value = 35, step=1) ) ), fluidRow( column(2, radioButtons("AFP_JAB", label = h4("AFP"), choices = list("20ng/ml未満" = 0, "20mg/ml以上" = 2), selected = 0) ), column(2, radioButtons("HBeAg_JAB", label = h4("HBe抗原"), choices = list("陰性" = 0, "陽性" = 3), selected = 0) ), column(3, radioButtons("HBVDNA_JAB", label = h4("HBV-DNA量"), choices = list("5.0log copies/ml未満" = 0, "5.0log copies/ml以上" = 2), selected = 0) ) ), fluidRow(style="background-color:#fafafa;", column(12, h4(textOutput("text_JABHCC")) ) ) ) server <- function(input, output) { output$text_JABHCC <- renderText({ gender <- as.numeric(input$gender) if(gender == 1){ genderJAB <- 4 # male } else if(gender == 2){ genderJAB <- 0 #female } age <- as.numeric(input$age) if(age <= 44){ ageJAB <- 0 } else if(age >= 45 & age <= 49){ ageJAB <- 3 } else if(age >= 50 & age <= 54){ ageJAB <- 5 } else if(age >= 55){ ageJAB <- 6 } LCJAB <- as.numeric(input$LC_JAB) ALT <- as.numeric(input$ALT) if(ALT < 45){ ALTJAB <- 0 } else if(ALT >= 45){ ALTJAB <- 1 } AFPJAB <- as.numeric(input$AFP_JAB) Plt <- as.numeric(input$Plt) if(Plt >= 15){ PltJAB <- 0 } else if(Plt < 15){ PltJAB <- 2 } HBeAgJAB <- as.numeric(input$HBeAg_JAB) HBVDNAJAB <- as.numeric(input$HBVDNA_JAB) JAB_score <- genderJAB + ageJAB + LCJAB + ALTJAB + AFPJAB + PltJAB + HBeAgJAB + HBVDNAJAB if(JAB_score <= 6){ comment_JAB <- c("低リスク群:累積10年発癌率 0.6%") } else if(JAB_score >= 7 & JAB_score <= 10){ comment_JAB <- c("中リスク群:累積10年発癌率 2.2%") } else if(JAB_score >= 11 & JAB_score <= 15){ comment_JAB <- c("高リスク群:累積10年発癌率 18.8%") } else if(JAB_score >= 16 & JAB_score <= 24){ comment_JAB <- c("超高リスク群:累積10年発癌率 61.5%") } paste("JAB_score :", JAB_score,", ", comment_JAB) }) } shinyApp(ui = ui, server = server)
DiagrammeR 〜RでGraphvizを使う~
パワポでフローチャートや、ネットワーク図を作ると、ノードやエッジの位置が微妙にずれて、面倒だなと感じる人はいませんか。そんな時は、Graphvizを使用しましょう。
Graphvizを使うと、DOT言語で書かれたグラフを画像に出力できます。R言語では、DiagrammeRのgrViz関数で、DOT言語のテキストを画像に出力します。
目次:
DiagrammeR::grViz()
DiagrammeRではgrViz関数をつかって、DOT言語で記述されたグラフ構造を出力します。
簡単なサンプルです。grViz関数の引数部分(ダブルクォーテーションの中)がDOT言語です。
library(DiagrammeR) grViz(" digraph test { A -> B } ")
出力はこうなります。
Graphviz本家サイトにも沢山のサンプルがありますが、実際思ったとおりのグラフを出力しようと思うと細かい設定で詰まることが多く、結局ググってサンプルコードを探してくることが多いです。ここでは、自分がよく使う設定等を補足しながら、Graphvizの使い方をまとめておきます。
Graphvizサイト: Graphviz - Graph Visualization Software
DOT言語
DOT は、プレーンテキストを用いてデータ構造としてのグラフを表現するための、データ記述言語の一種である。
DOTの構造
digraph 名前 {}
digraphの名前は、予約語を指定するとエラーがでます。Rstudioでは.gv/.dot拡張子のファイルは、シンタックスハイライトが使えるので、予約語かどうかが分かりやすくて良いと思います。
graph, node , edgeについてそれぞれ指定していきます。
- graph [ 属性=値, ...]
- node [ 属性=値, ...]
- edge [ 属性=値, ...]
と記載していきます。
digraph test { graph[rankdir = LR, label ="fig. 1"] node [shape = box] A; B; edge[color = red, arrowsize = 1.5, arrowhead = normal] A -> B }
RstudioでDOT言語
上記のようにgrViz関数の引数としてDOT言語のテキストを記述するサンプルがよく書かれていますが、これだとdigraph以下がハイライトされません。長いコードではタイポしやすくなるので、.gvまたは.dot拡張子で外部ファイルとしておいた方がシンタックスハイライトを利用できるので良いかと思います。Rstudioでは、.gv(.dot)ファイルは、sourceペイン右上にプレビューボタンがでて、ボタンを押すとgrViz関数を呼び出して自動でRstudioのviewerペインに出力してくれます。test.dotファイルなら、DiagrammeR::grViz("test.dot")が実行されます。
Graphviz Attributes
http://204.178.9.49/content/attrs
Graph属性
サンプル
digraph graph_attribute { graph[rankdir = LR, label ="fig. 1", labelloc = t # t, b fontsize = 10, fontcolor = red, bgcolor = darkgreen, nodesep = 0.1, ranksep = 0.1] }
rankdir : グラフ全体の方向をTB(top -> bottom),LR(left -> right)等変更。
label : ラベル名。
labelloc : ラベルの位置指定。t(top), b(bottom)で指定。
bgcolor : バックグラウンドカラー。
nodesep : ノードの間隔。
ranksep : ランクの間隔。
Node属性
color属性
digraph node_color { node[style = "filled", color = IndianRed] IndianRed; }
- カラーサンプル
shape属性
digraph node_shape { node[shape = box] box; }
- shapeサンプル
style属性
digraph node_style { node[shape = box] node[style = solid] A node[style = dashed] B node[style = dotted] D node[style = bold] E node[style = filled] F node[style = striped, fillcolor = "Yellow1:Yellow2:Yellow3:Yellow4"] G node[shape = circle , style = "dashed, wedged", fillcolor = "Tomato1:Tomato2:Tomato3:Tomato4"] H }
- スタイルサンプル
rank属性
digraph node_rank { groupA -> groupB -> groupC A; B; C; D; E; F; G; H; I {rank = same; groupA; A; B; C;} {rank = same; groupB; D; E; F;} {rank = same; groupC; G; H; I} }
label属性
labelの値にはHTMLっぽい記述をすることが出来ます。
digraph test_graph { node[shape = rect, color = black, label = <<I>italic</I>>] A node[label = <10<sup>2</sup>>] B }
ただし、<>で全体を囲む必要があるみたいです。すべてのタグが使えるわけでも無いみたい…難しい。
特殊な文字は、node[label = "&文字列;"]みたいな感じで出力できるものもあります。
digraph test_graph { node[shape = box] node[label = "Σ Π α β γ δ ε"] A node[label = "θ κ λ μ φ ω"] B node[label = "♠ ♡ ♢ ♣ ♪ 〒 "] C }
image属性
image属性でファイルパスを指定すると画像を出力できるはずだが、僕の環境のDiagrammeR::grviz()では下記の.dotファイルはうまく出力できませんでした。
digraph ramen { rankdir = LR node[penwidth = 0, fontname = helvetica, labelloc = t, fontsize = 30, fontcolor = darkgreen] node[image = "img/sio.jpg"] sio; node[image = "img/syouyu.jpg"] syouyu; sio -> syouyu }
いつもはUbuntu16.04にRstudio severをインストールして使用しているので、
$ sudo apt install graphviz
でGraphvizをインストールして。
.dotファイルを、Terminalからコマンドで出力して対応
$ dot -Tpng ramen.dot -o ramen.png
最近のRstudioはTerminalペインもあり、気軽にコマンド入力もできるので、DOTファイルからそのまま出力して今回はごまかしました。(DiagrammeRからできるひと教えてください…)
Edge属性
arrowhead属性
digraph edge_arrowhead { edge[arrowhead = diamond] A -> B; }
arrowheadサンプル
- arrowhead名の前に"o"をつけると中抜けになります。
- "r","l"をつけると、左右半分のarrowheadになります。
- arrowhead名をつづけて書くと、arrowheadを繋げて出力できます。
dir, arrowsize, color, penwidth属性
digraph edge_arrowhead { edge[dir= both, arrowsize = 0.5, color = red, penwidth = .5] A -> B; }
dir, size, color, penwidthサンプル
port属性
digraph edge_arrowhead { edge[tailport = n] A -> B; }
portサンプル
Subgraph
digraph subgraph_label { rankdir = TB subgraph cluster0{ A -> B label = "group0" {rank = same; A; B;} } subgraph Cluster1{ C -> D -> E label = "group1" {rank = same; D; E;} } B -> C }
subugraphでいくつかのnodeをグループ化できます。subgraph名は、小文字のcから始まるcluster**の場合に枠線がつきますが、その他の名前では枠が消えます。
subgraphからnode、nodeからsubgraph、subgraphからsubgraphへもedgeを繋ぐことができます。
digraph G { compound=true; subgraph cluster0 { b -> d; c -> d; } subgraph cluster1 { e -> g; e -> f; } b -> f [lhead=cluster1]; d -> e; c -> g [ltail=cluster0, lhead=cluster1]; c -> e [ltail=cluster0]; }
ちなみに、subgraphを重ねることはできないみたいです。
DOT言語で、どんなグラフも作成できるわけではないですが、何度か作り直しながら使用していくようなフローチャートや、ネットワーク図は、パワポで作るより修正が楽だと思います。
Enjoy!
参考
DiagrammeR
Graphviz - Graph Visualization Software
DiagrammeRと仲良くなった話ーグラフィカルモデルのためのDiagrammeR速習ー
【みんなの知識 ちょっと便利帳】使いたいときの HTML特殊文字 & 機種依存文字 - ギリシャ文字
環境
> sessionInfo() ## R version 3.4.3 (2017-11-30) ## Platform: x86_64-pc-linux-gnu (64-bit) ## Running under: Ubuntu 16.04.4 LTS ## ## Matrix products: default ## BLAS: /usr/lib/libblas/libblas.so.3.6.0 ## LAPACK: /usr/lib/lapack/liblapack.so.3.6.0 ## ## locale: ## [1] LC_CTYPE=ja_JP.UTF-8 LC_NUMERIC=C ## [3] LC_TIME=ja_JP.UTF-8 LC_COLLATE=ja_JP.UTF-8 ## [5] LC_MONETARY=ja_JP.UTF-8 LC_MESSAGES=ja_JP.UTF-8 ## [7] LC_PAPER=ja_JP.UTF-8 LC_NAME=C ## [9] LC_ADDRESS=C LC_TELEPHONE=C ## [11] LC_MEASUREMENT=ja_JP.UTF-8 LC_IDENTIFICATION=C ## ## attached base packages: ## [1] stats graphics grDevices utils datasets methods base ## ## other attached packages: ## [1] DiagrammeR_0.9.2 ## ## loaded via a namespace (and not attached): ## [1] Rcpp_0.12.15 pillar_1.1.0 compiler_3.4.3 ## [4] RColorBrewer_1.1-2 influenceR_0.1.0 plyr_1.8.4 ## [7] bindr_0.1 viridis_0.5.0 tools_3.4.3 ## [10] digest_0.6.15 jsonlite_1.5 viridisLite_0.3.0 ## [13] gtable_0.2.0 evaluate_0.10.1 tibble_1.4.2 ## [16] rgexf_0.15.3 pkgconfig_2.0.1 rlang_0.1.6 ## [19] igraph_1.1.2 rstudioapi_0.7 yaml_2.1.16 ## [22] bindrcpp_0.2 gridExtra_2.3 downloader_0.4 ## [25] dplyr_0.7.4 stringr_1.2.0 knitr_1.19 ## [28] htmlwidgets_1.0 hms_0.4.1 grid_3.4.3 ## [31] rprojroot_1.3-2 glue_1.2.0 R6_2.2.2 ## [34] Rook_1.1-1 XML_3.98-1.9 rmarkdown_1.9 ## [37] ggplot2_2.2.1 purrr_0.2.4 readr_1.1.1 ## [40] tidyr_0.8.0 magrittr_1.5 backports_1.1.2 ## [43] scales_0.5.0 htmltools_0.3.6 assertthat_0.2.0 ## [46] colorspace_1.3-2 brew_1.0-6 stringi_1.1.6 ## [49] visNetwork_2.0.3 lazyeval_0.2.1 munsell_0.4.3
RでSQLserver(on Ubuntu16.04)への接続
現在当院で使用している電子カルテのデータベースは、MicrosoftのSQLサーバーです。ハードの保守期間も過ぎたため、今回ハードの更新と、Windows10版のクライアントへの変更、サーバーも変更しました。
今までは、クライアントPC(windows7)にR・RstudioをインストールしSQLサーバーへの接続していましたが、他のクライアントPCからも同じ環境を使用できるようにRstudio serverで環境を作り直すことにします。
まず、ローカルネットワーク上にUbuntu実マシンを用意し、R環境とRstudio serverをインストール。いままでは、Windowsマシンからしか接続した経験がないので、UbuntuでのODBC接続の練習をしてみたいと思います。
自宅にSQLserverがないので、SQLserver2017 CTP2.1をubuntu16.04にインストールしてみます。CTPはCommunity Technology Previewで評価版のため使用制限もあります。なおこの評価版はUbuntu16.04、Ubuntu16.10で64bitが対応しているそうです。
SQLserverのインストール
練習環境ですのでUbuntu16.04の仮想マシンに構築します。
Ubuntu端末から下記シェルスクリプトを実行してください。
#!bin/sh # install R sudo sh -c "echo 'deb http://cran.ism.ac.jp/bin/linux/ubuntu xenial/' >> /etc/apt/sources.list" gpg --keyserver keyserver.ubuntu.com --recv-key E084DAB9 gpg -a --export E084DAB9 | sudo apt-key add - sudo apt-get update sudo apt-get -y install r-base # install Rstudio-server sudo apt-get install gdebi-core wget https://download2.rstudio.org/rstudio-server-1.0.143-amd64.deb sudo gdebi rstudio-server-1.0.143-amd64.deb # install RODBC sudo apt-get install r-cran-rodbc # install SQLserver curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list | sudo tee /etc/apt/sources.list.d/mssql-server.list sudo apt-get update sudo apt-get install -y mssql-server sudo /opt/mssql/bin/mssql-conf setup # passwordを確認されるので、入力。 # install tools on Ubuntu # curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list sudo apt-get update sudo apt-get -y install mssql-tools unixodbc-dev echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc
途中でパスワード入力後に、評価版のため153日の試用期間と表示されますが、テスト環境なので十分です。
Linuxクライアントからの接続
まずは先程インストールした、mssql-toolsを使って接続します。
sqlcmdコマンドが使えるようになっているので、
$ sqlcmd -S localhost -U SA -P '<YourPassword>' $ sqlcmd -S <IP address> -U SA -P '<YourPassword>'
接続できたでしょうか
$ sqlcmd -S localhost -U SA -P '********' 1>
このように出力されればOKです。
1> SELECT Name from sys.Databases; 2> GO Name -------------------------------------------------------------------------------------------------------------------------------- master tempdb model msdb testdb (5 rows affected) 1>
SELECT文でデータベース名が確認できたかと思います。
次にODBC接続の練習です。
$ sudo gedit /etc/odbcinst.ini
でODBCdriverを確認してみましょう。
次にODBC.iniの設定です。
$ sudo gedit /etc/odbc.ini
上記を参考に、ポート番号、ユーザー名、パスワード、データベース名等入力してください。 [ ] の中(今回はsqlserver)がDSN(Data Source Name)です。
準備ができいたら、ブラウザから IPaddress : 8787 でRstudio serverにログインします。
PackageタブのあるPaneでRODBCがインストールされているのも、一応確認してみてください。
あとは新規ファイルを作成し、下記コードをコピペします。
library(RODBC) con <- RODBC::odbcConnect(dsn="sqlserver",uid="SA",pwd="********") sqlQuery(con, "select name from sys.Databases;")
実行すると、コンソールにデータベース名が出力されます。
> sqlQuery(con, "select name from sys.Databases;") name 1 master 2 tempdb 3 model 4 msdb 5 testdb >
Windowsクライアントからの接続
まず、Windows PowerShellを使います。
OSの左下、検索窓に 'pow'と入力してみてください。
シェルが立ち上がったら、先程同様に
$ sqlcmd -S <IP address> -U SA -P '<YourPassword>' 1> SELECT Name from sys.Databases; 2> GO
とコマンド入力してみてください。
データベース名が出力されます。
次にODBCドライバーを使います。
OSの左下、検索窓に 'データ'と入力してみてください。
検索候補に現れた、ODBCデータソースを選択
追加ボタンを押して、
データソース名、サーバーのIPアドレスを入力
SQLサーバー認証のため、ログインID、パスワードを入力し、次へ。
test data sourceボタンを押すと、
テスト成功の文字が出て終了です。
これでRstudio-serverを使えば、全ての職場PCから電子カルテサーバーにRでアクセスできるはず…。
参考
shiny server環境構築(ubuntu16.04)
職場のみんなでshinyアプリが使えるようにshiny server環境を構築してみたいと思います。
まずR、shiny、shiny-server等インストールしましょう。
$ sudo apt-get -y install r-base $ sudo su - \ -c "R -e \"install.packages('shiny', repos='https://cran.rstudio.com/')\"" $ sudo apt-get install gdebi-core $ wget https://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server-1.5.3.838-amd64.deb $ sudo gdebi shiny-server-1.5.3.838-amd64.deb
これでインストールは終了です。
ブラウザにlocalhost:3838と入力してみましょう。
こんな画面がでれば上手くいっていると思います。
rmarkdown packageもインストールしておきましょう。
$ sudo su - -c "R -e \"install.packages('rmarkdown', repos='http://cran.rstudio.com/')\""
ブラウザにhttp://localhost:3838/sample-apps/rmd/と入力すると、
上手く見えたでしょうか。
今度は自作shinyアプリを、動かしてみましょう。
/srv/shiny-server/sample-apps以下に自作ファイルを起きます。hello,rmdフォルダはサンプルで、もともとあるものです。
ここにsample0427フォルダを作成します。
ユーザーをrootグループに入れておきます。
$ sudo gpasswd -a <username> root
あとは作成したshinyファイルを入れるだけです。
$ mkdir sample0427 $ gedit ui.R $ gedit server.R
でshinyファイルを作成しました。
ブラウザでlocalhost:3838/sample-apps/sample0427と入力してみましたが、エラーで動いていないようです。
$ sudo systemctl status shiny-server $ sudo systemctl restart shiny-server
serverは動いているようですし、再起動してみましたが、うまくブラウザから見えない…
$ sudo chmod 777 ui.R $ sudo chmod 777 server.R $ sudo systemctl restart shiny-server
権限与えてみましたが、ダメ
パッケージが入っていない?ggplot2 packageを入れてみましょう。
$ sudo su - -c "R -e \"install.packages('ggplot2', repos='http://cran.rstudio.com/')\""
今度は上手く表示されました。パッケージが入っていないだけだったのですが、気づくのに少し時間がかかりました。とりあえずこれで自作アプリがshiny-serverで動く環境ができました。あとは時間のある時に、設定ファイルの勉強をしておけば良いかな。
参考
OpenDolphin(オープンソース電子カルテ)とRstudioの接続
以前ブログで、OpenDolphin(電子カルテ)とORCA(日医レセコン)の環境構築について書いたところ、OpenDolphinデータベースを二次利用できるのかコメントをいただきました。
実際OpenDolphinで電子カルテを運用されている方の参考にもなるかもしれないので、仮想マシンでの環境構築とRstudioでの接続までを書いておきます。
いつも通りUbuntu仮想マシン(Ubuntu1404)を用意します。
インストール用のスクリプトは上記ブログ内のものとほぼ同じですが、OpenDolphinのDockerコンテナで使用しているPostgreSQLと、ORCAのPostgreSQLのポートがぶつからないように、Docker runするときにPort(5433)を指定しています(通常は5432)。RstudioもクライアントPCにインストールするのが面倒なので、Dockerコンテナで入れちゃいます。
Ubuntuは固定IPに変更しておいた方がベターです。
端末から(Ctrl+Alt+T)。ファイル名は何でもよいですが、とりあえずdorca.shでシェルスクリプト用ファイルを作成します。
$ gedit dorca.sh
エディターが開いたら、下記スクリプトをコピペして、保存してください。
#!bin/sh printf "password: " read password # install ORCA echo "$password" | sudo -S wget -q https://ftp.orca.med.or.jp/pub/ubuntu/archive.key sudo apt-key add archive.key sudo wget -q -O \ /etc/apt/sources.list.d/jma-receipt-trusty48.list \ https://ftp.orca.med.or.jp/pub/ubuntu/jma-receipt-trusty48.list sudo apt-get update sudo apt-get -y dist-upgrade echo "$password" | sudo -S apt-get install -y jma-receipt wget https://ftp.orca.med.or.jp/pub/data/receipt/outline/update/claim_update.tar.gz tar xvzf claim_update.tar.gz sudo bash claim_update.sh sudo jma-setup sudo service jma-receipt start sudo apt-get install -y panda-client2 # install OpenDolphin sudo apt-get update sudo apt-get install curl sudo curl -sSL https://get.docker.com/|sh sudo service docker start sudo docker pull dolphindev/postgres sudo docker pull dolphindev/wildfly sudo docker run --name dolphin-db -p 5433:5432 -d dolphindev/postgres sudo docker run --name dolphin-server --link dolphin-db:ds -p 8080:8080 -d dolphindev/wildfly sudo docker run -d --name=rstudio -p 8787:8787 rocker/hadleyverse sudo service jma-receipt stop sudo gedit /etc/postgresql/9.3/main/postgresql.conf sudo gedit /etc/postgresql/9.3/main/pg_hba.conf sudo service postgresql stop sudo service postgresql start sudo dpkg-reconfigure jma-receipt sudo service jma-receipt start sudo ufw disable # ORCApasswordの設定 sudo -u orca /usr/lib/jma-receipt/bin/passwd_store.sh
あとは、シェルスクリプトを実行するだけです。
$ sh dorca.sh
うちの通信環境とPCスペックだと、シェルスクリプトの実行時間は35分程度です。
途中ORCAの設定等の入力を求められますが、上記サイトに書いてある通り入力してください。
では今回のポイントのOpenDolphinとRstudioの接続です。
Rstudio serverはDockerコンテナで動いているので、仮想マシン(Ubuntu)のIPアドレスとポートをクライアントPCのブラウザーに入力します。
例)192.168.244.211:8787
UsernameとPasswordは共にrstudioです。
これでRstudio severに接続できます。
次にRstudioで新規ファイルを作成。
下記コードをコピペして、一行ずつ実行してみてください。
install.packages("RPostgreSQL") library("RPostgreSQL") library("dplyr") con <- dbConnect(dbDriver("PostgreSQL"), host="192.168.244.211", # 自分の環境のIPアドレスを入力 port="5433", user= "postgres", dbname="dolphin", password="postgres") dbGetInfo(con) dbListTables(con) dbListFields(con, "d_stamp") dbReadTable(con, "d_facility") res <- dbSendQuery(con, "select * from demo_patient;") dbFetch(res) dbDisconnect(con)
dbConnectで接続オブジェクトを作って、dbListTablesでテーブルを確認したり
dbListFieldsでカラムを見たり
dbReadTableでテーブルを読み込んだり
ORCAから患者登録をして、OpenDolphinでカルテに書き込んで、Rstudioで実際にデータベースを確認してみると、いろいろアイデアが浮かんでくるかと思います。
楽しんでみてください。
参考サイト
DICOMserver構築②~Conquest・postgreSQL on Ubuntu16.04
以前DockerImageを使って、簡単なDICOMserver構築をブログにアップしましたが、今回は一つ一つコマンド入力しながらインストールして、データベースもPostgreSQLに変更してみます。
今回も仮想マシン(Ubuntu64bit 16.04LTS)上にサーバー構築します。
画像サーバーなので固定IPにしておきましょう。
基本は、下記サイトのインストール用ZIPファイル内にあるlinuxmanual.pdfに従って操作すれば問題ありません。
Conquest DICOM software
ちなみにpdfのマニュアルを見るときは、ZIPファイルの解凍先フォルダで
$ evince linuxmanual.pdf
です。
ではインストールを始めましょう。
sudo apt-get update sudo apt-get install g++ sudo apt-get -y install apache2 sudo a2enmod cgi sudo service apache2 restart
まず作業フォルダを作り、移動します。
mkdir conquest cd conquest
つぎにPostgreSQLをインストールします。スーパーユーザーでデータベース(conquest)を作成します。
sudo apt-get -y install libpq-dev sudo apt-get -y install postgresql sudo su # become superuser su – postgres # become postgres user psql # set the password to postgres \password postgres postgres \q createdb conquest # create database conquest psql -l # confirm database exit exit
coquestフォルダーにZIPファイルを落としてきて、解凍し、コンパイルします。
cd conquest wget http://ingenium.home.xs4all.nl/dicomserver/dicomserver1419.zip unzip dicomserver1419.zip chmod 777 maklinux ./maklinux # compile and install web access
2を選びPostgreSQLを選択します。
エラー出ますが無視。
conquestフォルダーで、
./dgate -v -r # regenerate the database ./dgate -v # run the server
ここもいろいろ言われますが…
これでサーバーは構築されています。ブラウザのアドレスバーに' http://localhost/cgi-bin/dgate?mode=top 'と入力すると。
次にクライアントのKPACSに接続するための設定です。
端末から、Ctrl+Cでサーバーを止めて、conquestフォルダを覗いてみます。
postgres@ubuntu:~/conquest$ ls -a
acrnema.mapが設定ファイルです。
gedit acrnema.map
KPServer(KPACS)のアドレスとポートを入力して、保存します。
./dgate -v
ブラウザで確認。
設定が反映されます。
クライアント側の設定も忘れずに。
これでKPACSとConquestが接続されているはずです。
DockerでDICOMserver構築①~Conquest、SQLite
フリーのDICOM画像serverでConquestというのがあります。
最近はDockerImageもあるようなので、使ってみました。
まずは、Ubuntu64ビット16.04を準備。
$ gedit conquest.sh
エディターを立ち上げたら、下のスクリプトをコピペします。
#!bin/sh sudo apt-get update sudo apt-get install apt-transport-https ca-certificates sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D sudo apt-get install docker.io # まずはdocker-conquest sudo docker run --name conquest -d -p 5678:5678 -p 80:80 wavedrift/docker-conquest
実行します。
$ sh conquest.sh
これでサーバーは動いているはずです。
ブラウザのアドレスバーに”http://localhost/cgi-bin/dgate”と入力。
上手くつながってはいるのを確認してください。
次にクライアントソフトから接続するための設定をします。
クライアントは定番のKPACS。参考サイトからダウンロードしてください。アカウントの作成とログインが必要です。
ホストPC(ウチの環境はWindows)のDICOMviewerからも見えるように、acrnema.mapの設定を変更します。
まずはacrnema.mapがどこにあるのか?当たり前だけどDockerコンテナ内なので
Ubuntu端末から、conquestコンテナ内に入ります
$ sudo docker exec -it conquest bash
ファイル検索は、findで検索。
# find / -name 'acrnema.map'
conquestフォルダにありました。
# cd conquest # ls
dicom.iniもacrnema.mapもありますね、さあ編集です。でもgeditが動かない。
うーん、辛いけどviで開く。今後のためにも参考サイト見ながら操作の勉強。
# vi acrnema.map
クライアント何個かある場合はAEタイトルが重ならないように注意です。
ホストPCのIPアドレスを入力します。
conquest serverのrestartがわからず。コンテナのrestart。
$ sudo docker restart conquest
今度はホストPC上のクライアントソフト(KPACS:DICOMviewer)の設定です。
右上のDICOMsettingボタンを押して、DICOMconfigurationsで、仮想マシンのIPアドレスを入力し設定保存します。
KPACSのQuery→Networkタブを選択→Conquestにチェック→Search filterのSearchボタンを押してみましょう。テストデータが見えました。
接続成功です。
本当は、データベースをSQLiteからMySQLに変更したかったのですが、dicom.iniファイルを変更してから、もろもろの処理ができず、お手上げ状態でした。Windowsの場合はConquestのソフトでMySQLにデータベース変更したり、データベースの初期化ができるのですが、Linuxコマンドでは上手く行きませんでした。わかる人がいたら教えて欲しい…
参考:
- Conquest:Conquest DICOM software
- Docker conquest:https://hub.docker.com/r/wavedrift/docker-conquest/
- Ubuntu 12.04 LTS上へのConquestのインストール及び運用の記録:Ubuntu 12.04 LTS上へのConquestのインストール及び運用の記録