Enhet 2 / 11

Grunnleggende om biologisk dataanalyse med Python

Gevinster:

  • Evne til å stole på deterministisk utdata ved å skrive koden som leser og renser biologiske data til kunstig intelligens og kjøre den selv med Pandas, NumPy og Biopython
  • Å kunne unngå risikoen for at 'feil kode fungerer uten feil' ved å teste koden med en liten situasjon hvor resultatet er kjent og en assert test.
  • Evne til å etablere en repeterbar analyse med versjonsfesting, tilfeldighetsåding og vaner for bevaring av rådata

Språket i moderne biologi blir i økende grad Python. Manuell behandling i en lab-notatbok blir nå til linjer med kodebehandling av titusenvis av linjer med tabeller per sekund. I denne enheten vil vi lære å bruke AI som en medprogrammerer som skriver ut Python-kode som leser, renser og oppsummerer dine biologiske data. Det viktige er å skrive koden til den kunstige intelligensen, kjøre den selv og verifisere resultatet; Dette er fordi den ikke er avhengig av den verbale prediksjonen til modellen, men på den deterministiske (som gir samme resultat i hver kjøring) utdata fra koden.

Du trenger ikke å vite hvordan du koder i denne enheten; Du vil lære å uttrykke intensjonen riktig og gi resultatet.

Hvorfor Python og hvilke biblioteker?

De mest brukte Python-bibliotekene (bibliotek: pakke med ferdige funksjoner) i biologi er:

  • pandaer: For å lese tabelldata (CSV, Excel) og utføre rad-kolonne operasjoner. Grunnleggende verktøy for å filtrere, gruppere, slå sammen en genuttrykkstabell.
  • NumPy: For numeriske matriser og matriseoperasjoner; Den går under pandaer.
  • Biopython: For arbeid med DNA/RNA/proteinsekvenser, lesing av FASTA-filer, oversettelse (oversetter DNA til protein).
  • matplotlib / seaborn: For plotting av tomter.
  • SciPy/statsmodeller: For statistikktester.

Kunstig intelligens kjenner disse bibliotekene veldig godt. Din jobb er å tydelig angi hva du vil gjøre med hvilket bibliotek og å kjøre og verifisere den genererte koden.

Hint: Modellen kan noen ganger "sminke" (hallusinere) en bibliotekfunksjon som ikke eksisterer. Hvis koden gir en feil, ikke få panikk; lime inn feilen tilbake i modellen slik den vanligvis løser den. Hvis det fortsatt ikke fungerer, sjekk den offisielle dokumentasjonen.

Trinn for trinn: tømme en telletabell

La oss si at du har counts.csv: rader er gener, kolonner er prøver, celler er råavlesningstall. Typiske første trinn:

  1. Laster: Les tabellen med pandaer.
  2. Oppdagelse: Sjekk størrelse (hvor mange gener, hvor mange prøver), manglende verdier, dupliserte gennavn.
  3. Filtrering: Kast gener som ikke er lest i noen prøve (totalt antall 0); disse er støy.
  4. Oppsummer: Beregn det totale antallet avlesninger per prøve (bibliotekstørrelse); Prøven som er for lav kan ha mislyktes.

Du kan outsource denne arbeidsflyten til kunstig intelligens som følger:

Rolle: Du er en Python-assistent med fokus på bioinformatikk. Oppgave: Les counts.csv-filen med pandaer. Data: rader er gen (index=gene_id), kolonner er 24 prøver, verdier er heltalls råtall. Jeg vil: (1) skrive ut størrelsen, (2) forkaste genene som aldri ble lest, (3) vise de totale avlesningene per prøve i et stolpediagram. Legg til korte tyrkiske kommentarer til hver linje. Bare gi fungerende kode.

Genererer modellkode; du kjører den. Hvis du ser 24 kolonner og et rimelig antall gener (f.eks. 15 000-25 000) i utdataene, er du i rute. Hvis en prøve inneholder en tidel så mange avlesninger som de andre, skriv ned prøven.

tre minisaker

Tilfelle 1 — Manglende verdifelle: En student fikk gjennomsnittet beregnet i en 30-prøver metabolomikktabell; Resultatet var absurd. Problem: de manglende cellene ble fylt med teksten "ND" i stedet for NaN (ikke et tall), så kolonnen ble lest som tekst. Det ble løst da jeg fikk den kunstige intelligensen til å si "Lag ND-verdier NaN og konverter kolonnen til tall". Leksjon: Utforsk alltid rådata først.

Tilfelle 2 – Sammenslåingsfeil: En forsker slo sammen to tabeller (uttrykk og genmerknad), men 2000 gener gikk tapt. Årsak: I den ene tabellen var ID-ene "ENSG00000141510", i den andre var de "ENSG00000141510.14" (med versjonsnummer). Model skrev en enkelt linje med kode som slettet versjonsnummeret; Tapet ble redusert til 40 gener. Leksjon: Juster ID-formater før du slår dem sammen.

Tilfelle 3 — Stille datatap: En tekniker la ikke merke til at etter filtrering falt antallet gener fra 22 000 til 8 000; terskelen ble satt feil (>10 totalt i stedet for >10 avlesninger i hver prøve). Et kjent gen (husholdningsgen: gener som GAPDH som konstant uttrykkes i hver celle) manglet til slutt. Leksjon: se etter et "må ha" gen-postfilter.

Testing med kjent situasjon (viktigste vane)

Den sikreste måten å stole på nøyaktigheten til koden skrevet av kunstig intelligens er å teste den med en liten prøve hvis resultat du vet på forhånd. Gi for eksempel en dummy-tabell med 5 rader; beregne totalen manuelt; Se om koden gir samme resultat.

Legg til en test til filtreringskoden du skrev: Generer en liten DataFrame bestående av 5 gener, 3 prøver, sett 2 gener bevisst til null, verifiser med påstand om at filteret forkaster nøyaktig disse 2 genene. Gjør testen kjørbar.

assert advarer deg hvis koden avviker fra forventet oppførsel. Dette er det sterkeste skjoldet mot risikoen for den "stille falske konklusjonen".

Svak forespørsel / Sterk forespørsel

Svak: "Rengjør diagrammet mitt."

Kraftig: "counts.csv: rows gene (gene_id index), 24 columns sample, values ​​raw integer. Gjør følgende: rapporter manglende verdier, forkast gener som summerer til 0 på tvers av alle prøver, skriv ut totallesninger for hver prøve, sammenlign genantall før/etter filter. Bare gi fungerende, kommentert Python-kode."

Differanse: Sterk melding spesifiserer datastrukturen, trinnene og valideringsutdata (før/etter sammenligning). Modellen trenger ikke å gjette.

Sammenligningsdiagram: AI eller manuell?

transaksjon

Skriv ut til kunstig intelligens

bekrefte det selv

CSV-lesing, formatkonvertering

Ja

Sjekk størrelse og typer

Filtrering, gruppering

Ja

Tell før/etter

Statistikk test

Ja (kode)

Bekreft antagelser og test

"Hvor mange linjer er det igjen?"

Nei (la koden telle)

Les utgangen

Biologisk betydning av resultatet

delvis

Ekspertkommentar er nødvendig

Vanlige feil

  • Basert på tallet modellen produserer: "Hva er gjennomsnittsuttrykket?" Still spørsmålet til koden, ikke modellen.
  • Kontrollerer ikke datatyper: Kolonner med tall som leses som tekst gir uriktige resultater.
  • Kontrollerer ikke etterfilter: Bekreft at et forventet gen fortsatt er der.
  • Å glemme tilfeldighetens frø: Hvis frøet ikke er fikset i koden som inneholder tilfeldige operasjoner, endres resultatet hver gang; repeterbarheten er svekket.
  • Kjøre koden uten å lese den: Les i det minste kommentarene og følg logikken.
OBS: Bare fordi koden fungerer betyr ikke det at koden er riktig. «Feil kode som fungerer uten feil» er den farligste situasjonen i biologi; fordi feil resultat produseres stille. Testing med en kjent tilstand eliminerer denne risikoen.

Reproduserbarhet: vitenskapelig verdi av koden

I biologi avhenger den vitenskapelige verdien av et resultat av andres (og ditt fremtidige selv) evne til å reprodusere det. Manuelle tabelloperasjoner blir ikke registrert; Ingen vet hvilke celleforandringer og hvordan. Koden dokumenterer hvert trinn. Tenk derfor på analysen du produserer med kunstig intelligens som en lagret og delt post, ikke som en engangsboks.

Tre vaner er viktige for en repeterbar analyse. Den første er versjonsfesting: legg merke til hvilken bibliotekversjon du bruker (f.eks. pandas 2.2); Ulik versjon kan gi forskjellige resultater. Den andre er tilfeldighetsfrøet: fiks frøet i hver kode som inneholder tilfeldige operasjoner, slik at resultatet blir det samme i hver kjøring. For det tredje, aldri endre rådataene: ikke rør den originale filen, gjør alle transformasjoner i koden slik at den kan rulles tilbake.

Legg til linjer som skriver ut versjonene av bibliotekene som ble brukt i begynnelsen av analysekoden du skrev, og hvis det er en tilfeldig prosess, fikser du frøet med sanp.random.seed(42). Ikke endre rå CSV i det hele tatt, lagre all utdata i en egen fil.

Jupyter notatbok: kombinasjon av analyse og fortelling

Det mest brukte miljøet innen bioinformatikk er Jupyter notatbok (notatbok: verktøy som kombinerer kode, utdata og beskrivelse i samme dokument). Å la AI generere koden i henhold til cellene i den bærbare datamaskinen, med hvert trinn atskilt med en Markdown-forklaring, gjør det lettere for både deg og kollegene dine å følge analysen. Dette gjør analysen til en lesbar laboratorienotisbok, ikke en "svart boks".

Gjenkjenne biologiske filformater

Når du behandler biologiske data med Python, vil du hele tiden møte visse filformater. Før modellen kan lese en fil riktig, må den vite hvilket format den er i; Hvis du tar feil format, vil du falle i fellen "feil kode som fungerer uten feil". De vanligste er:

format

Innhold

egnet kjøretøy

CSV/TSV

Tabelldata (uttrykk, måling)

pandaer

FASTA (.fa/.fasta)

DNA/RNA/proteinsekvenser

biopyton

FASTQ (.fq)

Rå sekvensering avlesninger + kvalitet

Biopython, tilpassede verktøy

VCF

Variant (mutasjons) liste

pandaer/pysam

GFF/GTF

Genomannotering (genposisjoner)

pandaer, gffutils

Hvis du ikke gjenkjenner et format, må du først få modellen til å identifisere det ved å vise noen eksempellinjer, og deretter be om lesekoden:

Jeg gir de første 5 linjene i filen nedenfor. Hvilket biofilformat er dette? Forklar betydningen av kolonnene/feltene, og gi deretter kode som trygt leser (formatsjekker) denne filen i Python. Første 5 linjer: [lim inn]

Denne tilnærmingen forhindrer stille feil som oppstår fra antagelsen av form i utgangspunktet.

Oppsummert

Python er hovedbehandlingsspråket for biologiske data; pandaer, NumPy og Biopython er de grunnleggende verktøyene. AI skriver denne koden raskt, men du kjører den og bekrefter den. Den mest kritiske vanen er å teste koden med en liten prøve hvis resultat du kjenner og legge inn forventningen i koden med assert. Stol på den deterministiske utgangen til koden du kjører, ikke verbal gjetting.

Søknadsoppgave

Skriv ut en kode som får AI til å lese CSV-tabellen du har (eller en prøve), skriv ut størrelsen og filtrer ut tomme gener. Legg deretter til en påstandstest fra modellen med 5 linjer med dummydata. Kjør koden; Legg merke til antall gener før og etter filteret. Sjekk at et husholdningsgen (f.eks. GAPDH/ACTB) fortsatt er tilstede i resultatet.

sjekkliste

  • [ ] Jeg sjekket størrelsen og typene på dataene før jeg behandlet dem.
  • [ ] Jeg har eksplisitt håndtert manglende verdier.
  • [ ] Jeg sammenlignet antall rader før/etter filter.
  • [ ] Jeg la til en påstandstest med en kjent tilstand.
  • [ ] Jeg overlot tellingen/beregningen til koden, ikke modellen.
  • [ ] Jeg leste kommentarene til koden og fulgte logikken.