{"id":1190,"date":"2017-10-05T15:02:58","date_gmt":"2017-10-05T13:02:58","guid":{"rendered":"http:\/\/bioinfo2.ugr.es\/biocomputacion\/?page_id=1190"},"modified":"2023-10-17T13:14:49","modified_gmt":"2023-10-17T11:14:49","slug":"practica1","status":"publish","type":"page","link":"https:\/\/bioinfo2.ugr.es\/biocomputacion\/practica1\/","title":{"rendered":"Pr\u00e1ctica 1"},"content":{"rendered":"<p><a href=\"http:\/\/bioinfo2.ugr.es\/biocomputacion\/practica-1-recap\/\">Recap<\/a><\/p>\n<p>Obetivos:<\/p>\n<ul>\n<li>Escribir un script que lea una secuencia de nucle\u00f3tidos en memoria para calcular distintas frecuencias<\/li>\n<li>Entender el script base propuesto que calcula la frecuencia para un nucle\u00f3tido<\/li>\n<li>Resolver las cuestiones planteadas haciendo uso de las pistas<\/li>\n<\/ul>\n<p>A continuaci\u00f3n ten\u00e9is el script base (tambi\u00e9n disponible en \/home\/biocomp\/practica1\/script_base.py).<\/p>\n<pre># asignar la ruta del fichero de entrada\r\n# (es decir: DONDE esta el fichero que queremos leer)\r\n\r\ninput_path = \"\/home\/biocomp\/practica1\/secuencia.fa\"\r\n\r\n# abrimos el fichero correspondiente en modo lectura\r\n\r\nwith open(input_path,\"r\") as ifile:\r\n    # guardamos las l\u00edneas en la lista lines\r\n    lines = ifile.readlines()\r\n\r\n# inicializamos una variable vac\u00eda\r\nsequence = \"\"\r\n# iteramos todas las l\u00edneas del fichero\r\nfor l in lines:\r\n    if not l.startswith(\"&gt;\"): # comprobamos si la l\u00ednea comienza con &gt; (formato fasta)\r\n        sequence = sequence + l.rstrip() # rstrip elimina el salto de l\u00ednea al final (si lo hay)\r\n\r\n# ahora ya tenemos la secuencia completa cargada en sequence\r\n# usamos el m\u00e9todo count para contar cuantas veces aparece una letra concreta\r\n\r\nC_occurrences = sequence.count(\"C\")\r\nG_occurrences = sequence.count(\"G\")\r\n\r\nprint(\"Number of G: \",G_occurrences)\r\nprint(\"Number of C: \",C_occurrences)\r\n<\/pre>\n<h3>Preguntas\/Problemas<\/h3>\n<ol>\n<li>Modificar el script para obtener la ruta del fichero de entrada del usuario <span style=\"color: #00ff00;\">(Dificultad: F\u00e1cil)<\/span><\/li>\n<li>Determinar la longitud de la secuencia y sacar el resultado en pantalla <span style=\"color: #00ff00;\">(Dificultad: F\u00e1cil)<\/span><\/li>\n<li>Calcular el %G+C de la secuencia (el operador para la multiplicaci\u00f3n es *, mientras el de la divisi\u00f3n es \/) y escribir el resultado en pantalla <span style=\"color: #00ff00;\">(Dificultad: F\u00e1cil)<\/span><\/li>\n<li>Generalizar el contenido en bases (poder calcular %A+T, o %C+T, etc) <span style=\"color: #ff9900;\">(Dificultad: Media)<\/span><\/li>\n<li>Calcular el n\u00famero y porcentaje de todos los n-meros en la secuencia (para un n definido). Por ejemplo, para n=2 calcula d\u00edmeros para n=3 calcula tr\u00edmeros, etc. <span style=\"color: #ff0000;\">(Dificultad: Dif\u00edcil)<\/span><\/li>\n<li>Calcular la frecuencia esperada para cada n-mero y la ratio entre las frecuencias observadas y esperadas<\/li>\n<li>Incluir un parametro de paso (step) para poder calcular los n-meros de forma solapantes o no-solapantes<\/li>\n<li>Usar este fichero <a href=\"http:\/\/bioinfo2.ugr.es\/biocomputacion\/wp-content\/uploads\/2023\/10\/codon_AA.txt\">(codon_AA<\/a>) para generar una estat\u00edstica del uso de codones. Escribir un fichero de salida con las siguientes columnas:\n<ul>\n<li>codon<\/li>\n<li>amino\u00e1cido<\/li>\n<li>n\u00famero de codones (las veces que se usa el codon en la(s) secuencia(s) de entrada<\/li>\n<li>frecuencia relativa dentro de los codones degenerados.<\/li>\n<li>frecuencia del codon (relativa al n\u00famero total de codones)<\/li>\n<\/ul>\n<\/li>\n<li>Plotear la ratio obs\/esp para los n-meros<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h3>Funciones y pistas que pueden ayudar para resolver la cuesti\u00f3n 4 y 5<\/h3>\n<h4>Cuesti\u00f3n 4:<\/h4>\n<pre><span style=\"color: #339966;\">## definir los nucle\u00f3tidos que queremos analizar<\/span>\r\nnucleotides = [\"A\", \"T\"]<\/pre>\n<pre><span style=\"color: #339966;\"># de esta forma se puede calcular la frecuencia de cada uno dentro de un bucle for \r\n# luego se suma todo y se divide por el n\u00famero de bases<\/span>\r\nn_counts = 0\r\n\r\nfor nt in nucleotides:\r\n\r\n# haz los c\u00e1lculos aqu\u00ed\r\n\r\nn_counts = n_counts\u00a0 + numero_calculado\r\n\r\n# % = n_counts\/total de nts<\/pre>\n<pre><\/pre>\n<h3>Cuesti\u00f3n 5<\/h3>\n<p><span style=\"color: #339966;\"># para resolver este problema hay dos claves: usar diccionarios e iterar todas <\/span><\/p>\n<p><span style=\"color: #339966;\"># las subsecuencias presentes para un n determinado <\/span><\/p>\n<p><span style=\"color: #339966;\"># por ejemplo para trinucle\u00f3tidos podr\u00eda empezar as\u00ed<\/span><\/p>\n<pre>subseq_dict = {} #inicializamos un diccionario vacio, las keys son los trinuc y el valor su frecuencia<\/pre>\n<p>for i,s in enumerate(sequence):<\/p>\n<p>current_sub = sequence[i:i+3]<\/p>\n<p>#seleccionamos los nucleotidos entre la posicion que iteramos y 3 mas adelante<\/p>\n<p>if curren_sub in subseq_dict.keys():<\/p>\n<p># suma uno al valor que tuviera esa key<\/p>\n<p>else:<\/p>\n<p>subseq_dict[current_sub] = 1<\/p>\n<p># inicializamos esta key con valor 1 # para completar el ejercicio debeis generalizarlo (i.e. que se pueda usar cualquier N di-,tri-nucleotidos etc # en el bucle for (tal cual esta), os dara un error porque las ultimas iteraciones superan la longitud de la secuencia # si una secuencia tiene longitud=4, intentar<\/p>\n<p>acceder a la posicion 5 o mas provoca un fallo<\/p>\n<h3>cuesti\u00f3n 6<\/h3>\n<p>la frecuencia esperada la podemos obtener a partir de las frecuencias observadas de los mononucle\u00f3tidos<\/p>\n<h3>cuesti\u00f3n 7<\/h3>\n<p>import matplotlib.pyplot as plt<br \/>\nplt.bar(xAxis,yAxis)<br \/>\nplt.title(&#8216;OBS\/EXP ratio of &#8216;+str(nmerLength)+&#8221;-mers&#8221;)<br \/>\nplt.xlabel(&#8216;nmer&#8217;)<br \/>\nplt.ylabel(&#8216;obs\/exp&#8217;)<br \/>\nplt.show()<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recap Obetivos: Escribir un script que lea una secuencia de nucle\u00f3tidos en memoria para calcular distintas frecuencias Entender el script base propuesto que calcula la frecuencia para un nucle\u00f3tido Resolver las cuestiones planteadas haciendo uso de las pistas A continuaci\u00f3n <a href=\"https:\/\/bioinfo2.ugr.es\/biocomputacion\/practica1\/\" class=\"read-more\">Read More &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/bioinfo2.ugr.es\/biocomputacion\/wp-json\/wp\/v2\/pages\/1190"}],"collection":[{"href":"https:\/\/bioinfo2.ugr.es\/biocomputacion\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bioinfo2.ugr.es\/biocomputacion\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bioinfo2.ugr.es\/biocomputacion\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bioinfo2.ugr.es\/biocomputacion\/wp-json\/wp\/v2\/comments?post=1190"}],"version-history":[{"count":15,"href":"https:\/\/bioinfo2.ugr.es\/biocomputacion\/wp-json\/wp\/v2\/pages\/1190\/revisions"}],"predecessor-version":[{"id":2388,"href":"https:\/\/bioinfo2.ugr.es\/biocomputacion\/wp-json\/wp\/v2\/pages\/1190\/revisions\/2388"}],"wp:attachment":[{"href":"https:\/\/bioinfo2.ugr.es\/biocomputacion\/wp-json\/wp\/v2\/media?parent=1190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}