projets
Mini-projet 1 / 4 · Master Biologie

Analyse de séquences ADN en Python

Un mini-pipeline bioinformatique en 8 étapes : du parsing FASTA à la détection d’ORFs, entièrement en Python standard — sans Biopython, sans pandas, sans dépendances externes.

Pré-requis

Avoir terminé les ateliers Python 101 — chapitres 1 à 12.

À la fin du projet

Vous aurez écrit votre propre script bio.py qui lit un FASTA et produit un rapport complet : composition, GC, ORFs.

Étape 1 sur 8

Lire un fichier FASTA

Parser le format universel des séquences

Étape 1 / 8

Lire un fichier FASTA

★★
Contexte

Le format FASTA est la lingua franca de la bioinformatique. NCBI, EMBL, Ensembl, vos collaborateurs — tous échangent des séquences dans ce format ultra-simple :

  • une ligne d’en-tête commençant par > (ID + description)
  • une ou plusieurs lignes contenant la séquence (souvent 60 ou 80 caractères/ligne)

Pour notre projet, on travaille avec un échantillon pédagogique. Sauvegardez-le dans un fichier echantillon.fasta :

>gene_pedagogique | exemple synthetique 270 bp
GCAGCAATGGTTGTAGCTGTACATAATGCTATGCAGAAAATCTTAGAGTG
TCCCATCTGTCTGGAGTTGATCAAGGAACCTGTCTCCACAAAGTGTGACC
ACATATTTTGCAAATTTGTAACATGCTGAAACTTCTCAACCAGAAGAAAG
GGCCTTCACAGTGTCCTTTATGTAAGAATGATATAACCAAAAGGAGCCTA
CAAGAAAGTACGAGATTTAGTCAACTTGTTGAAGAGCTATTGAAAATCAT
TTGTGCTTTTCAGCTTGACACAGGTTTGGAG
Travail à réaliser

Écrivez une fonction lire_fasta(chemin) qui retourne un tuple (entete, sequence), où :

  • entete est la première ligne sans le caractère >
  • sequence est la concaténation de toutes les lignes suivantes, en majuscules, sans espaces ni sauts de ligne

Affichez l’en-tête et la longueur de la séquence.

En-tête : gene_pedagogique | exemple synthetique 270 bp
Longueur : 270 bases
Étape 2 sur 8

Composition en bases

Longueur, comptage A/T/G/C, détection d’ambiguïtés

Étape 2 / 8

Composition en bases

★★
Contexte

La première analyse de toute séquence : de quoi est-elle faite ? Le nombre de A, T, G, C donne déjà une signature de l’organisme. Une séquence dont 60 % des bases sont des G ou des C indique souvent une région codante ou un organisme thermophile.

Certaines bases peuvent être ambiguës : N (n’importe quoi), R (A ou G), Y (C ou T), etc. Notre fonction doit les compter à part — pas les ignorer silencieusement.

Travail à réaliser

Écrivez composition(seq) qui renvoie un dictionnaire avec les clés "A", "T", "G", "C", ainsi qu’une clé "autres" qui agrège tout le reste.

Puis écrivez afficher_composition(seq) qui imprime un tableau lisible incluant le pourcentage.

Composition (270 bases)
A      :   72  ( 26.7 %)
T      :   76  ( 28.1 %)
G      :   60  ( 22.2 %)
C      :   62  ( 23.0 %)
autres :    0  (  0.0 %)
Étape 3 sur 8

Taux de GC

Indicateur global + profil par fenêtre glissante

Étape 3 / 8

Taux de GC

★★
Contexte

Le taux de GC est l’un des indicateurs les plus utilisés en génomique. Quelques ordres de grandeur :

  • Plasmodium falciparum (paludisme) : ~ 19 % GC
  • humain : ~ 41 % GC
  • Streptomyces coelicolor : ~ 72 % GC

Les régions codantes ont souvent un GC plus élevé que les régions non codantes. Une fenêtre glissante permet de repérer ces zones le long d’un long ADN.

Travail à réaliser

Deux fonctions :

  • taux_gc(seq) → renvoie le pourcentage GC global.
  • gc_fenetre(seq, taille=50, pas=10) → renvoie une liste de tuples (position, taux).
Taux GC global : 45.19 %

Profil GC (fenêtre 50, pas 10) :
  pos    0 :  44.0 %
  pos   10 :  46.0 %
  pos   20 :  44.0 %
  pos   30 :  48.0 %
  ...
Étape 4 sur 8

Brin complémentaire inverse

L’autre brin, lu 5′ → 3′

Étape 4 / 8

Brin complémentaire inverse

★★
Contexte

L’ADN est bicaténaire. Si on connaît un brin, l’autre est déterminé par la règle de complémentarité de Watson-Crick :

5'  A T G C C A T  3'
     | | | | | | |
3'  T A C G G T A  5'

Par convention, on lit toujours dans le sens 5′ → 3′. Donc pour le « brin complémentaire » utile, on prend le complément et on inverse l’ordre. Ce complément inverse est indispensable pour concevoir des amorces PCR.

Travail à réaliser

Deux fonctions :

  • complement(seq) → remplace A↔T, G↔C (sans inverser).
  • complement_inverse(seq) → applique complement puis inverse.
Séquence            : ATGCCATGAAT
Complément          : TACGGTACTTA
Complément inverse  : ATTCATGGCAT
Étape 5 sur 8

Transcription ADN → ARNm

Du gène à son messager

Étape 5 / 8

Transcription ADN → ARNm

★★
Contexte

La transcription est l’étape n° 1 de l’expression des gènes. La seule différence chimique entre l’ADN et l’ARNm à ce stade : la thymine (T) est remplacée par l’uracile (U).

Travail à réaliser

transcrire(seq) prend une séquence ADN et renvoie l’ARNm correspondant.

ADN  : ATGGCCATTGTAATGGGCCGCTGA
ARN  : AUGGCCAUUGUAAUGGGCCGCUGA
Étape 6 sur 8

Traduction en protéine

Codons, code génétique, codons stop

Étape 6 / 8

Traduction en protéine

★★
Contexte

L’ARNm est lu par les ribosomes par groupes de 3 bases. Chaque codon code soit pour un acide aminé, soit pour un signal d’arrêt (codons stop : UAA, UAG, UGA).

Le code génétique est presque universel — c’est l’une des preuves les plus fortes de l’ancêtre commun à tout le vivant.

Travail à réaliser

Définissez le dictionnaire CODE_GENETIQUE (64 codons). Écrivez traduire(arn) qui s’arrête au premier codon stop.

ARN      : AUGGCCAUUGUAAUGGGCCGCUGAAUU
Protéine : MAIVMG R
Étape 7 sur 8

Cadres de lecture ouverts (ORF)

Six cadres, un seul vrai gène

Étape 7 / 8

Cadres de lecture ouverts (ORF)

★★★
Contexte

Une séquence d’ADN peut être lue selon six cadres de lecture : trois sur le brin sens, trois sur le brin antisens. Un ORF (Open Reading Frame) est une portion allant d’un AUG à un codon stop, sans stop intermédiaire.

Prédire un gène commence souvent par : « cherchons le plus long ORF des 6 cadres ». La majorité des séquences courtes (≤ 100 codons) sont du bruit ; au-delà, probable gène.

Travail à réaliser

trouver_orfs(seq, longueur_min=30) qui :

  1. parcourt les 6 cadres,
  2. repère chaque AUG ... STOP sans stop interne,
  3. ne garde que les ORFs d’au moins longueur_min AA,
  4. renvoie une liste triée par longueur décroissante.

Chaque ORF : brin, cadre, debut, fin, longueur, proteine.

Étape 8 sur 8

Pipeline final : un outil en ligne de commande

Tout assembler en un script utilisable

Étape 8 / 8

Pipeline final : un outil en ligne de commande

★★★
Contexte

On a sept briques : lire_fasta, composition, taux_gc, gc_fenetre, complement_inverse, transcrire, traduire, trouver_orfs. Reste à les assembler en un outil en ligne de commande.

C’est le moment où votre code passe de « exercice » à « instrument de recherche ».

Travail à réaliser

Rassemblez vos fonctions dans bio.py. main() qui :

  1. récupère le chemin depuis sys.argv,
  2. lit la séquence,
  3. affiche un rapport : en-tête, longueur, composition, GC%, top 3 ORFs,
  4. gère élégamment les fichiers absents ou invalides.
$ python bio.py echantillon.fasta