Shinyによる
電子カルテサポートシステム

r_beginner

July 9, 2016

本日のAGENDA

  • 自己紹介
  • 電子カルテ(EHR)について
  • shiny packageについて
  • 電子カルテサポートシステムについて

自己紹介

icon

  • twitter:@R_beginner
  • 札幌市北区の内科開業医
    (専門は消化器病、肝臓病)
  • 趣味:R言語、マラソン、PC自作
  • 好きなパッケージ:DiagrammeR、shiny

電子カルテについて

当院の電子カルテ

icon BML社製のMedicalStation

一般的な電子カルテの問題点

  • 診療科にかかわらず同一画面、レイアウトの変更もほぼできない。
    →必要な情報をカルテから読み取るのに時間が掛かる。
  • データ抽出に制限がある。ほぼ抽出できない。
    →データの二次利用ができない。

当院の電子カルテの問題点

  • 検索機能が弱い
  • 血液データのグラフが貧弱
  • 過去のデータを読み込むのに時間が掛かる
  • 患者(id)毎のデータ出力しかできない

これらの問題を
解決するために

SappoRoR#4

SQLserverからのデータ抽出(RODBC)
及び視覚化(ggplot2,leaflet)について

SappoRoR#5

Rstudioの入力補完機能(コードスニペット)を利用した
電子カルテサポートシステム(CUI版)について

でもRstudio使うのって
職員にはハードル高くない?

Shinyはじめました

Shiny package

インタラクティブなWebアプリを作るパッケージです。

Shinyのサンプルコード

shinyは、画面構成を作る ui.Rとデータを処理する
server.Rという2つのプラグラムで構成されます。

ui.R

library(shiny)
shinyUI(fluidPage(
  plotOutput("plot_iris") ## ここにUIスクリプト
))

server.R

shinyServer(function(input, output){
  output$plot_iris <- renderPlot({  ## ここにサーバースクリプト
    plot(iris)
  })
})

出力画面

shinydashboard

render function/Output function

Shiny Cheat Sheet1

これで基本はほぼ網羅されてます。

Shiny Cheat Sheet2


http://shiny.rstudio.com/articles/cheatsheet.html

cheat sheetの問題点

大好きなplotly,leaflet,DiagrammeRの
render/Output functionが載っていない。

plotly

ui.R

shinyUI(fluidPage(
  plotlyOutput("graph_plotly")
))

server.R

server <- shinyServer(function(input, output){
  output$graph_plotly <- renderPlotly({
    plot_ly(iris, x = Sepal.Length, type = "box")
  })
})

出力画面

leaflet

ui.R

shinyUI(fluidPage(
  leafletOutput("map", height = 500)
))

server.R

server <- shinyServer(function(input, output){
  output$map <- renderLeaflet({
    map <- data.frame(address=c("Sapporo"),lat=43.0681678,lon=141.3509345)
    m = leaflet(map) %>% addProviderTiles("CartoDB.Positron")
    m %>% 
      addMarkers(data = map, lat = ~ lat, lng = ~ lon, popup = map$address) 
  })
})

出力画面

DiagrammeR

ui.R

shinyUI(fluidPage(
  grVizOutput('diagram')
))

server.R

shinyServer(function(input, output){
  output$diagram <- renderGrViz({
    grViz("
          digraph {
          graph [overlap = true, fontsize = 10]
          node [shape = box,fontname = Helvetica]
          A; B
          node [shape = circle,fixedsize = true,width = 0.9]
          1; 2
          A->1 B->2 1->2
          }
          ")
  })
})

出力画面

電子カルテサポートシステム(EHRss:EHR support system)

EHR support system

icon 通常の診療画面
右が当院の電子カルテ

icon 左の縦型ディスプレイがEHR support system

来院患者数、患者住所マップ

電子カルテ検索

血液検査データ

薬剤毎の血液検査プロット

感染症ハザードマップ

慢性肝炎診療パネル

計算パネル

病態ネットワークグラフ

EHRss動画

EHRss動画


https://www.youtube.com/embed/8_zY_TAJ2x8

まとめ

まとめ

  • shiny版サポートシステムを作成しました。前回のRstudio版より、機能は限定されるがデータ利用は迅速に行えました。
  • DiagrammeRのネットワーク図は、見落としがちな病態もチェックが容易でした。
  • データ量の増加に伴いshinyアプリの動作が緩慢になってきました。
    -> このままのシステムではクリニック規模の単一施設での使用が限界。