פרויקט **ביופייתון** (באנגלית: **Biopython)** הוא אוסף של כלי פייתון לא מסחריים בקוד פתוח לביולוגיה חישובית וביואינפורמטיקה, שנוצר על ידי איגוד בינלאומי של מפתחים. הוא מכיל מחלקות לייצוג רצפים ביולוגיים ואנוטציות רצף, והוא מסוגל לקרוא ולכתוב למגוון פורמטים של קבצים. דבר זה מאפשר גישה פרוגרמטית למאגרי מידע מקוונים של מידע ביולוגי, כמו המאגר ב-NCBI. בנוסף לכלים בביופייתון קיימים מודולים נפרדים אשר מרחיבים את הכלים ליישור רצפים, מבנה חלבונים, גנטיקה של אוכלוסייה, פילוגנטיקה, מוטיבים של רצף ולמידת מכונה. פרויקט הביופייתון הוא אחד מתוך מספר פרויקטים של \*Bio אשר נועדו להפחית שכפול קוד בביולוגיה חישובית.

היסטוריה
--------

פיתוח הביופיתון החל בשנת 1999 והוא שוחרר לראשונה ביולי 2000. זמן הפיתוח של פרויקט זה וכן מטרותיו היו דומות ואף מקבילות לפרויקטים אחרים שמטרותיהם היו להוסיף יכולות של ביואינפורמטיקה לשפות תכנות, כמו BioPerl,‏ BioRuby ו-BioJava. המפתחים הראשונים בפרויקט כללו את ג'ף צ'אנג, אנדרו דאלק ובראד צ'פמן, אם כי למעלה ממאה אנשים תרמו עד כה. בשנת 2007 הוקם פרויקט פייתון דומה בשם **PyCogent**.

ההיקף הראשוני של ביופיתון כלל גישה, אינדקס ועיבוד קובצי רצף ביולוגיים. אף על פי שיכולות אלה עדיין מוקד מרכזי בפרויקט, במהלך השנים פותחו מודולים נוספים אשר הרחיבו את הכלים ומאפשרים כיסוי גבוה יותר לתחומי ביולוגיה נוספים (ראו מאפייני מפתח ודוגמאות).

החל מגרסה 1.62, ביופייתון תומך בריצה בפייתון 3 ובפייתון 2.

עיצוב
-----

במידת האפשר, ביופייתון עוקב אחר המוסכמות בהן משתמשת שפת התכנות פייתון וזאת בשביל להקל על קהל המשתמשים המכירים את פייתון. לדוגמה, ניתן לטפל באובייקטים של `Seq` ו-`SeqRecord` באמצעות חיתוך (slicing), באופן הדומה למחרוזות ולרשימות של פייתון. הוא נועד להיות דומה באופן פונקציונלי לפרויקטים אחרים של \*Bio, כגון BioPerl.

לכל אחד מהכלים הפונקציוניליים של ביופייתון יש את היכולת לקרוא ולכתוב לקבצים בפורמטים הנפוצים ביותר. הרישיון של ביופייתון תואם לרוב רישיונות התוכנה האחרים, דבר המאפשר שימוש בו במגוון פרויקטים של תוכנה.

תכונות עיקריות ודוגמאות
-----------------------

### רצפים

מושג מרכזי בביופייתון הוא הרצף הביולוגי, וזה מיוצג על ידי מחלקה בשם `Seq`. אובייקט `Seq` בביופייתון דומה למחרוזת בפייתון במובנים רבים: הוא תומך בסינטקס ה-slice של פייתון, ניתן לשרשר אותו לרצפים אחרים והוא אינו ניתן לשינוי (immutable). בנוסף, קיימות פונקציות ספציפיות לרצפים וכן ניתן לפרט את האלף-בית הביולוגי בו נעשה שימוש.

```
>>> # This script creates a DNA sequence and performs some typical manipulations
>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> dna\_sequence = Seq('AGGCTTCTCGTA', IUPAC.unambiguous\_dna)
>>> dna\_sequence
Seq('AGGCTTCTCGTA', IUPACUnambiguousDNA())
>>> dna\_sequence[2:7]
Seq('GCTTC', IUPACUnambiguousDNA())
>>> dna\_sequence.reverse\_complement()
Seq('TACGAGAAGCCT', IUPACUnambiguousDNA())
>>> rna\_sequence = dna\_sequence.transcribe()
>>> rna\_sequence
Seq('AGGCUUCUCGUA', IUPACUnambiguousRNA())
>>> rna\_sequence.translate()
Seq('RLLV', IUPACProtein())

```

### אנוטציית רצף

המחלקה `SeqRecord` מתארת רצפים, בנוסף למידע כגון שם, תיאור ותכונות בצורה של אובייקטים מסוג `SeqFeature`. כל אובייקט `SeqFeature` מציין את סוג התכונה ואת מיקומה. סוגי תכונות יכולים להיות 'גן', 'CDS' (אזור מקודד), 'אזור חוזר', 'אלמנט נייד' וכו', ומיקום התכונות ברצף יכול להיות מדויק או משוער.

```
>>> # This script loads an annotated sequence from file and views some of its contents.
>>> from Bio import SeqIO
>>> seq\_record = SeqIO.read('pTC2.gb', 'genbank')
>>> seq\_record.name
'NC\_019375'
>>> seq\_record.description
'Providencia stuartii plasmid pTC2, complete sequence.'
>>> seq\_record.features[14]
SeqFeature(FeatureLocation(ExactPosition(4516), ExactPosition(5336), strand=1), type='mobile\_element')
>>> seq\_record.seq
Seq('GGATTGAATATAACCGACGTGACTGTTACATTTAGGTGGCTAAACCCGTCAAGC...GCC', IUPACAmbiguousDNA())

```

### קלט ופלט

ביופייתון יכול לקרוא ולכתוב למספר פורמטים נפוצים של רצף, כולל פורמט FASTA,‏ פורמט FASTQ,‏ GenBank,‏ Clustal‏, PHYLIP ו-NEXUS. בעת קריאת קבצים, מידע תיאורי בקובץ משמש להגרת משתנים במחלקות של ביופייתון, כגון `SeqRecord`. זה מאפשר המרת רשומות של פורמט קובץ אחד לאחר.

קובצי רצף גדולים מאוד יכולים לחרוג ממשאבי הזיכרון של המחשב, לכן ביופייתון מספק אפשרויות שונות לגישה לרשומות בקבצים גדולים. ניתן לטעון אותם לזיכרון של מבני נתונים של פייתון, כגון רשימות או מילונים, אשר מספקים גישה מהירה למחיר של שימוש בזיכרון. לחלופין, ניתן לקרוא את הקבצים מהדיסק לפי הצורך, עם ביצועים איטיים יותר אך דרישות זיכרון נמוכות יותר.

```
>>> # This script loads a file containing multiple sequences and saves each one in a different format.
>>> from Bio import SeqIO
>>> genomes = SeqIO.parse('salmonella.gb', 'genbank')
>>> for genome in genomes:
... SeqIO.write(genome, genome.id + '.fasta', 'fasta')

```

### גישה למאגרי מידע מקוונים

דרך מודל Bio.Entrez משתמשים של ביופייתון יכולים להוריד נתונים ביולוגיים ממאגרי NCBI. כל אחת מהפונקציות המסופקות על ידי מנוע החיפוש של Entrez זמינות באמצעות פונקציות במודול זה, כולל חיפוש והורדת רשומות.

```
>>> # This script downloads genomes from the NCBI Nucleotide database and saves them in a FASTA file.
>>> from Bio import Entrez
>>> from Bio import SeqIO
>>> output\_file = open('all\_records.fasta', "w")
>>> Entrez.email = 'my\_email@example.com'
>>> records\_to\_download = ['FO834906.1', 'FO203501.1']
>>> for record\_id in records\_to\_download:
... handle = Entrez.efetch(db='nucleotide', id=record\_id, rettype='gb')
... seqRecord = SeqIO.read(handle, format='gb')
... handle.close()
... output\_file.write(seqRecord.format('fasta'))

```

### תולדות הגזע

איור 1: עץ פילוגנטי שורשי שנוצר על ידי Bio.Phylo. מראה את הקשר בין הומולוגים של Apaf-1 של אורגניזמים שונים
איור 2: אותו עץ כמו לעיל, מצויר ללא שורש באמצעות Graphviz באמצעות Bio.Phylo
המודול Bio.Phylo מספק כלים לעבודה עם ויזואליזציה של עצים פילוגנטיים. קבצים במגוון פורמטים נתמכים לקריאה וכתיבה, כולל Newick,‏ NEXUS ו-phyloXML. מניפולציות נפוצות של עצים וכן מעבר על העץ בשיטות שונות נתמכות דרך האובייקטים `Tree` ו-`Clade`. דוגמאות כוללות המרה ואיסוף קובצי עץ, חילוץ תתי קבוצות מעץ, שינוי שורש עץ וניתוח תכונות ענפים כגון אורך או ציון.

ניתן לצייר עצים מושרשים ב-ASCII או להשתמש ב-matplotlib (ראו איור 1), וניתן להשתמש בספריית Graphviz ליצירת פריסות לא שורשיות (ראו איור 2).

### דיאגרמות גנום

איור 3: תרשים של הגנים בפלסמיד pKPS77, נראה באמצעות המודול GenomeDiagram ב- Biopython
מודול GenomeDiagram מספק שיטות להמחשת רצפים בתוך ביופייתון. ניתן לצייר רצפים בצורה ליניארית או מעגלית (ראו איור 3), וכן נתמכים פורמטי פלט רבים, כגון PDF ו-PNG. הדיאגרמות נוצרות על ידי יצירת מסלולים ולאחר מכן הוספת מאפייני רצף למסלולים אלה. ניתן לשלוט על התצוגה של הדיארמה הסופית בעזרת לולאה שתרוץ על מאפייני הרצף, ושימוש בתכונות המאפיינים כדי להחליט אם וכיצד הם מתווספים למסלולי הדיאגרמה. ניתן לצייר קישורים צולבים בין מסלולים שונים, אשר מאפשרים השוואת רצפים מרובים בתרשים יחיד.

### מבנה מקרומולקולרי

המודול Bio.PDB יכול לטעון מבנים מולקולריים מקבצי PDB ו-mmCIF, והוא נוסף לביופייתון בשנת 2003. אובייקט מסוג `Structure` מרכזי במודול זה, והוא מארגן מבנה מקרומולקולרי בצורה היררכית: אובייקטים מסוג `Structure` מכילים אובייקטים מסוג `Model` המכילים אובייקטים מסוג `Chain` המכילים אובייקטים מסוג `Residue` המכילים אובייקטים מסוג `Atom`. שאריות ואטומים לא מאורגנים מקבלים מחלקות משלהם, `DisorderedResidue` ו-`DisorderedAtom` בהתאמה, המתארות את מיקומיהם הלא-ודאיים.

שימוש ב-Bio.PDB מאפשר לנווט בין רכיבים בודדים בקובץ מבנה מקרומולקולרי, כמו בחינת כל אטום בחלבון. ניתן לבצע ניתוחים כגון מדידת מרחקים או זוויות, השוואת שאריות וחישוב עומק השאריות.

### גנטיקה של אוכלוסייה

מודול ה-Bio.PopGen מוסיף תמיכה ל-Biopython for Genepop, חבילת תוכנה לניתוח סטטיסטי של גנטיקה של אוכלוסייה. דבר זה מאפשר ניתוח של שיווי משקל הארדי-וויינברג, תאחיזה לא שוויונית ותכונות אחרות של תדירות אללים באוכלוסייה.

מודול זה גם יכול לבצע סימולציות גנטיות של אוכלוסיות באמצעות תאוריית ה-"coalescent" בתוכנית fastimcoal2.

### עטיפות לכלי שורת פקודה

רבים מהמודולים של ביופייתון מכילים עטיפות של שורת פקודה לכלים נפוצים, מה שמאפשר להשתמש בכלים אלה מתוך ביופיתון. עטיפות אלה כוללות BLAST,‏ Clustal,‏ PhyML,‏ EMBOSS ו-SAMtools. משתמשים יכולים לסווג מחלקת עטיפה כללית כדי להוסיף תמיכה לכל כלי שורת פקודה.

קישורים חיצוניים
----------------

* אתר האינטרנט הרשמי של ביופייתון
* מדריך וספר לביופיתון (PDF)
* קוד מקור של ביופיתון, באתר GitHub

הערות שוליים
------------

1. 1 2  Chapman, Brad; Chang, Jeff (באוגוסט 2000). "Biopython: Python tools for computational biology". *ACM SIGBIO Newsletter*. **20** (2): 15–19. doi:10.1145/360262.360268. `{{cite journal}}`:  (עזרה)
2. ↑  "Biopython 1.74 released". Open Bioinformatics Foundation. 16 ביולי 2019. `{{cite web}}`:  (עזרה)
3. ↑  Cock, Peter JA; Antao, Tiago; Chang, Jeffery T; Chapman, Brad A; Cox, Cymon J; Dalke, Andrew; Friedberg, Iddo; Hamelryck, Thomas; Kauff, Frank (20 במרץ 2009). "Biopython: freely available Python tools for computational molecular biology and bioinformatics". *Bioinformatics*. **25** (11): 1422–3. doi:10.1093/bioinformatics/btp163. PMC 2682512. PMID 19304878. `{{cite journal}}`:  (עזרה)
4. 1 2  Refer to the Biopython website for other papers describing Biopython, and a list of over one hundred publications using/citing Biopython.
5. ↑  Mangalam, Harry (בספטמבר 2002). "The Bio\* toolkits—a brief overview". *Briefings in Bioinformatics*. **3** (3): 296–302. doi:10.1093/bib/3.3.296. PMID 12230038free `{{cite journal}}`:  (עזרה)תחזוקה - ציטוט: postscript (link)
6. 1 2  Chapman, Brad (11 במרץ 2004), *The Biopython Project: Philosophy, functionality and facts* (PDF), נבדק ב-11 בספטמבר 2014 `{{citation}}`:  (עזרה)
7. ↑  *List of Biopython contributors*, אורכב מ-המקור ב-11 בספטמבר 2014, נבדק ב-11 בספטמבר 2014 `{{citation}}`:  (עזרה)
8. ↑  Knight, R; Maxwell, P; Birmingham, A; Carnes, J; Caporaso, J. G.; Easton, B. C.; Eaton, M; Hamady, M; Lindsay, H (2007). "Py *Cogent*: A toolkit for making sense from sequence". *Genome Biology*. **8** (8): R171. doi:10.1186/gb-2007-8-8-r171. PMC 2375001. PMID 17708774.
9. ↑  Chapman, Brad, *Biopython Installation*, נבדק ב-11 בספטמבר 2014 `{{citation}}`:  (עזרה)
10. ↑  Chang, Jeff; Chapman, Brad; Friedberg, Iddo; Hamelryck, Thomas; de Hoon, Michiel; Cock, Peter; Antao, Tiago; Talevich, Eric; Wilczynski, Bartek (29 במאי 2014), *Biopython Tutorial and Cookbook*, נבדק ב-28 באוגוסט 2014 `{{citation}}`:  (עזרה)
11. ↑  Zmasek, Christian M; Zhang, Qing; Ye, Yuzhen; Godzik, Adam (24 באוקטובר 2007). "Surprising complexity of the ancestral apoptosis network". *Genome Biology*. **8** (10): R226. doi:10.1186/gb-2007-8-10-r226. PMC 2246300. PMID 17958905. נבדק ב-9 בספטמבר 2014. `{{cite journal}}`:  (עזרה)
12. ↑  Talevich, Eric; Invergo, Brandon M; Cock, Peter JA; Chapman, Brad A (21 באוגוסט 2012). "Bio.Phylo: A unified toolkit for processing, analyzing and visualizing phylogenetic trees in Biopython". *BMC Bioinformatics*. **13** (209): 209. doi:10.1186/1471-2105-13-209. PMC 3468381. PMID 22909249. נבדק ב-9 בספטמבר 2014. `{{cite journal}}`:  (עזרה)
13. ↑  "Klebsiella pneumoniae strain KPS77 plasmid pKPS77, complete sequence". NCBI. נבדק ב-10 בספטמבר 2014. `{{cite web}}`:  (עזרה)
14. ↑  Pritchard, Leighton; White, Jennifer A; Birch, Paul RJ; Toth, Ian K (במרץ 2006). "GenomeDiagram: a python package for the visualization of large-scale genomic data". *Bioinformatics*. **22** (5): 616–617. doi:10.1093/bioinformatics/btk021. PMID 16377612free `{{cite journal}}`:  (עזרה)תחזוקה - ציטוט: postscript (link)
15. ↑  Hamelryck, Thomas; Manderick, Bernard (10 במאי 2003). "PDB file parser and structure class implemented in Python". *Bioinformatics*. **19** (17): 2308–2310. doi:10.1093/bioinformatics/btg299. נבדק ב-10 בספטמבר 2014free `{{cite journal}}`:  (עזרה)תחזוקה - ציטוט: postscript (link)
16. ↑  Rousset, François (בינואר 2008). "GENEPOP'007: a complete re-implementation of the GENEPOP software for Windows and Linux". *Molecular Ecology Resources*. **8** (1): 103–106. doi:10.1111/j.1471-8286.2007.01931.x. PMID 21585727. `{{cite journal}}`:  (עזרה)
17. ↑  Excoffier, Laurent; Foll, Matthieu (1 במרץ 2011). "fastsimcoal: a continuous-time coalescent simulator of genomic diversity under arbitrarily complex evolutionary scenarios". *Bioinformatics*. **27** (9): 1332–1334. doi:10.1093/bioinformatics/btr124. PMID 21398675. נבדק ב-11 בספטמבר 2014free `{{cite journal}}`:  (עזרה)תחזוקה - ציטוט: postscript (link)