電子点数本を使って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に落としてしまうのは一つの手です。