In [1]:
#Función complementaria
def inversa(dna):
for nuc in dna:
if nuc not in ['A', 'T', 'C', 'G']:
print 'No es DNA. Revise su cadena'
return ""
inversa = dna[::-1]
return inversa
dna = raw_input('Escriba una cadena de DNA: ')
dna = dna.upper()
dna_inversa = inversa(dna)
if inversa:
print 'La cadena inversa es: ' + dna_inversa
In [2]:
#Función complementaria
def complementaria(dna):
comp_dic = {'A':'T','T':'A','C':'G','G':'C'}
comp = ""
for nuc in dna:
if nuc not in ['A', 'T', 'C', 'G']:
print 'No es DNA. Revise su cadena'
return ""
else: comp += comp_dic[nuc]
return comp
dna = raw_input('Escriba una cadena de DNA: ')
dna = dna.upper()
dna_complementaria = complementaria(dna)
if dna_complementaria:
print 'La cadena complementaria es: ' + dna_complementaria
In [3]:
dna = raw_input('Escriba una cadena de DNA: ')
dna = dna.upper()
dna_inv_comp = inversa(complementaria(dna))
if dna_inv_comp:
print 'La cadena inversa complementaria es: ' + dna_inv_comp
In [4]:
def dna2rna(dna):
dna=dna.upper()
rna=dna.replace('T', 'U')
return rna
dna=raw_input("¿Cómo es tu DNA? ")
rna = dna2rna(dna)
print 'Tu RNA es: ' + rna
In [9]:
def fasta2sec(filename):
file = open (filename)
if not file:
print "El archivo no existe"
return ""
secuencia = ''
#Iniciamos el bucle de lectura
for linea in file:
#Asociamos a la variable "linea" cada línea del archivo, pero sin el salto de línea
linea = linea.strip('\n')
#Comprobamos que la línea no está vacía, ni empieza por '>' (1ª linea de info)
if linea != '' and linea[0] != '>' :
#Añadimos a la variable "secuencia" cada iteración de linea
secuencia = secuencia + linea
return secuencia
filename = raw_input('Escribe la ruta de tu fichero: ')
secuencia = fasta2sec(filename)
print "Tu proteína tiene " + str(len(secuencia)) + " aminoácidos"
In [6]:
def contar_tipos(secuencia):
hydrophilic = ['C', 'F', 'I', 'L', 'M', 'V', 'W']
hydrophobic = ['D', 'E', 'G', 'K', 'N', 'P', 'Q', 'R', 'S', 'T']
neutral = ['A', 'H', 'Y']
contadores = {'hphi': 0, 'hpho': 0, 'neu' : 0}
#Iteramos la secuencia por elemento
for aa in secuencia:
#Comprobamos dónde está cada aa, y sumamos 1 al contador correspondiente a su tipo
if aa in hydrophilic:
contadores['hphi'] +=1
elif aa in hydrophobic:
contadores['hpho'] +=1
elif aa in neutral:
contadores['neu'] +=1
#Añadimos "else" por si acaso
else:
print 'Algún dato no es AA. Revisa el fichero'
#Preguntamos si el usuario quiere continuar
pregunta = raw_input('¿Quieres continuar de todos modos? [s/n]')
#Si la respuesta es sí...
if pregunta == 'y' or pregunta == 'Y':
return contadores
#Si la respuesta es no...
elif pregunta =='n' or pregunta == 'N':
return contadores
#Si la respuesta es otra...
return contadores
return contadores
contadores = contar_tipos(secuencia)
#Imprimimos la respuesta con los datos
print 'La cantidad de aa de cada tipo es: '
print '%.2f %% de hidrofílicos' %(float(contadores['hphi'])/len(secuencia)*100)
print '%.2f %% de hidrofóbicos' %(float(contadores['hpho'])/len(secuencia)*100)
print '%.2f %% de neutros' %(float(contadores['neu'])/len(secuencia)*100)
In [10]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
index = range(len(contadores))
barlist = plt.bar(index, contadores.values(), align='center')
# Un poco de color
barlist[0].set_color('#999999')
barlist[1].set_color('#ff3333')
barlist[2].set_color('#3333ff')
plt.xticks(index, contadores.keys())
plt.show()
In [102]:
def identidad(sec1, sec2):
count = 0
dif = []
for i in range(len(sec1)):
if sec1[i] == sec2[i]:
count += 1
dif.append(1)
else:
dif.append(0)
# Devolvemos % de similitud y lista de diferencias)
return (count*100./len(sec1), dif)
pan = fasta2sec('pan.fasta')
sapiens = fasta2sec('sapiens.fasta')
pan = pan[216-1:659]
sapiens = sapiens[196-1:639]
print pan[0:3]
print sapiens[0:3]
diffs = identidad(pan,sapiens)
print 'Porcentaje de similitud %.2f %%' % diffs[0]
In [108]:
from numpy import array
difs_array = array( [diffs[1]] )
plt.imshow(difs_array, aspect = 50)
ax = plt.gca()
ax.yaxis.set_visible(False)
In [111]:
# Codigo genetico
gencode = {
'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M',
'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T',
'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K',
'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R',
'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L',
'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P',
'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q',
'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R',
'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V',
'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A',
'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E',
'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G',
'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S',
'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L',
'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_',
'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W'}
# Lista de aminoacidos
aminoacidos = ['A', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'K', 'L', 'M', 'N', 'P', 'Q',
'R', 'S', 'T', 'V', 'W', 'Y', '_']
# Diccionario que para cada aminoacido
# da como valor la lista de codones que lo codifican
# separados por el caracter ":"
aa2codon={'A':'GCA:GCC:GCG:GCT', 'C':'TGT:TGC', 'D':'GAT:GAC',
'E':'GAG:GAA', 'F':'TTT:TTC', 'G':'GGT:GGG:GGA:GGC' ,
'H':'CAT:CAC', 'I':'ATC:ATA:ATT', 'K':'AAG:AAA',
'L':'CTC:CTG:CTA:CTT:TTA:TTG', 'M':'ATG', 'N':'AAC:AAT',
'P':'CCT:CCG:CCA:CCC', 'Q':'CAA:CAG',
'R':'AGG:AGA:CGA:CGC:CGG:CGT',
'S':'AGC:AGT:TCG:TCA:TCC:TCT',
'T':'ACC:ACA:ACG:ACT', 'V':'GTA:GTC:GTG:GTT',
'W':'TGG', 'Y':'TAT:TAC', '_':'TAG:TAA:TGA'}
In [1]:
#Abrimos el archivo fasta
file = open('SP.fasta')
secuencia = fasta2sec('SP.fasta')
#Archivo de exones
file = open('CDScoords.txt')
#Alternativa para customizar el programa. Esto lee el nombre del primer gen en
#vez de que se lo demos en el código
'''for linea in file:
pos = linea.split()
a = pos[0]
break'''
a = 'SPAC212.06c'
nueva_secuencia = ''
for linea in file:
pos = linea.split()
if pos[0] == a:
nueva_secuencia += secuencia[int(pos[1])-1:int(pos[2])]
else:
print 'Para el gen %s: ' %a #Y ahora la función que hace todo
codon_counter={'A':[0,0,0,0], 'C':[0,0], 'D':[0,0],
'E':[0,0], 'F':[0,0], 'G':[0,0,0,0] ,
'H':[0,0], 'I':[0,0,0], 'K':[0,0],
'L':[0,0,0,0,0,0], 'M':[0], 'N':[0,0],
'P':[0,0,0,0], 'Q':[0,0],
'R':[0,0,0,0,0,0],
'S':[0,0,0,0,0,0],
'T':[0,0,0,0], 'V':[0,0,0,0],
'W':[0], 'Y':[0,0], '_':[0,0,0]}
#print nueva_secuencia
for i in range(0,len(nueva_secuencia),3) :
codon = nueva_secuencia[i:i+3]
aa = gencode[codon]
posibles_codones = aa2codon[aa].split(':')
#print posibles_codones
for x in range(0,len(posibles_codones)):
#print aa, codon, x
if codon == posibles_codones[x]:
codon_counter[aa][x] += 1
break
#print codon_counter
for y in aminoacidos:
print 'Aminoácido: %s' %y
for z in range(0,len(aa2codon[y].split(':'))):
total = 0
for i in codon_counter[y]:
total += i
#print total
if total == 0:
print ' %s %.2f%%' %(aa2codon[y].split(':')[z],(codon_counter[y][z]))
else: print ' %s %.2f%%' %(aa2codon[y].split(':')[z],(codon_counter[y][z]*100./total))
#print ' %s %s' %(codon_actual,porcentaje)
nueva_secuencia = secuencia[int(pos[1])-1:int(pos[2])]
a = pos[0]
In [14]:
import nwalign as nw
D = fasta2sec('Q9V429.fasta')
H = fasta2sec('P10599.fasta')
acounter = 0
bcounter = 0
a, b = nw.global_align(D, H, matrix='BLOSUM62.txt')
for aa in a:
if aa != '-':
acounter += 1
for aa in b:
if aa != '-':
bcounter += 1
print ((acounter*100./len(a))+(bcounter*100./len(b))) / 2
In [16]:
b
Out[16]: