搜索
楼主: Jimmy

生信编程直播第一题:人类基因组的外显子区域到底有多...

  [复制链接]

103

主题

133

帖子

860

积分

版主

Rank: 7Rank: 7Rank: 7

积分
860
发表于 2017-1-7 21:05:05 | 显示全部楼层
learnyoung 发表于 2017-1-5 22:02
059 python+R-冷洋
试了一些方法,一开始用存入字典的方法来去重,发现效率有点低,我的笔记本CORE_M的处理 ...

你的正则用的真巧妙
基因组,转绿组,肿瘤信息,生物统计,Python, Linux.
回复 支持 反对

使用道具 举报

103

主题

133

帖子

860

积分

版主

Rank: 7Rank: 7Rank: 7

积分
860
发表于 2017-1-7 21:19:46 | 显示全部楼层
learnyoung 发表于 2017-1-5 22:44
把外显子存入list,然后元组set一下去重,10s之内结果就出来了

他速度之所以慢,是不是因为每一个cds_location 都去list里面 判断了是否重复一变(大大增加计算量)?

还有最后为什么要+1呢,我不理解
基因组,转绿组,肿瘤信息,生物统计,Python, Linux.
回复 支持 反对

使用道具 举报

103

主题

133

帖子

860

积分

版主

Rank: 7Rank: 7Rank: 7

积分
860
发表于 2017-1-7 21:28:09 | 显示全部楼层
learnyoung 发表于 2017-1-6 09:24
去重的时候我们把已经计算过长度的外显子存入到字典dic中,下次一个外显子要计算长度时先判断他在不在字 ...

dic[exon]=1 把 exon 插入在1的位置,dic[exon]=2 把exon插入在2的位置。在这里位置无所谓~
基因组,转绿组,肿瘤信息,生物统计,Python, Linux.
回复 支持 反对

使用道具 举报

0

主题

2

帖子

92

积分

注册会员

Rank: 2

积分
92
发表于 2017-1-7 22:20:43 | 显示全部楼层
本帖最后由 Frank_LC 于 2017-1-7 22:26 编辑

我的思路:解决此题有两个思路:
1.使用hash或者键值对,或者python字典,将已有的去掉;没有的再计算   
2.”暴力算法“:将所有的基因,对应的Exon全部列出,然后去掉全部重复

思路1: 即为直播的思路,等待后续的学习思路2:和直播的代码思路相同,直接列出Exon,取起点和终点,算总长度

setwd("/Users/chang/desktop/learning for bioinformation streaming")
data1<-read.table("Current.ccds.txt",sep="\t",stringsAsFactors = F, header = T)[c(10)]
t1 <- Sys.time()
data2<-data1$X..3
data2<-data2[which(data2!='-')]  #remove lncRNA, etc...

exon_new<-NULL
for (i in 1:length(data2)){
  gene<-data2
  gene_new<- substr(gene, start=2, stop=nchar(gene)-1)
  exon<- strsplit(gene_new,", ")[[1]]
  exon_new<-c(exon,exon_new)
}                  #list all exons
exon_jieguo<-unique(exon_new)   # remove the repetitive sequence

sum_length<-0
for (l in 1:length(exon_jieguo)){
  exon_jisuan<-exon_jieguo[l]
  loc <- strsplit(exon_jisuan,"-")[[1]]
  a <- as.numeric(loc[2])-as.numeric(loc[1])
  sum_length<-sum_length+a
}                                             # count length of all exons
difftime(Sys.time(), t1, units = 'secs')

sum_length=36027374
缺点:1)运算时间,4min+,效率远比不上前面那样那个说“自己刚接触R”的哥们(PS:不管你们信不信,我是不行,简直开眼界,写的真好)2)过掉中间过程,无中间输出值    3)改掉循环可能效率能更提高    python 可以同一个思路,前面几页已有采用这个思路的代码,我今天暂时就不写了,后面再来补。              046 R + Python 昶
回复 支持 反对

使用道具 举报

1

主题

41

帖子

287

积分

中级会员

Rank: 3Rank: 3

积分
287
发表于 2017-1-7 22:28:57 | 显示全部楼层
zckoo007 发表于 2017-1-7 21:19
他速度之所以慢,是不是因为每一个cds_location 都去list里面 判断了是否重复一变(大大增加计算量)?

...

是的,每次都要判断exon在不在字典里,到了后面字典中存在上万的元素,判断一遍耗时很长
回复 支持 反对

使用道具 举报

1

主题

41

帖子

287

积分

中级会员

Rank: 3Rank: 3

积分
287
发表于 2017-1-7 22:29:49 | 显示全部楼层
zckoo007 发表于 2017-1-7 21:19
他速度之所以慢,是不是因为每一个cds_location 都去list里面 判断了是否重复一变(大大增加计算量)?

...

最后加1,你指的的是哪个部分?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2017-1-7 22:47:26 | 显示全部楼层
175-Perl-bobosingle
#之前有一点点perl基础,代码写的很低级。学到了不少小技巧
#我的计算结果:34891165

#!/usr/bin/perl

while(<>){
    next if /#/;
    @one_line = split;
    /\[(.*?)\]/;
    @one_exon = split(/,/,$1);
    foreach (@one_exon){
        @exon = split(/-/,$_);
        for($exon[0]..$exon[1]){
            $h{"$one_line[0]\t$_"}=1;
        }
    }
}
@array = keys %h;
$len=@array;
print $len;
回复 支持 反对

使用道具 举报

0

主题

3

帖子

48

积分

新手上路

Rank: 1

积分
48
发表于 2017-1-7 22:52:16 | 显示全部楼层
学号097


由于才加群,基础太差,目前在恶补基础知识。。。
回复 支持 反对

使用道具 举报

2

主题

34

帖子

777

积分

高级会员

Rank: 4

积分
777
发表于 2017-1-7 22:54:31 | 显示全部楼层
y461650833y 发表于 2017-1-7 19:48
你的代码确实快!怎么做到的。。。

开始写了一个代码处理非常慢,然后慢慢修改和优化,花了很多时间才有这么快的,先找出那几步运算效果非常慢,再想其他方法实现(搜索),改进就行了,R里避免用for对非常大的向量历遍(小向量可以),改用apply系列的函数和避免多个数据追加等这些小细节网上都有,可以利用解决这个问题的机会学习一下,感觉新接触的函数多试几次就行了,我也是新手,不过花的时间多了一点点,有时间再补充一下解题思路,大家一起学习!。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

80

积分

注册会员

Rank: 2

积分
80
发表于 2017-1-7 23:06:48 | 显示全部楼层
003+Python
本人刚刚开始接触Python,简明Python教程和廖雪峰老师的网站都还没有看完,独立完成作业确实有些困难,所以这次的工作主要是反复看了几遍老师的视频,把里面的每一行代码的意义基本都弄清楚了,感觉收获很大。在看视频的过程中,不懂的地方还是有的,比如for循环的用法,if语句的使用,哈希值,正则表达式等基本的内容还没有掌握,虽然能够看懂视频中代码的意思,但是离实际操作还有很远的路。
收获很大,了解了Python的基本使用思路,Python的使用也是需要调用模块,也是需要设置工作目录的,通过老师的讲解,能够真正的了解用Python解决问题的思路和方法,十分感谢老师的帮助。
今天我根据视频中的讲解,重新敲了一遍代码,代码如下:
QQ图片20170107221938.png
利用本地的cmd命令运行程序,得到了视频中一致的结果,结果如下:
QQ图片20170107214403.png
但是我在cmd的交互模式下,重新敲了一遍代码,但是却得到了不同的结果,确实不太清楚是什么原因,结果如下:
QQ图片20170107220357.png
总之,Python的学习之路才刚刚开始,要学习的还有很多,希望能有机会在老师的指导下和大家一起学习一起进步。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-11-19 22:15 , Processed in 0.044675 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.