RiakでつくるHealthcare Database

36
Riak でつくる Healthcare Database 川島直美

Transcript of RiakでつくるHealthcare Database

Page 1: RiakでつくるHealthcare Database

RiakでつくるHealthcare Database川島直美

Page 2: RiakでつくるHealthcare Database

自己紹介

• 川島直美です

- (独)国立病院機構 本部 総合研究センター診療情報分析部 システム開発専門職

-前処理SE

- GitHub: imoan1983

Page 3: RiakでつくるHealthcare Database

診療情報分析部since 2010

• 診療データの収集・分析

-医療の可視化・比較

-質の向上・均てん化への貢献

• 国立病院機構 143病院

-入院患者:60万人/年

-外来患者:のべ1,000万人/年

Page 4: RiakでつくるHealthcare Database

今日のお話

1. 医療情報の利用

2. RiakでつくるHealthcare Database

3. これからしたいこと

Page 5: RiakでつくるHealthcare Database

医療情報の利用

Page 6: RiakでつくるHealthcare Database

二次利用

医療情報の利用

一次利用

Page 7: RiakでつくるHealthcare Database

医療情報の利用

患者個人の記録

傷病の治癒

一次利用

Page 8: RiakでつくるHealthcare Database

二次利用

医療情報の利用

不特定多数の記録

新しい知見

Page 9: RiakでつくるHealthcare Database

臨床疫学研究

前向き研究

後向き研究

Page 10: RiakでつくるHealthcare Database

臨床疫学研究

研究計画

予算獲得

調査開始

前向き研究

大金

時間

Page 11: RiakでつくるHealthcare Database

臨床疫学研究

過去データ

研究計画・予算獲得

分析開始

少額

すぐ

後向き研究

支援DBを作ろう!!

Page 12: RiakでつくるHealthcare Database

MIA since 2010

Medical Information Analysis databank

• テキストファイルを収集・RDB化

• SQLで自由分析

- DPC調査データ• 包括支払い制度参加病院(1900弱)に作成義務

-レセプトデータ• 全国9万超の保険医療機関が作成する診療報酬請求データ

RDB

Page 13: RiakでつくるHealthcare Database

レセプトで分析するお話

情報処理学会 デジタルプラクティス 2013年15号https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_

action=repository_view_main_item_detail&

item_id=94255&item_no=1&page_id=13&block_id=8

第36回 データマイニング+WEB@東京

http://www.slideshare.net/naomikawashima52/

tokyowebmining36th

載りました

喋りました

Page 14: RiakでつくるHealthcare Database

もっと知りたい

• レセプト=『○○をしました ××円です』

-どうしてしたのか?

-した結果どうなったのか?

• カルテには書いてある

-自然言語処理はハードルが高い…

Page 15: RiakでつくるHealthcare Database

SS-MIX2データStandardized Structured Medical record Information eXchange

• 電子カルテのデータを統一形式で出力

-部門システム間連携

-地域医療機関情報連携

• 20種を超えるファイル定義

-検査結果 etc

-検査や薬を全国統一コードで記載

Page 16: RiakでつくるHealthcare Database

Riakで作るSS-MIX Database

Page 17: RiakでつくるHealthcare Database

実験開始

• データ提供

-中規模2病院

-1年分

- 1.5GB, 3.5GB

-オフライン収集

Page 18: RiakでつくるHealthcare Database

Why Riak?

Page 19: RiakでつくるHealthcare Database

未確定仕様

• SS-MIX2仕様書 ver 0.96

- 今後ファイル定義は変わりうる

- 患者ごと・日ごとのファイル

- 1KB程度 ×数百万/1年

- ファイル命名規則は確定• 患者ID_診療日_オーダーNo_タイムスタンプ_有効/無効フラグ

Key Value Store Key:ファイル名 Value:ファイル内容

Page 20: RiakでつくるHealthcare Database

総量予測困難

• 作成義務のないデータ

-電子カルテ未導入病院

-必要になったら必要な分だけ作成

• スモールスタートして急増にも備えたい

分散処理DB

Page 21: RiakでつくるHealthcare Database

AWS使う?

• 超個人情報です

-全ファイルに患者氏名

-オンプレミス前提

KVS + 分散処理 + オンプレミス

Riak

Page 22: RiakでつくるHealthcare Database

インポート

• HL7メッセージの組み合わせ

-繰り返しあり、省略あり

MSH|^~\&|HIS123|SEND|GW|RCV|20111220103059.0000||OUL^R22^OUL_R22|20111220131032|P|2.5||||||~ISO PID|0001||0001000052^^^^PI||患者^太郎^^^^^L^I~カンジャ^タロウ^^^^^L^P||19700405|M|||^^^^PV1|0001|O|01^^^^^CSPM|1|000000001219001||023^血清^JC10|||||||||||||201112191500OBR|1|000000011000354|000000001219001|E001^血液学的検査^99O03|||20111219|20111219||||||||607^医ORC|SC|000000011000354|000000001219001||CM||||20111220103059|||607^医師一郎^^^^^^^^L^^^^^I|01OBX|1|NM|3A016000002327102^A/G比^JC10||1.7||1.2-2.0||||F|||201112191500OBX|2|NM|3A010000002327101^総蛋白^JC10||7.2|g/dl^g/dl^99XYZ|6.70-8.3||||F|||201112191500OBX|3|NM|3A015000002327101^アルブミン^JC10||4.9|g/dl^g/dl^99XYZ|3.7-5.5||||F|||201112191500

Page 23: RiakでつくるHealthcare Database

HL7

• 各フィールドに省略あり、深さあり

- JSON化してインポート

- kuenishi/meddatumhttps://github.com/kuenishi/meddatum

“fieldA”:“AA”, “fieldB”:{“subField1”:“B1”,“subField2”:“B2”}, “fieldD”:“DD”

AA | B1 ^ B2|| DD

Page 24: RiakでつくるHealthcare Database

検索

• Riak Searchで楽々・高速

- medicineCode : AAAAA*

• どのまとまりで出力する?

Page 25: RiakでつくるHealthcare Database

患者をどう数えるか?

Q. 数えたい『1人』とは何か?

A.症例数

冬に肺炎、夏に骨折で入院は別症例

Page 26: RiakでつくるHealthcare Database

汎用的な区切りは?

• ~入院 :外来エピソード

• 入院~退院:入院エピソード

• 退院~ :外来エピソード エピソード単位で出力

入院 退院 入院

Page 27: RiakでつくるHealthcare Database

抽出後…

• JSONでは統計ソフトに渡せない

• kuenishi/presto-riakhttps://github.com/kuenishi/presto-riak

- SQLで二次元表を出力

-グループ化

presto:default> select * from table;hosp_id | patiend_id | date

---------+------------+---------123456 | 7777777777 | 19830311123456 | 0000000000 | 20000401234567 | 3333333333 | 20140122

(3 rows)

Page 28: RiakでつくるHealthcare Database

これからしたいこと

Page 29: RiakでつくるHealthcare Database

ファイルの取り消し

• ファイル名の末尾1桁で有効/無効の区別

患者ID_診療日_オーダーNo_タイムスタンプ_1

患者ID_診療日_オーダーNo_タイムスタンプ_0

ファイル名(Key)で検索して削除

Page 30: RiakでつくるHealthcare Database

データの保全

• 研究利用

-利用中に値が変わっては困る

• データ、indexディレクトリを保存

Page 31: RiakでつくるHealthcare Database

ファイル内のヒット

• 『HbA1c検査の値が10.0以上』で過剰ヒット

JSON化の工夫

“検査名”:“HbA1C”,“検査値”:8.2 …“検査名”:“血糖”,“検査値”:110.5…

“HbA1C”:8.2 …“血糖”:110.5…

Page 32: RiakでつくるHealthcare Database

検出限界以下・以上の表現

• 『検査値:[ * : 2 ]』で検索漏れ

JSON化の工夫

“検査値”:“<=1.0”…

“検査値下限”:0 …“検査値上限”:1.0 …

Page 33: RiakでつくるHealthcare Database

様々なエピソード

• ○○薬投与期間中

• ✕✕発症前1年から直近

• □□の検査値が△△を上回っている間

Start~Endを患者ごとに指定?

Page 34: RiakでつくるHealthcare Database

データの是正

• 仕様無視

-数値フィールドに文字列

- JISなのに『 ① 』『 ㌘ 』

-『髙』野さんは? 標準化団体へ問い合わせ

• 独自コード

-標準コード付番中

Page 35: RiakでつくるHealthcare Database

終わりに

• 大きな予算がつきそうです

-数十病院、リアルタイム収集

• 成果物を発信していきます

- https://github.com/imoan1983

Page 36: RiakでつくるHealthcare Database

ありがとうございました