電子点数本を使ってDPCデータを拡張する(2)
前回はDPC点数本をDBに取り込むと便利かも、みたいな話で終わりました。
例えば
| 分類番号 | 病名 | 入院期間1 | 入院期間2 | 入院期間3 |
|---|---|---|---|---|
| 040080xx | 肺炎 | 5 | 12 | 30 |
みたいなテーブルを用意します。今回は仮にdpcmasterというテーブル名とします。 Dファイルには分類番号が記録されていますので、それを結合キーに利用しましょう。 SQLだとこんな感じになります。
select データ識別番号,入院年月日,実施年月日,SUM(行為点数*行為回数),d.分類番号,
実施年月日 - 入院年月日 + 1 AS 在院日数,dpc.入院期間1,dpc.入院期間2,dpc.入院期間3,
CASE WHEN 実施年月日 - 入院年月日 + 1 <= dpc.入院期間1 THEN '入院期間I'
WHEN 実施年月日 - 入院年月日 + 1 > dpc.入院期間1 AND 実施年月日 - 入院年月日 + 1 <= dpc.入院期間2 THEN '入院期間2'
WHEN 実施年月日 - 入院年月日 + 1 > dpc.入院期間2 AND 実施年月日 - 入院年月日 + 1 <= dpc.入院期間3 THEN '入院期間3'
ELSE '出来高'
END AS DPC期間
from d1607 AS d
LEFT OUTER JOIN dpcmaster AS dpc
USING(分類番号)
Where データ区分 <> 97
group by データ識別番号,入院年月日,実施年月日,d.分類番号,dpc.入院期間1,dpc.入院期間2,dpc.入院期間3
あまり綺麗なSQLとは言い難いですが、とりあえずその日のDPC期間をカテゴライズ可能です。
こんなのスクリプトにやらせろよ!という向きに、Pythonのコードも用意しました。
import pandas.io.sql as psql
import psycopg2 as pg
import pandas as pd
import numpy as np
connection = pg.connect(database='DB名',
user='ユーザー名',
host='localhost',
password='パスワード',
port=ポート番号)
df = psql.read_sql("select データ識別番号,入院年月日,退院年月日,実施年月日,分類番号,簡易病名,入院期間1,入院期間2,入院期間3, \
sum(行為点数*行為回数) AS DPC総点数,実施年月日-入院年月日 + 1 AS 在院日数 \
from d1607 \
LEFT OUTER JOIN dpcmaster \
USING(分類番号) \
where データ区分 <> 97 \
group by データ識別番号,入院年月日,退院年月日,実施年月日,分類番号,簡易病名,入院期間1,入院期間2,入院期間3",connection)
#入院期間列を作成
Zaiin = df['在院日数']
Kikan1 = df['入院期間1']
Kikan2 = df['入院期間2']
Kikan3 = df['入院期間3']
DPCKIKAN = []
for zaiin,kikan1,kikan2,kikan3 in zip(Zaiin,Kikan1,Kikan2,Kikan3):
if zaiin == 0:
dpckikan = '出来高分岐'
elif zaiin <= kikan1:
dpckikan = '期間I'
elif zaiin > kikan1 and zaiin <= kikan2:
dpckikan = '期間II'
elif zaiin > kikan2 and zaiin <= kikan3:
dpckikan = '期間III'
else:
dpckikan = 'DPC期間超'
DPCKIKAN.append(dpckikan)
df['DPC期間'] = DPCKIKAN
ひたすらelifを叩くばかりです。
あんまり綺麗じゃないですね…ただ、ちょっと込み入った分析をやろうとすれば、どうせPythonでやることになりますから、さっさとDataFrameに落としてしまうのは一つの手です。