免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-19 00:52 |只看该作者 |倒序浏览
我有两个文件,第一个文件(posi_infor.txt)是基因的位置信息。1到15是基因的顺序编号,每个数字后面的是基因的名称。
第二个文件(pearson_cor.txt)是pearson检验相关的基因对。比如ENSG00000186092        ENSG00000235249,说明这两个基因具有相关性。

下面开始执行一种算法,叫做动态相关性聚类算法:
根据基因的位置信息(posi_infor.txt),从基因1依次去比较后面的基因(即基因2-15),如果基因间的两两比较存在于pearson相关对立面,就把这些基因聚类,归于同一个类别。但是这里面有个条件,同一个类别里面的基因编号顺序之间的gap不能大于3. 举个例子,假如基因1与基因2,3,4,9存在pearson相关对。那么基因1,2,3,4可以归为同一类别,但是不能把基因9归为此类,因为基因9与基因4之间的gap是4(即四个基因,基因5,6,7,8)。

还请大仙帮忙。我想了两天了。脑子太笨,实在搞不出来了。
谢谢啊

测试文件.rar

423 Bytes, 下载次数: 33

论坛徽章:
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 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
3 [报告]
发表于 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
复制代码

论坛徽章:
0
4 [报告]
发表于 2014-01-19 21:08 |只看该作者
回复 3# xiumu2280


    大神!这是你自己写的?还是流程里面的?膜拜!{:2_171:}

论坛徽章:
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-19 21:18 |只看该作者
大神,这是我写的啊 {:2_171:} 回复 4# jzp520520


   

论坛徽章:
0
6 [报告]
发表于 2014-01-19 21:34 |只看该作者
回复 5# xiumu2280 [/

碉堡了!我请教一下:if @hash_gene{@data};@hash_uniq{@{$hash_new{$key}}}=1;这两句不懂,可否解释下?

论坛徽章:
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-19 21:55 |只看该作者
这个是哈希切片的写法  回复 6# jzp520520


   

论坛徽章:
0
8 [报告]
发表于 2014-01-19 23:06 |只看该作者
回复 7# xiumu2280

哈希切片没用过,也很少看到,我的理解是这样的,不知对不对,请大神赐教!
if @hash_gene{@data};
等效于
while (@data) {
        if (defined $hash_gene{$_} || exists $hash_gene{$_}) {
                BLOCK;
        }
}

@hash_uniq{@{$hash_new{$key}}}=1;
等效于
while (@{$hash_new{$key}}) {
        $hash_uniq{$_}=1;
}

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
9 [报告]
发表于 2014-01-20 00:14 |只看该作者
不知对不对?
2 类别
2, 3, 4, 5
7, 9, 10

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
10 [报告]
发表于 2014-01-20 01:23 |只看该作者
本帖最后由 rubyish 于 2014-01-19 21:29 编辑

d e l ~ ~ ~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP