<jupyter_start><jupyter_text>Esercizio 3EMBL (http://www.ebi.ac.uk/cgi-bin/sva/sva.pl/) è una banca di sequenze nucleotidiche sviluppata da EMBL-EBI (European Bioinformatics Institute, European Molecular Biology Laboratory), in cui ogni sequenza nucleotidica viene memorizzata, con altre informazioni, in un file di puro testo (*EMBL entry*) in un formato che prende il nome di `EMBL`.**Il formato `EMBL`** è composto da *record* che iniziano con un codice a due lettere maisucole che ne indica il contenuto. I soli *record* che non iniziano con un codice a due lettere sono quelli (nella parte finale) contenenti la sequenza nucleotidica.Il record `//` segnala la fine del file.L'esercizio richiede di scaricare (in formato `EMBL`) la sequenza nucleotidica con identificatore `M10051`, contenente un mRNA (cioé un trascritto espresso da un gene), e scrivere un notebook che ottenga da tale *entry*:- la sequenza nucleotidica in formato `FASTA`- la sequenza della corrispondente proteina in formato `FASTA`---Requisiti:- nell’*header* `FASTA` della sequenza nucleotidica devono comparire l’identificatore univoco della sequenza e l’organismo a cui si riferisce, nel seguente formato:        >M10051-HUM        - la sequenza nucleotidica deve essere prodotta su alfabeto `{a,c,g,u}`        - nell’*header* `FASTA` della sequenza della proteina devono comparire l’identificatore univoco della sequenza, l’organismo e la lunghezza della proteina, nel seguente formato:        >M10051-HUM; len = 1382        - le sequenze nucleotidiche devono essere prodotte in record di 80 caratteri (e non su unica riga)- deve essere definita una funzione `format_fasta()` che prenda come argomenti una stringa contenente l'intestazione `FASTA` e una sequenza nucleotidica (o una proteina) e restituisca la sequenza in formato `FASTA` con la sequenza separata in righe di 80 caratteri.- usare solo espressioni regolari per estrarre le informazioni***Produrre i due output in due oggetti di tipo stringa.***Record da considerare per l'esercizio:- Il record che inizia con `ID`:        ID   M10051; SV 1; linear; mRNA; STD; HUM; 4723 BP.contiene l'identificatore univoco della sequenza (M10051) e l'organismo (HUM). Il fatto che il file si riferisca alla sequenza nucleotidica di un gene è indicato dalla presenza della parola `mRNA`.- L'insieme di tutti i record che iniziano con `FT` contengono le *features* annotate sulla sequenza nucleotidica. In particolare tutti i record della sezione:       FT                   /translation="MGTGGRRGAAAAPLLVAVAALLLGAAGHLYPGEVCPGMDIRNNLT       FT                   RLHELENCSVIEGHLQILLMFKTRPEDFRDLSFPKLIMITDYLLLFRVYGLESLKDLFP       FT                   NLTVIRGSRLFFNYALVIFEMVHLKELGLYNLMNITRGSVRIEKNNELCYLATIDWSRI       FT                   LDSVEDNHIVLNKDDNEECGDICPGTAKGKTNCPATVINGQFVERCWTHSHCQKVCPTI       FT                   [...]       FT                   DGGSSLGFKRSYEEHIPYTHMNGGKKNGRILTLPRSNPS"        contengono la sequenza della proteina che corrisponde alla sequenza di mRNA in questione.- Il record che inizia con `SQ`:        SQ   Sequence 4723 BP; 1068 A; 1298 C; 1311 G; 1046 T; 0 other;        introduce la sezione della sequenza nucleotidica e fornisce la sua composizione nucleotidica oltre che la sua lunghezza. La sezione termina con il record `//` (segnale di fine del file).La sequenza nucleotidica viene rappresentata tramite una serie di record che iniziano con degli spazi, e ogni record contiene un pezzo di sequenza lungo 60 basi. Ogni pezzo di 60 basi è a sua volta separato in pezzi di 10 basi.Il numero intero alla fine di un *record* di sequenza fornisce la lunghezza totale della sequenza fino a questo punto.    SQ   Sequence 4723 BP; 1068 A; 1298 C; 1311 G; 1046 T; 0 other;         ggggggctgc gcggccgggt cggtgcgcac acgagaagga cgcgcggccc ccagcgctct        60         tgggggccgc ctcggagcat gacccccgcg ggccagcgcc gcgcgcctga tccgaggaga       120         ccccgcgctc ccgcagccat gggcaccggg ggccggcggg gggcggcggc cgcgccgctg       180         ctggtggcgg tggccgcgct gctactgggc gccgcgggcc acctgtaccc cggagaggtg       240         tgtcccggca tggatatccg gaacaacctc actaggttgc atgagctgga gaattgctct       300         gtcatcgaag gacacttgca gatactcttg atgttcaaaa cgaggcccga agatttccga       360         gacctcagtt tccccaaact catcatgatc actgattact tgctgctctt ccgggtctat       420         gggctcgaga gcctgaagga cctgttcccc aacctcacgg tcatccgggg atcacgactg       480         [...]         tttttcgttc cccccacccg cccccagcag atggaaagaa agcacctgtt tttacaaatt      4620         cttttttttt tttttttttt tttttttttg ctggtgtctg agcttcagta taaaagacaa      4680         aacttcctgt ttgtggaaca aaatttcgaa agaaaaaacc aaa                        4723    //    **NOTA BENE**:- l'alfabeto degli amminoacidi è {ACDEFGHIKLMNPQRSTVWY}- la sequenza nucleotidica riportata nell'*entry* `EMBL` è su alfabeto `{a,c,g,t}` nonostante rappresenti la sequenza primaria di un mRNA. Per ottenere la sequenza su alfabeto `{a,c,g,u}` basta operare una sostituzione di tutti i simboli `t` con simboli `u`.***  Soluzione  Definizione della funzione `format_fasta()`La funzione deve prendere come argomento l'*header* `FASTA` e una sequenza e restituisce la sequenza in formato `FASTA` dopo averla separata in righe (record) di 80 caratteri.<jupyter_code>def format_fasta(header, sequence):    
    splitted_sequence = '\n'.join(re.findall('\w{,80}', sequence))
    fasta_sequence = header + '\n' + splitted_sequence
    return fasta_sequence<jupyter_output><empty_output><jupyter_text>**NOTA BENE**: supporre che l'*header* in input alla funzione abbia già il simbolo `>` all'inizio, ma non il simbolo `\n` alla fine.  Parametri in input<jupyter_code>input_file_name = './M10051.txt'<jupyter_output><empty_output><jupyter_text>Importare il modulo `re` per utilizzare le espressioni regolari.<jupyter_code>import re<jupyter_output><empty_output><jupyter_text>Lettura del file `EMBL` nell'unica stringa `file_str`<jupyter_code>print(file_str)<jupyter_output>ID   M10051; SV 1; linear; mRNA; STD; HUM; 4723 BP.
XX
AC   M10051;
XX
DT   02-JUL-1986 (Rel. 09, Created)
DT   14-NOV-2006 (Rel. 89, Last updated, Version 7)
XX
DE   Human insulin receptor mRNA, complete cds.
XX
KW   insulin receptor; tyrosine kinase.
XX
OS   Homo sapiens (human)
OC   Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi; Mammalia;
OC   Eutheria; Euarchontoglires; Primates; Haplorrhini; Catarrhini; Hominidae;
OC   Homo.
XX
RN   [1]
RP   1-4723
RX   DOI; 10.1016/0092-8674(85)90334-4.
RX   PUBMED; 2859121.
RA   <NAME>., <NAME>., <NAME>., <NAME>., <NAME>., <NAME>., <NAME>.,
RA   <NAME>., <NAME>., <NAME>., <NAME>., <NAME>.;
RT   "The human insulin receptor cDNA: the structural basis for
RT   hormone-activated transmembrane signalling";
RL   Cell 40(4):747-758(1985).
XX
DR   MD5; e4e6ebf2e723a500c1dd62385c279351.
DR   Ensembl-Gn; ENSG00000171105; homo_sapiens.
DR   Ensembl-Tr; ENST00000302850; homo_sapiens.
DR   Ensembl-Tr; ENST0000034[...]<jupyter_text>Estrazione dell'identificatore univoco e dell'organismo relativo all'entry. Estrarre dal *record* `ID`:    ID   M10051; SV 1; linear; mRNA; STD; HUM; 4723 BP.    l'identificatore univoco e l'organismo e assegnarli alle variabili `identifier` e `organism`. Estrazione dell'identificatore.<jupyter_code>identifier<jupyter_output><empty_output><jupyter_text>Estrazione dell'organismo.<jupyter_code>organism<jupyter_output><empty_output><jupyter_text>Sequenza nucleotidica in formato `FASTA` Ottenere la lista dei *record* della sequenza nucleotidica escludendo da ognuno di essi solo l'intero finale.<jupyter_code>seq_row_list<jupyter_output><empty_output><jupyter_text>Estrarre dalla lista appena costruita, la lista contenente i pezzi di lunghezza 10 della sequenza nucleotidica in modo tale che l'elemento i-esimo sia una lista annidata contenente i sei pezzi di sequenza relativi all'i-esimo *record* della lista appena costruita.**NOTA BENE**: fare attenzione al fatto che l'ultimo pezzo potrebbe essere più corto di 10 basi.<jupyter_code>seq_chunk_list<jupyter_output><empty_output><jupyter_text>Concatenare i pezzi della lista in un'unica stringa.<jupyter_code>nucleotide_sequence<jupyter_output><empty_output><jupyter_text>Sostituire tutti i simboli `t` con un simbolo `u`.<jupyter_code>nucleotide_sequence<jupyter_output><empty_output><jupyter_text>Produrre la sequenza nucleotidica in formato `FASTA` con il seguente *header*:    >M10051-HUM<jupyter_code>header = '>' + identifier + '-' + organism
nucleotide_fasta_sequence = format_fasta(header, nucleotide_sequence)
nucleotide_fasta_sequence<jupyter_output><empty_output><jupyter_text>Sequenza della proteina in formato `FASTA` Estrarre il prefisso della proteina contenuto nel *record*:    FT                   /translation="MGTGGRRGAAAAPLLVAVAALLLGAAGHLYPGEVCPGMDIRNNLT<jupyter_code>protein_prefix<jupyter_output><empty_output><jupyter_text>Ottenere la lista degli altri record di proteina:    FT                   RLHELENCSVIEGHLQILLMFKTRPEDFRDLSFPKLIMITDYLLLFRVYGLESLKDLFP    **NOTA BENE**: attenzione all'ultimo:    FT                   DGGSSLGFKRSYEEHIPYTHMNGGKKNGRILTLPRSNPS"che contiene dei doppi apici `"` finali.<jupyter_code>protein_list<jupyter_output><empty_output><jupyter_text>Aggiungere in testa alla lista il prefisso trovato prima e concatenare tutti gli elementi della lista per ottenere la sequenza della proteina in un'unica stringa.<jupyter_code>protein_sequence<jupyter_output><empty_output><jupyter_text>Produrre la sequenza della proteina in formato `FASTA` con il seguente *header*:    >M10051-HUM; len = 1382<jupyter_code>protein_fasta_sequence<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0706923477355544, 'fraction_numerical': 0.03019260801665799, 'mean_word_length': 4.610981308411215, 'pattern_counts': {'":': 0, '<': 72, '<?xml version=': 0, '>': 78, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 3, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '15', 'dir': 'jupyter-structured-clean-dedup', 'id': '419271', 'license': 'CC0-1.0', 'n_tokens_mistral': 3718, 'n_tokens_neox': 3440, 'n_words': 1011, 'path': 'laboratorio/lezione6-7-15-21ott21/.ipynb_checkpoints/esercizio3-soluzione-checkpoint.ipynb', 'repo_name': 'bioinformatica-corso/Materiale', 'size': '9632'}