搜索
查看: 2281|回复: 6

【Panda姐-perl练习题8】找出基因列表中出现次数最多的基因

[复制链接]

58

主题

103

帖子

752

积分

版主

Rank: 7Rank: 7Rank: 7

积分
752
QQ
发表于 2016-8-28 15:35:09 | 显示全部楼层 |阅读模式
本帖最后由 Panda姐 于 2016-8-30 19:08 编辑

gene.txt 是包含了一些列基因名的列表,编写perl脚本,找出出现次数最多的基因。统计脚本运行时间,尽量优化脚本,做到 20s 内得到结果。
代码记录:
[Perl] 纯文本查看 复制代码
#! /usr/bin/perl -w
use strict;
my(@gene,%count,$gene,$max);
open GENE,"gene.txt";
@gene=<GENE>;
foreach $gene(@gene){
$count{$gene}+=1;
}
@gene=sort by_values keys %count;
$max=shift@gene;
print "$max\n$count{$max}\n";
sub by_values{$count{$b} <=>$count{$a}};


gene.txt文件见下压缩包:

小记:
参考小骆驼第十一章 字符串和排序中的高级排序



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



上一篇:【Panda姐-perl练习题7】不同文件内的数据进行批量运算
下一篇:如何在帖子里面嵌入代码-并且代码高亮
回复

使用道具 举报

1

主题

15

帖子

90

积分

注册会员

Rank: 2

积分
90
发表于 2017-7-18 11:25:28 | 显示全部楼层

[Perl] 纯文本查看 复制代码
#!/usr/bin/perl
use strict;
use warnings;
open Gene,"gene.txt";
my (%a);
while (<Gene>) {
	chomp($_);
	$a{$_}++;
}
foreach  (sort {$a{$b}<=>$a{$a}} keys %a) {
	
	print "$_: $a{$_}";
	last;
}
close (Gene);


SYNPCC7002_A0599: 94504
real        0m1.905s
user        0m1.884s
sys        0m0.023s
本地电脑用了20多秒,果断去服务器上弄!才2秒!
回复 支持 1 反对 0

使用道具 举报

0

主题

14

帖子

215

积分

中级会员

Rank: 3Rank: 3

积分
215
发表于 2016-9-26 10:31:31 | 显示全部楼层
[Python] 纯文本查看 复制代码
# coding=utf-8
import os
import time

start = time.clock()

os.chdir('C:/workspace/8')

file_A = open('gene.txt')
read_A = file_A.readlines()

dic_A = {}
for gene in read_A:
    gene = gene[:-1]
    if dic_A.has_key(gene):
        dic_A[gene] = dic_A[gene]+1
    else:
        dic_A[gene] = 1
dic_AA = sorted(dic_A.iteritems(),key=lambda d:d[1],reverse=True)
print 'most appear gene is %s and it is appear %s times' %(dic_AA[0][0],dic_AA[0][1])

file_A.close()

end = time.clock()
print "need time: %f s" % (end - start)


>most appear gene is SYNPCC7002_A0599 and it is appear 94504 times>need time: 3.991616 s


回复 支持 1 反对 0

使用道具 举报

1

主题

16

帖子

180

积分

注册会员

Rank: 2

积分
180
发表于 2016-10-8 14:48:44 | 显示全部楼层
本帖最后由 disheng 于 2016-10-8 14:50 编辑

[Perl] 纯文本查看 复制代码
#!/usr/bin/perl
#find the most times of gene in the gene.txt
#2016-10-8
#USE:time perl most_time_of_gene.pl
open IN,"gene.txt";
my(%count_time,@gene,$max);

while(<IN>){
        chomp;
        $count_time{$_}++;
}
@gene =  sort {$count_time{$b} <=> $count_time{$a}} keys %count_time;
$max = shift @gene;
print "$max\t$count_time{$max}\n";

SYNPCC7002_A0599        94504

real        0m4.090s
user        0m2.831s
sys        0m1.260s


回复 支持 反对

使用道具 举报

5

主题

32

帖子

448

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
448
发表于 2017-2-21 20:51:55 | 显示全部楼层
#! /usr/bin/perl -w
use strict;
my(@gene,%count,$gene,$max,@qw);
open INPUT,"gene.txt";
open OUPUT,">result.txt";
chomp(@gene=<INPUT>);
foreach$gene(@gene){
$count{$gene}+=1;
}
@qw=sort {$count{$b}<=>$count{$a}} keys %count;
$max=shift @qw;
print OUPUT "$max\t=>$count{$max}\n";
回复 支持 反对

使用道具 举报

0

主题

6

帖子

81

积分

注册会员

Rank: 2

积分
81
发表于 2017-10-31 17:19:47 | 显示全部楼层
[Perl] 纯文本查看 复制代码
#!usr/bin/perl -w
open INPUT, "gene.txt";
my (%count,@gene,$long);
while (<INPUT>) {
    chomp;
    $count{$_} += 1;
}
sub asc_sort {$count{$a} <=> $count{$b}};
@gene = sort asc_sort keys %count;
$long = pop @gene ;
print "$long\t$count{$long}\n";
回复 支持 反对

使用道具 举报

0

主题

1

帖子

49

积分

新手上路

Rank: 1

积分
49
发表于 2018-7-11 17:09:15 | 显示全部楼层
本帖最后由 jrwjb 于 2018-7-11 17:13 编辑

python版
import time
start = time.clock()
with open(r'C:\Users\NB18040401\Desktop\gene.txt') as f:
    s=f.read().split()
    d={}
    for i in s:
        d.setdefault(i,0)
        d +=1
    print(max(d.items(),key=lambda x:x[1]))
    stop=time.clock()
    print(stop-start)
结果:

('SYNPCC7002_A0599', 94504)
6.017857297934898

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2018-7-23 00:23 , Processed in 0.138728 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.