Biopython
Logo programu | |
| Autor | Chapman B, Chang J |
|---|---|
| Pierwsze wydanie | 17 grudnia 2002; około 23 lat temu |
| Aktualna wersja stabilna | 1.86 |
| Język programowania | Python, C |
| Platforma sprzętowa | Wieloplatformowość |
| Rodzaj | biblioteka programistyczna |
| Strona internetowa | |
Biopython – otwartoźródłowa biblioteka programistyczna języka Python do biologii obliczeniowej i bioinformatyki. Python jest obiektowym językiem programowania i stanowi doskonały wybór do automatyzacji typowych zadań. Dostępność bibliotek wielokrotnego użytku oszczędza czas programowania i pozwala badaczom skupić się na rozwiązywaniu problemów naukowych. Biopython jest stale aktualizowany i utrzymywany przez duży zespół wolontariuszy z całego świata.[1]
Główne cechy i przykłady
[edytuj | edytuj kod]Input and output
[edytuj | edytuj kod]Biopython potrafi odczytywać i zapisywać dane w wielu popularnych formatach. Podczas odczytu plików, informacje opisowe w pliku służą do wypełniania elementów klas Biopythona, takich jak SeqRecord. Pozwala to na konwersję rekordów jednego formatu pliku na inne.
Bardzo duże pliki sekwencji mogą przekraczać zasoby pamięci komputera, dlatego Biopython oferuje różne opcje dostępu do rekordów przy dużych plikach. Można je w całości wczytać do pamięci w strukturach danych Pythona, takich jak listy lub tablice asocjacyjne, zapewniając szybki dostęp kosztem wykorzystania pamięci. Alternatywnie, pliki można w razie potrzeby odczytać z dysku, co wiąże się z niższą wydajnością, ale mniejszym zapotrzebowaniem na pamięć.
>>>#The code reads a GenBank file record-by-record to efficiently handle large sequence files without exhausting memory. It converts each sequence record into FASTA format and writes it to a new output file.
>>>from Bio import SeqIO
>>># Reading sequences from a GenBank file and writing to a FASTA file
>>>input_file = "sequence_1.gb"
>>>output_file = "converted_sequences.fasta"
>>># Using iterator to read large file without loading all into memory
>>>with open(output_file, "w") as out_handle:
... for record in SeqIO.parse(input_file, "genbank"):
... # Each record is a SeqRecord populated with metadata
... print(f"Processing record: {record.id} - {record.description}")
... SeqIO.write(record, out_handle, "fasta") # Convert and write to FASTA
Sekwencje
[edytuj | edytuj kod]Kluczową koncepcją w Biopythonie jest sekwencja biologiczna, reprezentowana przez klasę Seq.[2] Obiekt Seq w Biopythonie jest pod wieloma względami podobny do ciągu znaków w Pythonie: obsługuje notację wycinka Pythona, można go łączyć z innymi sekwencjami i jest niezmienny. Obiekt ten zawiera zarówno ogólne metody oparte na ciągach znaków, jak i metody specyficzne dla sekwencji biologicznych. Najlepiej przechowywać informacje o typie biologicznym (DNA, RNA, proteiny) oddzielnie od sekwencji, zamiast używać jawnego argumentu alfabetycznego.
>>># This script creates a DNA sequence and performs some typical manipulations
>>>from Bio.Seq import Seq
>>>dna_sequence = Seq("AGGCTTCTCGTA")
>>>print(dna_sequence)
Seq('AGGCTTCTCGTA')
>>>print(dna_sequence[2:7])
Seq('GCTTC')
>>>print(dna_sequence.reverse_complement())
Seq('TACGAGAAGCCT')
>>>rna_sequence = dna_sequence.transcribe()
>>>print(rna_sequence)
Seq('AGGCUUCUCGUA')
>>>print(rna_sequence.translate())
Seq('RLLV')
Opis sekwencji
[edytuj | edytuj kod]Klasa SeqRecord opisuje sekwencje wraz z informacjami takimi jak nazwa, opis i cechy w postaci obiektów SeqFeature. Każdy obiekt SeqFeature określa typ cechy i jej lokalizację. Położenie cech w sekwencji może być dokładne lub przybliżone.
>>>#The script reads a GenBank file to extract and print the sequence’s name and description. It then accesses and displays detailed information about a specific annotated feature (e.g., a gene) within the sequence.
>>>from Bio import SeqIO
>>>seq_record = SeqIO.read("sequence.gb", "genbank")
>>># Access metadata
>>>print(seq_record.name)
>>>print(seq_record.description)
'NC_005816'
'Yersinia pestis biovar Microtus str. 91001 plasmid pPCP1, complete sequence'
>>># Access features list and example feature at index 14 if available
>>>if len(seq_record.features) > 14:
... print(seq_record.features[14])
...else:
... print("Feature index 14 not available")
type: CDS
location: [6115:6421](+)
qualifiers:
Key: codon_start, Value: ['1']
Key: inference, Value: ['COORDINATES: similar to AA sequence:RefSeq:WP_002221218.1']
Key: locus_tag, Value: ['YP_RS22235']
Key: note, Value: ['Derived by automated computational analysis using gene prediction method: Protein Homology.']
Key: old_locus_tag, Value: ['pPCP07', 'YP_pPCP07']
Key: product, Value: ['hypothetical protein']
Key: protein_id, Value: ['WP_002221218.1']
Key: transl_table, Value: ['11']
Key: translation, Value: ['MSKTKSGRHRLSKTDKRLLAALVVAGYEERTARDLIQKHVYTLTQADLRHLVSEISNGVGQSQAYDAIYQAR
Dostęp do baz online
[edytuj | edytuj kod]Za pośrednictwem modułu Bio.Entrez użytkownicy Biopythona mogą pobierać dane biologiczne z baz danych NCBI. Wszystkie funkcje wyszukiwarki Entrez są dostępne za pośrednictwem funkcji tego modułu, w tym wyszukiwanie i pobieranie rekordów.
>>>#This code fetches nucleotide sequence records from the NCBI database for specified accession IDs, reads the GenBank-formatted data and prints the first two lines. The output can also be written to a file.
>>>from Bio import Entrez
>>>Entrez.email = "email@gmail.com"
>>>record_ids = ["NM_000546.6", "NM_001354689.3"]
>>>for record_id in record_ids:
... with Entrez.efetch(db="nucleotide", id=record_id, rettype="gb", retmode="text") as handle:
... line_count = 0
... for line in handle:
... print(line.rstrip())
... line_count += 1
... if line_count == 2: # Print only first 2 lines of the record
... break
LOCUS NM_000546 2512 bp mRNA linear PRI 12-JUN-2025
DEFINITION Homo sapiens tumor protein p53 (TP53), transcript variant 1, mRNA.
LOCUS NM_001354689 3251 bp mRNA linear PRI 12-JUN-2025
DEFINITION Homo sapiens Raf-1 proto-oncogene, serine/threonine kinase (RAF1)
Filogeneza
[edytuj | edytuj kod]

Moduł Bio.Phylo udostępnia narzędzia do pracy z drzewami filogenetycznymi i ich wizualizacji. Obsługiwane są różne formaty plików do odczytu i zapisu, w tym Newick, Nexus i PhyloXML. Typowe manipulacje i przeglądanie drzew są obsługiwane za pośrednictwem obiektów Tree i Clade. Przykłady obejmują konwersję i zestawianie plików drzew, wyodrębnianie podzbiorów z drzewa, zmianę korzenia oraz analizę cech gałęzi, takich jak długość czy wynik.[4]
Drzewa zakorzenione można rysować w kodzie ASCII lub za pomocą biblioteki Matplotlib (patrz rysunek 1), a biblioteka Graphviz może być używana do tworzenia układów bez korzeni (patrz rysunek 2).
Diagramy genomu
[edytuj | edytuj kod]
Moduł GenomeDiagram udostępnia metody wizualizacji sekwencji w Biopythonie.[6] Sekwencje można rysować w formie liniowej lub kołowej (patrz rysunek 3), a obsługiwanych jest wiele formatów wyjściowych, w tym PDF i PNG.
Struktura makrocząsteczkowa
[edytuj | edytuj kod]Moduł Bio.PDB został dodany do Biopythona w 2003 roku[7] i potrafi wczytywać struktury molekularne z plików PDB i mmCIF. Obiekt Structure jest centralnym elementem tego modułu i porządkuje strukturę makrocząsteczkową w sposób hierarchiczny: obiekty Structure zawierają obiekty Model, które zawierają obiekty Chain, które zawierają obiekty Residue, a te z kolei obiekty Atom. Nieuporządkowane reszty i atomy posiadają własne klasy DisorderedResidue i DisorderedAtom, które opisują ich niepewne położenia.
>>>#This script parses a PDB file to print the first model’s chain IDs and extract coordinates of atoms in the 100th residue of each chain. It demonstrates navigating protein structure hierarchy and accessing specific residue data.
>>>from Bio.PDB import PDBParser
>>># Parse the PDB file
>>>parser = PDBParser(QUIET=True)
>>>structure = parser.get_structure("2yox", "2yox.pdb")
>>># Iterate over models
>>>for model in structure:
>>> print(f"Model ID: {model.id}")
>>> # Iterate over chains in the model
>>> for chain in model:
... print(f" Chain ID: {chain.id}")
>>> # Check if residue 100 exists in this chain
>>> if 100 in chain:
... residue = chain[100]
... print(f" Coordinates of atoms in residue 100:")
... # Print coordinates of each atom in residue 100
... for atom in residue:
... print(atom.coord)
... else:
... print(" Residue 100 not found in this chain.")
... break
Model ID: 0
Chain ID: A
Coordinates of atoms in residue 100:
[ 9.837 18.218 81.24 ]
[ 9.644 18.809 79.938]
[ 8.772 20.066 80.01 ]
[ 7.572 19.996 80.27 ]
[ 9.07 17.788 78.962]
[ 8.989 18.261 77.529]
[10.352 18.647 76.938]
[11.281 17.832 76.922]
[10.486 19.917 76.503]
Chain ID: B
Coordinates of atoms in residue 100:
[23.712 13.531 36.955]
[23.197 12.95 35.746]
[23.961 11.693 35.339]
[25.138 11.757 34.935]
[23.183 13.97 34.623]
[22.49 13.49 33.361]
[21.022 13.13 33.571]
[20.22 13.96 34.039]
[20.66 11.867 33.253]
Genetyka populacyjna
[edytuj | edytuj kod]Moduł Bio.PopGen dodaje do Biopythona obsługę Genepop, pakietu oprogramowania do statystycznej analizy genetyki populacji.[8] Umożliwia to analizę równowagi Hardy'ego-Weinberga, nierównowagi sprzężeń i innych cech częstości alleli w populacji.
Moduł ten umożliwia również przeprowadzanie symulacji genetyki populacji z wykorzystaniem teorii koalescencji w programie fastsimcoal2.[9]
Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ Brad Chapman, Jeff Chang. Biopython: Python tools for computational biology. „ACM SIGBIO Newsletter”. 20 (2). s. 15-19. DOI: 10.1145/360262.360268. (ang.).
- ↑ Jeff Chang, Brad Chapman, Iddo Friedberg, Thomas Hamelryck, Michiel de Hoon, Peter Cock, Tiago Antao, Eric Talevich, Bartek Wilczyński: Biopython Tutorial & Cookbook. [dostęp 2025-11-14]. (ang.).
- ↑ Christian M Zmasek, Qing Zhang, Yuzhen Ye, Adam Godzik. Surprising complexity of the ancestral apoptosis network. „Genome Biology”. 8 (10). s. R226. DOI: 10.1186/gb-2007-8-10-r226.
- ↑ Eric Talevich, Brandon M Invergo, Peter JA Cock, Brad A Chapman. Bio.Phylo: A unified toolkit for processing, analyzing and visualizing phylogenetic trees in Biopython. „BMC Bioinformatics”. 209 (13). s. 209. DOI: 10.1186/1471-2105-13-209.
- ↑ Klebsiella pneumoniae strain KPS77 plasmid pKPS77, complete sequence. NCBI. [dostęp 2025-11-14]. (ang.).
- ↑ Leighton Pritchard, Jennifer A White, Paul RJ Birch, Ian K Toth. GenomeDiagram: a python package for the visualization of large-scale genomic data. „Bioinformatics”. 22 (5). s. 616-617. DOI: 10.1093/bioinformatics/btk021.
- ↑ Thomas Hamelryck, Bernard Manderick. PDB file parser and structure class implemented in Python. „Bioinformatics”. 19 (17). s. 2308-2310. DOI: 10.1093/bioinformatics/btg299. (ang.).
- ↑ François Rousset. GENEPOP'007: a complete re-implementation of the GENEPOP software for Windows and Linux. „Molecular Ecology Resources”. 8 (1). s. 103-106. DOI: 10.1111/j.1471-8286.2007.01931.x. (ang.).
- ↑ Laurent Excoffier, Matthieu Foll. fastsimcoal: a continuous-time coalescent simulator of genomic diversity under arbitrarily complex evolutionary scenarios. „Bioinformatics”. 27 (9). s. 1332-1334. DOI: 10.1093/bioinformatics/btr124.