4.標準操作
4_1 標準操作その1(2021/2/19)
1)データの理解
データ分析をする際に最も重要なことは、最初のアプローチとして、必ず、どういう背景があって、何のために、何がしたいのかを明確にすることです。目的を達成するための手段としてデータ分析を行います。データ分析を行なう時は、先ず、データを用意するということになります。そのデータで目的を達成できない場合は、別のデータを用意するか、当該データからできる目的に変更せざるを得ません。
次に、データが決定したら、データを理解することが必要です。データ分析してみないと分からないと考えるのは早計です。データ分析を始める前に、そのデータの成り立ち、特長、留意点等を予め整理してください。もし、そのデータについて知っている人が居るのであれば、説明してもらうようにしてください。
しかし、データの特徴は、知っている人にとっては当たり前と思われているために、説明が省かれてしまうことがよくあります。どういうタイミングで、どういう単位で作成されているのか、項目毎に関係はあるのか等を掘り下げて確認する様にしてください。
データを理解する場合は、キー項目を必ず確認する必要があります。しかし、データを説明してくれる人は、キー項目を理解していないことがあります。何をもってレコード(データを構成する単位)がユニークになるのかを確認するようにしてください。
例えば、データ分析対象の約1万件のレコードからなるデータは、月別にファイルが分かれており、各月の約2千件のレコードからなる5つのファイルで構成されているとします。そして、このデータ分析単位となるレコードは、注文単位で作成され、1日平均百件程度で、平日に限り処理されていて、注文の情報は、注文日時でユニークになるもので、1つの顧客が複数の注文を同一日に複数行う場合がある等の様な事です。
この場合、説明する人は、注文は顧客単位だというかもしれませんが、正しく理解すれば、この注文レコードは、注文日時がレコードをユニークにするキー項目だということが分かります。この事例では、注文は顧客単位だという説明が間違っていることが明らかですが、実際のデータ分析のケースでは、データがどの様に構成されているのかが分かっていないことがよくありますので、不正確な説明で、間違った分析をしてしまうことがあります。
説明している人は、騙そうとはしていないと思いますが、正しく伝えていない場合、勘違いするような伝え方をしている場合があるということ前提として、確認するようにしてください。
データの特徴は、データ分析をしてみないと分からないということに異論はありませんが、データ分析する前に、分かる範囲でデータの特徴を理解するということが重要になります。
2)データの特徴と内容
本項で使用するデータ「医療データ1」について説明します。
本データは、架空の病院の3カ月分の入院情報です。当該病院には、外来に加えて複数の病棟がありますが、その中の急性期の患者が入院する4つの一般病棟の全入院患者の医療関連情報になります。
病院に関する知識が無い方向けに補足します。日本では、全国民が公的医療保険(皆保険制度)に入っており、健康保険、船員保険、共済組合、国民健康保険、後期高齢者医療制度のいずれかに加入していることになります。公的医療保険の加入者である国民(被保険者)は、医療機関を利用する場合は、医療費の一部を負担しますので、負担額を利用時に支払いますが、医療を提供した医療機関は、月毎に提供した医療内容を整理し、利用者の保険の種類に応じて、医療費の審査支払機関(社会保険診療報酬支払基金、国民健康保険団体連合会の2種類)に請求します。審査支払機関は、請求内容を審査し、正しい請求に関しては、個々の保険者に支払いを求め、その結果、医療機関に請求金額が支払われます。
多くの病院では、診療報酬請求だけでなくほとんどの医療関連情報を月単位で管理しています。入院患者も何月に入院して、何月に退院したのか、病院内で転棟(病棟の移動)をしたのか、どの様な状態で、どの様な医療が提供されたのかが管理されます。病院の利用者は、最初の利用時に病院側にデータ登録され、患者毎にユニークになる患者IDが付されます。但し、入院情報の入院患者は、患者IDに入院日を付して管理します。なぜなら、患者が退院した後、再入院した場合は、別の入院データとして管理する必要があるからです。同じ日に2度入院した場合は、どうなるのかと疑問を抱く人もいるかもしれませんが、審査支払機関に対して、同じ被保険者分として同じ日に2回分の入院日を請求することはできませんので、1人の患者に対して同じ日に2回以上の入院登録をすることはありません。つまり、患者IDと入院日で入院患者は、ユニークになります。
本データは、架空ですが、入院患者の日々の情報になります。入院期間中(入院日から退院日まで)の全ての日の情報が漏らさず管理されています。但し、稀ですが、外泊で24時間在院していない日については、本データが抜けている場合があります。また、本データの対象である4病棟以外に転棟している間は、当然ですが、本データが管理されていません。この2つのケース以外については、必ず、毎日のデータが存在しています。
本データは、CSV(Comma Separated Value)の形式で、すべての行(レコード)が同じ形式になっています。最初の1行目は、ヘッダー情報であり、次の通りです。
ward_id,pat_id,leave_d,enter_dt,assess_dt, j1,j2, k1,k2,k3, s1,s2, i1,i2, score
各項目の内容は、以下の通りです。
ward_id:病棟ID(4桁のコード)
pat_id:患者ID(4桁の数字による前ゼロ付のコード)
leave_d:退院日(YYYYMMDD形式※)
enter_dt:入院日(YYYYMMDD形式)
assess_dt:評価日(YYYYMMDD形式)
j1:状況情報その1(整数値)
j2:状況情報その2(整数値)
k1:介助情報その1(整数値)
k2:介助情報その2(整数値)
k3:介助情報その3(整数値)
s1:処置情報その1(整数値)
s2:処置情報その2(整数値)
i1:医療情報その1(整数値)
i2:医療情報その2(整数値)
score:得点(J1からi2までの合計値)
※退院日は月単位で設定されるが、未退院の場合は設定されていません。その他の項目に抜けはありません。
本データは、4病棟(1000、2000、3000、4000)の3カ月(2020年9月から11月)の全入院患者の日々の入院情報で、全18,491件(平均:約50.799人/病棟・評価日)のレコードがあります。病棟ID、患者ID、評価日の順番に並んでいますので、エディタで中身を確認してから処理を始めてください。
3)日付の操作
分析するデータには、日付データが含まれていることがよくあります。単に、文字列として処理するだけであれば問題ないのですが、数値計算する場合は面倒です。Pythonでは、この様な日付に関する処理を助けてくれるライブラリがあります。
from datetime import datetime,date
の様にして、「datetime」のライブラリを使います。
from datetime import datetime,date,timedelta
from dateutil.relativedelta import relativedelta
の様にして、差分計算の処理を追加することもあります。ネット上で検索すれば、事例が沢山表示されますが、正しくないもの、古い情報で使えないものもありますので注意して活用してください。
今回のテストデータは、日付が「YYYYMMDD形式」の文字列になっていますので、「format=”%Y%m%d”」の様にして日付データとして変換します。「%Y」だけが大文字となっていますが、間違いではありません。「%y」とした場合は、日付が「YYMMDD形式」の西暦の下2桁で年を表していることになりますので注意してください。
日付データに変換すると、年、月、日だけでなく、時分秒(指定していないと全て0になる)も管理され、それぞれについての処理が可能になります。例えば、1カ月後としたい場合は、月に1を加えれば、翌月の同日になります。但し、3月31日の月に1を加えると4月30日になりますので注意してください。また、4月30日の月から1を減ずると3月30日になり、元には戻りません。1カ月後にずらしたい場合は、3月の場合は、31日を加算することになり、4月1日から5月1日までに移動することになります。
本項の分析では、入院日から評価日までの経過日数を処理しています。実際のプログラムで、どのように処理しているかを学んでください。
日付データの演算結果は、日付データとして(例えば、12 Days)扱われていますので、数値として與買いたい場合は、整数に置き換える等の処理が必要です。但し、欠損値があるデータは、文字列や浮動小数点数でしか扱えませんので、整数に変換しても、欠損値が含まれている場合は、自動的に浮動小数点数に置き換えられてしまいますので注意してください。
4)入退院に着目
本データは、患者毎の評価日単位のレコードになっていますので、先ずは、評価日毎にどの様な状況になっているかを分析してみます。評価日毎にどの程度の患者がいるのか、j1からscoreまでの項目毎の状況がどの様になっているかを病棟単位に比較してみるということになります。病棟が違えば、病棟の病床数に違いがあり、入院している患者の診療科が異なるということもあり、入院状況の分析結果は異なるものになると思われます。しかし、本データはテストデータですので、その違いの評価はできません。
そこで、入退院に着目した分析を加えてみました。入院経過日数とその逆の退院日までの日数による状況分析をしています。
入院経過日数とは、入院した日を入院経過日数の1日目とし、入院経過日数が評価日毎に増加することになります。今回のデータは、評価対象が9月から11月までの3カ月間(91日間)になりますが、この期間に入院している患者は、9月1日より前に入院している患者もいることに注意してください。
入院経過日数は、次式で求められます。
入院経過日数 = 評価日 - 入院日 + 1
入院経過日数は、入院した日に退院した患者は、1日になり、9月1日に入院して11月30日に退院した患者は、91日になります。9月1日より前に入院した患者は、91日より大きな数字になる可能性もあります。
こうした方法で、この3カ月間の入院経過日数に着目した場合、1日目の評価結果とは、全ての患者の入院1日目となり、入院が経過するごとに状況が変わっていくことが見て取れるようになります。状態が悪くなった時点で入院してきますので、入院1日目は状態が悪く、治療が進めば、状態が良くなってくると考えられますが、手術をするまでは悪化し、手術が終わってしばらくしてから良くなるということも考えられます。本データはテストデータですので、正確には分かりませんが、どうなりますでしょうか。
但し、入院経過日数は、入院してから30日までを評価の対象とします。一般的な病院の平均在院日数は、2週間程度ですので、あまり長期に入院している患者の状況は無視することにしました。
退院予定は、入院経過とは逆の考え方になります。退院した日を退院の1日目とし、その前日を2日目とします。退院予定日数は、次式で求められます。
退院予定日数 = 退院日 - 評価日 + 1
つまり、この3カ月間で退院した患者の退院経過の状況を分析するということです。但し、この3カ月の間で退院していない患者は、評価の対象外です。つまり、退院予定日数は、1日から最大で91日になります。11月30日に退院した患者が、9月1日に在院していて評価対象になっていたとしても、91日になるからです。入院した日に退院した患者は、退院予定日数は、1日しか持ちません。したがって、退院1日目の患者数が一番多く、退院から遡る日数が多くなると対象となる患者数は減っていきます。また、退院する時は、一般的には、状態が良くなっているものと想定できます。さて、テストデータでは、どうなるでしょうか?また、退院予定日数も入院経過日数と同様に最大30日までとしています。
さて、テストデータの分析結果を見て見ましょう。
尚、本分析は、「WareHaose」「4.標準操作方法」の「4_1.標準操作その1」から、プログラムと入力データや処理結果のファイル等がダウンロードできます。