Enhed 2 / 11

Biologisk dataanalyse Fundamentals med Python

Gevinster:

  • Evne til at stole på deterministisk output ved at skrive koden, der læser og renser biologiske data til kunstig intelligens og køre den selv med Pandas, NumPy og Biopython
  • At kunne undgå risikoen for, at 'forkert kode fungerer uden fejl' ved at teste koden med en lille situation, hvor resultatet er kendt og en assert-test.
  • Evne til at etablere en gentagelig analyse med versionspinning, tilfældig seeding og vaner til bevarelse af rådata

Sproget i moderne biologi bliver i stigende grad Python. Manuel behandling i en laboratorie-notesbog bliver nu til linjer med kodebehandling af titusindvis af linjer med tabeller i sekundet. I denne enhed lærer vi at bruge AI som en co-programmør, der udskriver Python-kode, der læser, renser og opsummerer dine biologiske data. Det vigtige er at skrive koden til den kunstige intelligens, køre den selv og verificere resultatet; Dette skyldes, at den ikke er afhængig af modellens verbale forudsigelse, men på det deterministiske (som giver det samme resultat i hver kørsel) output af koden.

Du behøver ikke at vide, hvordan man koder i denne enhed; Du lærer at udtrykke hensigten korrekt og levere output.

Hvorfor Python og hvilke biblioteker?

De mest brugte Python-biblioteker (bibliotek: pakke med færdige funktioner) i biologi er:

  • pandaer: At læse tabeldata (CSV, Excel) og udføre række-kolonne operationer. Grundlæggende værktøj til at filtrere, gruppere, flette en genekspressionstabel.
  • NumPy: Til numeriske arrays og matrixoperationer; Den løber under pandaer.
  • Biopython: Til arbejde med DNA/RNA/proteinsekvenser, læsning af FASTA-filer, translation (oversættelse af DNA til protein).
  • matplotlib / seaborn: Til plotning af plots.
  • SciPy/statsmodels: Til statistiktests.

Kunstig intelligens kender disse biblioteker meget godt. Din opgave er klart at angive, hvad du vil gøre med hvilket bibliotek og at køre og verificere den genererede kode.

Tip: Modellen kan nogle gange "opfinde" (hallucinere) en biblioteksfunktion, der ikke eksisterer. Hvis koden giver en fejl, skal du ikke gå i panik; indsættelse af fejlen tilbage i modellen, som den normalt retter, løser den. Hvis det stadig ikke virker, så tjek den officielle dokumentation.

Trin for trin: Rydning af et tællebord

Lad os sige, at du har counts.csv: rækker er gener, kolonner er prøver, celler er rålæsetællinger. Typiske første skridt:

  1. Indlæser: Læs tabellen med pandaer.
  2. Opdagelse: Tjek størrelse (hvor mange gener, hvor mange prøver), manglende værdier, dublerede gennavne.
  3. Filtrering: Kassér gener, der ikke aflæses i nogen prøve (samlet antal 0); disse er støj.
  4. Opsummering: Beregn det samlede antal aflæsninger pr. prøve (biblioteksstørrelse); Prøven, der er for lav, kan have fejlet.

Du kan outsource denne arbejdsgang til kunstig intelligens på følgende måde:

Rolle: Du er Python-assistent med fokus på bioinformatik. Opgave: Læs counts.csv-filen med pandaer. Data: rækker er gen (index=gene_id), kolonner er 24 prøver, værdier er heltals råtæller. Jeg vil: (1) udskrive størrelsen, (2) kassere de gener, der aldrig blev læst, (3) vise de samlede aflæsninger pr. prøve i et søjlediagram. Tilføj korte tyrkiske kommentarer til hver linje. Bare giv arbejdskode.

Genererer modelkode; du kører det. Hvis du ser 24 kolonner og et rimeligt antal gener (f.eks. 15.000-25.000) i outputtet, er du på vej. Hvis en prøve indeholder en tiendedel så mange aflæsninger som de andre, skriv prøven ned.

tre minisager

Case 1 — Manglende værdifælde: En elev fik gennemsnittet beregnet i en metabolomisk tabel med 30 prøver; Resultatet var absurd. Problem: de manglende celler blev udfyldt med teksten "ND" i stedet for NaN (ikke et tal), så kolonnen blev læst som tekst. Det blev rettet, da jeg fik den kunstige intelligens til at sige "Lav ND-værdier NaN og konverter kolonnen til tal". Lektion: Udforsk altid rådata først.

Case 2 — Fletningsfejl: En forsker slog to tabeller sammen (udtryk og genannotering), men 2.000 gener gik tabt. Årsag: I den ene tabel var ID'erne "ENSG00000141510", i den anden var de "ENSG00000141510.14" (med versionsnummer). Model skrev en enkelt kodelinje, der ryddede versionsnummeret; Tabet blev reduceret til 40 gener. Lektion: Juster ID-formater, før de flettes.

Case 3 — Tavs datatab: En tekniker bemærkede ikke, at efter filtrering faldt antallet af gener fra 22.000 til 8.000; tærsklen var indstillet forkert (>10 i alt i stedet for >10 aflæsninger i hver prøve). Et kendt gen (husholdningsgen: gener som GAPDH, der konstant udtrykkes i hver celle) manglede i sidste ende. Lektion: tjek efter et "must have" gen efter filter.

Test med kendt situation (vigtigste vane)

Den sikreste måde at stole på nøjagtigheden af koden skrevet af kunstig intelligens er at teste den med en lille prøve, hvis resultat du kender på forhånd. Giv for eksempel en dummy-tabel med 5 rækker; beregne totalen manuelt; Se om koden giver det samme resultat.

Tilføj en test til den filtreringskode, du skrev: Generer en lille DataFrame bestående af 5 gener, 3 prøver, sæt bevidst 2 gener til nul, bekræft med at påstå, at filteret kasserer præcis disse 2 gener. Gør testen eksekverbar.

assert advarer dig, hvis koden afviger fra forventet adfærd. Dette er det stærkeste værn mod risikoen for den "stille falske konklusion".

Svag prompt / Stærk prompt

Svag: "Rens mit diagram."

Kraftfuldt: "counts.csv: rows gene (gene_id index), 24 columns sample, values ​​raw integer. Gør følgende: rapporter manglende værdier, kasser gener, der summer til 0 på tværs af alle prøver, udskriv samlede læsninger for hver prøve, sammenlign genantal før/efter filter. Bare giv fungerende, kommenteret Python-kode."

Forskel: Stærk prompt specificerer datastrukturen, trinene og valideringsoutput (før/efter sammenligning). Modellen behøver ikke at gætte.

Sammenligningsdiagram: AI eller manuel?

transaktion

Print til kunstig intelligens

verificere det selv

CSV-læsning, formatkonvertering

Ja

Tjek størrelse og typer

Filtrering, gruppering

Ja

Tæl før/efter

Statistik test

Ja (kode)

Bekræft antagelser og test

"Hvor mange linjer er der tilbage?"

Nej (lad koden tælle)

Læs outputtet

Biologisk betydning af resultatet

delvist

Ekspertkommentar er påkrævet

Almindelige fejl

  • Baseret på det tal, modellen producerer: "Hvad er det gennemsnitlige udtryk?" Stil spørgsmålet til koden, ikke modellen.
  • Kontrollerer ikke datatyper: Kolonner med tal, der læses som tekst, returnerer ukorrekte resultater.
  • Kontrollerer ikke post-filter: Bekræft, at et forventet gen stadig er der.
  • At glemme tilfældighedens frø: Hvis frøet ikke er fastgjort i koden, der indeholder tilfældige operationer, ændres resultatet hver gang; repeterbarheden er forringet.
  • Kørsel af koden uden at læse den: Læs i det mindste kommentarerne og følg logikken.
OBS: Bare fordi koden virker, betyder det ikke, at koden er korrekt. "Forkert kode, der virker uden fejl" er den farligste situation i biologien; fordi det forkerte resultat produceres lydløst. Test med en kendt tilstand eliminerer denne risiko.

Reproducerbarhed: kodens videnskabelige værdi

I biologi afhænger den videnskabelige værdi af et resultat af andres (og dit fremtidige selvs) evne til at reproducere det. Manuelle tabeloperationer registreres ikke; Ingen ved, hvilken celle ændrer sig og hvordan. Koden dokumenterer hvert trin. Tænk derfor på den analyse, du producerer med kunstig intelligens, som en lagret og delt registrering, ikke som en engangsboks.

Tre vaner er vigtige for en gentagelig analyse. Den første er versionsfastgørelse: bemærk hvilken biblioteksversion du bruger (f.eks. pandas 2.2); Forskellige versioner kan give forskellige resultater. Den anden er tilfældighedsfrøet: fix frøet i hver kode, der indeholder tilfældige operationer, så resultatet er det samme i hver kørsel. For det tredje skal du aldrig ændre de rå data: rør ikke ved den originale fil, foretag alle transformationer i kode, så den kan rulles tilbage.

Tilføj linjer, der udskriver versionerne af bibliotekerne, der blev brugt i begyndelsen af ​​den analysekode, du skrev, og hvis der er en tilfældig proces, skal du rette frøet med sanp.random.seed(42). Skift ikke den rå CSV overhovedet, gem alt output i en separat fil.

Jupyter notesbog: kombination af analyse og fortælling

Det mest brugte miljø inden for bioinformatik er Jupyter notebook (notesbog: værktøj, der kombinerer kode, output og beskrivelse i samme dokument). At lade AI generere koden i henhold til notebook-cellerne, med hvert trin adskilt af en Markdown-forklaring, gør det lettere for både dig og dine kolleger at følge analysen. Dette gør analysen til en læsbar laboratorie-notesbog, ikke en "sort boks".

Genkender biologiske filformater

Når du behandler biologiske data med Python, vil du konstant støde på bestemte filformater. Før modellen kan læse en fil korrekt, skal den vide hvilket format den er i; Hvis du tager formatet forkert, falder du i fælden "forkert kode, der fungerer uden fejl". De mest almindelige er:

format

Indhold

passende køretøj

CSV/TSV

Tabeldata (udtryk, måling)

pandaer

FASTA (.fa/.fasta)

DNA/RNA/protein-sekvenser

biopython

FASTQ (.fq)

Rå sekventering læser + kvalitet

Biopython, brugerdefinerede værktøjer

VCF

Variant (mutations) liste

pandaer/pysam

GFF/GTF

Genom annotering (genpositioner)

pandaer, gffutils

Hvis du ikke genkender et format, skal du først få modellen til at identificere det ved at vise et par eksempellinjer, og derefter bede om læsekoden:

Jeg giver de første 5 linjer i filen nedenfor. Hvilket biofilformat er dette? Forklar betydningen af ​​kolonnerne/felterne, og giv derefter kode, der sikkert læser (formattjekker) denne fil i Python. Første 5 linjer: [indsæt]

Denne tilgang forhindrer tavse fejl, der opstår fra antagelsen af form i første omgang.

Sammenfattende

Python er det vigtigste behandlingssprog for biologiske data; pandaer, NumPy og Biopython er de grundlæggende værktøjer. AI'en skriver denne kode hurtigt, men du kører den og verificerer den. Den mest kritiske vane er at teste koden med en lille prøve, hvis resultat du kender, og indlejre forventningen i koden med assert. Stol på det deterministiske output af den kode, du kører, ikke verbale gætværk.

Ansøgningsopgave

Udskriv en kode, der får AI til at læse den CSV-tabel, du har (eller en prøve), udskriv dens størrelse og filtrer tomme gener fra. Tilføj derefter en assert-test fra modellen med 5 linjers dummy-data. Kør koden; Bemærk antallet af gener før og efter filteret. Tjek, at et husholdningsgen (f.eks. GAPDH/ACTB) stadig er til stede i resultatet.

tjekliste

  • [ ] Jeg tjekkede størrelsen og typerne af dataene, før jeg behandlede dem.
  • [ ] Jeg har eksplicit håndteret manglende værdier.
  • [ ] Jeg sammenlignede antallet af rækker før/efter filter.
  • [ ] Jeg tilføjede en assert-test med en kendt tilstand.
  • [ ] Jeg overlod optællingen/beregningen til koden, ikke modellen.
  • [ ] Jeg læste kommentarerne til koden og fulgte logikken.