Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Chercher un motif et compter les k-mers

Après cette leçon: Je peux compter les k-mers d’une séquence pour trouver le motif le plus fréquent.

Leçon de 60 min2 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Comment trouver un motif dans une séquence ?

Un motif est un court morceau de séquence que l’on cherche, comme un mot dans un texte. Trouver les motifs qui reviennent souvent aide à repérer ce qui se répète dans une séquence.

Vous allez découper une séquence en morceaux de longueur k, appelés k-mers, et les compter avec un dictionnaire.

À la fin de cette leçon

Remarque

Je peux compter les k-mers d’une séquence pour trouver le motif le plus fréquent.

Mots clés

MotCe que ça veut direExemple
Motifun court morceau de séquence que l’on cherche
k-merun morceau de k bases à la suiteATG
Fenêtrela zone de k bases que l’on lit à une position
Chevauchementdeux morceaux qui partagent des bases
Fréquencele nombre de fois qu’un motif apparaît

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un k-mer est un morceau de k bases

Un k-mer est un morceau de k bases à la suite. Pour k égal à 3, on parle de 3-mers. On les lit avec une fenêtre de 3 bases que l’on décale d’une base à chaque fois.

En Python, sequence[debut:debut + 3] donne la fenêtre qui commence à debut.

Exemple travaillé : les 3-mers de ATGATGCATGAT

Début3-merDébut3-mer
0ATG5GCA
1TGA6CAT
2GAT7ATG
3ATG8TGA
4TGC9GAT

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un dictionnaire compte les k-mers

On parcourt toutes les positions de départ. Pour chaque k-mer lu, on ajoute 1 à son compteur dans un dictionnaire. S’il n’y est pas encore, on le crée avec le compte 1.

À la fin, le k-mer le plus fréquent est celui qui a le plus grand compteur.

Compter les k-mers avec un dictionnaire

Code: python
sequence = "ATGATGCATGAT"
k = 3

comptes = {}
# Il y a len(sequence) - k + 1 positions de départ possibles.
for debut in range(len(sequence) - k + 1):
    motif = sequence[debut:debut + k]
    if motif in comptes:
        comptes[motif] = comptes[motif] + 1
    else:
        comptes[motif] = 1

for motif in comptes:
    print(motif, comptes[motif])
# Mettez k = 2 puis relancez.

Exemple travaillé : les comptes des 3-mers

3-merComptePositions de début
ATG30, 3 et 7
TGA21 et 8
GAT22 et 9
TGC, GCA, CAT1 chacun4, 5 et 6
Total103 + 2 + 2 + 1 + 1 + 1

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup croient que count compte tous les motifs. La méthode count ne compte que ceux qui ne se chevauchent pas : dans AAAAC, elle voit 2 fois AA, alors qu’il y en a 3. Pour compter avec chevauchement, utilisez une fenêtre.

Compter avec et sans chevauchement

Commande
docker exec jupyter python3 -c "s='AAAAC'; print(s.count('AA'), sum(1 for i in range(len(s)-1) if s[i:i+2]=='AA'))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lister les 3-mers différents

Commande
docker exec jupyter python3 -c "s='ATGATGCATGAT'; print(sorted(set(s[i:i+3] for i in range(len(s)-2))))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Dans votre carnet, comptez les 2-mers puis les 4-mers de ATGATGCATGAT. Notez le motif le plus fréquent pour chaque k.

Dites ce qui arrive au nombre de k-mers différents quand k grandit.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.