每一生信perl练习

Posted 沈梦圆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每一生信perl练习相关的知识,希望对你有一定的参考价值。

1 数据的准备

  • hg19基因组序列下载

【每一生信】perl练习

  • 测试数据 test.fa

【每一生信】perl练习

存放在我的工作目录:/d/生信技能树-视频直播/第二讲

2 题目解读

 
求:hg19 每条染色体长度,每条染色体N的含量,GC含量。 
解题要点:G(g)C(c)N的计数;序列长度获取;哈希。

3 解题过程

这道题目我八月份的时候做过,但是是对一条序列的统计,分享在论坛上, 
我尝试了不同的碱基计数方法,结论是方法二更快点,但是好像忽略了小写碱基了。因为我以前做过这道题下面的方法肯定是对的,所以跳过测试数据,直接采用chr1.fa来重新进行用时测试。(写脚本来解决数据处理问题,一定要用已知答案的测试来测试调试代码,要不然直接上实验数据,报错很难找到原因的,切身感悟。)

  • 方法1:1.pl

【每一生信】perl练习

  • 方法2:2.pl

【每一生信】perl练习

  • 方法三:3.pl

【每一生信】perl练习

【每一生信】perl练习

运行上面3种计算碱基的方法,还是方法2最快啦~ 
如果只需要看一条序列的长度、N及GC含量,写到这里就够了稍微修改下,如下:

  • 统计单条序列:single.pl

【每一生信】perl练习

  • 然后改成perl单行命令行

perl -ne  'if(/>/){print $_;}else{chomp;$count_G=$count_G+($_=~tr/Gg//);$count_C=$count_C+($_=~tr/Cc//);$count_N=$count_N+($_=~tr/Nn//);$total_length+=length($_);}END{print qq{total count is $total_length bp N%:},$count_N/$total_length,qq{ GC%:},($count_G+$count_C)/$total_length,qq{ } }' chr1.fa

【每一生信】perl练习

【每一生信】perl练习

显然题目是算多条序列的,所以要使用上哈希,如下:

运行时间大概是1分半吧,用普通笔记本电脑。

【每一生信】perl练习

结果如下:不知道是不是完全正确的~_~这里的GC含量的计算,不知道分母要不要加上N,我一直都是算的总长度的。

【每一生信】perl练习


 4 学习别人的代码

###############

#  直接统计一个序列的GC含量

###############

perl -e '$seq=shift;chomp $seq;$GC=$seq=~tr/GC/GC/;print $GC/length($seq),qq{ }' CTTTCATCTTCCCTGCAAAGAGTGTCAATAGATCTCCATGGCCGCGATTTCT

【每一生信】perl练习

##########

#  输出fasta文件每个序列对应的长度

############

perl -0076 -ane '@F=map{s/[> ]//gr}@F;$id=shift @F;print $id,qq{ },length (join q{},@F),qq{ } if $id' test.fa

【每一生信】perl练习

##########

#  输出fasta文件每个记录的A T G C 字数统计

###########

perl -0076 -ane '@F=map{s/[> ]//gr}@F;$id=shift @F;map {$aC+=($_=~tr/Aa//);$cC+=($_=~tr/Cc//);$gC+=($_=~tr/Gg//);$tC+=($_=~tr/Tt//)} @F;print qq{$id $aC $tC $gC $cC } if($id);' test.fa

【每一生信】perl练习

后面两条代码的做法说是比较危险,比较耗内存?我用第三条代码试了一下发现时间比上面的方法多了一分钟左右,稍微那么慢了点。不采用也可学习解题思想嘛~map函数~

【每一生信】perl练习


5 我录了个视频


请忽略

~ 我自己录完也没看过 ~

【每一生信】perl练习



【每一生信】perl练习

有问题请联系我

个人微信ID:
Shenmengyuan1993





以上是关于每一生信perl练习的主要内容,如果未能解决你的问题,请参考以下文章

时光飞逝,思考,实践,伴我一生的经验

Perl替换fasta文件的ID

学习一点perl单行命令知识

读《刻意练习》

读《刻意练习》

读《刻意练习》