読者です 読者をやめる 読者になる 読者になる

DPCデータの分析とかやるブログ

DPCデータの分析なんかをテキトーにやってます。

DPC疾患の月別推移を可視化する(修正版)

前回はタイトル通り、DPC疾患の月別推移を可視化する関数を書きました。
あれは実行するとデータを作り、同時にグラフを描画するというひどい代物で、流石に反省しましたのでクラスに書き換えてみました。
何気にこのブログでクラスを書くのは初めてですね。
今までいかにサボっていたかよく分かります・・・

class diff_dpc:
        
    '''前月との疾患別比較を出す。funcはmean,sum,count辺りがいいが、
    groupbyで使えるなら何でもよい
    kaはオプションだが、あった方がグラフが見やすい'''
    
    def __init__(self,df,ka=None,func='sum'):
    
        self.df = df
        self.ka = ka
        self.func = func
        if self.ka:
            self.df = self.df[self.df['診療科区分'] == self.ka]
        else:
            pass

        self.df['MDC6'] = [x[0:6] for x in self.df['分類番号']]
        self.result = self.df.groupby(['month','MDC6']).agg(self.func)
        self.result.reset_index(inplace=True)
    
    
    def plot(self):
        ax = sns.barplot(x='MDC6',y='dpc総点数',hue='month',data=self.result)
        for item in ax.get_xticklabels():
            item.set_rotation(90)
        plt.show()
    
    def getdata(self):
        return self.result

使い方は test = diff_dpc(df,ka=110,func='count') のようにしてやります。すると二つのメソッドを持ったオブジェクトが出来ますので、 test.plot()でグラフを描画、'test.getdata()'でデータの取り出しが出来ます。
(別にインスタンス変数を指定しても同じ事なので、'test.result'としても問題ありません)