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[ ]:
+
+
+
+