免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6330 | 回复: 8
打印 上一主题 下一主题

求一个聚类的perl程序 [复制链接]

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
1 [报告]
发表于 2014-01-19 11:55 |显示全部楼层
只用1 比较 2-15
不用2 比较 3-15嘛?

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
2 [报告]
发表于 2014-01-19 13:37 |显示全部楼层
本帖最后由 xiumu2280 于 2014-01-19 13:38 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;


  5. my %hash_gene = map {chomp;(split)[1,0]}<DATA>;
  6. open (IN,"C:\\Users\\yy\\Desktop\\pearson_cor.txt");
  7. my %hash_new;
  8. while (<IN>) {
  9.         chomp;
  10.         my @data = split;
  11.         map {my $key1 = $_;map {push @{$hash_new{$key1}},$_."_".$hash_gene{$_}}@data}@data if @hash_gene{@data};
  12. }
  13. ############
  14. foreach my $key (keys %hash_new) {
  15.         my %hash_uniq;
  16.         @hash_uniq{@{$hash_new{$key}}}=1;
  17.         my @data = sort {$a->[1] <=> $b->[1]}map {[(split /_/)[0],(split /_/)[1]]}keys %hash_uniq;
  18.         print "~~~~~~\n";
  19.         print "$data[0][0]\t$data[0][1]\n";
  20.         map {@data[$_,$_+1] && ($data[$_+1][1]-$data[$_][1]) <= 3 && print "$data[$_+1][0]\t$data[$_+1][1]\n"}(0..$#data);
  21. }


  22. __DATA__
  23. 1   ENSG00000186891
  24. 2   ENSG00000186092
  25. 3   ENSG00000235249
  26. 4   ENSG00000187634
  27. 5   ENSG00000268179
  28. 6   ENSG00000188976
  29. 7   ENSG00000187961
  30. 8   ENSG00000187583
  31. 9   ENSG00000187642
  32. 10  ENSG00000188290
  33. 11  ENSG00000187608
  34. 12  ENSG00000188157
  35. 13  ENSG00000237330
  36. 14  ENSG00000131591
  37. 15  ENSG00000162571
复制代码
  1. ~~~~~~
  2. ENSG00000186092 2
  3. ENSG00000268179 5
  4. ~~~~~~
  5. ENSG00000187961 7
  6. ENSG00000188290 10
  7. ~~~~~~
  8. ENSG00000186092 2
  9. ENSG00000235249 3
  10. ENSG00000187634 4
  11. ENSG00000268179 5
  12. ~~~~~~
  13. ENSG00000187961 7
  14. ENSG00000187642 9
  15. ENSG00000188290 10
  16. ~~~~~~
  17. ENSG00000186092 2
  18. ENSG00000187634 4
  19. ~~~~~~
  20. ENSG00000186092 2
  21. ENSG00000235249 3
  22. ~~~~~~
  23. ENSG00000187961 7
  24. ENSG00000187642 9
复制代码

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
3 [报告]
发表于 2014-01-19 21:18 |显示全部楼层
大神,这是我写的啊 {:2_171:} 回复 4# jzp520520


   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
4 [报告]
发表于 2014-01-19 21:55 |显示全部楼层
这个是哈希切片的写法  回复 6# jzp520520


   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
5 [报告]
发表于 2014-01-20 08:51 |显示全部楼层
感谢大神解答··· 讲解的太透彻了
自己忽略好多
回复 11# rubyish


   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
6 [报告]
发表于 2014-01-20 08:52 |显示全部楼层
好的,我改改看,逻辑这样看来似乎有问题了回复 12# tanger_009


   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
7 [报告]
发表于 2014-01-20 08:55 |显示全部楼层
本帖最后由 xiumu2280 于 2014-01-20 17:01 编辑

你看rubyish的解释···
那个很透彻
if @hash_gene{@data}效果是 defined $hash_gene{$data[0]} && defined $hash_gene{$data[1]}
回复 8# jzp520520


   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
8 [报告]
发表于 2014-01-20 12:08 |显示全部楼层
本帖最后由 xiumu2280 于 2014-01-20 13:06 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;

  5. my %hash_gene = map {chomp;(split)[1,0]}<DATA>;
  6. open (IN,"C:\\Users\\Administrator\\Desktop\\test\\2014_1_18\\pearson_cor.txt");
  7. my %hash_new;
  8. while (<IN>) {
  9.         chomp;
  10.         my @data = split;
  11.         map {my $key1 = $_;map {push @{$hash_new{$key1}},$_."_".$hash_gene{$_}}@data}@data if exists $hash_gene{$data[0]} && exists $hash_gene{$data[1]};
  12. }
  13. my @array_new;
  14. map {my %hash;
  15.         my $key1 = $_;
  16.         my @datayy;
  17.         @hash{@{$hash_new{$key1}}}=1;
  18.         map {%hash ~~ @{$hash_new{$_}} && push @datayy,$_}keys %hash_new;
  19.         push @array_new,[@datayy];
  20.         }keys %hash_new;
  21. my %hash_jon;
  22. map {my $line = $_;my $new = join "_",sort @$line;$hash_jon{$new}=1}@array_new;
  23. ############
  24. foreach my $key (keys %hash_jon) {
  25.                 my @data1 = split /_/,$key;
  26.         my @data = sort {$a->[1] <=> $b->[1]}map {[$_,$hash_gene{$_}]}@data1;
  27.         print "~~~~~~\n";
  28.         ($data[1][1]-$data[0][1]) <= 3 && print "$data[0][0]\t$data[0][1]\n";
  29.         map {@data[$_,$_+1] && ($data[$_+1][1]-$data[$_][1]) <= 3 && print "$data[$_+1][0]\t$data[$_+1][1]\n"}(0..$#data);
  30. }


  31. __DATA__
  32. 1   ENSG00000186891
  33. 2   ENSG00000186092
  34. 3   ENSG00000235249
  35. 4   ENSG00000187634
  36. 5   ENSG00000268179
  37. 6   ENSG00000188976
  38. 7   ENSG00000187961
  39. 8   ENSG00000187583
  40. 9   ENSG00000187642
  41. 10  ENSG00000188290
  42. 11  ENSG00000187608
  43. 12  ENSG00000188157
  44. 13  ENSG00000237330
  45. 14  ENSG00000131591
  46. 15  ENSG00000162571
复制代码
  1. ~~~~~~
  2. ENSG00000187961 7
  3. ENSG00000187642 9
  4. ENSG00000188290 10
  5. ~~~~~~
  6. ENSG00000186092 2
  7. ENSG00000235249 3
  8. ENSG00000187634 4
  9. ENSG00000268179 5
复制代码
楼主~程序还是有问题
当2和9有关联的这种情况下,无法去冗余
好纠结
可能是我想的复杂了,或者跳进自己固化的模式出不来。
代码又复杂,又麻烦。

可能过段时间会有别的想法···

期待大神

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
9 [报告]
发表于 2014-01-20 12:08 |显示全部楼层
本帖最后由 xiumu2280 于 2014-01-20 13:06 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;

  5. my %hash_gene = map {chomp;(split)[1,0]}<DATA>;
  6. open (IN,"C:\\Users\\Administrator\\Desktop\\test\\2014_1_18\\pearson_cor.txt");
  7. my %hash_new;
  8. while (<IN>) {
  9.         chomp;
  10.         my @data = split;
  11.         map {my $key1 = $_;map {push @{$hash_new{$key1}},$_."_".$hash_gene{$_}}@data}@data if exists $hash_gene{$data[0]} && exists $hash_gene{$data[1]};
  12. }
  13. my @array_new;
  14. map {my %hash;
  15.         my $key1 = $_;
  16.         my @datayy;
  17.         @hash{@{$hash_new{$key1}}}=1;
  18.         map {%hash ~~ @{$hash_new{$_}} && push @datayy,$_}keys %hash_new;
  19.         push @array_new,[@datayy];
  20.         }keys %hash_new;
  21. my %hash_jon;
  22. map {my $line = $_;my $new = join "_",sort @$line;$hash_jon{$new}=1}@array_new;
  23. ############
  24. foreach my $key (keys %hash_jon) {
  25.                 my @data1 = split /_/,$key;
  26.         my @data = sort {$a->[1] <=> $b->[1]}map {[$_,$hash_gene{$_}]}@data1;
  27.         print "~~~~~~\n";
  28.         ($data[1][1]-$data[0][1]) <= 3 && print "$data[0][0]\t$data[0][1]\n";
  29.         map {@data[$_,$_+1] && ($data[$_+1][1]-$data[$_][1]) <= 3 && print "$data[$_+1][0]\t$data[$_+1][1]\n"}(0..$#data);
  30. }


  31. __DATA__
  32. 1   ENSG00000186891
  33. 2   ENSG00000186092
  34. 3   ENSG00000235249
  35. 4   ENSG00000187634
  36. 5   ENSG00000268179
  37. 6   ENSG00000188976
  38. 7   ENSG00000187961
  39. 8   ENSG00000187583
  40. 9   ENSG00000187642
  41. 10  ENSG00000188290
  42. 11  ENSG00000187608
  43. 12  ENSG00000188157
  44. 13  ENSG00000237330
  45. 14  ENSG00000131591
  46. 15  ENSG00000162571
复制代码
  1. ~~~~~~
  2. ENSG00000187961 7
  3. ENSG00000187642 9
  4. ENSG00000188290 10
  5. ~~~~~~
  6. ENSG00000186092 2
  7. ENSG00000235249 3
  8. ENSG00000187634 4
  9. ENSG00000268179 5
复制代码
楼主~程序还是有问题
当2和9有关联的这种情况下,无法去冗余
好纠结
可能是我想的复杂了,或者跳进自己固化的模式出不来。
代码又复杂,又麻烦。

可能过段时间会有别的想法···

期待大神
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP