1. 程式人生 > >生信人值得擁有的程式設計模板-Perl

生信人值得擁有的程式設計模板-Perl

為什麼要學程式設計

image
圖1. 重複工作任務量與時間關係[1]

如上圖,對於大量重複工作,非程式設計者(non-geek)工作量和時間是正相關的,就像富士康流水線上的工人,這種工作對於高智商的人是無法忍受(富士康招流水線工人會測智商,高智商不會被分配大量重複工作,容易離職)。而程式設計者(geek)會分三個階段:手工操作摸索規律(與non-geek效率相同)、編寫程式(被non-geek遠遠甩開)、執行程式(秒殺non-geek)。

生物資訊就是這樣一門科學,讓重複工作遠離人工重複勞動。即使非生信人員,學點程式設計,在生活中也是非常有樂趣的。

生物資訊領域常用語言

個人認為:是否能熟悉使用Shell(專案流程搭建)+R(資料統計與視覺化)+Perl/Python等(膠水語言,資料格式轉換,軟體間銜接)三門語言是一位合格生物資訊工程師的標準。

生物資訊常用語言非常廣泛,我常用的有Perl, R, Shell,此外參與網頁製作還用過PhP+mySQL,寫公眾號/部落格通用Markdown。這些其實都是非常小眾的語言,如果和計算機專業的人交流,對方可能沒聽過這些語言。本系列“生信人值得擁有的寫作模板”主要以Perl為主,並伴隨一些零星的R和Shell程式設計的經驗和技巧。對於生信Perl使用人員有個交流和互相提高的平臺,讓新人少走點彎路。對於沒有任何Perl基礎強例建議別入坑,直接學Python教程吧,不解釋看下圖。

TIOBE世界程式語言使用排行
image
我們可以看到世界前三是Java, C, C++,大家都聽說過;第五是Python,目前在生領領域有取代Perl地位的趨勢,目前Perl列第12(比去年同期又下降三位)。R語言的資料分析領域有應用越來越廣泛,今年上升三位至15名;Shell由於版本和各類較多,在50-100名間有4種,此語言只建議快速解決小問題,不建議寫太長的任務,很容易跨平臺不相容。

總結:
1. 生信常用語言:Shell+R+Python/Perl
2. 世界三大語言:Java, C, C++
3. 生信語言的排名:Python 5th 穩定 , Perl 12th 快速下降, R 15th 快速上升

Perl語言簡介

Perl,一種功能豐富的計算機程式語言,執行在超過100種計算機平臺上,適用廣泛,從大型機到便攜裝置,從快速原型建立到大規模可擴充套件開發。
Perl最初的設計者為拉里·沃爾(Larry Wall),於1987年12月18日發表。現在的版本為Perl 6,於2015年12月25日更新。
Perl借取了C、sed、awk、shell 指令碼語言以及很多其他程式語言的特性,其中最重要的特性是它內部集成了正則表示式的功能,以及巨大的第三方程式碼庫CPAN。簡而言之,Perl像C一樣強大,像awk、sed等指令碼描述語言一樣方便,被Perl語言愛好者稱之為“一種擁有各種語言功能的夢幻指令碼語言”、“Unix 中的王牌工具”。
Perl 一般被稱為“實用報表提取語言”(Practical Extraction and Report Language),你也可能看到“perl”,所有的字母都是小寫的。一般,“Perl”,有大寫的 P,是指語言本身,而“perl”,小寫的 p,是指程式執行的直譯器。[1]

Perl寫作環境模板推薦

image

很多人三行兩行或直接命令列用perl直接解決問題,雖然快,但是不容重用和別人使用。因此,良好的寫作環境和模板是效率和專業的體現,即提高自己的程式碼重用性,也方便交流和他人使用。

程式設計環境IDE

推薦使用:Editplus 4.0,網上到處都是註冊機和序列號,隨便用,下載址搜不到好用的。可以後臺回覆“editplus”獲得下載連結。此軟體優點是可配置模板,可直接編輯伺服器指令碼(省略上傳步驟),高效的程式碼除錯。

程式設計模板

下面程式碼為實現常用功能的寫作模板,如幫助文件部分(提高程式碼重用和版本管理,方便其他人使用),命令列引數管理(可讀性的命令列是程式的基礎),程式執行時間統計(專案時間管理),常用檔案讀取資料結構樣式(方便修改檔案輸入和輸出)等;

下面是實現這樣功能的模板:可複製程式碼,在editplus中儲存為template.pl檔案。每步有詳細的註釋,仔細看看吧。

#!/usr/bin/perl -w
# 載入時間管理,引數管理,檔名和路徑處理的基礎包,無須安裝
use POSIX qw(strftime);
use Getopt::Std;
use File::Basename;

###############################################################################
#Scripts usage and about.
# 程式的幫助文件,良好的描述是程式重用和共享的基礎,也是程序升級和更新的前提
###############################################################################
sub usage {
    die(
        qq!
Usage:    template.pl -i inpute_file -o output_file -d database -h header num
Function: Template for Perl
Command:  -i inpute file name (Must)
          -o output file name (Must)
          -d database file name
          -h header line number, default 0
Author:   Liu Yong-Xin, liuyongxin_bio\@163.com, QQ:42789409
Version:  v1.0
Update:   2017/10/8
Notes:    
\n!
    )
}

###############################################################################
#命令列引數據的定義和獲取,記錄程式初始時間,設定引數預設值
#Get the parameter and provide the usage.
###############################################################################
my %opts;
getopts( 'i:o:d:h:', \%opts );
&usage unless ( exists $opts{i} && exists $opts{o} );
my $start_time=time;
print strftime("Start time is %Y-%m-%d %H:%M:%S\n", localtime(time));
print "Input file is $opts{i}\nOutput file is $opts{o}\n";
print "Database file is $opts{d}\n" if defined($opts{d});
# 調置引數的初始值,可以新增更多引數的預設值
$opts{h}=1 unless defined($opts{h});

###############################################################################
#讀入的資料或註釋檔案,用於與輸入檔案比較或註釋(可選),提供三種方式
#Read the database in memory(opt)
###############################################################################
#open DATABASE,"<$opts{d}";
# 1. 雜湊結構資料庫,要求資料檔案有唯一ID並且無順序要求
#my %database; #database in hash
#while (<DATABASE>) {
#   chomp;
#   my @tmp=split/\t/;
#   $database{$tmp[1]}=$tmp[2];
#}
# 2. 陣列結構資料庫,無唯一ID,但有順序要求
#my (@tmp1,@tmp2); #database in array
#while (<DATABASE>) {
#   chomp;
#   my @tmp=split/\t/;
#   push @tmp1,$tmp[1];
#   push @tmp2,@tmp[2];
#}
#close DATABASE;
# 3. 批量資料檔案,讀取一批有相似結構的檔案
#open a list file
#my %list;
#my @filelist=glob "$opts{i}";
#foreach $file(@filelist){
#   open DATABASE,"<$file";
#   $file=basename($file);
#   while (<DATABASE>) {
#       my @tmp=split/\t/;
#       $list{$file}{nr}++;
#   }
#   close DATABASE;
#}

###############################################################################
#Main text.
###############################################################################
# 正文部分,讀取輸入檔案,列出輸入和輸入檔案的三行作為示例,方便程式設計處理資料
open INPUT,"<$opts{i}";
#chrm0    snppos1          ref2     mat_gtyp3        pat_gtyp4        c_gtyp5  phase6   mat_all7 pat_all8 cA9      cC10      cG11      cT12      winning SymCls  SymPval BindingSite     cnv
#1       4648    C       A       C       M       PHASED  C       A       0       11      0       0       M       Asym    0.0009765625    -1      0.902113
open OUTPUT,">$opts{o}";
#chrm    snppos          ref     mat_gtyp        pat_gtyp        c_gtyp  phase   mat_all pat_all cA      cC      cG      cT      winning SymCls  SymPval BindingSite     cnv
#1       4648    C       A       C       M       PHASED  C       A       0       11      0       0       M       Asym    0.0009765625    -1      0.902113

my %count;
# h引數用於去除有檔案頭的行
while ($opts{h}>0) { #filter header
    $tmp=<INPUT>;
    $opts{h}--;
    # 可選,輸出檔案也保留檔案頭
    #print OUTPUT $tmp;
}
# 輸入和輸入處理部分,常用按行讀取處理並輸入,預設按tab分割資料
while (<INPUT>) {
    chomp;
    my @tmp=split/\t/;
    print OUTPUT "$tmp[0]\t$tmp[1]\n";
}
close INPUT;
close OUTPUT;

###############################################################################
#Record the program running time!
# 輸出程式執行時間
###############################################################################
my $duration_time=time-$start_time;
print strftime("End time is %Y-%m-%d %H:%M:%S\n", localtime(time));
print "This compute totally consumed $duration_time s\.\n";

模板匯入Editplus

將上述程式碼儲存為template.pl,在editplus中選擇Tools – Preference – Template – Perl,點選template.pl右邊的..按鍵,選擇你自己的template.pl即可,以後選擇perl指令碼會自己載入該模板。
希望對大家有幫助!

Reference

寫在後面

為鼓勵讀者交流、快速解決科研困難,我們建立了“巨集基因組”專業討論群,目前己有國內幾十位PI,兩百多名一線科研人員加入。參與討論,獲得專業指導、問題解答,歡迎分享此文至朋友圈,並掃碼加創始人好友帶你入群,務必備註“姓名-單位-研究方向-職務”。技術問題尋求幫助,首先閱讀如何優雅的提問學習解決問題思路,仍末解決推薦生信技能樹-微生物組版塊(http://www.biotrainee.com/forum-88-1.html) 發貼,並轉發連結入群,問題及解答方便檢索,造福後人。
image

學習16S擴增子、巨集基因組思路和分析實戰,快關注“巨集基因組”,乾貨第一時間推送。
image

系統學習生物資訊,快關注“生信寶典”
image

相關推薦

值得擁有程式設計模板-Perl

為什麼要學程式設計 圖1. 重複工作任務量與時間關係[1] 如上圖,對於大量重複工作,非程式設計者(non-geek)工作量和時間是正相關的,就像富士康流水線上的工人,這種工作對於高智商的人是無法忍受(富士康招流水線工人會測智商,高智商不會被分配大量重複

的linux考試20題解析

文章目錄 一、在任意資料夾下面建立形如 1/2/3/4/5/6/7/8/9 格式的資料夾系列 二、在建立好的資料夾下面,比如我的是 /Users/jimmy/tmp/1/2/3/4/5/6/7/8/9 ,裡面建立文字檔案 me.txt 三、在文字檔案 m

資料庫ID大總結-想踏入大門的你值得擁有

花了差不多一週寫了這個總結 希望對一些小夥伴有幫助 目錄 各大生信資源的使用流行程度 生信資料庫的霸主-NCBI以及Entrez檢索系統 Gene查詢好幫手-Entrez Gene資料庫 人類基因命名委員會-HGNC Ensembl計劃 NCBI非冗餘序列資

企業號開發原始碼Java編寫,懶開發一鍵式部署專案,WeChatEnterprise框架你值得擁有

幾年前無意間接觸了微信公眾平臺開發,這個在當時還是一個新鮮的事物,但現在已經很流行了,發展的型別也特別的多,比如訂閱號、服務號、小程式、微信企業號等,這些產品在人們日常的生活與開發中,都是非常常見的。 當時的博主也順應時代的變化,去嘗試著開發公眾平臺,到目前為止也算得上是得

2018微的養號技術,你值得擁有(經驗分享)

2018年微信的養號技術分享貼 2018年馬上就要過去了~綜合這一年的情況估計大多朋友都是在走下坡路。 威訊號被限制了? 加好友沒有反應? 剛註冊剛買的威訊號質量怎麼樣?是解x號?異常號? 這一系列問題都困擾了很多的朋友,阻止了大家前進的步伐。學如逆水行舟,不進

懂得珍惜的,才值得擁有

就像陳奕迅歌裡唱的:得不到的永遠在騷動,被偏愛的人卻有恃無恐愛是相互的那些不懂得愛卻被別人深深愛著的人,以為愛她的那個人是理所應當的愛她的那個人或許卑微或許為了她做著孤獨的歌手人生短短几十載,總有看透的時候(此刻的我看不透)珍惜眼前 知足常樂 我很喜歡看《大話西遊》,每每聽到至尊寶的那句“人世間最痛苦的事莫過

python程式設計6-10

文章目錄 Counting Point Mutations 統計點突變 Problem Sample Dataset Sample Output 孟德爾第一定律/分離定律 問題 說明 樣本

python程式設計1-5

文章目錄 Counting DNA Nucleotides/統計ATCG數 Problem Sample Dataset Sample Output Transcribing DNA into RNA /DNA轉錄RNA

JS元件系列——基於Bootstrap Ace模板的選單和Tab頁效果分享(你值得擁有

前言:最近園子裡多了許多談語言、談環境、談逼格(格局)的文章,看看笑笑過後,殊不知其實都是然並卵。提升自己的技術才是王道。之前博主分享過多篇bootstrap元件的文章,引起了很多園友的關注和支援,看樣子這種風格還是受到很多園友青睞的。本著不辜負園友們的支援的原則,應群友們的要求,今天來分享下專案中使用Ace

你們值得擁有最好的未來——致武漢校區每位學員

之前 學習壓力 在那 nts word 輔導老師 小白 data 男朋友 在武漢傳智播客已經有兩個月的時間了。我第一次看到了不一樣的自己。由於我遇到你們,而你們比誰都相信努力奮鬥的意義。 “人不迷茫枉少年”你們來傳智播客之前,經歷過各種各樣的事情,無論你是初入

快速入門系列--WebAPI--03框架你值得擁有

let lan 最重要的 reason cnblogs err 註意 解釋 max 接下來進入的是俺在ASP.NET學習中最重要的WebAPI部分,在現在流行的互聯網場景下,WebAPI可以和HTML5、單頁應用程序SPA等技術和理念很好的結合在一起。所謂ASP.N

【微開發】-- 發送模板消息

use keyword 選擇 調用 一次 png exc style col 我們需要將一些行為的進展消息推送給用戶。除了短信,發送微信模板消息也是不錯的選擇。模板消息免費、精準到達、而且可以引導用戶回到網站上來。但它有兩個前提條件。1個是必須開通了微信支付功能,你才能選擇

在線制作流程圖,這個軟件你值得擁有

流程圖的使用對工作上提高了效率,生活上跟簡單快捷,流程圖能夠直觀、明了的表達中心思想和文案重點,無論是企業、生活還是學校,都在廣泛使用流程圖, 但是沒到選擇那一款流程圖的時候都很糾結,很多的流程圖使用起都不很方便、有效率的完成任務,今天小編就為大家介紹一好用的流程圖軟件:

算法實踐

機會 cati nom evel assign com ica https article 最近在搞16S,發現了一個實踐算法的最佳機會。 見文章: A Bayesian taxonomic classification method for 16S rRNA gene s

002 基礎題

it is cti ble 數列 ini mes tcc pen true 01 ‘GATCCAGATCCCCATAC‘, 計算這串數列中兩個出現最高的頻率。 t = ‘GATCCAGATCCCCATAC‘ L = [ ] for i in range(le

百度雲盤,資源引流的溫床,你絕對值得擁有

修改文件 ack 支付 nbsp 概率 和諧 核心 存在 興趣 百度雲,儲存只是階梯,引流才是核心。 影視,這玩意兒產量太猛,根本看不過來。於引流,影視資源效果,美麗非常。 昨天,一盆友說其因《興趣部落,又一個僻靜的馬桶,這次不再明日黃花

數據分析—cmake

files file ins https bsp all 進入 mkdir tar.gz 1、進入自己目錄: cd /home/liuwenfang/biosoft 2、在biosoft目錄系建軟件存放目錄: mkdir cmake 3、下載cmake: https://c

公眾平臺開發,模板消息,網頁授權,微JS-SDK,二維碼生成(4)

支持 post 網頁 信息 行業 使用步驟 獲取 公眾 符號 微信公眾平臺開發,模板消息,什麽是模板消息,模板消息接口指的是向用戶發送重要的服務通知,只能用於符合場景的要求中去,如信用卡刷卡通知,購物成功通知等等。不支持廣告營銷,打擾用戶的消息,模板消息類有固定的模板,每個

韓國最穩定服務器免備案16核24G內存獨立服務器僅499元/月,你值得擁有

韓國服務器 網速快 帶寬大免備案韓國免備案服務器租用QQ97063505 韓國高硬防服務器的優勢:1.速度快,幾乎可以和國內雙線媲美;2.帶寬大,每臺機器默認均可以使用5-10M國際帶寬(是香港的3-5倍);3.韓國KT機房擁有16G集群的硬件防火墻,國外很多服務器是不具備的;4.售後服務器好。(韓國高防禦服

軟件的好幫手-bioconda--轉載

ldo all pac 生物 -- detail align ger str http://mp.weixin.qq.com/s/nK1Kkf9lfZStoX25Y7SzHQ 這篇文章主要適用於Linux平臺,當然MacOS也行,不過它有更好安裝方法。 此外網上也會許多更好