ביופייתון

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

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

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

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

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

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

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


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


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

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


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


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

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

### דיאגרמות גנום
ממוזער|300x300 פיקסלים|איור 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

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

קטגוריה:פייתון