こんにちは。Keepdata BI担当のピーです。
前回は 医療BI奮戦記として、医療データ可視化プロジェクトのデータ加工と検索画面周りの苦労話をご紹介いたしました。
今回は、グラフ部分の苦労話をご紹介したいと思います。グラフィカルに可視化を行う事がBIの醍醐味ですので、心躍りますね。
まずは要件を整理しましょう。
課題②
患者を検索後、その患者について処方した時期(処方を変更した時期)と、問診システムから症状の数値データや血液検査結果がどう推移したかをかけあわせ、時系列にグラフで可視化したい。
前回の課題では、処方と問診数値と検査数値の検索条件で一致した患者IDを抽出するという目的でしたが、今回は患者IDが分かっていて、IDに合致する数値や文字列を取得して、グラフ上にマッピングさせていくという内容です。これだけを聞くと極めて単純で、すぐにでも実現できそうな課題に思えました…。実際に取り掛かるまでは。
データ構造とアウトプットのおさらいをいたしますと以下のようになります。
<各データの項目>
<問診データと検査データのリレーション>
<アウトプット(Excelで作成したイメージ)>
折れ線と積み上げ棒グラフのコンボ、BIツールの部品ではあまり見かけたことのない形です…。とりあえずそこは後に回し、まずは折れ線グラフを作成しましょう。
この段階で早速依頼者である医師にグラフを見せる機会が訪れました。作業をしていた情シスの席に別件の用事があり、突然いらっしゃいましたのです!
その時のやり取りを再現いたします。使用しているBIツールは国内で有名なBIツールでした。
医師:進捗はどうですか。
私:はい。検査結果の方をグラフ化したところです。
<当時を思い起こし、Excelで再現したグラフ>
医師:おお、作業速いですね。グラフもきれいに出てますね。
私:ありがとうございます。
医師:ところで、複数患者を比べてみてみたいのですが、可能ですか?
私:上下に並べるだけで良いですか?
医師:はい。そんな感じで結構ですよ。
私:(その場で作業。グラフをコピーして並べ、患者IDを変えただけ。)
私:これでいかがでしょう。
医師:そんなに簡単に作れるのですね。どれどれ…。実は二つの薬の効果を調べたくてね。あれ、おかしいな。同じような結果ですね。片方は従来薬で、ゆっくり効いて、もう片方は生物学製剤で急激に効く薬のはずなんだけど、同じような効き方のグラフになっていますね。
私:そうですね。。確かに同じようなグラフになってしまってますね。
医師:特に、この部分(赤枠)で急激に薬が効いているのですが、同じ期間で同じ効果のはずが…。あれ、上のグラフは間隔が8日で、下のグラフは間隔が25日もありますね。
私:本当ですね。。データが存在するところしか表示しておりませんので。
医師:これだと、何もしていない間の期間をよく確認しながらグラフを見ないと判断を誤ってしまいますね。重要なのは、正確な期間による折れ線の傾きなのに。見る側の注意力と想像力が試されてしまいます。何とかならないでしょうか。
私:速やかに対応案を検討します。
確かに通常エクセルなどで、表をグラフにすると表中にデータがある部分しかグラフにプロットしませんので、間が詰まったグラフが完成します。これは、5年前のBIツールでは大抵同じような状況でした。
過去、スーパーなどで1日から31日までの売り上げ数量を表にした日配表を作成する際に、よく売れている製品は毎日出るので1日から31日までの表になるのに、月に数日しか売れない製品だと、表が2行になってしまったりして、見ずらいなどと言われて対応をしたことがありました。
<当時ダメだった日配の表、データがなくても30日分を表にしたい>
あの時と同じだなぁと当時の私は思いました。
当然ながら時系列を考慮する機能を持つBIツールがあるかどうかを探すわけですが、当時は見つけれられませんでした。(現在は時系列機能を持つBIも出てきているようですが、それほど多くはないと思います。)
その時にとった手法は…。1日から31日までの空データをカレンダーマスタテーブルとして用意して、マスタテーブルを主表とした左結合を設定し、売り上げがない日付のデータも無理やり表示する。
ただし、この手法には決定的な弱点があります。
表のように商品を行に表示したい場合は、商品ごとにカレンダーを作らなければなりません。これは現実的ではありませんので、データベースでの解決は早々にあきらめ(できなくはないと思いますが、メンテナンスが大変)、BIツールの集計結果同士の結合機能による解決を図りました。
幸いにも、検査データ+問診データのケースでは前述の表の「商品」にあたるようなカテゴリは不要です。
カレンダーマスタは、30年ぐらい用意すればよいでしょうか。Excelで表を作成しCSVに出力。割と地味な作業です。
作成したデータをそれぞれBIツールに登録し、結合。
早速医師に診ていただきました。
医師:そうそう、これが見たかったんですよ。
私:本来はこんなにも傾きが違ったのですね。
当時は、裏で結構苦労していることをおくびにも出しませんでした。情シスの方にはお話ししておりますが、使う方には関係のない話ではありますので。
時が移って、現在のお話しをいたします。同じような内容をKeepData Hubで実現してみると…。
<KeepData Hub医療ソリューション画面>
期間を加味する部品を用いて、描画を実現します。赤枠の部分を拡大すると、以下のような形になります。
期間により幅が異なることが確認できます。
ツール側で勝手に期間を判断してくれるので、面倒なカレンダーマスターを用意する必要はありません。これは便利です。
現在同じものを同じ医師にお見せしたところ、いたく感動されておりました。これで、診療の現場で参考になる事例を患者にも見せられますし、医師の診療計画の手助けにもなるとの事。これは全ての医者が必要とする情報であり、日本の医療現場が変わるかもしれないという事も仰っておりました。
大げさな言葉にも聞こえますが、今の医療現場の情報活用の遅れを鑑みるとあながち間違ってないのかもしれません。
BIツールで実現できないことはもちろんあります。できないと切り捨ててしまわざるを得ない場合も多々あります。しかし、こういった要望の裏には深い意味や強い期待がある場合がある事を常に念頭に置いて、真剣に向き合う必要があると改めて反省いたしました。
当時に戻ります。
医師:ところで、検査結果や問診結果を沢山表示すると軸表示や単位がたくさん表示されてしまって、見ずらいのですが何とかならないでしょうか。
私:軸を一つにすることはできます。やってみましょう。ああ、上下に張り付いて余計見ずらくなりましたね…。
新たな問題の発生です。長くなりましたので、今回はここまでにしましょう。
ここまで読んでいただきまして、ありがとうございました。
まとめ
・時系列グラフを作成する場合に、日付などの期間を正確に表示した表を作成するには
①DB上にカレンダーマスターを用意して、カレンダーマスタを主とした左結合をする。
②集計後結果結合機能を持つBI製品を利用する場合は、当機能を使った方が結果的にメンテナンスしやすい。
③時系列表現に対応したBIツールがあるなら専用機能を利用する。