免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 旋转小马
打印 上一主题 下一主题

现在需要编一个数理统计的程序,弄不出来了,求大神帮忙,万分万分感谢!!! [复制链接]

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
11 [报告]
发表于 2013-11-18 17:55 |只看该作者
亲亲?
x Cluster_1 y
x Cluster_2 y
x Cluster_2 y
x Cluster_3 y
这样Cluster_2 条数,对数是?

论坛徽章:
1
天蝎座
日期:2013-11-25 10:40:37
12 [报告]
发表于 2013-11-18 23:58 |只看该作者
本帖最后由 dqw233 于 2013-11-19 00:00 编辑
  1. use strict;
  2. use warnings;
  3. use feature 'say';
  4. my @lines = <DATA>;
  5. my %m;
  6. my %d;
  7. for (@lines) {
  8.    my @matchs = $_ =~ /(Cluster_\d+)/g;
  9.    $m{$_} ++ for @matchs;
  10. }


  11. while (@lines) {
  12.     my ($fl, $nl) = (shift @lines, shift @lines);
  13.     my @fm = $fl =~ /(Cluster_\d+)/g;
  14.     my @nm = $nl =~ /(Cluster_\d+)/g;
  15.     next unless exists $fm[0] && exists $nm[0];
  16.     $d{$fm[0]} ++ if $fm[0] eq $nm[0];
  17.     next unless exists $fm[1] && exists $nm[1];
  18.     $d{$fm[1]} ++ if $fm[1] eq $nm[1];
  19. }


  20. say "$_  $m{$_} ".($d{$_}//0) for keys %m;



  21. __DATA__
  22. HWI-ST1106:755:H0V1MADXX:2:1101:1221:2186        Cluster_29235        XA:Z:Cluster_67972,+589,100M,0;
  23. HWI-ST1106:755:H0V1MADXX:2:1101:1221:2186        Cluster_29235        XA:Z:Cluster_67972,-771,100M,1;
  24. HWI-ST1106:755:H0V1MADXX:2:1101:1270:2135        Cluster_39664      
  25. HWI-ST1106:755:H0V1MADXX:2:1101:1270:2135        Cluster_39664      
  26. HWI-ST1106:755:H0V1MADXX:2:1101:1483:2147        Cluster_33745      
  27. HWI-ST1106:755:H0V1MADXX:2:1101:1483:2147        Cluster_67963      
  28. HWI-ST1106:755:H0V1MADXX:2:1101:1318:2150        Cluster_79602        XA:Z:Cluster_42584,-594,100M,0;
  29. HWI-ST1106:755:H0V1MADXX:2:1101:1318:2150        Cluster_79602        XA:Z:Cluster_42584,+409,100M,1;
  30. HWI-ST1106:755:H0V1MADXX:2:1101:1383:2209        Cluster_18421      
  31. HWI-ST1106:755:H0V1MADXX:2:1101:1383:2209        Cluster_18421               
  32. HWI-ST1106:755:H0V1MADXX:2:1101:1676:2131        Cluster_69157        XA:Z:Cluster_29478,+828,100M,0;
  33. HWI-ST1106:755:H0V1MADXX:2:1101:1676:2131        Cluster_69157        XA:Z:Cluster_29478,-1069,100M,0;
  34. HWI-ST1106:755:H0V1MADXX:2:1101:1543:2146        Cluster_41540      
  35. HWI-ST1106:755:H0V1MADXX:2:1101:1543:2146        Cluster_41540      
  36. HWI-ST1106:755:H0V1MADXX:2:1101:1725:2175        Cluster_40792      
  37. HWI-ST1106:755:H0V1MADXX:2:1101:1725:2175        Cluster_40789        XA:Z:Cluster_40790,-372,100M,0;
  38. HWI-ST1106:755:H0V1MADXX:2:1101:1516:2211        Cluster_6748        XA:Z:Cluster_54877,-968,100M,3;
  39. HWI-ST1106:755:H0V1MADXX:2:1101:1516:2211        Cluster_6748        XA:Z:Cluster_54877,+711,100M,0;
  40. HWI-ST1106:755:H0V1MADXX:2:1101:1902:2088        Cluster_6876      
  41. HWI-ST1106:755:H0V1MADXX:2:1101:1902:2088        Cluster_6876        
复制代码

论坛徽章:
0
13 [报告]
发表于 2013-11-19 08:44 |只看该作者
你是学生物的吧,这个是二代测序的结果?
你的要求用一个Hash就可以实现的。

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
14 [报告]
发表于 2013-11-19 09:44 |只看该作者
我不是学生物的,但是是从事这一行业,初学者,不懂,请教具体的代码怎样实现,现在想两行两行的读取文件,之前是一行一行读取的,用了三个哈希还有好多判断语句,太占内存了,所以想两行两行的读取文件来达到优化的目的,具体代码请教一下???回复 13# lxb456811


   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
15 [报告]
发表于 2013-11-19 10:13 |只看该作者
亲?这样能明白了。
  1. #!/usr/bin/perl -w

  2. my ( %number, %pair );
  3. while (<DATA>) {
  4.     my %n1   = map { $_ => 1 } /(Cluster_\d+)/g;
  5.     my @n2   = <DATA> =~ /(Cluster_\d+)/g;
  6.     my @pair = grep { $n1{$_} } @n2;
  7.     $number{$_}++ for keys %n1, @n2;
  8.     $pair{$_}++ for @pair;
  9. }
  10. print join( "\t", $_, $number{$_} // 0, $pair{$_} // 0 ), "\n" for keys %number;

  11. __DATA__
  12. HWI-ST1106:755:H0V1MADXX:2:1101:1221:2186        Cluster_29235        XA:Z:Cluster_67972,+589,100M,0;
  13. HWI-ST1106:755:H0V1MADXX:2:1101:1221:2186        Cluster_29235        XA:Z:Cluster_67972,-771,100M,1;
  14. HWI-ST1106:755:H0V1MADXX:2:1101:1483:2147        Cluster_29235        
  15. HWI-ST1106:755:H0V1MADXX:2:1101:1483:2147        Cluster_67963  
复制代码
  1. Cluster_29235   3       1
  2. Cluster_67963   1       0
  3. Cluster_67972   2       1
复制代码
回复 1# 旋转小马


   

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
16 [报告]
发表于 2013-11-19 15:27 |只看该作者
嗯嗯,这样就实现了,不过对我这初学者来说,你写代码有点高端,看不大懂,当然如果把最后的输出文件中的第二列或者第三列由大到小进行一下排序那就最好了回复 15# pitonas


   

论坛徽章:
0
17 [报告]
发表于 2013-11-19 16:57 |只看该作者
回复 15# pitonas


    学习了。

my @n2   = <DATA> =~ /(Cluster_\d+)/g;
这句是不是将整个文件的cluster_*组成 @n2?
是否可以放在循环外?

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
18 [报告]
发表于 2013-11-20 15:12 |只看该作者
  1. #!/usr/bin/perl

  2. while (<>) {
  3.         if (!($.%2)) {
  4.                 while (/(Cluster_\d+)/g) {
  5.                         $hash1{$1}++;
  6.                         $hash2{$1}++ if $1 ~~ @array;
  7.                 }
  8.                 undef @array;
  9.         } else {
  10.                 while (/(Cluster_\d+)/g) {
  11.                         push @array,$1;
  12.                         $hash1{$1}++;
  13.                 }
  14.         }
  15. }
  16. END {
  17.         foreach (sort keys %hash1) {
  18.                 $hash2{$_} = 0 if ! $hash2{$_};
  19.                 print "$_\t$hash1{$_}\t$hash2{$_}\n";
  20.         }
  21. }
复制代码

论坛徽章:
0
19 [报告]
发表于 2013-11-21 00:10 |只看该作者
测试下这段代码:my $rst = {};
while (<FH>) {
        while (/(cluster_\d+)/ig) {       
                my $ID = $1;
               
                if (exists ${$rst}{$ID}) {
                        ${$rst}{$ID}{ts}++;
                        if (${$rst}{$ID}{ts}%2==0) {
                       
                        ${$rst}{$ID}{ds}++;
                        }
                next;
                }
                ${$rst}{$ID}{ts}++;
        }
       
}
while (my ($key,$value)=each %$rst) {
        print "$key                $$value{ts}                $$value{ds}\n";
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP