Unité 2 / 11

Principes fondamentaux de l'analyse des données biologiques avec Python

Gains :

  • Capacité à faire confiance aux résultats déterministes en écrivant le code qui lit et nettoie les données biologiques sur l'intelligence artificielle et en l'exécutant lui-même avec Pandas, NumPy et Biopython
  • Être capable d'éviter le risque d'un « mauvais code fonctionnant sans erreurs » en testant le code avec une petite situation dont le résultat est connu et un test d'assertion.
  • Capacité à établir une analyse reproductible avec des habitudes d'épinglage de version, d'ensemencement aléatoire et de préservation des données brutes

Le langage de la biologie moderne devient de plus en plus Python. Le traitement manuel dans un cahier de laboratoire se transforme désormais en lignes de code traitant des dizaines de milliers de lignes de tableaux par seconde. Dans cette unité, nous apprendrons à utiliser l'IA en tant que co-programmeur qui imprime du code Python qui lit, nettoie et résume vos données biologiques. L’important est d’écrire le code sur l’intelligence artificielle, de l’exécuter vous-même et de vérifier le résultat ; En effet, il ne repose pas sur la prédiction verbale du modèle, mais sur la sortie déterministe (fournissant le même résultat à chaque exécution) du code.

Vous n'avez pas besoin de savoir coder dans cette unité ; Vous apprendrez à exprimer correctement l’intention et à fournir le résultat.

Pourquoi Python et quelles bibliothèques ?

Les bibliothèques Python (library : package de fonctions prêtes à l'emploi) les plus utilisées en biologie sont :

  • pandas : Pour lire des données tabulaires (CSV, Excel) et effectuer des opérations ligne-colonne. Outil de base pour filtrer, regrouper, fusionner une table d'expression génique.
  • NumPy : pour les tableaux numériques et les opérations matricielles ; Il fonctionne sous les pandas.
  • Biopython : Pour travailler avec des séquences ADN/ARN/protéines, lire des fichiers FASTA, traduction (traduction de l'ADN en protéine).
  • matplotlib / seaborn : Pour tracer des tracés.
  • SciPy/statsmodels : Pour les tests statistiques.

L’intelligence artificielle connaît très bien ces bibliothèques. Votre travail consiste à indiquer clairement ce que vous voulez faire avec quelle bibliothèque et à exécuter et vérifier le code généré.

Indice : Le modèle peut parfois « inventer » (halluciner) une fonction de bibliothèque qui n'existe pas. Si le code donne une erreur, ne paniquez pas ; recoller l'erreur dans le modèle comme c'est généralement le cas, la corrige. Si cela ne fonctionne toujours pas, consultez la documentation officielle.

Pas à pas : vider une table de comptage

Disons que vous avez counts.csv : les lignes sont des gènes, les colonnes sont des échantillons, les cellules sont des décomptes de lectures brutes. Premières étapes typiques :

  1. Chargement : Lisez le tableau avec les pandas.
  2. Découverte : vérifiez la taille (combien de gènes, combien d'échantillons), les valeurs manquantes, les noms de gènes en double.
  3. Filtrage : rejetez les gènes qui ne sont lus dans aucun échantillon (nombre total 0 ); ce sont du bruit.
  4. Résumer : calculez le nombre total de lectures par échantillon (taille de la bibliothèque) ; L'échantillon trop faible a peut-être échoué.

Vous pouvez confier ce workflow à l’intelligence artificielle comme suit :

Rôle : Vous êtes un assistant Python axé sur la bioinformatique. Tâche : Lire le fichier counts.csv avec pandas. Données : les lignes sont des gènes (index=gene_id), les colonnes sont 24 échantillons, les valeurs sont des nombres bruts entiers. Je veux : (1) imprimer la taille, (2) supprimer les gènes qui n'ont jamais été lus, (3) afficher le nombre total de lectures par échantillon dans un graphique à barres. Ajoutez de courts commentaires turcs à chaque ligne. Donnez simplement du code fonctionnel.

Génère le code du modèle ; vous l'exécutez. Si vous voyez 24 colonnes et un nombre raisonnable de gènes (par exemple 15 000 à 25 000) dans le résultat, vous êtes sur la bonne voie. Si un échantillon contient un dixième de autant de lectures que les autres, notez cet échantillon.

trois mini-cases

Cas 1 — Piège à valeurs manquantes : un étudiant a fait calculer la moyenne dans un tableau métabolomique de 30 échantillons ; Le résultat était absurde. Problème : les cellules manquantes étaient remplies avec le texte "ND" au lieu de NaN (pas un nombre), la colonne était donc lue comme du texte. Cela a été corrigé lorsque j'ai fait dire à l'intelligence artificielle "Faites des valeurs ND NaN et convertissez la colonne en nombres". Leçon : explorez toujours les données brutes en premier.

Cas 2 — Erreur de fusion : un chercheur a fusionné deux tables (expression et annotation des gènes) mais 2 000 gènes ont été perdus. Cause : dans une table, les ID étaient "ENSG00000141510", dans l'autre, ils étaient "ENSG00000141510.14" (avec numéro de version). Le modèle a écrit une seule ligne de code qui effaçait le numéro de version ; La perte a été réduite à 40 gènes. Leçon : aligner les formats d’identification avant de les fusionner.

Cas 3 — Perte de données silencieuse : Un technicien n'a pas remarqué qu'après filtrage, le nombre de gènes est passé de 22 000 à 8 000 ; le seuil a été mal défini (> 10 au total au lieu de > 10 lectures dans chaque échantillon). Un gène connu (le gène de ménage : des gènes tels que le GAPDH qui sont constamment exprimés dans chaque cellule) manquait finalement. Leçon : recherchez un post-filtre génétique "indispensable".

Test avec une situation connue (habitude la plus importante)

Le moyen le plus sûr de se fier à l’exactitude du code écrit par l’intelligence artificielle est de le tester avec un petit échantillon dont vous connaissez le résultat à l’avance. Par exemple, donnez un tableau factice avec 5 lignes ; calculer le total manuellement ; Voyez si le code donne le même résultat.

Ajoutez un test au code de filtrage que vous avez écrit : générez un petit DataFrame composé de 5 gènes, 3 échantillons, mettez délibérément 2 gènes à zéro, vérifiez avec assert que le filtre élimine exactement ces 2 gènes. Rendre le test exécutable.

assert vous avertit si le code s'écarte du comportement attendu. Il s’agit là du meilleur bouclier contre le risque de « fausses conclusions silencieuses ».

Invite faible/Invite forte

Faible : "Nettoyer mon graphique."

Puissant : "counts.csv : gène de lignes (index gene_id), échantillon de 24 colonnes, valeurs entières brutes. Procédez comme suit : signalez les valeurs manquantes, supprimez les gènes dont la somme est égale à 0 dans tous les échantillons, imprimez le nombre total de lectures pour chaque échantillon, comparez le nombre de gènes avant/après le filtre. Donnez simplement du code Python fonctionnel et commenté."

Différence : une invite forte spécifie la structure des données, les étapes et le résultat de la validation (comparaison avant/après). Le modèle n'a pas besoin de deviner.

Tableau comparatif : IA ou manuel ?

opération

Imprimer avec l'intelligence artificielle

vérifie-le toi-même

Lecture CSV, conversion de format

Oui

Vérifiez la taille et les types

Filtrage, regroupement

Oui

Compter avant/après

Test de statistiques

Oui (code)

Confirmer les hypothèses et tester

« Combien de lignes reste-t-il ?

Non (laissez le code compter)

Lire la sortie

Signification biologique du résultat

partiellement

Un commentaire d'expert est requis

Erreurs courantes

  • En s'appuyant sur le nombre produit par le modèle : "Quelle est l'expression moyenne ?" Posez la question au code, pas au modèle.
  • Ne pas vérifier les types de données : les colonnes de nombres lues comme du texte renvoient silencieusement des résultats incorrects.
  • Ne pas vérifier le post-filtre : vérifiez qu'un gène attendu est toujours là.
  • Oublier la graine du hasard : Si la graine n'est pas fixée dans le code contenant des opérations aléatoires, le résultat change à chaque fois ; la répétabilité est altérée.
  • Exécuter le code sans le lire : lisez au moins les commentaires et suivez la logique.
Attention : Ce n'est pas parce que le code fonctionne qu'il est correct. « Un mauvais code qui fonctionne sans erreurs » est la situation la plus dangereuse en biologie ; parce que le mauvais résultat est produit silencieusement. Les tests avec une condition connue éliminent ce risque.

Reproductibilité : valeur scientifique du code

En biologie, la valeur scientifique d’un résultat dépend de la capacité des autres (et de votre futur moi) à le reproduire. Les opérations manuelles sur la table ne sont pas enregistrées ; Personne ne sait quelle cellule change et comment. Le code documente chaque étape. Par conséquent, considérez l’analyse que vous produisez avec l’intelligence artificielle comme un enregistrement stocké et partagé, et non comme une boîte unique.

Trois habitudes sont importantes pour une analyse reproductible. La première est l'épinglage de version : notez la version de la bibliothèque que vous utilisez (par exemple, pandas 2.2) ; Une version différente peut donner des résultats différents. La seconde est la graine aléatoire : corrigez la graine dans chaque code contenant des opérations aléatoires afin que le résultat soit le même à chaque exécution. Troisièmement, ne modifiez jamais les données brutes : ne touchez pas au fichier d'origine, effectuez toutes les transformations dans le code pour qu'il puisse être annulé.

Ajoutez des lignes qui impriment les versions des bibliothèques utilisées au début du code d'analyse que vous avez écrit, et s'il y a un processus aléatoire, corrigez la graine avec sanp.random.seed(42). Ne modifiez pas du tout le CSV brut, enregistrez toutes les sorties dans un fichier séparé.

Notebook Jupyter : combinaison d’analyse et de narration

L'environnement le plus utilisé en bioinformatique est le notebook Jupyter (notebook : outil qui combine code, sortie et description dans un même document). Demander à l'IA de générer le code en fonction des cellules du cahier, chaque étape étant séparée par une explication Markdown, permet à vous et à vos collègues de suivre plus facilement l'analyse. Cela fait de l'analyse un cahier de laboratoire lisible et non une « boîte noire ».

Reconnaître les formats de fichiers biologiques

Lors du traitement de données biologiques avec Python, vous rencontrerez constamment certains formats de fichiers. Avant que le modèle puisse lire correctement un fichier, il doit savoir dans quel format il se trouve ; Si vous vous trompez de format, vous tomberez dans le piège du « mauvais code qui fonctionne sans erreurs ». Les plus courants sont :

formater

Contenu

véhicule adapté

CSV/TSV

Données du tableau (expression, mesure)

pandas

FASTA (.fa/.fasta)

Séquences ADN/ARN/protéines

biopython

FASTQ (.fq)

Lectures de séquençage brut + qualité

Biopython, outils personnalisés

VCF

Liste des variantes (mutations)

pandas/pysam

GFF/GTF

Annotation du génome (positions des gènes)

pandas, gffutils

Si vous ne reconnaissez pas un format, demandez d'abord au modèle de l'identifier en affichant quelques exemples de lignes, puis demandez le code de lecture :

Je donne les 5 premières lignes du fichier ci-dessous. De quel format de biofichier s'agit-il ? Expliquez la signification des colonnes/champs, puis donnez du code qui lit en toute sécurité (vérifie le format) ce fichier en Python. 5 premières lignes : [coller]

Cette approche évite les erreurs silencieuses découlant de l’hypothèse de forme en premier lieu.

En résumé

Python est le principal langage de traitement des données biologiques ; pandas, NumPy et Biopython sont les outils de base. L'IA écrit ce code rapidement, mais vous l'exécutez et le vérifiez. L'habitude la plus critique est de tester le code avec un petit échantillon dont vous connaissez le résultat et d'intégrer l'attente dans le code avec assert. Fiez-vous au résultat déterministe du code que vous exécutez, et non à des conjectures verbales.

Tâche de candidature

Imprimez un code qui permet à l'IA de lire la table CSV que vous avez (ou un exemple), d'imprimer sa taille et de filtrer les gènes vides. Ajoutez ensuite un test d'assertion du modèle avec 5 lignes de données factices. Exécutez le code ; Notez le nombre de gènes avant et après le filtre. Vérifiez qu'un gène de ménage (par exemple GAPDH/ACTB) est toujours présent dans le résultat.

liste de contrôle

  • [ ] J'ai vérifié la taille et le type des données avant de les traiter.
  • [ ] J'ai explicitement géré les valeurs manquantes.
  • [ ] J'ai comparé le nombre de lignes avant/après le filtre.
  • [ ] J'ai ajouté un test d'assertion avec une condition connue.
  • [ ] J'ai laissé le comptage/calcul au code, pas au modèle.
  • [ ] J'ai lu les commentaires du code et suivi la logique.