EFファイル統合スクリプト(平成28年度版)
EFファイル統合をPython+Pandasで行う
さて6月になりましたが、未だにEF統合ツールが公開されません。 いい加減待つのも飽きましたので、平成28年度様式に対応したEF統合スクリプトを書きました。
使い方は単純です。
下記のコードをコピペし、テキストエディタ(メモ帳でもOK)に貼り付ける。ファイル名は何でもいいが、拡張子は.pyにして保存する。
適当なフォルダを用意し、EファイルとFファイルを置いて'DRGE.txt'、'DRGF.txt'とリネーム。
1番で用意した.pyファイルを同じフォルダに置いて、実行する。outputEF.txtという名前でEFファイルが出力される。
ただし、事前にPythonとPandasの環境を用意する必要があります。 初めてPythonを使う方はAnacondaをインストールすれば全部入ってきます。
(Python2.7とPython3.5がありますが、3.5を選んでください)
コマンドプロンプトを開き、cd c:\Users\Username\Foldername
という感じで該当フォルダに移動し、python foo.py
という風にpythonコマンドでpythonファイルを実行します。
面倒であれば、AnacondaについてくるSpyderというアプリケーションで.pyファイルを開けば、そのまま実行できます。
# -*- coding: utf-8 -*- import pandas as pd #Eファイルを読み込み。 edata = pd.read_csv('DRGE.TXT',delimiter='\t',names = ( '施設コード' ,'データ識別番号' ,'退院年月日' ,'入院年月日' ,'データ区分' ,'順序番号' ,'病院点数マスタコード' ,'レセプト電算コード' ,'解釈番号 ' ,'診療明細名称' ,'行為点数' ,'行為薬剤料' ,'行為材料料' ,'円・点区分' ,'行為回数' ,'保険者番号' ,'レセプト種別コード' ,'実施年月日' ,'レセプト科区分' ,'診療科区分' ,'医師コード' ,'病棟コード' ,'病棟区分' ,'入外区分' ,'施設タイプ' ),parse_dates=['入院年月日','実施年月日'],header = None,dtype={'医師コード':str},encoding = 'shift_jisx0213') #Fファイルを読み込み fdata = pd.read_csv('DRGF.TXT',delimiter='\t',names = ('施設コード' ,'データ識別番号' ,'退院年月日' ,'入院年月日' ,'データ区分' ,'順序番号' ,'行為明細番号' ,'病院点数マスタコード' ,'レセプト電算コード' ,'解釈番号' ,'診療明細名称' ,'使用量' ,'基準単位' ,'行為明細点数' ,'行為明細薬剤料' ,'行為明細材料料' ,'円点区分' ,'出来高実績点数' ,'行為明細区分情報'),parse_dates=['入院年月日'],header = None,dtype={'行為明細区分情報':str},encoding = 'shift_jisx0213') fdata['明細点数・金額'] = fdata['行為明細点数'] + fdata['行為明細薬剤料'] + fdata['行為明細材料料'] fdata.drop(['行為明細点数','行為明細薬剤料','行為明細材料料'],axis=1,inplace = True) efdata = pd.concat([edata,fdata]) #行為明細番号を使って並べ替えをするが、その前にfillnaメソッドでEファイル由来のレコードに0番を付番する efdata['行為明細番号'].fillna(0,inplace=True) #順序番号、行為明細番号を使って並び替え efdata.sort_values(['データ識別番号','入院年月日','データ区分','順序番号','行為明細番号'],inplace = True) efdata.reset_index(inplace=True) #統合の結果空白になってしまうレコードを、fillnaメソッドで穴埋めする fill_list='行為回数','実施年月日','診療科区分','医師コード','病棟コード','病棟区分' for val in fill_list: efdata[val].fillna(method='pad',inplace=True) sort_list = '施設コード','データ識別番号','退院年月日','入院年月日','データ区分',\ '順序番号','行為明細番号','病院点数マスタコード','レセプト電算コード','解釈番号','診療明細名称',\ '使用量','基準単位','明細点数・金額','円点区分','出来高実績点数','行為明細区分情報','行為点数','行為薬剤料',\ '行為材料料','行為回数','保険者番号','レセプト種別コード','実施年月日','レセプト科区分',\ '診療科区分','医師コード','病棟コード','病棟区分','入外区分','施設タイプ' efdata_sorted = efdata.reindex(columns=sort_list) efdata_sorted['退院年月日'] = efdata_sorted['退院年月日'].replace(0,'infinity') K = efdata_sorted['医師コード'] efdata_sorted['医師コード'] = [i.strip() for i in K] efdata_sorted.to_csv('outputEF.txt',index=False,sep='\t',encoding='utf-8')