Mercurial > repos > rakesh4osdd > asist
diff clsi_profile_type2.py @ 0:c1a77856070c draft
"planemo upload for repository https://github.com/rakesh4osdd/asist/tree/master commit f5b374bef15145c893ffdd3a7d2f2978d8052184-dirty"
author | rakesh4osdd |
---|---|
date | Sat, 26 Jun 2021 07:27:53 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clsi_profile_type2.py Sat Jun 26 07:27:53 2021 +0000 @@ -0,0 +1,244 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[1245]: + + +# ASIST module2 | map AST result to the CLSI breakporints with combination antibiotics +# By rakesh4osdd@gmail.com, 06-Jun-2021 +import pandas as pd +import re +import sys + + +# In[1246]: + + +# cross check MIC values +def sus_res(mic): + #print(mic) + #print ((mic,pd.isna(mic[1]),pd.isna(mic[0]),'\n') + if not (pd.isna(mic[0]) or pd.isna(mic[1]) or pd.isna(mic[2])):#check for NaN value + #remove unwanted whitespace + o_mic = mic[0].replace(' ', '') + s_mic = mic[1].replace(' ', '') + r_mic = mic[2].replace(' ', '') + #print (o_mic,s_mic,r_mic) + #print (type(o_mic),type(s_mic),type(r_mic)) + if '/' in s_mic: #check for combination antibiotics + #print ('combination antibiotics') + try: + if '/' in o_mic: + #print ('input combination') + if (float(o_mic.split('/')[0]) <= float(s_mic.split('/')[0]) and float(o_mic.split('/')[1]) <= float(s_mic.split('/')[1])): + strain_type='Susceptible' + elif (float(o_mic.split('/')[0]) >= float(r_mic.split('/')[0]) and float(o_mic.split('/')[1]) >= float(r_mic.split('/')[1])): + strain_type='Resistant' + else: + strain_type='Intermediate' + else: + #print ('single') + if float(o_mic)==0: + strain_type='Strain could not classified' + elif (float(o_mic.split('/')[0]) <= float(s_mic.split('/')[0]) and float(1) <= float(s_mic.split('/')[1])): + strain_type='Susceptible' + elif (float(o_mic.split('/')[0]) >= float(r_mic.split('/')[0]) and float(1) >= float(r_mic.split('/')[1])): + strain_type='Resistant' + else: + strain_type='Intermediate' + except ValueError: + strain_type='Strain could not classified' + else: #single antibiotics + #print('single antibiotics') + if o_mic: + if float(o_mic)==0: + strain_type='Strain could not classified' + elif (float(o_mic) <= float(s_mic)): + strain_type='Susceptible' + elif (float(o_mic) >= float(r_mic)): + strain_type='Resistant' + else: + strain_type='Intermediate' + else: + strain_type='Strain could not classified' + else: + strain_type='Strain could not classified' + return(strain_type) + + +# In[ ]: + +# for input argument +input_user = sys.argv[1] +input_clsi = sys.argv[2] +output_table = sys.argv[3] + +# In[1247]: + + +""" +input_user='input_ast_comb2.csv' +input_clsi='clsi_profile_comb.csv' +output_profile=input_user+'_profile.csv' +output_table=input_user+'_table.csv' + +""" + +# In[1248]: + + +# read user AST data with selected 3 columns +strain_mic=pd.read_csv(input_user, sep=',', usecols =['Strain name', 'Antibiotics', 'MIC'],na_filter=False) + + +# In[1249]: + + +clsi_bp=pd.read_csv(input_clsi,sep=',') + + +# In[1290]: + + +#clsi_bp.head(2) +#strain_mic + + +# In[1251]: + + +# convert MIC to numbers sMIC, rMIC +clsi_bp['s_mic'] =clsi_bp[['Susceptible']].applymap(lambda x: (re.sub(r'[^0-9.\/]', '', x))) +clsi_bp['r_mic'] =clsi_bp[['Resistant']].applymap(lambda x: (re.sub(r'[^0-9.\/]', '', x))) + + +# In[1252]: + + +# Read only numbers in MIC values +#try: +strain_mic['o_mic']=strain_mic[['MIC']].applymap(lambda x: (re.sub(r'[^0-9.\/]','', x))) +#except TypeError: +# print('Waring: Error in MIC value') + + +# In[1289]: + + +#strain_mic.head() + + +# In[1254]: + + +# capitalize each Antibiotic Name for comparision with removing whitespace +strain_mic['Antibiotics']=strain_mic['Antibiotics'].str.capitalize().str.replace(" ","") +clsi_bp['Antibiotics']=clsi_bp['Antibiotics'].str.capitalize().str.replace(" ","") + + +# In[1255]: + + +#compare CLSI Antibiotics only +#result=pd.merge(strain_mic, clsi_bp, on='Antibiotics',how='inner', indicator=True)[['Strain name','Antibiotics', 'MIC', 'o_mic', 's_mic', 'r_mic','_merge']] +try: + result=pd.merge(strain_mic, clsi_bp, on='Antibiotics',how='inner')[['Strain name','Antibiotics', 'MIC', 'o_mic', 's_mic', 'r_mic']] +except KeyError: + print('Waring: Error in input Values') + + +# In[1256]: + + +#compare MIC values and assign Susceptible and Resistant to Strain +#try: +result[['CLSI_profile']] = result[['o_mic','s_mic','r_mic']].apply(sus_res,axis = 1) +#except ValueError: +# print('Waring: Error in input MIC value') + + +# In[1288]: + + +#result + + +# In[1258]: + + +#result[['Strain name', 'Antibiotics', 'MIC','s_mic','r_mic','CLSI_profile']].to_csv(output_profile,sep=',', index=False, encoding='utf-8-sig') + + +# In[1259]: + + +#create a pivot table for ASIST +table=result[['Strain name', 'Antibiotics','CLSI_profile']].drop_duplicates() +result_table=pd.pivot_table(table, values ='CLSI_profile', index =['Strain name'],columns =['Antibiotics'], aggfunc = lambda x: ' '.join(x)) + + +# In[1261]: + + +result_table + + +# In[1264]: + + +#result_table.to_csv(output_table,na_rep='NA') + + +# In[1282]: + + +# reorder the Antibiotics for ASIST +clsi_ab=['Amikacin','Tobramycin','Gentamycin','Imipenem','Meropenem','Doripenem','Ciprofloxacin','Levofloxacin', + 'Piperacillin/tazobactam','Ticarcillin/clavulanicacid','Cefotaxime','Ceftriaxone','Ceftazidime','Cefepime', + 'Trimethoprim/sulfamethoxazole','Ampicillin/sulbactam','Colistin','Polymyxinb','Tetracycline','Doxicycline ', + 'Minocycline'] +result_selected=result_table.filter(clsi_ab) + + +# In[1283]: + + +result_selected.shape + + +# In[1284]: + + +result_table.shape + + +# In[1285]: + + +result_selected.insert(0,'Resistance_phenotype','') + + +# In[1286]: + + +result_selected.to_csv(output_table,na_rep='NA') + + +# In[1287]: + + +#rename headers +result_selected.rename(columns = {'Ticarcillin/clavulanicacid':'Ticarcillin/clavulanic acid','Piperacillin/tazobactam':'Piperacillin/ tazobactam','Trimethoprim/sulfamethoxazole': 'Trimethoprim/ sulfamethoxazole','Ampicillin/sulbactam':'Ampicillin/ sulbactam', 'Polymyxinb': 'Polymyxin B'} ) + + +# In[ ]: + + + + + +# In[ ]: + + + +