Eenheid 2 / 11

Basisprincipes van biologische data-analyse met Python

Winst:

  • Mogelijkheid om op deterministische output te vertrouwen door de code te schrijven die biologische gegevens leest en opschoont voor kunstmatige intelligentie en deze zelf uit te voeren met Pandas, NumPy en Biopython
  • Het risico van 'verkeerde code die foutloos werkt' kunnen vermijden door de code te testen met een kleine situatie waarvan het resultaat bekend is en een asserttest.
  • Mogelijkheid om een herhaalbare analyse op te zetten met versiepinning, willekeur en bewaargewoonten voor onbewerkte gegevens

De taal van de moderne biologie wordt steeds meer Python. Handmatige verwerking in een laboratoriumnotitieboekje verandert nu in coderegels die tienduizenden regels tabellen per seconde verwerken. In deze unit leren we AI te gebruiken als een co-programmeur die Python-code afdrukt die uw biologische gegevens leest, opschoont en samenvat. Het belangrijkste is om de code naar de kunstmatige intelligentie te schrijven, deze zelf uit te voeren en het resultaat te verifiëren; Dit komt omdat het niet afhankelijk is van de verbale voorspelling van het model, maar van de deterministische uitvoer van de code (die bij elke run hetzelfde resultaat oplevert).

U hoeft in dit apparaat niet te kunnen coderen; Je leert de intentie correct uit te drukken en de output aan te leveren.

Waarom Python en welke bibliotheken?

De meest gebruikte Python-bibliotheken (bibliotheek: pakket met kant-en-klare functies) in de biologie zijn:

  • panda's: om gegevens in tabelvorm (CSV, Excel) te lezen en rij-kolombewerkingen uit te voeren. Basishulpmiddel voor het filteren, groeperen en samenvoegen van een genexpressietabel.
  • NumPy: voor numerieke arrays en matrixbewerkingen; Het loopt onder panda's.
  • Biopython: Voor het werken met DNA/RNA/eiwitsequenties, het lezen van FASTA-bestanden, vertaling (vertalen van DNA in eiwit).
  • matplotlib / seaborn: Voor het plotten van percelen.
  • SciPy/statsmodels: Voor statistische tests.

Kunstmatige intelligentie kent deze bibliotheken heel goed. Het is jouw taak om duidelijk aan te geven wat je met welke bibliotheek wilt doen en de gegenereerde code uit te voeren en te verifiëren.

Tip: Het model kan soms een bibliotheekfunctie "verzinnen" (hallucineren) die niet bestaat. Als de code een foutmelding geeft, raak dan niet in paniek; Door de fout terug in het model te plakken, zoals gewoonlijk, wordt het probleem opgelost. Als het nog steeds niet werkt, raadpleeg dan de officiële documentatie.

Stap voor stap: een teltafel opruimen

Stel dat u counts.csv heeft: rijen zijn genen, kolommen zijn voorbeelden, cellen zijn onbewerkte leesaantallen. Typische eerste stappen:

  1. Laden: Lees de tabel met panda's.
  2. Ontdekking: controleer de grootte (hoeveel genen, hoeveel monsters), ontbrekende waarden, dubbele gennamen.
  3. Filteren: gooi genen weg die in geen enkel monster zijn gelezen (totaal aantal 0); dit zijn lawaai.
  4. Samenvatten: bereken het totale aantal lezingen per voorbeeld (bibliotheekgrootte); Het monster dat te laag is, is mogelijk mislukt.

U kunt deze workflow als volgt uitbesteden aan kunstmatige intelligentie:

Rol: Je bent een Python-assistent gericht op bio-informatica. Taak: Lees het counts.csv-bestand met panda's. Gegevens: rijen zijn gen (index=gene_id), kolommen zijn 24 monsters, waarden zijn onbewerkte gehele getallen. Ik wil: (1) de grootte afdrukken, (2) de genen weggooien die nooit zijn gelezen, (3) het totale aantal metingen per monster weergeven in een staafdiagram. Voeg korte Turkse commentaren toe aan elke regel. Geef gewoon werkende code.

Genereert modelcode; jij voert het uit. Als je 24 kolommen en een redelijk aantal genen (bijvoorbeeld 15.000-25.000) in de uitvoer ziet, zit je op de goede weg. Als een monster een tiende zoveel metingen bevat als de andere, schrijf dat monster dan op.

drie minikoffers

Geval 1 – Valkuil van ontbrekende waarden: Een student liet het gemiddelde berekenen in een metabolomics-tabel met 30 steekproeven; Het resultaat was absurd. Probleem: de ontbrekende cellen waren gevuld met de tekst "ND" in plaats van NaN (geen getal), dus de kolom werd gelezen als tekst. Het werd opgelost toen ik de kunstmatige intelligentie liet zeggen: "Maak ND-waarden NaN en converteer de kolom naar getallen". Les: verken altijd eerst de ruwe data.

Geval 2 – Samenvoegfout: Een onderzoeker voegde twee tabellen samen (expressie en genannotatie), maar 2000 genen gingen verloren. Oorzaak: in de ene tabel waren de ID's "ENSG00000141510", in de andere waren ze "ENSG00000141510.14" (met versienummer). Model schreef een enkele regel code die het versienummer wist; Het verlies werd teruggebracht tot 40 genen. Les: breng ID-formaten op één lijn voordat u ze samenvoegt.

Geval 3 — Stil gegevensverlies: Een technicus merkte niet dat na het filteren het aantal genen daalde van 22.000 naar 8.000; de drempelwaarde is onjuist ingesteld (>10 totaal in plaats van >10 metingen in elk monster). Een bekend gen (huishoudgen: genen zoals GAPDH die voortdurend in elke cel tot expressie komen) ontbrak uiteindelijk. Les: controleer op een nafilter van een gen dat je moet hebben.

Testen met bekende situatie (belangrijkste gewoonte)

De zekerste manier om de nauwkeurigheid van de door kunstmatige intelligentie geschreven code te vertrouwen, is door deze te testen met een klein monster waarvan u het resultaat van tevoren kent. Geef bijvoorbeeld een dummytabel met 5 rijen; bereken het totaal handmatig; Kijk of de code hetzelfde resultaat oplevert.

Voeg een test toe aan de filtercode die u hebt geschreven: Genereer een klein DataFrame bestaande uit 5 genen, 3 monsters, stel opzettelijk 2 genen in op nul, verifieer met bewering dat het filter precies deze 2 genen weggooit. Maak de test uitvoerbaar.

assert waarschuwt u als de code afwijkt van het verwachte gedrag. Dit is het sterkste schild tegen het risico van de “stille valse conclusie”.

Zwakke prompt/sterke prompt

Zwak: "Maak mijn kaart schoon."

Krachtig: "counts.csv: rijen gen (gene_id index), 24 kolommen monster, waarden onbewerkt geheel getal. Doe het volgende: rapporteer ontbrekende waarden, gooi genen weg die optellen tot 0 voor alle monsters, druk de totale waarden af ​​voor elk monster, vergelijk het aantal genen voor/na het filter. Geef gewoon de werkende, becommentarieerde Python-code."

Verschil: Sterke prompt specificeert de gegevensstructuur, stappen en validatie-uitvoer (voor/na vergelijking). Het model hoeft niet te raden.

Vergelijkingstabel: AI of handmatig?

transactie

Afdrukken naar kunstmatige intelligentie

verifieer het zelf

CSV-lezen, formaatconversie

Ja

Controleer maat en type

Filteren, groeperen

Ja

Tel voor/na

Statistieken testen

Ja (code)

Bevestig aannames en test

"Hoeveel regels zijn er nog over?"

Nee (laat de code tellen)

Lees de uitvoer

Biologische betekenis van het resultaat

gedeeltelijk

Deskundig commentaar is vereist

Veel voorkomende fouten

  • Vertrouwend op het getal dat het model oplevert: “Wat is de gemiddelde uitdrukking?” Stel de vraag aan de code, niet aan het model.
  • Gegevenstypen niet controleren: kolommen met getallen die als tekst worden gelezen, geven stilletjes onjuiste resultaten.
  • Post-filter niet controleren: Controleer of een verwacht gen er nog steeds is.
  • Het zaad van willekeur vergeten: als het zaad niet vastligt in de code die willekeurige bewerkingen bevat, verandert het resultaat elke keer; de herhaalbaarheid wordt aangetast.
  • De code uitvoeren zonder deze te lezen: Lees in ieder geval de opmerkingen en volg de logica.
Let op: het feit dat de code werkt, betekent niet dat de code correct is. ‘Verkeerde code die zonder fouten werkt’ is de gevaarlijkste situatie in de biologie; omdat het verkeerde resultaat stilletjes wordt geproduceerd. Testen met een bekende aandoening elimineert dit risico.

Reproduceerbaarheid: wetenschappelijke waarde van de code

In de biologie hangt de wetenschappelijke waarde van een resultaat af van het vermogen van anderen (en jouw toekomstige zelf) om het te reproduceren. Handmatige tafelbewerkingen worden niet geregistreerd; Niemand weet welke cel verandert en hoe. De code documenteert elke stap. Beschouw de analyse die je met kunstmatige intelligentie maakt daarom als een opgeslagen en gedeeld record, en niet als een eenmalige box.

Voor een herhaalbare analyse zijn drie gewoonten belangrijk. De eerste is het vastzetten van versies: noteer welke bibliotheekversie u gebruikt (bijvoorbeeld Panda's 2.2); Verschillende versies kunnen verschillende resultaten opleveren. De tweede is het willekeurzaad: repareer het zaad in elke code die willekeurige bewerkingen bevat, zodat het resultaat bij elke run hetzelfde is. Ten derde: verander nooit de onbewerkte gegevens: raak het originele bestand niet aan, voer alle transformaties in code uit zodat deze teruggedraaid kunnen worden.

Voeg regels toe die de versies afdrukken van de bibliotheken die zijn gebruikt aan het begin van de analysecode die u hebt geschreven, en als er een willekeurig proces is, corrigeert u het zaad met sanp.random.seed(42). Wijzig de onbewerkte CSV helemaal niet, sla alle uitvoer op in een apart bestand.

Jupyter notebook: combinatie van analyse en verhaal

De meest gebruikte omgeving in de bio-informatica is het Jupyter-notebook (notebook: hulpmiddel dat code, uitvoer en beschrijving in hetzelfde document combineert). Als u de AI de code laat genereren op basis van de cellen van het notebook, waarbij elke stap wordt gescheiden door een Markdown-uitleg, wordt het voor zowel u als uw collega's gemakkelijker om de analyse te volgen. Dit maakt de analyse tot een leesbaar laboratoriumnotitieboekje, en niet tot een ‘black box’.

Herkennen van biologische bestandsformaten

Bij het verwerken van biologische data met Python kom je voortdurend bepaalde bestandsformaten tegen. Voordat het model een bestand correct kan lezen, moet het weten in welk formaat het zich bevindt; Als u het formaat verkeerd gebruikt, trapt u in de valkuil van "verkeerde code die zonder fouten werkt". De meest voorkomende zijn:

formaat

Inhoud

geschikt voertuig

CSV/TSV

Tabelgegevens (uitdrukking, meting)

panda's

FASTA (.fa/.fasta)

DNA/RNA/eiwitsequenties

biopython

FASTQ (.fq)

Ruwe sequencing leest + kwaliteit

Biopython, aangepaste tools

VCF

Variant (mutatie) lijst

panda's/pysam

GFF/GTF

Genoomannotatie (genposities)

panda's, gffutils

Als u een formaat niet herkent, laat het model het dan eerst identificeren door enkele voorbeeldregels te tonen en vraag vervolgens om de leescode:

Ik geef de eerste vijf regels van het onderstaande bestand. Welk biobestandsformaat is dit? Leg de betekenis van de kolommen/velden uit en geef vervolgens code die dit bestand veilig in Python leest (formaatcontroles). Eerste 5 regels: [plakken]

Deze benadering voorkomt in de eerste plaats stille fouten die voortkomen uit de aanname van vorm.

Samengevat

Python is de belangrijkste verwerkingstaal voor biologische gegevens; panda's, NumPy en Biopython zijn de basisinstrumenten. De AI schrijft deze code snel, maar jij voert hem uit en verifieert hem. De meest kritische gewoonte is om de code te testen met een klein voorbeeld waarvan u het resultaat kent, en de verwachting met assert in de code in te bedden. Vertrouw op de deterministische uitvoer van de code die u uitvoert, en niet op verbaal giswerk.

Applicatie taak

Druk een code af waarmee de AI de CSV-tabel die je hebt (of een voorbeeldtabel) leest, druk de grootte ervan af en filter lege genen eruit. Voeg vervolgens een assertietest uit het model toe met vijf regels dummygegevens. Voer de code uit; Noteer het aantal genen voor en na het filter. Controleer of er nog steeds een huishoudgen (bijvoorbeeld GAPDH/ACTB) aanwezig is in het resultaat.

controlelijst

  • [ ] Ik heb de grootte en het soort gegevens gecontroleerd voordat ik deze verwerkte.
  • [ ] Ik heb expliciet de ontbrekende waarden behandeld.
  • [ ] Ik heb het aantal rijen voor/na filter vergeleken.
  • [ ] Ik heb een assert-test toegevoegd met een bekende aandoening.
  • [ ] Ik heb het tellen/berekenen aan de code overgelaten, niet aan het model.
  • [ ] Ik las de commentaren op de code en volgde de logica.