一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

生信人值得擁有的編程模板-Perl

 宏基因組 2020-10-09

為什么要學(xué)編程

圖1. 重復(fù)工作任務(wù)量與時間關(guān)系[1]

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

生物信息就是這樣一門科學(xué),讓重復(fù)工作遠(yuǎn)離人工重復(fù)勞動。即使非生信人員,學(xué)點編程,在生活中也是非常有樂趣的。

生物信息領(lǐng)域常用語言

個人認(rèn)為:是否能熟悉使用Shell(項目流程搭建)+R(數(shù)據(jù)統(tǒng)計與可視化)+Perl/Python等(膠水語言,數(shù)據(jù)格式轉(zhuǎn)換,軟件間銜接)三門語言是一位合格生物信息工程師的標(biāo)準(zhǔn)。

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

TIOBE世界編程語言使用排行

圖2. 2017年10月最新編程語言排名(www.tiobe.com/tiobe-index/)

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

總結(jié):

  1. 生信常用語言:Shell+R+Python/Perl

  2. 世界三大語言:Java, C, C++

  3. 生信語言的排名:Python 5th 穩(wěn)定 , Perl 12th 快速下降, R 15th 快速上升

Perl語言簡介

Perl,一種功能豐富的計算機程序語言,運行在超過100種計算機平臺上,適用廣泛,從大型機到便攜設(shè)備,從快速原型創(chuàng)建到大規(guī)??蓴U展開發(fā)。
Perl最初的設(shè)計者為拉里·沃爾(Larry Wall),于1987年12月18日發(fā)表?,F(xiàn)在的版本為Perl 6,于2015年12月25日更新。
Perl借取了C、sed、awk、shell 腳本語言以及很多其他程序語言的特性,其中最重要的特性是它內(nèi)部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN。簡而言之,Perl像C一樣強大,像awk、sed等腳本描述語言一樣方便,被Perl語言愛好者稱之為“一種擁有各種語言功能的夢幻腳本語言”、“Unix 中的王牌工具”。
Perl 一般被稱為“實用報表提取語言”(Practical Extraction and Report Language),你也可能看到“perl”,所有的字母都是小寫的。一般,“Perl”,有大寫的 P,是指語言本身,而“perl”,小寫的 p,是指程序運行的解釋器。[1]

Perl寫作環(huán)境模板推薦

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

編程環(huán)境IDE

推薦使用:Editplus 4.0,網(wǎng)上到處都是注冊機和序列號,隨便用,下載址搜不到好用的。可以后臺回復(fù)“editplus”獲得下載鏈接。此軟件優(yōu)點是可配置模板,可直接編輯服務(wù)器腳本(省略上傳步驟),高效的代碼調(diào)試。

編程模板

下面代碼為實現(xiàn)常用功能的寫作模板,如幫助文檔部分(提高代碼重用和版本管理,方便其他人使用),命令行參數(shù)管理(可讀性的命令行是程序的基礎(chǔ)),程序運行時間統(tǒng)計(項目時間管理),常用文件讀取數(shù)據(jù)結(jié)構(gòu)樣式(方便修改文件輸入和輸出)等;

下面是實現(xiàn)這樣功能的模板:可復(fù)制代碼,在editplus中保存為template.pl文件。每步有詳細(xì)的注釋,仔細(xì)看看吧。

#!/usr/bin/perl -w # 加載時間管理,參數(shù)管理,文件名和路徑處理的基礎(chǔ)包,無須安裝 use POSIX qw(strftime); use Getopt::Std; use File::Basename; ############################################################################### #Scripts usage and about. # 程序的幫助文檔,良好的描述是程序重用和共享的基礎(chǔ),也是程序升級和更新的前提 ############################################################################### 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!    ) } ############################################################################### #命令行參數(shù)據(jù)的定義和獲取,記錄程序初始時間,設(shè)置參數(shù)默認(rè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 $optsbv9civq\n" if defined($optspa2zwjq); # 調(diào)置參數(shù)的初始值,可以添加更多參數(shù)的默認(rèn)值 $opts{h}=1 unless defined($opts{h}); ############################################################################### #讀入的數(shù)據(jù)或注釋文件,用于與輸入文件比較或注釋(可選),提供三種方式 #Read the database in memory(opt) ############################################################################### #open DATABASE,"<$optsdyrzpli"; # 1. 散列結(jié)構(gòu)數(shù)據(jù)庫,要求數(shù)據(jù)文件有唯一ID并且無順序要求 #my %database; #database in hash #while (<DATABASE>) { #    chomp; #    my @tmp=split/\t/; #    $database{$tmp[1]}=$tmp[2]; #} # 2. 數(shù)組結(jié)構(gòu)數(shù)據(jù)庫,無唯一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. 批量數(shù)據(jù)文件,讀取一批有相似結(jié)構(gòu)的文件 #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. ############################################################################### # 正文部分,讀取輸入文件,列出輸入和輸入文件的三行作為示例,方便編程處理數(shù)據(jù) 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參數(shù)用于去除有文件頭的行 while ($opts{h}>0) { #filter header    $tmp=<INPUT>;    $opts{h}--;    # 可選,輸出文件也保留文件頭    #print OUTPUT $tmp; } # 輸入和輸入處理部分,常用按行讀取處理并輸入,默認(rèn)按tab分割數(shù)據(jù) 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";

模板導(dǎo)入Editplus

將上述代碼保存為template.pl,在editplus中選擇Tools — Preference — Template — Perl,點擊template.pl右邊的..按鍵,選擇你自己的template.pl即可,以后選擇perl腳本會自己加載該模板。
希望對大家有幫助!

Reference

  1. 圖1地址 https://2017-cicese-metagenomics./en/latest/_images/gvng.jpg

  2. https://baike.baidu.com/item/perl

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲中文字幕视频在线播放| 狠狠干狠狠操亚洲综合| 国产日产欧美精品视频| 亚洲视频在线观看你懂的| 日本午夜一本久久久综合| 在线免费视频你懂的观看| 亚洲国产一级片在线观看| 久久人妻人人澡人人妻| 精品人妻一区二区三区免费看| 亚洲欧美国产中文色妇| 国产一级不卡视频在线观看| 欧美人与动牲交a精品| 高清一区二区三区四区五区| 日韩成人动作片在线观看| 狠狠干狠狠操亚洲综合| 91精品国产综合久久精品 | 亚洲午夜av久久久精品| 亚洲视频一级二级三级| 国产对白老熟女正在播放| 亚洲综合日韩精品欧美综合区| 91精品国产av一区二区| 国产av天堂一区二区三区粉嫩| 亚洲欧洲精品一区二区三区| 麻豆视传媒短视频免费观看| 中文字字幕在线中文乱码二区| 好骚国产99在线中文| 好骚国产99在线中文| 欧美日韩少妇精品专区性色| 少妇福利视频一区二区| 国产一区二区精品高清免费| 成人午夜激情免费在线| 国产日本欧美韩国在线| 久久婷婷综合色拍亚洲| 日韩欧美国产精品中文字幕| 欧美日韩国产精品黄片| 国产精品香蕉一级免费| 美女黄色三级深夜福利| 欧美日韩国产免费看黄片| 国产视频福利一区二区| 日本妇女高清一区二区三区| 久热香蕉精品视频在线播放|