• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

    ¥1,000.00 ¥100.00
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

      ¥1,000.00 ¥100.00
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      老俊俊的生信笔记

      • 首页
      • 博客
      • 老俊俊的生信笔记
      • windows 也能快速处理 BAM/SAM 大型文件

      windows 也能快速处理 BAM/SAM 大型文件

      • 发布者 weinfoadmin
      • 分类 老俊俊的生信笔记
      • 日期 2022年4月28日
      测试开头

      windows 也能快速处理 BAM/SAM 大型文件

      没关注?伸出手指点这里—

      windows 也能快速处理 BAM/SAM 大型文件
      windows 也能快速处理 BAM/SAM 大型文件

      1引言

      面对高通量测序数据,我们会经常碰到处理 BAM/SAM 这些大型文件,python 则有 pysam 库支持处理,但是只能在 linux 系统里安装,windows 里基本上装不了,感觉还是不太有好的。

      如果是 sam 文件则可以使用 for 循环逐行处理应付, 但是 bam 就不行了。Rsamtools 包则可以帮助我们在 R 里面处理 bam/sam 文件,但是遇到 大文件,多文件 则效率明显降低。

      Julia 社区在逐渐强大起来,其中开发了 XAM package 来处理 bam/sam 文件,感觉速度还是挺快的,在 windows 系统里可以使用。

      2python 读取

      这里有 1.8G 的 sam 文件, 我们先使用 python 的 for 循环逐行读取,对 reads 的长度进行计数保存到字典:

      len_dict = {}
      with open("../5.map-data/SRR7471228.sam",'r') as input:
          for line in input:
              if line.startswith('@'):
                  continue
              fileds = line.split()
              if fileds[2] == '*':
                  continue
              length = len(fileds[9])
              if length not in len_dict:
                  len_dict[length] = 1
              else:
                  len_dict[length] += 1

      # sort dict
      len_dict_sorted = list(len_dict.items())
      len_dict_sorted.sort()
      windows 也能快速处理 BAM/SAM 大型文件

      时间为 21.3 秒。

      3Julia 读取

      实现的代码比较类似:

      notin 可以打出∉符号。

      len_dict = Dict()
      for line in eachline("../5.map-data/SRR7471228.sam")
          if startswith(line,"@")
              continue
          end
          fileds = split(line)
          if fileds[2] == '*'
              continue
          end
          # julia is 1-based
          seq_length = length(fileds[10])
          # println(seq_length)
          # break
          if seq_length ∉ keys(len_dict)
              len_dict[seq_length] = 1
          else
              len_dict[seq_length] += 1
          end
      end

      # sorted dict by read length
      len_dictSorted = sort(len_dict)
      windows 也能快速处理 BAM/SAM 大型文件

      可以看到运行了 55.9s,居然比 python 慢了两倍多!给我整不会了。

      4XAM 读取

      使用 XAM 包读取,依然是 Julia 语言:

      using XAM

      len_dict = Dict()

      # Open a SAM file.
      reader = open(SAM.Reader, "../5.map-data/SRR7471228.sam")

      # Iterate over SAM records.
      for record in reader
          # `record` is a SAM.Record object.
          if SAM.ismapped(record)
              # Print the mapped position.
              read_length = SAM.seqlength(record)
              if read_length ∉ keys(len_dict)
                  len_dict[read_length] = 1
              else
                  len_dict[read_length] += 1
              end
          end
      end

      # Close the SAM file.
      close(reader)

      # sorted dict by read length
      len_dictSorted = sort(len_dict)
      windows 也能快速处理 BAM/SAM 大型文件

      只花了 11.6s,比 python 快了 1 倍。


      另外一种更加快速的读取方式:

      using XAM

      len_dict = Dict()

      reader = open(SAM.Reader, "../5.map-data/SRR7471228.sam")
      record = SAM.Record()
      while !eof(reader)
          empty!(record)
          read!(reader, record)
          # do something
          if SAM.ismapped(record)
              # Print the mapped position.
              read_length = SAM.seqlength(record)
              if read_length ∉ keys(len_dict)
                  len_dict[read_length] = 1
              else
                  len_dict[read_length] += 1
              end
          end
      end

      # sorted dict by read length
      len_dictSorted = sort(len_dict)
      windows 也能快速处理 BAM/SAM 大型文件

      可以看到已经快到 8.6s 了。还是非常不错的。

      5结尾

      感兴趣的小伙伴可以尝试一下。



      windows 也能快速处理 BAM/SAM 大型文件


      欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦,数据代码已上传至QQ群,欢迎加入下载。

      群二维码:

      windows 也能快速处理 BAM/SAM 大型文件


      老俊俊微信:


      windows 也能快速处理 BAM/SAM 大型文件

      知识星球:


      windows 也能快速处理 BAM/SAM 大型文件


      所以今天你学习了吗?

      今天的分享就到这里了,敬请期待下一篇!

      最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!

      如果觉得对您帮助很大,赏杯快乐水喝喝吧!



       往期回顾 





      ◀Julia 笔记之变量-整数-浮点数

      ◀cell 代码优化测试复现二 (终)

      ◀cell 代码优化测试复现一

      ◀R 语言绘制二维密度相关性散点图

      ◀Julia 的下载安装及配置

      ◀使用 python 进行 Ribo–seq 质控分析 二

      ◀deeptools 结果重新绘图

      ◀使用 python 进行 Ribo–seq 质控分析 一

      ◀跟着 Cell 学 Ribo–seq 分析 四 (终)

      ◀跟着 Cell 学 Ribo–seq 分析 三 (Metagene Plot)

      ◀...

      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      R语言学习:dplyr包数据操作
      2022年4月28日

      下一篇文章

      Nature 文章主图结果复现
      2022年4月29日

      你可能也喜欢

      8-1651542331
      跟着Nature学绘图(2) 箱线图-累积分布曲线图
      2 5月, 2022
      9-1651542322
      Julia 笔记之字符串
      2 5月, 2022
      0-1651542343
      Julia 笔记之数学运算和初等函数
      1 5月, 2022

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?