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

2021-02-21 浙江省生物信息學學會

今天的世界大不同,表現在生命科學研究領域,就是一切都開始進入了大數據時代,無論是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系統中這兩者都有預裝。現在也有一些很強大的可配置程序,但是對於新手來說很難掌握,「這要求你自己想代碼,因此我還是建議使用自己擅長的方法,」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說,如果沒有,那麼也可以嘗試在使用的開放源碼軟體上增加缺失的功能,「找到了想要做的事,就可以挑戰自我,用一種新語言來嘗試,這確實能讓人進步。」

相關焦點

  • 信息學奧賽太原市集訓隊零基礎選拔活動通知
    教育部2018年發布的《普通高中信息技術課程標準》中將軟體編程作為掌握數位化工具、學習數據與計算、學習數據結構和算法的重要能力。 為進一步提升我省信息學奧林匹克競賽成績,展示全省中小學生數學能力、計算思維和信息素養,儲備信息學奧賽人才,現開展信息學奧賽太原市集訓表隊隊員、預備隊選拔暨計算思維測評展示活動。
  • 從零開始學財務分析:現金流量表分析
    歡迎購買本專欄,購買專欄後您可以完整地學習、深入地學習;本專欄「乾貨」很多、用處很大,不僅可以隨查隨用,還值得反覆學習、時常複習,「學而時習之,不亦悅乎」(每學一遍都有不同的收穫)。學習改變命運,是凡人逆襲的真理,如果您覺得對您有幫助,請立即購買!現在立即購買本專欄的好處:按目前的超划算價格購買比到時大幅上調到正常價格時購買,立即獲得了優惠;想成功的人那麼多,憑什麼是您?
  • 從零開始學電路基礎- -從零開始學電路基礎,初學者們看這裡~~~
    導讀:從零開始學電路基礎,這篇文章志在讓親們快速掌握電路基礎知識,為以後學習更深入的知識打下基礎,從零開始學電路基礎是專門針對初學者的,大神們請自覺飄過~~~本文引用地址:http://www.eepw.com.cn/article/268472.htm  電路的概念
  • 從零開始怎麼學計算機編程?
    於是很多人想投身其中,而且很大一部分都是零基礎非科班的狀態。在學習者中有大學生,也初高中生,他們都有一個共性,沒什麼基礎。從零基礎開始學習編程成為了一種常態,可是,也正是因為我們在編程方面是零基礎,很容易導致我們選錯專業和行業。從零開始學習電腦如何才能保證學好呢?以下為大家做一個簡單的總結,希望我們能在學習時有所參考。
  • 這裡有10G的生物信息學中個層次的分析技術匯總
    生物信息學(Bioinformatics)是研究生物信息的採集、處理、存儲、傳播,分析和解釋等各方面的學科,也是隨著生命科學和計算機科學的迅速發展,生命科學和計算機科學相結合形成的一門新學科。它通過綜合利用生物學,計算機科學和信息技術揭示大量而複雜的生物數據所賦有的生物學奧秘。
  • 新手如何快速入門數據分析?
    CDA數據分析研究院原創作品, 轉載需授權隨著網際網路迅猛發展,各大公司沉澱了很多的數據,如何找出藏在這些數據背後的規律,利用這些數據來給公司創造價值,作為一個新手面對這些問題的時候,你是不是考慮怎麼快速學習數據分析呢?
  • 海缸新手寶典:蛋分的詳細介紹(新手篇)
    新手玩家可以在公眾號內,查看全部「從零開始」系列文章,按照順序閱讀下來,相信您會收穫滿滿噠!高手們可以看看」高手之路「系列,相信你會對海缸有一個全新的認知!這是新手寶典的第十五篇文章呦~!快來跟東傑一起下海吧!
  • 生物信息學專業十強
    生物信息學(Bioinformatics)是一門交叉科學,它包含了生物信息的獲取、加工、存儲、分配、分析、解釋等在內的所有方面,它綜合運用數學、計算機科學和生物學的各種工具,來闡明和理解大量生物數據所包含的生物學意義。
  • 生物信息學從入門到研究完全手冊
    半年前,我開始接觸生物信息學,但學了一段時間,總覺得懸在空中,紙上談兵。
  • 生物信息學專業:生物+計算機(高考家長每日必讀),No.85
    學什麼呢:最核心課程三大部分:生物學、數學、計算機科學課程有:生物化學、分子生物學、概率統計、數據結構及實驗、基因組信息學、轉錄組信息學、蛋白質組信息學、計算機輔助藥物發現、現代統計與生物信息學。所以,還是那句話,除非你特別明確想研究生物,否則生物信息學慎重考慮。而且,從當初高中老師的角度來講,學生物信息學可就不如學生物科學好了。
  • 我英語基礎很差,怎麼從零開始學英語?
    很多同學已經準備開始複習工作了,在教學的過程中,我們收到很多問題,其中有一個問題出現的頻率最多,那就是——我英語基礎很差,如何從零開始學好英語?本月,我們的Hero老師,為英語基礎不好的同學們仔細解答這個問題,希望大家都可以輕鬆踏上自己的學習旅途。
  • 如何用雲計算模式,實現生物信息分析 | 雷鋒網公開課
    本文整理自華點雲技術總監於偉文在雷鋒網(公眾號:雷鋒網)硬創公開課上的演講,主題為如何用雲計算模式實現生物信息分析。於偉文,高級工程師,上海華點雲生物科技有限公司技術總監。是北京航空航天大學國家示範學科——「移動雲計算」專業的首批畢業生。擁有十餘年 IT 領域從業經驗,主要關注於臨床、生物、金融等領域。
  • 生物信息學相關網站
    研究領域主要涵蓋序列分析,蛋白質組學和基因組學等。該網站提供了資料庫,電子論壇,教育,新聞,軟體,招聘啟事等。該網站還提供了相關連結,包括歐洲分子生物學以色列國家網點,以色列國家基因組基礎設施實驗室以及國際生物信息學合作中心。
  • 新手如何從0學滷味?需要學哪些技術?聽聽過來人怎麼說,純乾貨
    很多新手在學習滷味時容易陷入一個誤區,師傅教得越多,自已掌握的也就越多,這樣更能滿足大多人口味。然而對於滷菜來說,顧客的選擇菜品有限,若上架的菜品過多,不僅會造成顧客選擇困難,甚至還出自已自已精力分散的情況。
  • 從零開始學電路基礎
    本書就是為使初學者從零開始,快速掌握電路基礎知識而編寫的。本書所介紹的電路基礎知識包括:電路的基本定律、定理和基本分析方法,磁場與磁路,交流電路,互感與變壓器,電路的過渡過程等內容。可供工礦企業的技術人員、技工、電氣工人、家電維修人員以及無線電愛好者閱讀,也可作為中專、中技的教材或教學參考書使用。
  • 如何系統地從零開始學習PLC?
    但是作為一個零基礎初學者,要學PLC,還是要付出一定的時間來摸索的。先要明白PLC本質是繼電器電路的軟體化,也就是在電腦上畫畫繼電器電路圖,這個是它的根本,所以在學習PLC之前,你一定要有點電工基礎,理解和實操過繼電器電路的使用,這個是非常重要的,畢竟PLC軟體的東西都是在模擬硬體電路,請關注:容濟點火器作為一個過來人,我當年也是從零開始學PLC的中國的大學教育,因為很多原因,往往比較重視理論教育,而在學校裡邊的動手機會是沒有那麼多的,特別是
  • 從零開始的大冒險
    從零開始的大冒險 網路遊戲 大小: 502.96MB 版本: 1.0.1
  • 英語一竅不通從哪裡開始學 零基礎如何學英語
    英語一竅不通從哪裡開始學 零基礎如何學英語很多人說自己對英語一竅不通,英語上完全是零基礎,不知道從哪裡開始學英語,下面小編為大家介紹一些零基礎學英語的方法,讓你迅速學好英語。
  • 無人機新手「炸機」最主要的原因分析_新手如何避免
    許多無人機「新手」沒有相關的飛行經驗,也並不仔細閱讀大疆官方的安全飛行手冊,使得飛行安全問題屢見不鮮,炸機現象頻發。那麼無人機新手為了避免不必要的炸機,減少不必要的損失,應該怎麼辦呢?      「炸機」最主要的原因分析   1、不看說明書就匆忙首飛。
  • 信息學競賽需要掌握哪些程式語言知識
    信息學競賽現在已經受到越來越多的人的關注,怎麼走進信息學競賽的大門呢?一、程式語言選擇信息學聯賽主要考的是程序設計,選擇合適的參賽程式語言是首要選擇,信息學競賽的程式語言有三種:pascal語言、c語言、c++語言,pascal語言將於2022年停止在信息學競賽中使用,所以現在學習pascal語言意義不大,剩下的只有選擇c語言和c++語言,實際考試中絕大多數考生選擇