DPC疾患の月別推移を可視化する
今回はDPC入院料の分析のお話です。
DPC入院料の推移を見ると、時折奇妙な動きをすることがあります。特定の科の数字が跳ね上がったり、下がったりです。
もちろん中身をチェックすることになりますが、毎回集計して目で見るのは面倒ですね。自動化しましょう。
まず、元のデータとしてこんなものを用意します。
data = psql.read_sql("select to_char(実施年月日,'YYYYMM') AS month,データ識別番号,実施年月日,診療科区分,分類番号, \ sum(行為点数*行為回数) AS DPC総点数 \ from dtable \ Where データ区分 = 93 \ group by month,データ識別番号,実施年月日,診療科区分,分類番号",connection)
これで、診療月/診療科区分/分類番号を含むデータが得られました。
さて、次に出すのは分類別の集計です。DPC分類を使うとデータが細かくなりすぎますので、MDC6を使うことにします。
(分類番号の頭6桁を切り出すだけです)
点数合計の推移が見たいときもあれば、延べ件数が見たいとき、平均が見たいときなどもあるでしょう。
グラフに出来るといいですね。
深く考えずに全部突っ込んでみます。
def diff_dpc(df,ka=None,func='sum'): '''月別・MDC6別に集計したDataFrameを返す。funcはmean,sum,count辺りが良いが、 groupbyで使えるなら何でもいい。 同時に比較結果をグラフにして表示する。 kaはオプションだが、無いと項目数が多すぎてグラフが見づらい''' if ka: df = df[df['診療科区分'] == ka] else: pass df['MDC6'] = [x[0:6] for x in df['分類番号']] result = df.groupby(['month','MDC6']).agg(func) result.reset_index(inplace=True) ax = sns.barplot(x='MDC6',y='dpc総点数',hue='month',data=result) for item in ax.get_xticklabels(): item.set_rotation(90) plt.show() return result
実際には
diff_dpc(data,ka=110,func='count')
のようにして使います。
グラフの描画は完全に副作用ですし、引数で指定するかclassに書き換えて独立メソッドにした方がいい気もしますね…