EDA.py

本文档展示了如何使用Python处理医疗数据,包括读取处方、诊断和手术记录,进行数据预处理,将药物代码转换,并构建药物相互作用网络。涉及的数据包括MIMIC数据集、药物代码映射文件、药物-药物相互作用数据等。
摘要由CSDN通过智能技术生成

import dill
import pandas as pd
import numpy as np
from collections import defaultdict

files can be downloaded from https://mimic.physionet.org/gettingstarted/dbsetup/

med_file = ‘C:/Users/samoto/Desktop/GAMENet-master/data/PRESCRIPTIONS.csv’
diag_file = ‘C:/Users/samoto/Desktop/GAMENet-master/data/DIAGNOSES_ICD.csv’
procedure_file = ‘C:/Users/samoto/Desktop/GAMENet-master/data/PROCEDURES_ICD.csv’

drug code mapping files (already in ./data/)

ndc2atc_file = ‘C:/Users/samoto/Desktop/GAMENet-master/data/ndc2atc_level4.csv’
cid_atc = ‘C:/Users/samoto/Desktop/GAMENet-master/data/drug-atc.csv’
ndc2rxnorm_file = ‘C:/Users/samoto/Desktop/GAMENet-master/data/ndc2rxnorm_mapping.txt’
#药物代码转换的映射文件们

drug-drug interactions can be down https://www.dropbox.com/s/8os4pd2zmp2jemd/drug-DDI.csv?dl=0

ddi_file = ‘C:/Users/samoto/Desktop/GAMENet-master/data/drug-DDI.csv’
#药物药物相互作用数据
file = ‘C:/Users/samoto/Desktop/GAMENet-master/data/’
def process_procedure():
pro_pd = pd.read_csv(procedure_file, dtype={‘ICD9_CODE’: ‘category’}) # (240095, 5) 病人手术记录icd
pro_pd.drop(columns=[‘ROW_ID’], inplace=True) # (240095, 4)
# pro_pd = pro_pd[pro_pd[‘SEQ_NUM’]<5]
# def icd9_tree(x):
# if x[0]==‘E’:
# return x[:4]
# return x[:3]
# pro_pd[‘ICD9_CODE’] = pro_pd[‘ICD9_CODE’].map(icd9_tree)
pro_pd.drop_duplicates(inplace=True)
pro_pd.sort_values(by=[‘SUBJECT_ID’, ‘HADM_ID’, ‘SEQ_NUM’], inplace=True) # (240095, 4)
pro_pd.drop(columns=[‘SEQ_NUM’], inplace=True)
pro_pd.drop_duplicates(inplace=True) # (228679, 3)
pro_pd.reset_index(drop=True, inplace=True)

return pro_pd

def process_med():
med_pd = pd.read_csv(med_file, dtype={‘NDC’: ‘category’}) # (153115, 19) 国家药品代码
# filter
med_pd.drop(columns=[‘ROW_ID’, ‘DRUG_TYPE’, ‘DRUG_NAME_POE’, ‘DRUG_NAME_GENERIC’,
‘FORMULARY_DRUG_CD’, ‘GSN’, ‘PROD_STRENGTH’, ‘DOSE_VAL_RX’,
‘DOSE_UNIT_RX’, ‘FORM_VAL_DISP’, ‘FORM_UNIT_DISP’, ‘FORM_UNIT_DISP’,
‘ROUTE’, ‘ENDDATE’, ‘DRUG’], axis=1, inplace=True) # (153115, 5)
med_pd.drop(index=med_pd[med_pd[‘NDC’] == ‘0’].index, axis=0, inplace=True) # (133308, 5)
med_pd.fillna(method=‘pad’, inplace=True) # 用前一个非缺失值去填充该缺失值,icustay_id=nan的地方补全了。 (133308, 5)
med_pd.dropna(inplace=True) # 删除有缺失值的行(axis=0默认)或列(axis=1)(把ICUSTAY_ID为缺失值的行删掉了)
med_pd.drop_duplicates(inplace=True) # (133284, 5)
med_pd[‘ICUSTAY_ID’] = med_pd[‘ICUSTAY_ID’].astype(‘int64’)
med_pd[‘STARTDATE’] = pd.to_datetime(med_pd[‘STARTDATE’], format=‘%Y-%m-%d %H:%M:%S’)
med_pd.sort_values(by=[‘SUBJECT_ID’, ‘HADM_ID’, ‘ICUSTAY_ID’, ‘STARTDATE’], inplace=True) # (113130, 5)
med_pd = med_pd.reset_index(drop=True)

def filter_first24hour_med(med_pd):
    med_pd_new = med_pd.drop(columns=['NDC'])
    med_pd_new = med_pd_new.groupby(by=['SUBJECT_ID', 'HADM_ID', 'ICUSTAY_ID']).head([1]).reset_index(drop=True)
    med_pd_new = pd.merge(med_pd_new, med_pd, on=['S
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值