comparison asist_dynamic.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 734777d3c253
comparison
equal deleted inserted replaced
-1:000000000000 0:c1a77856070c
1 #!/usr/bin/env python
2 # coding: utf-8
3
4 # In[1309]:
5
6
7 #ASIST program for phenotype based on Antibiotics profile
8 # create a profile based on selected antibiotics only
9 # rakesh4osdd@gmail.com, 14-June-2021
10
11
12 # In[1403]:
13
14
15 import pandas as pd
16 import sys
17 import os
18 from collections import Counter
19
20
21 # In[ ]:
22
23
24 input_file=sys.argv[1]
25 output_file=sys.argv[2]
26
27
28 # In[1362]:
29
30
31 # strain_profile to phenotype condition
32 def s_phen(sus,res,na,pb_sus):
33 if (sus>0 and res==0 and na>=0):
34 #print('Possible Susceptible')
35 phen='Possible Susceptible'
36 elif (sus>=0 and 3<=res<7 and na>=0 and pb_sus==0):
37 #print('Possible MDR')
38 phen='Possible MDR'
39 elif (sus>=0 and 7<=res<9 and na>=0 and pb_sus==0):
40 #print('Possible XDR')
41 phen='Possible XDR'
42 #special cases
43 elif (sus>=1 and res>0 and na>=0 and pb_sus==1):
44 #print('Possible XDR')
45 phen='Possible XDR'
46 #special cases
47 elif (sus>0 and res==9 and na>=0):
48 #print('Possible XDR')
49 phen='Possible XDR'
50 elif (sus==0 and res==9 and na>=0):
51 #print('Possible TDR')
52 phen='Possible TDR'
53 else:
54 #print('Strain could not be classified')
55 phen='Strain could not be classified'
56 return(phen)
57
58 #print(s_phen(1,9,0,0))
59
60
61 # In[1363]:
62
63
64 # define Antibiotic groups as per antibiotic of CLSI breakpoints MIC
65 #Aminoglycoside
66 cat1=['Amikacin','Tobramycin','Gentamycin','Netilmicin']
67 #Beta-lactams- Carbapenems
68 cat2=['Imipenem','Meropenam','Doripenem']
69 #Fluoroquinolone
70 cat3=['Ciprofloxacin','Levofloxacin']
71 #Beta-lactam inhibitor
72 cat4=['Piperacillin/tazobactam','Ticarcillin/clavulanicacid']
73 #Cephalosporin
74 cat5=['Cefotaxime','Ceftriaxone','Ceftazidime','Cefepime']
75 #Sulfonamides
76 cat6=['Trimethoprim/sulfamethoxazole']
77 #Penicillins/beta-lactamase
78 cat7=['Ampicillin/sulbactam']
79 #Polymyxins
80 cat8=['Colistin','Polymyxinb']
81 #Tetracycline
82 cat9=['Tetracycline','Doxicycline','Minocycline']
83
84 def s_profiler(pd_series):
85 #print(type(pd_series),'\n', pd_series)
86 #create a dictionary of dataframe series
87 cats={'s1':cat1,'s2':cat2,'s3':cat3,'s4':cat4,'s5':cat5,'s6':cat6,'s7':cat7,'s8':cat8,'s9':cat9}
88 # find the antibiotics name in input series
89 for cat in cats:
90 #print(cats[cat])
91 cats[cat]=pd_series.filter(cats[cat])
92 #print(cats[cat])
93 #define res,sus,na,pb_sus
94 res=0
95 sus=0
96 na=0
97 pb_sus=0
98 # special case of 'Polymyxin b' for its value
99 if 'Polymyxinb' in pd_series:
100 ctp=cats['s8']['Polymyxinb'].strip().lower()
101 if ctp == 'susceptible':
102 pb_sus=1
103 #print((ctp,p_sus))
104 # check all categories
105 for cat in cats:
106 #ctp=cats['s8'].iloc[i:i+1].stack().value_counts().to_dict()
107 #print(ctp)
108 # Pandas series
109 ct=cats[cat].value_counts().to_dict()
110 #print(ct)
111 # remove whitespace and convert to lowercase words
112 ct = {k.strip().lower(): v for k, v in ct.items()}
113 #print(ct)
114 k=Counter(ct)
115 #j=Counter(ct)+Counter(j)
116 #print(j)
117 # category wise marking
118 if k['resistant']>=1:
119 res=res+1
120 if k['susceptible']>=1:
121 sus=sus+1
122 if k['na']>=1:
123 na=na+1
124 #print(s_phen(sus,res,na,pb_sus))
125 return(s_phen(sus,res,na,pb_sus))
126
127
128 # In[1397]:
129
130
131 #input_file='input2.csv_table.csv'
132 #output_file=input_file+'_output.txt'
133 strain_profile=pd.read_csv(input_file, sep=',',na_filter=False,skipinitialspace = True)
134
135
136 # In[1387]:
137
138
139 old_strain_name=strain_profile.columns[0]
140 new_strain_name=old_strain_name.capitalize().strip().replace(' ', '')
141
142
143 # In[1388]:
144
145
146 # make header capitalization, remove leading,lagging, and multiple whitespace for comparision
147 strain_profile.columns=strain_profile.columns.str.capitalize().str.strip().str.replace('\s+', '', regex=True)
148 #print(strain_profile.columns)
149 #strain_profile.head()
150 #strain_profile.columns
151
152
153 # In[1389]:
154
155
156 # add new column in dataframe on second position
157 strain_profile.insert(1, 'Strain phenotype','')
158 #strain_profile.head()
159
160
161 # In[1390]:
162
163
164 strain_profile['Strain phenotype'] = strain_profile.apply(lambda x: (s_profiler(x)), axis=1)
165
166
167 # In[1391]:
168
169
170 #strain_profile.head()
171
172
173 # In[1392]:
174
175
176 #rename headers for old name
177 strain_profile=strain_profile.rename(columns = {new_strain_name:old_strain_name, 'Ticarcillin/clavulanicacid':'Ticarcillin/ clavulanic acid','Piperacillin/tazobactam':'Piperacillin/ tazobactam','Trimethoprim/sulfamethoxazole': 'Trimethoprim/ sulfamethoxazole','Ampicillin/sulbactam':'Ampicillin/ sulbactam', 'Polymyxinb': 'Polymyxin B'} )
178
179
180 # In[1404]:
181
182
183 #strain_profile
184
185
186 # In[1394]:
187
188
189 strain_profile.to_csv(output_file,na_rep='NA',index=False)
190