生物信息領域常用語言
個人認為:是否能熟悉使用Shell(項目流程搭建)+R(數據統計與可視化)+Perl/Python/Java…(膠水語言,數據格式轉換,軟件間銜接)三門語言是一位合格生物信息工程師的標準。
生物信息常用語言非常廣泛,我常用的有Perl, R, Shell,此外參與網頁制作還用過PhP+mySQL,寫博客用Markdown。這些其實都是非常小眾的語言,如果和計算機專業的人交流,對方可能沒聽過這些語言。本系列“生信人寫程序”主要以Perl為主,并伴隨一些零星的R和Shell編程的經驗和技巧。對于生信Perl使用人員有個交流和互相提高的平臺,讓新人少走點彎路。對于沒有任何Perl基礎強例建議別入坑,想學生信找Python教程吧,不解釋看下圖。
TIOBE世界編程語言使用排行
我們可以看到世界前三是Java, C, C++,大家都聽說過;第四是Python,目前在生領領域有取代Perl地位的趨勢,目前Perl列第9(世界十大語言之一)下降一位。R語言的數據分析領域有應用越來越廣泛,今年上升兩位至14名;Shell由于版本和各類較多,在50-100名間有4種,此語言只建議快速解決小問題,不建議寫太長的任務,很容易跨平臺不兼容。
總結:
生信常用語言:Shell+R+Python/Perl
世界三大語言:Java, C, C++
生信語言的排名:Python 4th, Perl 9th, R 16th
Perl寫作環境模板推薦
很多人三行兩行或直接命令行用perl直接解決問題,雖然快,但是不容重用和別人使用。因此,良好的寫作環境和模板是效率和專業的體現,即提高自己的代碼重用性,也方便交流和他人使用。
編程環境IDE
推薦使用:Editplus 4.0,網上到處都是注冊機和序列號,隨便用,下載址搜不到可以點鏈接:http://pan.baidu.com/s/1jHJJ1qe 密碼:6xm6。優點是可配置模板,可直接編輯服務器腳本(省略上傳步驟),高效的代碼調試。
編程模板
是解決常用功能的寫作模板,如幫助文檔部分(提高代碼重用和版本管理,方便其他人使用),命令行參數管理(可讀性的命令行是程序的基礎),程序運行時間統計(項目時間管理),常用文件讀取數據結構樣式(方便修改文件輸入和輸出)等;
下面是實現這樣功能的模板:
#!/usr/bin/perl -w
# 加載時間管理,參數管理,文件名和路徑處理的基礎包,無須安裝
use POSIX qw(strftime);
use Getopt::Std;
use File::Basename;###############################################################################
#命令行參數據的定義和獲取,記錄程序初始時間,設置參數默認值
#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.902113my %count;
# h參數用于去除有文件頭的行
while ($opts{h}>0) { #filter header<INPUT>;$opts{h}--;
}
# 輸入和輸入處理部分,常用按行讀取處理并輸入,默認按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";###############################################################################
#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,s default 0
Author: Liu Yong-Xin, liuyongxin_bio\@163.com, QQ:42789409
Version: v1.0
Update: 2017/6/2
Notes:
\n!)
}
模板導入Editplus
將上述代碼保存為template.pl,在editplus中選擇Tools — Preference — Template — Perl,點擊template.pl右邊的…按鍵,選擇你自己的template.pl即可,以后選擇perl腳本會自己加載該模板。 希望對大家有幫助!
Reference
- https://www.tiobe.com/tiobe-index/