前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一行命令将count转为CPM/TPM/FPKM

一行命令将count转为CPM/TPM/FPKM

作者头像
生信技能树
发布于 2023-02-27 13:42:22
发布于 2023-02-27 13:42:22
3.9K00
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行
实现代码

一行命令将count转为CPM/TPM/FPKM 的软件为rnanorm,是一个基于Python开发的命令行工具。安装可以通过命令安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install rnanorm

我以featureCounts的输出文件进行举例,用featureCounts对进行基因count计数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
featureCounts -T 10 -t exon -g gene_id -Q 10 --primary -p \
    -a gencode.vM25.annotation.gtf -F GTF -o sample.count \
    mapping/*.fil.bam 

得到的gene count在sample.count文件里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# tail -n +2 sample.count 是排除第一行
$ tail -n +2 sample.count | sed '1s/Geneid/FEATURE_ID/g' | cut -f 1,7- > sample.count.tsv
$ head sample.count.tsv
FEATURE_ID      mapping/RNA.fb.e11.5.rep1.fil.bam       mapping/RNA.fb.e11.5.rep2.fil.bam       mapping/RNA.fb.e16.5.rep1.fil.bam       mapping/RNA.fb.e16.5.rep2.fil.bam
ENSMUSG00000102693.1    1       0       0       0
ENSMUSG00000064842.1    1       0       0       0
ENSMUSG00000051951.5    6       11      16      16
ENSMUSG00000102851.1    2       0       0       0
ENSMUSG00000103377.1    1       2       3       0
ENSMUSG00000104017.1    1       1       0       0
ENSMUSG00000103025.1    0       3       2       2
ENSMUSG00000089699.1    0       0       0       0
ENSMUSG00000103201.1    0       1       2       1

用cut将基因ID一列,和count数值的列提取出来。用sed将Geneid换成FEATURE_ID,因为当前版本rnanorm( 1.5.1)要求第一列的基因ID列名必须为FEATURE_ID

然后就是一行代码将count转为CPM/TPM/FPKM。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rnanorm sample.count.tsv --annotation gencode.vM25.annotation.gtf \
    --cpm-output sample.count.cpm.tsv
    --tpm-output sample.count.tpm.tsv \
    --fpkm-output sample.count.fpkm.tsv \
  • 位置参数为基因count文件
  • --annotation 基因组注释GTF文件
  • --cpm-output CPM输出文件
  • --tpm-output TPM输出文件
  • --fpkm-output FPKM输出文件

后面的前面

RNA-Seq测序得到的fastq数据比对至参考基因组,得到SAM/BAM文件,然后进行read count计数,得到基因表达信息。然而由于不同基因长度不同,基因长,自然容易获得更read count;不同批次数据测序量不同,数据测序量多,自然read count就会高了。所以不同基因表达量不能直接进行比较,需要进行标准化。

要对基因长度进行矫正,就除以基因长度:

  • 1000bp长度基因A count=1000, 矫正后1000/1000=1
  • 5000bp长度的基因B count=5000, 矫正后5000/5000=1

要对测序深度进行矫正,就除以总测序量:

  • 总read count=100000, 基因A read count 1000, 矫正后1000/100000
  • 总read count=200000, 基因B read count 2000, 矫正后2000/200000

CPM

CPM (count per million),对测序深度做了一个矫正。

CPM = (gene_read_count / total_count ) * 10^6

至于为啥乘一个million(10^6),我猜大概是因为gene_read_count / total_count数值太小了,不方便人查看,又英文中计数单位有个,十,百,千,百万,十亿。十亿(billion)较大了, 千(thousand)又太小了, million这个数量级刚好差不多,就乘这么个数值,在百万层级看基因表达量。

RPKM

RPKM(reads per kilobase per million),对测序深度和长度做了一个矫正。用于单端测序数据。

RPKM = (gene_read_count / (total_count*gene_length) * 10^6 * 10^3

基因count除以总read count,除以gene长度。然后避免数值太小,根据测序深度大小乘10^6, 基因长度就乘以一个10^3。

FPKM

RPKM(fragments per kilobase per million) 用于双端数据,一个fragment是一对reads。故FPKM = RPKM / 2

TPM

TPM(transcript per million), 基因FPKM 占总的FPKM的比例, TPM衡量基因在样本中的相对表达量,对同一个基因不同样本,其FPKM可能相同,但相对所有基因而言,其在不同样本中可能所占比例不同。

TPM = gene_fpkm / total_fpkm * 10^6

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Node.js 搭建一个 API 接口服务(实战)
因为最近打算自己搭建一个自己的博客系统,用来记录日常的学习和提升一下写作水平,所以能就打算自己搭建一下前后端项目。在网上找了下,也没有找到合适(现成)的项目,所以就打算自己动手来搭建一下。这篇文章主要描述如何搭建一个node的API接口服务。
五月君
2021/01/27
9K0
Node.js 搭建一个 API 接口服务(实战)
node-koa 框架 项目搭建 🏗
---- 这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」 代码[链接🔗]:(https://gitee.com/yang-yiming1234/koa/tree/master) 持续更新~ 简介 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了
用户4793865
2023/01/12
3.6K0
Egg.js 笔记二 目录结构和内置对象
Application 是全局应用对象,在一个应用中,只会实例化一个,它继承自 Koa.Application,在它上面我们可以挂载一些全局的方法和对象。我们可以轻松的在插件或者应用中扩展 Application 对象。
tonglei0429
2019/07/22
1.3K0
基于Vue2和Node.js的反欺诈系统设计与实现
最近包工头喊农民工小郑搬砖,小郑搬完砖后沉思片刻,决定写篇小作文分享下,作为一个初学者的全栈项目,去学习它的搭建,到落地,再到部署维护,是非常好的。
江涛学编程
2021/09/01
2.3K0
基于Vue2和Node.js的反欺诈系统设计与实现
Egg-TS-Sequelize的使用
Egg 官方文档:https://www.eggjs.org/zh-CN/tutorials/sequelize
程序员NEO
2023/09/28
3340
Egg-TS-Sequelize的使用
入门 | egg.js 入门之egg-jwt
这里创建并安装完成以后,需要再次初始化俩包,分别为egg-cors与egg-jwt token 生成的验证包
mySoul
2020/08/03
1.5K0
基于 egg.js 构建 graphql api 服务
Egg.js 简介:https://eggjs.org/zh-cn/index.html
4O4
2022/04/25
1.9K0
基于 egg.js 构建 graphql api 服务
koa+react+sequelize搭建博客后台(附源码)
使用koa+react+sequelize搭建博客系统,这篇文章讲述koa+sequelize的开发过程。支持增删改查等功能。
coder_koala
2020/02/20
1.5K0
koa+react+sequelize搭建博客后台(附源码)
eggjs快速入门
每个中间件就像是洋葱的一层,所有的请求经过一个中间件都会执行两次,这样可以非常方便的后置处理逻辑。
不作声
2020/07/06
1.3K0
Serverless + Egg.js 后台管理系统实战
作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个非常优秀的企业级框架,它的高扩展性和丰富的插件,极大的提高了开发效率。开发者只需要关注业务就好,比如要使用 redis,引入 egg-redis 插件,然后简单配置就可以了。正因为如此,第一次接触它,我便喜欢上了它,之后也用它开发过不少应用。
网站运维工程师
2020/03/11
5K0
Node.js ORM 框架 sequelize 实践
本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 Node.js ORM 框架 sequelize 实践 最近在做积木系统2.0,这次使用的nodejs
IMWeb前端团队
2018/01/08
3.7K0
钢材信息小程序开发总结(三) ---EggJS
使用access_token请求获取前一天的用户画像 注意: 在零点前后数据会获取不到
治电小白菜
2020/08/25
1.4K0
Egg.js试水 - 文章增删改查【前后端分离】
上一篇文章讲的是后端渲染的项目 - Egg.js 试水 - 天气预报。但是没有引入数据库。这次的试水项目是文章的增删改查,将数据库引进,并且实现前后端分离。
Jimmy_is_jimmy
2020/10/15
3.4K0
前端构建 DevOps - 搭建 DevOps 基础平台(上)
在上一个博客中,已经通过 Egg 对 Gitlab Api 进行了基础的封装,本文将会围绕 DevOps 流程介绍项目设计(偏后台),需要读者具备一定的后端知识储备。
Cookieboty
2020/10/23
1.7K0
前端构建 DevOps - 搭建 DevOps 基础平台(上)
治电EggJS开发规范
函数/方法注释放置于函数/方法的上方,主要描述函数/方法功能以及参数类型,参数和返回值说明
治电小白菜
2020/08/25
4.8K0
治电EggJS开发规范
【愚公系列】2022年10月 微信小程序-电商项目-微信支付后端功能实现(node版)
微信支付是腾讯集团旗下的第三方支付平台,致力于为用户和企业提供安全、便捷、专业的在线支付服务。以“微信支付,不止支付”为核心理念,为个人用户创造了多种便民服务和应用场景。微信支付为各类企业以及小微商户提供专业的收款能力,运营能力,资金结算解决方案,以及安全保障。用户可以使用微信支付来购物、吃饭、旅游、就医、交水电费等。企业、商品、门店、用户已经通过微信连在了一起,让智慧生活,变成了现实。
愚公搬代码
2022/10/31
9620
【愚公系列】2022年10月 微信小程序-电商项目-微信支付后端功能实现(node版)
前后端全部用 js 开发是什么体验(Hybrid + Egg.js经验分享)
对于我们而言,在项目初期我们并没有对应两个端的开发人员,并且初期的版本需要大量的迭代和测试,所以在这种条件下采用原生开发是不合适的
五月君
2020/06/28
3K0
前后端全部用 js 开发是什么体验(Hybrid + Egg.js经验分享)
使用 Egg + Vue 开发在线文档管理平台(8000字,手把手教程)
团队中会遇到在线文档管理的需求,包括技术文档,接口文档, excel 文档,和产品原型的托管等需求,一直没有找到合适的开源项目来满足需求,所以动手实现了个文档管理系统(实现起来并不复杂,该教程只是提供思路,并非最佳实践)
一只图雀
2020/12/16
4.1K0
使用 Egg + Vue 开发在线文档管理平台(8000字,手把手教程)
Web前端学习 第8章 egg基础教程4 sequelize
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。
学习猿地
2020/06/24
1.4K0
Sequelize 系列教程之一对一模型关系
Sequelize 是一个基于 Promise 的 Node.js ORM,目前支持 Postgres、MySQL、SQLite 和 Microsoft SQL Server。它具有强大的事务支持,关联关系、读取和复制等功能。在阅读本文前,如果你对 Sequelize 还不了解,建议先阅读 Sequelize 快速入门 这篇文章。
阿宝哥
2019/11/06
8.7K0
推荐阅读
相关推荐
Node.js 搭建一个 API 接口服务(实战)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验