Skip to content

Instantly share code, notes, and snippets.

@ccwang002
Last active December 21, 2015 07:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ccwang002/6272392 to your computer and use it in GitHub Desktop.
Save ccwang002/6272392 to your computer and use it in GitHub Desktop.
這邊記錄了一些 Next Bio 架構討論、設計,各種 concern 種種雜項。歡迎各種討論。

Introduction to Next Bio

Your next, and hoped the last, bio python library.

NextBiopy 中的 Next 有兩種涵意:第一,它想分析次世代定序技術(Next Generation Sequencing)的資料,此類資料龐大,在以往缺乏統一且有效的方式來讀取相關檔案;第二,Python 有一專門處理生物相關的套件 Biopython,但歷史久遠有許多包伏下,面對未來大資料的分析往往效能表現不理想,且 API 設計複雜,故希望藉次世界定序為出發點,逐一改善 Biopython 其他功能的效能表現與設計。

平常生資研究者往往專注在分析結果上,往往缺乏一個完整的時間改善分析流程與使用工具,以及與同仁交流技術的場所。藉由本次 Sprint 互相認識以及經驗分享,並對於 NextBiopy 架構如何設計才能更滿足多數研究者的需求。

NextBiopy 相較本次其他專案而言,為較初期的專案,加上研究者可能較缺乏開源協同開發的經驗,大部份的 issue 為解決跨版本、跨平台、CI、底層架構設計等問題。故本專案會藉由這次 Sprint 來讓參加者了解開源專案所需的基礎技術與建設。

Goal for Sprint 2013.10

這邊記錄了幾個我們最先想完成的目標。

檔案讀寫 (Parser)

對於往後大多數的 Bioinfo 分析,資料的存取常常建立在幾個通用的檔案類型上。

一個好的 Data Structure 往往決定日後各種演算法的可行性,甚至是效率的優劣。

所以我們必須先提供最基本的檔案讀寫。常見的檔案類型有:

FASTA/Q

輸入的狀況

  • 並非兩行的情況 read_fasta('some.fa', multiline=True)
  • 考慮經過 bz2, gzip 壓縮 read_fasta('some.fa.gz')

提供的功能

  • 合併 fasta (參考 pandas)
  • Random access to each record

實作可以參考

SAM/BAM

算是一個比較複雜的檔案結構,一般會使用隨 SAM Spec (v1.4) 提供的 SAMtools C 函式庫來處理。

目前已經有 SAMtools 的 Python wrapper 叫 PySAM,一個蠻成熟的套件。

我們可以設計 SAM class 來處理底下跟 PySAM (SAMtools 被實作成 csamtools API) 並將回傳的值,轉成一個好操作、分析的物件,也可以沿用 PySAM 的 SAMfile, tabix (VCF, GTF, BED 等) 物件。

不使用 SAMtools 自帶的 class 原因在於

  • 可以改用 pandas 作基礎建設
  • 讓 SAM 每一行 record / 每一個欄位都能被快速的 random access
  • 達到 速度/Memory 的最佳化

但我們可以使用 PySAM 對 SAMtools 的 wrapper csamtools

需要檢查的事項

  • PySAM 與 SAMtools 的行為可能不相同?

    • 補完 PySAM 的 unit test cases
  • Benchmarking

    • 記憶體的使用
    • 讀檔 / 轉檔 / Random Access 的時間

參考

NextBio Python Libray

GitHub Repo: https://github.com/nextbio/nextbio

如題,Python 處理生物的,有一個非常有名的套件叫

BioPython http://biopython.org/wiki/Main_Page

但…我一直覺得這個套件有許多可以改進的地方。

  1. 很傳統的說明文件 一直到去年都是以一個單頁的 HTML 作為說明文件, 雖然有列出它提供的函數要怎麼用, 但真的要找函數的說明,反而沒有詳細的參數列表

  2. 很混亂的介面 這應該有點歷史因素,也因為它有點年紀了, 所以他有著很多的 sub library 功能的確很多, 但每次用一定要重看一次說明,因為真的太複雜了。

  3. 簡單讀檔沒有完全支援 Bioinfo 有些常用的檔案類型: Fasta/q, GFF, GTF, BED, BAM, SAM, csv 身為老字號的 Biopython 卻沒辦法全部處理這些檔案

    例如有人寫了很不錯的 pysam,或是把 samtools wrapper 做出來 biopython/biopython#180 但目前都還在 issues 中

    GFF 有人在做了,但看來是有點卡住? https://github.com/chapmanb/bcbb

    FASTA/Q 可能是最多人會用的,因此而安裝 Biopython 但它其實是用 pure python 實作,又包了自己的 Bio.Seq class 而這個 Bio.Seq 其實使用起來並不直覺, 效能普通,最好的話能用 C 來實作, 或者用現有的 np.array, pandas Series 物件, 不但效能有保証,他們都把常用的 methods 實作好, 我們只要針對 FASTA/Q 做一個 light weight wrapper 這樣。

  4. 不使用好用、popular 的套件 Biopython 相依了一些很奇怪的套件,像是 ReportLab, 跟生成 PDF 有關,但我看了就一點都不想裝它, 這個年代,不如 render 成 SVG 還可以插網路上,插回 IPython 畫圖應該盡量使用 matplotlib

    然後生物很多結果都是以表格呈現,當然自己刻一個 nested list 是每次分析都要做的事,但實際上,如果能綁 pandas 效能跟功能都很好

    也許相依套件是多了點,但這些現在很多人都用,都有在開發。

其實這些可能多多少少都有人做 http://biopython.org/wiki/Active_projects

但我可能一開始就有偏見,覺得該把一些功能好好做好, 我自己是想先從常見檔案格式的輸入/出開始做, 如果有人會寫 C in Python 最好(我還沒學),應該會用 cffi, 這樣未來上 JIT pypy 不必調整應該就能跑。

可以先 pure python 把 API 做出來,然後改用 C 讓大家都看不懂(誤) 如果 I/O + pandas 我想整個套件實用度會大增……

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment