Mercurial > repos > pedro_araujo > phage_host_prediction
view feature_construction.py @ 0:e4b3fc88efe0 draft
Uploaded
author | pedro_araujo |
---|---|
date | Wed, 27 Jan 2021 13:50:11 +0000 |
parents | |
children |
line wrap: on
line source
class FeatureConstruction: def __init__(self): """ In development. Extract features from proteins. """ import pandas as pd import json import ast from pathlib import Path import os from random import randint data = pd.read_csv('files/NCBI_Phage_Bacteria_Data.csv', header=0, index_col=0) with open('files/phagesProteins.json', encoding='utf-8') as F: self.phagesProteins = json.loads(F.read()) self._filter_phage_domains() # with open('files/bactProteins.json', encoding='utf-8') as F: # self.bactProteins = json.loads(F.read()) # self._filter_bacteria() all_phages = {} ecoli = {} kpneumoniae = {} abaumannii = {} my_file = Path("files/FeatureDataset") if not my_file.is_file(): for phage in self.phageTails: if phage in data.index and self.phageTails[phage]: for bact in ast.literal_eval(data.loc[phage, 'Host_ID']): bact = bact[:-2] if bact + '.json' in os.listdir('files/bacteria'): # if self.externalProts[bact]: # This verification is not necessary for carbohydrates all_phages[phage + '--' + bact] = 'Yes' name = data.loc[phage, 'Host'] if 'escherichia' in name.lower() or 'coli' in name.lower(): ecoli[bact] = 0 elif 'klebsiella' in name.lower() or 'pneumoniae' in name.lower(): kpneumoniae[bact] = 0 elif 'acinetobacter' in name.lower() or 'baumannii' in name.lower(): abaumannii[bact] = 0 for phage in self.phageTails: if phage in data.index and self.phageTails[phage]: # if self.phageTails[phage]: name = data.loc[phage, 'Host'] if 'escherichia' in name.lower() or 'coli' in name.lower(): i = 0 while i < 12: bact = list(kpneumoniae.keys())[randint(0, len(kpneumoniae.keys()) - 1)] all_phages[phage + '--' + bact] = 'No' i += 1 elif 'klebsiella' in name.lower() or 'pneumoniae' in name.lower(): i = 0 while i < 12: bact = list(ecoli.keys())[randint(0, len(ecoli.keys()) - 1)] all_phages[phage + '--' + bact] = 'No' i += 1 elif 'acinetobacter' in name.lower() or 'baumannii' in name.lower(): i = 0 while i < 12: bact = list(kpneumoniae.keys())[randint(0, len(kpneumoniae.keys()) - 1)] all_phages[phage + '--' + bact] = 'No' i += 1 self.features_data = pd.DataFrame({'ID': list(all_phages.keys()), 'Infects': list(all_phages.values())}) self.features_data = self.features_data.set_index('ID') else: self.import_feat_data() def _filter_phage_domains(self): import json from pathlib import Path ''' Filters out unwanted proteins. Domains that are unknown or are not associated with fibers, spikes, tails, enzymatic or binding are not considered. Still in development. :return: phageTails, a dictionary containing only ''' my_file = Path("files/phageTails.json") if not my_file.is_file(): self.phageTails = {} for phage in self.phagesProteins: self.phageTails[phage] = {} for protein in self.phagesProteins[phage]: if any(z in self.phagesProteins[phage][protein][0].lower() for z in ['fiber', 'fibre', 'spike', 'hydrolase', 'bind', 'depolymerase', 'peptidase', 'lyase', 'sialidase', 'dextranase', 'lipase', 'adhesin', 'baseplate', 'protein h', 'recognizing' 'protein j', 'protein g', 'gpe', 'duf4035', 'host specifity', 'cor protein', 'specificity', 'baseplate component', 'gp38', 'gp12 tail', 'receptor', 'recognition', 'tail']) \ and not any(z in self.phagesProteins[phage][protein][0].lower() for z in ['nucle', 'dna', 'rna', 'ligase', 'transferase', 'inhibitor', 'assembly', 'connect', 'nudix', 'atp', 'nad', 'transpos', 'ntp', 'molybdenum', 'hns', 'gtp', 'riib', 'inhibitor', 'replicat', 'codon', 'pyruvate', 'catalyst', 'hinge', 'sheath completion', 'head', 'capsid', 'tape', 'tip', 'strand', 'matur', 'portal' 'terminase', 'nucl', 'promot', 'block', 'olfact', 'wedge', 'lysozyme', 'mur', 'sheat']): self.phageTails[phage][protein] = self.phagesProteins[phage][protein] '''else: for i in self.phagesProteins[phage][protein]: if type(i) == str: if any(z in str(i).lower() for z in ['fiber', 'fibre', 'spike', 'hydrolase', 'bind', 'depolymerase', 'peptidase', 'lyase', 'sialidase', 'dextranase', 'lipase', 'adhesin', 'baseplate', 'protein h', 'recognizing' 'protein j', 'protein g', 'gpe', 'duf4035', 'host specifity', 'cor protein', 'specificity', 'baseplate component', 'gp38', 'gp12 tail', 'receptor', 'recognition', 'tail']) \ and not any(z in str(i).lower() for z in ['nucle', 'dna', 'rna', 'ligase', 'transferase', 'inhibitor', 'assembly', 'connect', 'nudix', 'atp', 'nad', 'transpos', 'ntp', 'molybdenum', 'hns', 'gtp', 'riib', 'inhibitor', 'replicat', 'codon', 'pyruvate', 'catalyst', 'hinge', 'sheath completion', 'head', 'capsid', 'tape', 'tip', 'strand', 'matur', 'portal' 'terminase', 'nucl']): self.phageTails[phage][protein] = self.phagesProteins[phage][protein] else: for j in i: if any(z in str(j).lower() for z in ['fiber', 'fibre', 'spike', 'hydrolase', 'bind', 'depolymerase', 'peptidase', 'lyase', 'sialidase', 'dextranase', 'lipase', 'adhesin', 'baseplate', 'protein h', 'recognizing' 'protein j', 'protein g', 'gpe', 'duf4035', 'host specifity', 'cor protein', 'specificity', 'baseplate component', 'gp38', 'gp12 tail', 'receptor', 'recognition', 'tail']) \ and not any(z in str(j).lower() for z in ['nucle', 'dna', 'rna', 'ligase', 'transferase', 'inhibitor', 'assembly', 'connect', 'nudix', 'atp', 'nad', 'transpos', 'ntp', 'molybdenum', 'hns', 'gtp', 'riib', 'inhibitor', 'replicat', 'codon', 'pyruvate', 'catalyst', 'hinge', 'sheath completion', 'head', 'capsid', 'tape', 'tip', 'strand', 'matur', 'portal' 'terminase', 'nucl']): self.phageTails[phage][protein] = self.phagesProteins[phage][protein]''' with open('files/phageTails.json', 'w') as f: json.dump(self.phageTails, f) self.__create_phage_fasta() else: with open('files/phageTails.json', encoding='utf-8') as F: self.phageTails = json.loads(F.read()) return self.phageTails def _filter_bacteria(self): import json from pathlib import Path import pandas as pd my_file = Path("files/externalProts.json") if not my_file.is_file(): self.externalProts = {} predictions = pd.read_csv('files/results_psort.txt', sep='\t', index_col=False) predictions = predictions.set_index('SeqID') predictions = predictions.drop_duplicates() for bac in self.bactProteins: self.externalProts[bac] = {} for protein in self.bactProteins[bac]: if protein + ' ' in predictions.index: maxScore = 0.0 for loc in ['Cytoplasmic_Score', 'CytoplasmicMembrane_Score', 'Periplasmic_Score', 'OuterMembrane_Score', 'Extracellular_Score']: if predictions.loc[protein + ' ', loc] > maxScore: maxScore = predictions.loc[protein + ' ', loc] location = loc if location == 'CytoplasmicMembrane_Score' or location == 'OuterMembrane_Score' or location == 'Extracellular_Score': self.externalProts[bac][protein] = self.bactProteins[bac][protein][1] if self.externalProts != {}: del self.bactProteins with open('files/externalProts.json', 'w') as f: json.dump(self.externalProts, f) else: with open('files/externalProts.json', encoding='utf-8') as F: self.externalProts = json.loads(F.read()) return self.externalProts def __create_phage_fasta(self): """ Creates a fasta file containing every protein sequence for every phage. :return: """ with open('files/tails.fasta', 'w') as F: for phage in self.phageTails: for prot in self.phageTails[phage]: F.write('>' + prot + '\n' + self.phageTails[phage][prot][1] + '\n') def add_kmers(self): from skbio import Sequence import json groups = '0123456' freqs = {} for i in groups: for j in groups: freqs[i+j] = 0.0 for i in freqs: exec('phage_group_{0} = []'.format(i)) exec('bact_group_{0} = []'.format(i)) phage = '' bact = '' for ID in self.features_data.index: done_phage = False done_bact = False if ID[:ID.find('--')] == phage: for i in freqs.keys(): exec('phage_group_{0}.append(phage_group_{0}[-1])'.format(i)) done_phage = True if ID[ID.find('--') + 2:] == bact: for i in freqs.keys(): exec('bact_group_{0}.append(bact_group_{0}[-1])'.format(i)) done_bact = True bact = ID[ID.find('--') + 2:] phage = ID[:ID.find('--')] if not done_phage: totalKmers = freqs.copy() count_prots = 0 for prot in self.list_prot[phage]: max_freq = 0.0 min_freq = 1000000.0 count_prots += 1 seq = self.__get_conjoint_triad(self.list_prot[phage][prot][1].replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C').replace('J', 'L')) seq = Sequence(seq) temp = seq.kmer_frequencies(2, overlap=True, relative=True) for i in temp.keys(): # para normalizar if temp[i] < min_freq: min_freq = temp[i] if temp[i] > max_freq: max_freq = temp[i] for i in temp.keys(): totalKmers[i] += temp[i] - (min_freq / max_freq) if count_prots != 0: for i in totalKmers.keys(): totalKmers[i] = totalKmers[i] / count_prots temp_value = totalKmers[i] exec('phage_group_{0}.append(temp_value)'.format(i)) else: for i in totalKmers.keys(): exec('phage_group_{0}.append(0.0)'.format(i)) if not done_bact: totalKmers = freqs.copy() count_prots = 0 with open('files/bacteria/' + bact + '.json', encoding='utf-8') as F: bact_prots = json.loads(F.read()) for prot in bact_prots: max_freq = 0.0 min_freq = 1000000.0 count_prots += 1 seq = bact_prots[prot][1] seq = seq[:seq.find('"')] seq = self.__get_conjoint_triad(seq.replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C').replace('J', 'L')) seq = Sequence(seq) temp = seq.kmer_frequencies(2, overlap=True, relative=True) for i in temp.keys(): # para normalizar if temp[i] < min_freq: min_freq = temp[i] if temp[i] > max_freq: max_freq = temp[i] for i in temp.keys(): totalKmers[i] += temp[i] - (min_freq / max_freq) if count_prots != 0: for i in totalKmers.keys(): totalKmers[i] = totalKmers[i] / count_prots temp_value = totalKmers[i] exec('bact_group_{0}.append(temp_value)'.format(i)) else: for i in freqs.keys(): exec('bact_group_{0}.append(0.0)'.format(i)) for i in freqs.keys(): exec('self.features_data["phage_kmer_{0}"] = phage_group_{0}'.format(i)) exec('self.features_data["bact_kmer_{0}"] = bact_group_{0}'.format(i)) def get_kmers(self, phage, bacteria): from skbio import Sequence solution = [] groups = '0123456' freqs = {} for i in groups: for j in groups: freqs[i+j] = 0.0 for i in freqs: exec('phage_group_{0} = 0.0'.format(i)) exec('bact_group_{0} = 0.0'.format(i)) totalKmers = freqs.copy() count_prots = 0 for prot in phage: max_freq = 0.0 min_freq = 1000000.0 count_prots += 1 seq = self.__get_conjoint_triad(phage[prot][1].replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) temp = seq.kmer_frequencies(2, overlap=True, relative=True) for i in temp.keys(): # para normalizar if temp[i] < min_freq: min_freq = temp[i] if temp[i] > max_freq: max_freq = temp[i] for i in temp.keys(): totalKmers[i] += temp[i] - (min_freq / max_freq) if count_prots != 0: for i in totalKmers.keys(): totalKmers[i] = totalKmers[i] / count_prots temp_value = totalKmers[i] exec('phage_group_{0} += temp_value'.format(i)) totalKmers = freqs.copy() count_prots = 0 for prot in bacteria: max_freq = 0.0 min_freq = 1000000.0 count_prots += 1 seq = bacteria[prot][1] seq = seq[:seq.find('"')] seq = self.__get_conjoint_triad(seq.replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) temp = seq.kmer_frequencies(2, overlap=True, relative=True) for i in temp.keys(): # para normalizar if temp[i] < min_freq: min_freq = temp[i] if temp[i] > max_freq: max_freq = temp[i] for i in temp.keys(): totalKmers[i] += temp[i] - (min_freq / max_freq) if count_prots != 0: for i in totalKmers.keys(): totalKmers[i] = totalKmers[i] / count_prots temp_value = totalKmers[i] exec('bact_group_{0} += temp_value'.format(i)) for i in freqs.keys(): exec('solution.append(phage_group_{0})'.format(i)) exec('solution.append(bact_group_{0})'.format(i)) return solution def add_composition(self): from skbio import Sequence import json bact_comp = {} phage_comp = {} groups = '0123456' for i in groups: bact_comp['comp_' + i] = [] phage_comp['comp_' + i] = [] phage = '' bact = '' count = -1 for ID in self.features_data.index: done_phage = False done_bact = False count += 1 if ID[:ID.find('--')] == phage: for i in groups: phage_comp['comp_' + i].append(phage_comp['comp_' + i][-1]) done_phage = True if ID[ID.find('--') + 2:] == bact: for i in groups: bact_comp['comp_' + i].append(bact_comp['comp_' + i][-1]) done_bact = True bact = ID[ID.find('--') + 2:] phage = ID[:ID.find('--')] if not done_phage: count_prots = 0 for i in groups: phage_comp['comp_' + i].append(0) for prot in self.list_prot[phage]: max_comp = 0.0 min_comp = 1000000.0 count_prots += 1 seq = self.__get_conjoint_triad(self.list_prot[phage][prot][1].replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) for i in groups: # para normalizar if seq.count(i) < min_comp: min_comp = seq.count(i) if seq.count(i) > max_comp: max_comp = seq.count(i) for i in groups: phage_comp['comp_' + i][count] += seq.count(i) - (min_comp / max_comp) total = 0 if count_prots != 0: for i in groups: phage_comp['comp_' + i][count] = phage_comp['comp_' + i][count] / count_prots total += phage_comp['comp_' + i][count] for i in groups: phage_comp['comp_' + i][count] = phage_comp['comp_' + i][count] / total else: for i in groups: phage_comp['comp_' + i][count] = 0.0 if not done_bact: count_prots = 0 for i in groups: bact_comp['comp_' + i].append(0) with open('files/bacteria/' + bact + '.json', encoding='utf-8') as F: bact_prots = json.loads(F.read()) for prot in bact_prots: max_comp = 0.0 min_comp = 1000000.0 count_prots += 1 seq = bact_prots[prot][1] seq = seq[:seq.find('"')] seq = self.__get_conjoint_triad(seq.replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) for i in groups: if seq.count(i) < min_comp: min_comp = seq.count(i) if seq.count(i) > max_comp: max_comp = seq.count(i) for i in groups: bact_comp['comp_' + i][count] += seq.count(i) - (min_comp / max_comp) total = 0 if count_prots != 0: for i in groups: bact_comp['comp_' + i][count] = bact_comp['comp_' + i][count] / count_prots total += bact_comp['comp_' + i][count] else: for i in groups: bact_comp['comp_' + i][count] = 0.0 if total != 0: for i in groups: bact_comp['comp_' + i][count] = bact_comp['comp_' + i][count] / total else: for i in groups: bact_comp['comp_' + i][count] = 0.0 for i in groups: self.features_data['bact_comp_' + i] = bact_comp['comp_' + i] self.features_data['phage_comp_' + i] = phage_comp['comp_' + i] def get_composition(self, phage, bacteria): from skbio import Sequence solution = [] bact_comp = {} phage_comp = {} phage_comp_carb = {} groups = '0123456' for i in groups: bact_comp['comp_' + i] = 0 phage_comp['comp_' + i] = 0 count_prots = 0 for prot in phage: max_comp = 0.0 min_comp = 1000000.0 count_prots += 1 seq = self.__get_conjoint_triad(phage[prot][1].replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) for i in groups: # para normalizar if seq.count(i) < min_comp: min_comp = seq.count(i) if seq.count(i) > max_comp: max_comp = seq.count(i) for i in groups: phage_comp['comp_' + i] += seq.count(i) - (min_comp / max_comp) total = 0 if count_prots != 0: for i in groups: phage_comp['comp_' + i] = phage_comp['comp_' + i] / count_prots total += phage_comp['comp_' + i] for i in groups: phage_comp['comp_' + i] = phage_comp['comp_' + i] / total else: for i in groups: phage_comp['comp_' + i] = 0.0 count_prots = 0 for prot in bacteria: max_comp = 0.0 min_comp = 1000000.0 count_prots += 1 seq = bacteria[prot][1] seq = seq[:seq.find('"')] seq = self.__get_conjoint_triad(seq.replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) for i in groups: if seq.count(i) < min_comp: min_comp = seq.count(i) if seq.count(i) > max_comp: max_comp = seq.count(i) for i in groups: bact_comp['comp_' + i] += seq.count(i) - (min_comp / max_comp) total = 0 if count_prots != 0: for i in groups: bact_comp['comp_' + i] = bact_comp['comp_' + i] / count_prots total += bact_comp['comp_' + i] for i in groups: bact_comp['comp_' + i] = bact_comp['comp_' + i] / total else: for i in groups: bact_comp['comp_' + i] = 0.0 for i in groups: solution.append(bact_comp['comp_' + i]) solution.append(phage_comp['comp_' + i]) return solution def add_grouping(self): from skbio import Sequence import json bact_group = {} phage_group = {} groups = '0123456' letters = 'ABCDEFGHIJ' for i in groups: for j in letters: bact_group['group' + j + '_' + i] = [] phage_group['group' + j + '_' + i] = [] phage = '' bact = '' count = -1 for ID in self.features_data.index: done_phage = False done_bact = False count += 1 if ID[:ID.find('--')] == phage: for i in groups: for j in letters: phage_group['group' + j + '_' + i].append(phage_group['group' + j + '_' + i][-1]) done_phage = True if ID[ID.find('--') + 2:] == bact: for i in groups: for j in letters: bact_group['group' + j + '_' + i].append(bact_group['group' + j + '_' + i][-1]) done_bact = True bact = ID[ID.find('--') + 2:] phage = ID[:ID.find('--')] if not done_phage: count_prots = 0 for i in groups: for j in letters: phage_group['group' + j + '_' + i].append(0) for prot in self.list_prot[phage]: count_prots += 1 seq = self.__get_conjoint_triad(self.list_prot[phage][prot][1].replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) for j in letters: group = self.__get_grouping(seq, j) for i in groups: phage_group['group' + j + '_' + i][count] += group[i] if count_prots != 0: for i in groups: for j in letters: phage_group['group' + j + '_' + i][count] = phage_group['group' + j + '_' + i][count] / count_prots else: for i in groups: for j in letters: phage_group['group' + j + '_' + i][count] = 0.0 if not done_bact: count_prots = 0 for i in groups: for j in letters: bact_group['group' + j + '_' + i].append(0) with open('files/bacteria/' + bact + '.json', encoding='utf-8') as F: bact_prots = json.loads(F.read()) for prot in bact_prots: count_prots += 1 seq = bact_prots[prot][1] seq = seq[:seq.find('"')] seq = self.__get_conjoint_triad(seq.replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) for j in letters: group = self.__get_grouping(seq, j) for i in groups: bact_group['group' + j + '_' + i][count] += group[i] if count_prots != 0: for i in groups: for j in letters: bact_group['group' + j + '_' + i][count] = bact_group['group' + j + '_' + i][count] / count_prots else: for i in groups: for j in letters: bact_group['group' + j + '_' + i][count] = 0.0 for i in groups: for j in letters: self.features_data['bact_group' + j + '_' + i] = bact_group['group' + j + '_' + i] self.features_data['phage_group' + j + '_' + i] = phage_group['group' + j + '_' + i] def get_grouping(self, phage, bacteria): from skbio import Sequence bact_group = {} phage_group = {} groups = '0123456' letters = 'ABCDEFGHIJ' for i in groups: for j in letters: bact_group['group' + j + '_' + i] = 0 phage_group['group' + j + '_' + i] = 0 solution = [] count_prots = 0 for prot in phage: count_prots += 1 seq = self.__get_conjoint_triad(phage[prot][1].replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) for j in letters: group = self.__get_grouping(seq, j) for i in groups: phage_group['group' + j + '_' + i] += group[i] if count_prots != 0: for i in groups: for j in letters: phage_group['group' + j + '_' + i] = phage_group['group' + j + '_' + i] / count_prots else: for i in groups: for j in letters: phage_group['group' + j + '_' + i] = 0.0 count_prots = 0 for prot in bacteria: count_prots += 1 seq = bacteria[prot][1] seq = seq[:seq.find('"')] seq = self.__get_conjoint_triad(seq.replace('X', 'D').replace('B', 'N').replace('Z', 'E').replace('U', 'C')) seq = Sequence(seq) for j in letters: group = self.__get_grouping(seq, j) for i in groups: bact_group['group' + j + '_' + i] += group[i] if count_prots != 0: for i in groups: for j in letters: bact_group['group' + j + '_' + i] = bact_group['group' + j + '_' + i] / count_prots else: for i in groups: for j in letters: bact_group['group' + j + '_' + i] = 0.0 for i in groups: for j in letters: solution.append(bact_group['group' + j + '_' + i]) solution.append(phage_group['group' + j + '_' + i]) return solution def __get_conjoint_triad(self, prot): ctm = {'A':'0', 'G':'0', 'V':'0','C':'1', 'F':'2', 'I':'2', 'L':'2', 'P':'2', 'M':'3', 'S':'3', 'T':'3', 'Y':'3', 'H':'4', 'N':'4', 'Q':'4', 'W':'4', 'K':'5', 'R':'5', 'D':'6', 'E':'6'} for i, j in ctm.items(): prot = prot.replace(i, j) return prot def __get_grouping(self, prot, let='A'): from skbio import Sequence groups = '0123456' group = {} for i in groups: group[i] = 0.0 if let == 'A': seq = Sequence(prot[:int(len(prot) * 0.25)]) for i in groups: group[i] += seq.count(i) / len(seq) elif let == 'B': seq = Sequence(prot[int(len(prot) * 0.25):int(len(prot) * 0.5)]) for i in groups: group[i] += seq.count(i) / len(seq) elif let == 'C': seq = Sequence(prot[int(len(prot) * 0.5):int(len(prot) * 0.75)]) for i in groups: group[i] += seq.count(i) / len(seq) elif let == 'D': seq = Sequence(prot[int(len(prot) * 0.75):]) for i in groups: group[i] += seq.count(i) / len(seq) elif let == 'E': seq = Sequence(prot[:int(len(prot) * 0.5)]) for i in groups: group[i] += seq.count(i) / len(seq) elif let == 'F': seq = Sequence(prot[int(len(prot) * 0.5):]) for i in groups: group[i] += seq.count(i) / len(seq) elif let == 'G': seq = Sequence(prot[int(len(prot) * 0.25):int(len(prot) * 0.75)]) for i in groups: group[i] += seq.count(i) / len(seq) elif let == 'H': seq = Sequence(prot[:int(len(prot) * 0.75)]) for i in groups: group[i] += seq.count(i) / len(seq) elif let == 'I': seq = Sequence(prot[int(len(prot) * 0.25):]) for i in groups: group[i] += seq.count(i) / len(seq) elif let == 'J': seq = Sequence(prot[int(len(prot) * 0.125):int(len(prot) * 0.875)]) for i in groups: group[i] += seq.count(i) / len(seq) return group def set_output(self): import pandas as pd output = [] data = pd.read_csv('files/NCBI_Phage_Bacteria_Data.csv', header=0, index_col=0, names=['Phage Name', 'Bacteria Name', 'Bacteria ID']) for phage in self.features_data['ID']: phage = phage[:phage.find('--')] bact = data.loc[phage, 'Bacteria Name'] if 'escherichia' in bact.lower(): output.append('Escherichia coli') elif 'klebsiella' in bact.lower(): output.append('Klebsiella pneumoniae') elif 'acinetobacter' in bact.lower(): output.append('Acinetobacter baumannii') self.features_data = self.features_data.set_index('ID') self.features_data['Bacteria'] = output def save_feat_data(self): import pickle with open('files/FeatureDataset', 'wb') as f: pickle.dump(self.features_data, f) return self.features_data def import_feat_data(self): import pickle with open('files/FeatureDataset', 'rb') as f: self.features_data = pickle.load(f) return self.features_data if __name__ == '__main__': test = FeatureConstruction() # test.process_net_surf() test.add_grouping() test.add_composition() test.add_kmers() # test.set_output() test.save_feat_data() ''' test.process_net_surf() test.add_aa_freq() test.add_aromaticity() test.add_flexibility() test.add_molecular_weight()''' # test.import_feat_data() # test.netSurf()