如何從零開始掌握生物信息學分析(新手寶典)

【字體: 時間:2015年08月13日 來源:生物通

編輯推薦:

  目前其實也不乏現成的計算工具,而且不少都是免費的,但對于門外漢來說還是有些難。通常情況下研究人員還是需要深入了解這些界面并未友好的程序,才能運行,而這需要計算運行的深厚知識。

  

生物通報道:今天的世界大不同,表現在生命科學研究領域,就是一切都開始進入了大數據時代,無論是DNA序列,顯微圖片,還是質譜數據,研究人員都越來越需要對這些龐大的信息進行收集、整合、處理和詮釋。

對于許多生物學家們來說,這并不容易完成,傳統的科研培訓方式主要集中于科學的基礎原理和實驗方法,而不是計算機編程和數據統計,因此當不少研究人員發現自己需要面對大量的數據量時,他們不知道如何處理這些問題。

目前其實也不乏現成的計算工具,而且不少都是免費的,但對于門外漢來說還是有些難。通常情況下研究人員還是需要深入了解這些界面并未友好的程序,才能運行,而這需要計算運行的深厚知識。

這就會導致研究人員在進行大數據研究的時候,不得不自己編寫一些程序來進行可重復和得到證實的信息處理。然而這些過程也需要小心處理,一不留意犯錯了,就有可能危及數據本身。

近期The Scientist雜志聯系了幾位科學程序員,了解他們所使用的工具是什么,如果是菜鳥需要進行哪些訓練等。

選擇一種語言

生物學家可以從各種各樣的編程語言中選擇一種,對于許多應用來說,隨便選擇一種都可以,不過目前最流行的可能就是Python 和 R!熬湍壳岸,這就像是科學研究的二重奏”,來自加州大學戴維斯分校的生物信息學家Vince Buffalo說,他剛完成了一本名為《生物信息學數據分析技巧》(O’Reilly Media Inc.)的新書。

Python 和 R相對來說都比較好用,但前者能完成多項任務,而后者主要針對的是統計方面的內容,兩種語言都有其各自的使用用戶群,因此具有特定功能預生成代碼(prebuilt code)數據文庫,比如以R語言為基礎的Bioconductor Project (www.bioconductor.org),能為顯微,測序和芯片數據提供模塊。另外Python 公共文庫也有:Anaconda (continuum.io/downloads)。

來自華盛頓大學基因組科學系的助理教授Cole Trapnell利用R語言完成了單細胞基因組數據集的處理,“單一細胞基因組學問題牽涉到許多的統計學方面的內容,R語言很適合!

此外,還有一種受到大家認可的語言,那就C/C++(Julia (www.julialang.org)),這種語言特別合適用于那些相對較慢或內存密集型任務,Trapnell說。

如果能將Python的語法,R語言的圖形靈敏性和C++的速度結合在一起,那就完美了,“這也就是說,這種代碼很好編寫,而且也很快,”,來自加州大學戴維斯分校的遺傳學副教授Titus Brown說,但這需要你花費大量經歷掌握這些語言,他建議,可以選擇你同事已經在應用的語言,這樣他就能幫助你解惑。

所需的工具

UNIX 和 Linux系統都有預安裝軟件,如果你沒有,那么通過操作系統管理員也很容易獲取。Macs系統包含一個現成的Python 解釋器和C/C++ 編譯器,但必須單獨安裝 R(www.r-project.org)。Windows系統在默認狀態下,不包含任何一種編程語言,因此你可能需要自己安裝。

程序員還需要的一個工具就是一個好用的文本編輯器,這是用于處理純文本文件的程序,與之相對的就是處理特殊格式的程序,如Microsoft Word。核心程序員通常喜歡使用命令行編輯器 vi 或 emacs,在Linux 和 Mac系統中這兩者都有預裝,F在也有一些很強大的可配置程序,但是對于新手來說很難掌握,“這要求你自己想代碼,因此我還是建議使用自己擅長的方法,”Trapnell說。

同時你還需要找到一種能夠用特定顏色標記特殊語言關鍵詞(“syntax highlighting”),語法檢查 (比如說要能找到錯誤的方括號和圓括號),代碼格式,以及處理多種文件的編輯器。

常用的兩種就是Windows系統的Notepad++ (notepad-plus-plus.org),以及Mac和Windows、Linux系統通用的Sublime Text (www.sublimetext.com)。同時還有一種Mac界面可用的AquaMacs (aquamacs.org)。

“我向我的學生強調的關鍵一點就是,盡量少用鼠標,”威斯康辛大學麥迪遜分校生物統計學和醫學信息學教授Karl Broman說,“每當你將手從鍵盤中移開的時候,就在減慢速度!

另外,如果你計劃在某個平臺(如 Mac 或 Windows)上從一種特殊語言開始的話,那么也許你應該嘗試一下集成開發環境(IDE,integrated development environment),這是用于程序開發環境的應用程序,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面工具,這能簡化你的工作。

Mac C/C++程序員可以用免費的Xcode (developer.apple.com/xcode), Windows 用戶可以使用Microsoft Visual Studio (www.visualstudio.com)。而對于 R 編程來說,常用的一種選擇就是RStudio (www.rstudio.com)。Eclipse IDE (eclipse.org/ide)是一種支持多種語言的模塊化工具,所有這些平臺的基本版本都是免費下載,有些適用于高級用戶的附加功能也可以獲取。


如何使用命令行

并不是每次遇到問題都需要編程的,可以嘗試調用一些已經完成的命令行簡單腳本,也就是Bash,“Bash可以用于處理文件,”Brown解釋說,“移動文件,循環訪問,重命名等”。使用Bash可以將預生成的工具組裝成自動化工作流程,例如可以利用Bash從一組測序數據中篩選高質量讀長數據,然后鏈接到一個新文件中,將這一文件傳遞到一組預定義參數分析程序中。

值得參考的命令行工具:cli.learncodethehardway.org/book/.

調試工具

新手程序員通常會避免使用復雜的調試工具,如用于描述程序所處的某個點(X代表現在進入這段代碼)的一些代碼。但是調試工具能幫助程序員在某個特殊的代碼上停止軟件運行,看看情況,調整錯誤代碼,這在尋找bug的時候尤為關鍵,“每種語言都有一個調試器,這些工具總是值得學習如何使用的,”來自加州大學歐文分校生態學和進化生物學副教授Kevin Thornton說,目前也有一些在線教程,“因此Google會是你最好的朋友!

使用版本控制程序

Rachel Slaybaugh是來自加州大學伯克利分校的一位核工程學助理教授,她使用C++ 和Python 開發了一種能模擬中子傳遞的計算方法,同時她也研發了他們實驗室最好用的一套代碼訓練方法,但她表示這需要確認實驗室中的版本控制。

版本控制程序(Version-control software),如最受歡迎的 Git (git-scm.com)軟件,能幫助程序員精確的了解一個程序版本與另外一個版本之間的區別,而且關鍵在于,如果需要的話還能調轉回去。Git程序是一種免費的開放程序,方便團隊之間的合作,可以分享代碼,利用“fork”,程序員能在無需破壞現有代碼的前提下就能驗證新的運算法則,追蹤并融合這些版本差異等等功能。

Git托管服務器GitHub提供無成本分享,分發和在線存檔代碼的服務,而且也能為你提供指向你軟件的穩定鏈接。如果需要升級,那么就需要每月付出7美元(當地價格)。

雖然Git只是一段復雜的程序,但是這“極為重要”,Buffalo說,“而且更重要的是,這種程序有時能力挽狂瀾,如果我的程序中出現了一個bug,我就會去舊的版本中找出它來,然后一個一個版本測試,看看它什么時候出現的!

還有一些研究人員傾向于選擇版本控制程序Mercurial (mercurial.selenic.com) ,其服務器是BitBucket (bitbucket.org),這對前五位使用者免費,其中包括無限制private repositories.

自動化與歸檔

加州大學戴維斯分校的C. Titus Brown近期在PLoS Biology雜志上發表了一篇經典論文:“Best Practices for Scientific Computing”,被不少本領域同行稱為最佳軟件開發實踐指導指南,這篇文章不僅提到了程序運用的一個關鍵問題,也指出了程序員的一些基本概念,如給人寫程序,而不是給計算機;只在軟件能正確的工作后才可優化;文檔里描述的應該是設計思路和目的,而不是技術細節等等。

其中還有一個基本準則就是讓重復性的工作自動化,“讓一切都自動化,”他說。換句話說,就是每次運行程序的時候不用手動輸入參數,可以將參數輸入到命令行腳本,自動執行程序。這樣就能無誤的操作數據,將數據從一個文件移動到另外一個文件,同時也可實現可重復性。

假設你在運行一個本地建模算法,“如果需要運行10遍,那么就可以寫一個shell腳本,讓它自動運行10遍。最好不要用手動輸入,因為你有可能會忘了運行的內容,而且也有可能會漏掉部分內容,”Brown解釋道,這些腳本也需要是版本控制程序,這樣你可以將其與幾周前的結果進行比對。

另外一個重要的方面就是不要忘記記錄一切,Slaybaugh 說,在你的代碼上加上批注,告訴同事也提醒你自己相關的內容。如果你計劃與你的同事共享這些代碼,那么可以用一種稱為“doxygen” (www.stack.nl/~dimitri/doxygen)的工具進行記錄。doxygen可以根據正確注釋的各種語言源代碼自動創建程序檔案,或者研究人員也可以使用Jupyter Project (jupyter.org, 之前稱為 the IPython Project),以在線注釋的方式交換代碼,數據和文件(Python、R 和其它語言)。


測試你的代碼

Slaybaugh 為新手程序員提出了一個建議:開發一個測試包,其組成成分就是簡單的一套能確保程序按你所想的那樣進行操作的函數和數據。這樣當你編寫好自己的程序的時候,就能確保不會改變基底的運算法則,比如引入hard-to-track bug時,“你就能檢測系統,看看是否能通過,”她解釋道,這個過程就像是使用了基準線上的陰性和陽性對照。

Buffalo則說了一個簡單的例子“假設你有一個函數(“add”) ,也就是加合兩個數字,那么就可以設置一個“test_add”的函數來確保在程序改變的時候,2+3依然等于5。

將數據保存為“只讀”

對于你來之不易的數據,保存時需要額外謹慎,Buffalo說,“可以將數據保存為只讀,”也就是說不要用原始數據進行后續工作,可以拷貝一份,“比如你在Excel電子表格中保存了數據,后來又做一些改動,那么原始數據就永久不在了!

尋求幫助

新手程序員可以首先找到一個豐富的在線資源,從中尋找幫助,選擇自己想要的代碼語言。Software Carpentry project (software-carpentry.org) 就是這樣的一個免費工作交流組,主要用于科學編程的交流,其中大部分教學材料都可以在線獲取。

Brown也是其組織者之一,他表示這樣的交流組可以安排在一些“成本不是很高”的地點,這樣你就只需要支付旅行和食宿的費用。同時也有一些在線的網站,如Codecademy (www.codecademy.com),還有一些在線的大學教程(例如,lifehacker.com/tag/lifehacker-u)。StackOverflow Web site (stackoverflow.com) 也值得推薦,在上面你可以找到一些答案。此外,你也可以請教你的同事。

尋找好的項目

最后請記住,編程并不是霧里看花的技能,而是需要解決特定的問題。因此,當你第一次坐下來學習編程的時候,一定是要有需要解決的問題,否則進步會很慢,而且也會缺乏動力。

Buffalo說,如果沒有,那么也可以嘗試在使用的開放源碼軟件上增加缺失的功能,“找到了想要做的事,就可以挑戰自我,用一種新語言來嘗試,這確實能讓人進步!

 

(生物通:張迪)

附:Best Practices for Scientific Computing文章要點(來自中國政法大學)

給人寫程序,而不是給計算機。
1. 一個程序,對于閱讀它的人來說,不應該要求讀者一次性的在大腦里加載過多的背景/相關知識。
2. 命名需要一貫、明確、有意義
3. 代碼風格和格式要統一一致
4. 軟件開發中的各種工作都要分割成1小時左右的任務

重復性的工作自動化。
1. 讓計算機去做重復性的工作
2. 把最近使用過的命令存到一個文件里,以備復用
3. 使用編譯工具來自動化系統流程

用計算機做歷史記錄
1. 用軟件工具來自動跟蹤計算機的工作

逐步改進。
1. 每次做一小步,及時獲得反饋,及時糾正

使用版本控制。
1. 使用一個版本控制系統
2. 所有由手工創建的東西都要放到版本控制系統里

不要重復自己(或他人)。
1. 系統中的每一段數據都要有一個權威的單一的存在
2. 代碼應該模塊化復用,而不是考來粘去
3. 復用代碼,而不是重寫代碼

準備好對付錯誤的方法
1. 在程序中增加斷言,檢查它們的各種操作
2. 使用現成的單元測試框架
3. 測試程序時借鑒所有的可用的經驗
4. 把bug做成測試用例
5. 使用一個有代碼指令的調試工具

只在軟件能正確的工作后才可優化。
1. 使用監控工具找到瓶頸
2. 盡可能的用高級語言寫程序

文檔里描述的應該是設計思路和目的,而不是技術細節。
1. 描述接口和原因,而不是實現
2. 重構代碼,而不是注釋解釋運行原理
3. 引用其它程序時嵌入其它程序的文檔

協作
1. 代碼合并前進行代碼審查
2. 當幫帶新成員或解決特別詭異的問題時使用結對編程

維新舊代碼。
 

我來說兩句
0  條評論    0 人次參與
登錄 注冊發布
最新評論刷新
查看更多評論 > >
相關新聞
生物通微信公眾號
微信
新浪微博
  • 搜索
  • 國際
  • 國內
  • 人物
  • 產業
  • 熱點
  • 科普
  • 急聘職位
  • 高薪職位

知名企業招聘

熱點排行

    今日動態 | 生物通商城 | 人才市場 | 核心刊物 | 特價專欄 | 儀器云展臺 | 免費試用 | 今日視角 | 新技術專欄 | 技術講座 | 技術期刊 | 會展中心 | 中國科學人 | 正牌代理商

    版權所有 生物通

    Copyright© eBiotrade.com, All Rights Reserved

    聯系信箱:

    粵ICP備09063491號

    腾讯视频分享赚钱模式 广东11选5任选五技巧 股市网站模拟 下载宁夏11选五 广东l1选5任选走势图 甘肃快三最新走势图 加拿大28必输 海南环岛赛2019 一定牛上海11选5预测 江苏快三综合走势图 江西快3开奖视频直播