ביופייתון

פרויקט ביופייתון (באנגלית: Biopython) הוא אוסף של כלי פייתון לא מסחריים בקוד פתוח לביולוגיה חישובית וביואינפורמטיקה, שנוצר על ידי איגוד בינלאומי של מפתחים.<ref name="Chapman2000"></ref><ref name="Cock2009"></ref><ref name="lists">Refer to the Biopython website for other [http://biopython.org/wiki/Documentation#Papers papers describing Biopython], and a list of over one hundred [http://biopython.org/wiki/Publications publications using/citing Biopython].</ref> הוא מכיל מחלקות לייצוג רצפים ביולוגיים ואנוטציות רצף, והוא מסוגל לקרוא ולכתוב למגוון פורמטים של קבצים. דבר זה מאפשר גישה פרוגרמטית למאגרי מידע מקוונים של מידע ביולוגי, כמו המאגר ב-NCBI. בנוסף לכלים בביופייתון קיימים מודולים נפרדים אשר מרחיבים את הכלים ליישור רצפים, מבנה חלבונים, גנטיקה של אוכלוסייה, פילוגנטיקה, מוטיבים של רצף ולמידת מכונה. פרויקט הביופייתון הוא אחד מתוך מספר פרויקטים של *Bio אשר נועדו להפחית שכפול קוד בביולוגיה חישובית.<ref name="Mangalam2002"></ref>

== היסטוריה ==
פיתוח הביופיתון החל בשנת 1999 והוא שוחרר לראשונה ביולי 2000.<ref name="Chapman2004"></ref> זמן הפיתוח של פרויקט זה וכן מטרותיו היו דומות ואף מקבילות לפרויקטים אחרים שמטרותיהם היו להוסיף יכולות של ביואינפורמטיקה לשפות תכנות, כמו BioPerl, BioRuby ו-BioJava. המפתחים הראשונים בפרויקט כללו את ג'ף צ'אנג, אנדרו דאלק ובראד צ'פמן, אם כי למעלה ממאה אנשים תרמו עד כה.<ref name="Contributors"></ref> בשנת 2007 הוקם פרויקט פייתון דומה בשם PyCogent.<ref></ref>

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

החל מגרסה 1.62, ביופייתון תומך בריצה בפייתון 3 ובפייתון 2.<ref name="Installation"></ref>

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

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

== תכונות עיקריות ודוגמאות ==
=== רצפים ===
מושג מרכזי בביופייתון הוא הרצף הביולוגי, וזה מיוצג על ידי מחלקה בשם <code>Seq</code>.<ref name="Tutorial"></ref> אובייקט <code>Seq</code> בביופייתון דומה למחרוזת בפייתון במובנים רבים: הוא תומך בסינטקס ה-slice של פייתון, ניתן לשרשר אותו לרצפים אחרים והוא אינו ניתן לשינוי (immutable). בנוסף, קיימות פונקציות ספציפיות לרצפים וכן ניתן לפרט את האלף-בית הביולוגי בו נעשה שימוש.<syntaxhighlight lang="pycon">
>>> # 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())
</syntaxhighlight>

=== אנוטציית רצף ===
המחלקה <code>SeqRecord</code> מתארת רצפים, בנוסף למידע כגון שם, תיאור ותכונות בצורה של אובייקטים מסוג <code>SeqFeature</code>. כל אובייקט <code>SeqFeature</code> מציין את סוג התכונה ואת מיקומה. סוגי תכונות יכולים להיות 'גן', 'CDS' (אזור מקודד), 'אזור חוזר', 'אלמנט נייד' וכו', ומיקום התכונות ברצף יכול להיות מדויק או משוער.<syntaxhighlight lang="pycon">
>>> # 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())
</syntaxhighlight>

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

קובצי רצף גדולים מאוד יכולים לחרוג ממשאבי הזיכרון של המחשב, לכן ביופייתון מספק אפשרויות שונות לגישה לרשומות בקבצים גדולים. ניתן לטעון אותם לזיכרון של מבני נתונים של פייתון, כגון רשימות או מילונים, אשר מספקים גישה מהירה למחיר של שימוש בזיכרון. לחלופין, ניתן לקרוא את הקבצים מהדיסק לפי הצורך, עם ביצועים איטיים יותר אך דרישות זיכרון נמוכות יותר.<syntaxhighlight lang="pycon">
>>> # 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')
</syntaxhighlight>

=== גישה למאגרי מידע מקוונים ===
דרך מודל Bio.Entrez משתמשים של ביופייתון יכולים להוריד נתונים ביולוגיים ממאגרי NCBI. כל אחת מהפונקציות המסופקות על ידי מנוע החיפוש של Entrez זמינות באמצעות פונקציות במודול זה, כולל חיפוש והורדת רשומות.<syntaxhighlight lang="pycon">
>>> # 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'))
</syntaxhighlight>

=== תולדות הגזע ===
access-date=9 September 2014}}</ref>
איור 2: אותו עץ כמו לעיל, מצויר ללא שורש באמצעות Graphviz באמצעות Bio.Phylo
המודול Bio.Phylo מספק כלים לעבודה עם ויזואליזציה של עצים פילוגנטיים. קבצים במגוון פורמטים נתמכים לקריאה וכתיבה, כולל Newick, NEXUS ו-phyloXML. מניפולציות נפוצות של עצים וכן מעבר על העץ בשיטות שונות נתמכות דרך האובייקטים <code>Tree</code> ו-<code>Clade</code>. דוגמאות כוללות המרה ואיסוף קובצי עץ, חילוץ תתי קבוצות מעץ, שינוי שורש עץ וניתוח תכונות ענפים כגון אורך או ציון.<ref name="Talevich2012"></ref>

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

=== דיאגרמות גנום ===
accessdate=10 September 2014}}</ref> נראה באמצעות המודול GenomeDiagram ב- Biopython
מודול GenomeDiagram מספק שיטות להמחשת רצפים בתוך ביופייתון.<ref name="Pritchard2006"></ref> ניתן לצייר רצפים בצורה ליניארית או מעגלית (ראו איור 3), וכן נתמכים פורמטי פלט רבים, כגון PDF ו-PNG. הדיאגרמות נוצרות על ידי יצירת מסלולים ולאחר מכן הוספת מאפייני רצף למסלולים אלה. ניתן לשלוט על התצוגה של הדיארמה הסופית בעזרת לולאה שתרוץ על מאפייני הרצף, ושימוש בתכונות המאפיינים כדי להחליט אם וכיצד הם מתווספים למסלולי הדיאגרמה. ניתן לצייר קישורים צולבים בין מסלולים שונים, אשר מאפשרים השוואת רצפים מרובים בתרשים יחיד.

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

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

=== גנטיקה של אוכלוסייה ===
מודול ה-Bio.PopGen מוסיף תמיכה ל-Biopython for Genepop, חבילת תוכנה לניתוח סטטיסטי של גנטיקה של אוכלוסייה.<ref name="Rousset2008"></ref> דבר זה מאפשר ניתוח של שיווי משקל הארדי-וויינברג, תאחיזה לא שוויונית ותכונות אחרות של תדירות אללים באוכלוסייה.

מודול זה גם יכול לבצע סימולציות גנטיות של אוכלוסיות באמצעות תאוריית ה-"coalescent" בתוכנית fastimcoal2.<ref name="Excoffier2011"></ref>

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

== קישורים חיצוניים ==
* 
* [http://biopython.org/DIST/docs/tutorial/Tutorial.html מדריך וספר לביופיתון] ([http://biopython.org/DIST/docs/tutorial/Tutorial.pdf PDF])
* [https://github.com/biopython/biopython קוד מקור של ביופיתון], באתר GitHub

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