走过的路
从接触生物信息学到现在已经两年了,回想这两年来自己走过的路可谓是磕磕绊绊。由于我从接触生物信息学到现在基本没有人指导我,整个过程完全靠自学,从理解生物信息概论开始到学习简单生物信息学软件做序列比对,做蛋白结构预测等,这个过程花了一年的时间。再开始以转录组分析为入门点,接触Linux,接触R语言编程。这个过程花费半年,算是理解了转录组测序分析原理(也不能说精通)熟练的Linux操作,熟练了R语言编程,熟悉了各种(不是所有)数据库(GO、KEGG、pfam、TCGA、GEO等)。后来开始使用服务器,一开始使用服务器并没有一个好的习惯。非常不擅长管理文件夹、管理文件,导致分析的过程文件和结果文件混乱放在一个文件夹里。文件夹和文件的命名也十分混乱,导致第二次分析的时候经常忘掉上一次结果放在哪里了。这个情况在我研一上做UNSGM联合国项目的时候经常出现。杂乱的文件存放、混乱的文件命名使我花费很多无效时间在寻找曾经有用的文件和路径上。所以在研一结束的寒假里,我在科学院反思了曾经的坏习惯,开始真正地用心整理和管理自己的服务器了。
管理好服务器的文件和软件
首先就是正确有效为自己的分析文件命名,这一点我认为我的女友Соня做的非常好,她说她命名文件夹和文件的方法为文件夹名称中包含研究项目名称和目的、日期或者第几次数据,通常用缩写和下划线连接命名。另外文件的命名方法尤其注意中间过程的命名,命名不要嫌名称长,一定要让自己看见名称就能想起来,不要过于自信自己的记忆力!根据我日常管理服务器的经验来看管理好自己的软件也是非常重要的,利用好conda管理或者自己管理是非常重要的,但是根据我的学习经验,最好是自己源码安装软件及其依赖。这样你会在安装软件的过程中熟悉Linux系统。这里我给出一部分安装源码安装软件的命令
#bedtools安装
wget https://github.com/arq5x/bedtools2/archive/v2.25.0.tar.gz
tar -xzvf v2.25.0.tar.gz
cd bedtools2-2.25.0/
make
cd bin/
echo 'PATH=$PATH:~/biosoft/bedtools2-2.25.0/bin' >> ~/.bashrc
source ~/.bashrc
#hmmer安装
wget http://eddylab.org/software/hmmer/hmmer-3.2.tar.gz
tar -zxf hmmer-3.2.tar.gz
cd hmmer-3.2
./configure --prefix=$HOME
make
make check
make install
echo 'PATH=$PATH:~/src/hmmer-3.2' >> ~/.bashrc
source ~/.bashrc
#安装bioperl
perl -MCPAN -e shell
install Bundle::CPAN
install Module::Build
o conf prefer_installer MB
o conf commit
install Bio::SeqIO
#jellyfish
wget https://github.com/gmarcais/Jellyfish/releases/download/v2.2.10/jellyfish-2.2.10.tar.gz
tar -zxvf jellyfish-2.2.10.tar.gz
cd jellyfish-2.2.10
./configure --prefix=$HOME
make -j8
make install
echo 'PATH=$PATH:~/src/jellyfish-2.2.10/bin' >> ~/.bashrc
source ~/.bashrc
#bowtie2
#download from: https://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.3.4.1
unzip bowtie2-2.3.4.1-source.zip
cd bowtie2-2.3.4.1
make NO_TBB=1
chmod 777 bowtie2
./bowtie2
echo 'PATH=$PATH:~/src/bowtie2-2.3.4.1' >> ~/.bashrc
source ~/.bashrc
#salmon
wget https://github.com/COMBINE-lab/salmon/archive/v0.10.2.tar.gz
tar -zxvf v0.10.2.tar.gz && cd salmon-0.10.2
mkdir build && cd bulid
cmake -DFETCH_BOOST=TRUE ..
make
make install
echo 'PATH=$PATH:~/src/salmon-0.10.2/bin' >> ~/.bashrc
source ~/.bashrc
echo 'LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/src/salmon-0.10.2/lib' >> ~/.bashrc
source ~/.bashrc
管理好自己的脚本、github
除了管理好软件以外还要管理好自己的脚本代码,毕竟生物信息学光会用软件是完全不行的。管理脚本和代码最好是放在github上,脚本代码的命名也遵循上面所说的命名方式。比如我最近将自己的脚本都按照分析情况和使用情况分类放在了我的github上。(点击阅读原文可以查看我的github链接)

脚本最好写上注释。方便自己和github上的其他人阅读下载。比如以我的一个perl脚本为例
#!/usr/bin/perl
=head1 Name
rm_blast_byinput.pl Extract best blast result by input.
=head1 Description
perl rm_blast_byinput.pl length identity Subid
length is the shortest length you want the query seq alignment
identity is the min rate you want the query seq alignment
Subid is the subseq name you want control, if you don't need it, you don't need input
=head2 Author
Xiong Dongyan
=head3 Edit time
2019-02-19 23:46
=cut
@ARVG;
my $input_blast = $ARGV[0];
($input_len, $input_ide, $input_sunject) = ($ARGV[1], $ARGV[2], $ARGV[3]);
open(file, "<", $input_blast);
my @blast_res;
my $i = 0;
while (<file>) {
my @lit_blast_res = split/\t/,$_;
if(@lit_blast_res[2] >= $input_ide and @lit_blast_res[3] >= $input_len){@blast_res[$i] = $_}
else{@blast_res = @blast_res};
$i = $i + 1;
};
if(length($input_sunject) < 1){@blast_res = @blast_res}
else{
for (my $j=0; $j<@blast_res; $j++,){
my @lit2_blast_res = split/\t/,@blast_res[$j];
$_ = @lit2_blast_res[1];
if(m/$input_sunject/){@blast_res[$j] = @blast_res[$j]}
else{@blast_res[$j] = ""}
}
};
print @blast_res;
对于一些编程语言的脚本例如perl、python等最好都放在服务器的某个路径下,分类放好。这样在任何时间做数据分析过程中可以直接在服务器调用。对于R语言,最好也是在自己的Rstudio中保存好自己写好的一些数据分析脚本和可视化代码。最好做一个备份。总之,做编程做数据分析,磨刀不误砍柴工。这是我自己走了很多弯路的情况下总结的道理。虽然我现在的水平一般,但是多想网上的牛人们学习多阅读他们的源码、github和文章是非常重要的!

