「单细胞转录组系列」如何从稀疏矩阵中提取部分数据进行分析

本文主要是介绍「单细胞转录组系列」如何从稀疏矩阵中提取部分数据进行分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这一篇文章是回答知识星球中一位星友的提问,她的电脑内存有限,无法直接使用所有数据,只能分析部分数据。

数据来源: https://content.cruk.cam.ac.uk/jmlab/atlas_data.tar.gz 解压缩之后,得到下面数据

数据清单

其中raw_counts.mtx是以稀疏矩阵格式存放的表达量数据,文件为6.5G, 用普通的文本编辑器无法打开,我们可以用Linux命令行的less查看数据存放形式

稀疏矩阵

显然这种格式并不是给人类阅读的,它存放的是非零数据的位置及其具体数值。当然,我们也不需要读懂,只需要R语言或者其他编程语言能够加载即可。

R语言的Matrix包的readMM函数就能够读取该文件

mt <- Matrix::readMM("raw_counts.mtx")
dim(mt)
# [1]  29452 139331
# 行为基因,列为细胞

这一步时间非常的久,我差不多花了10分钟时间。同时占用内存也非常可观,直接占用了8G左右的内存,不到16G内存的电脑可能根本无法读取。

format(object.size(mt), units = "Mb")
# "7377.8 Mb"

稀疏矩阵其实和普通矩阵看起来差不多,除了在显示的时候用.来表示0.

查看部分信息

还有一点就是,对于这种量级的数据,我们无法使用R自带的as.data.frame或者as.matrix将其转成普通的数据库或者矩阵,它会直接报错。因此我也不建议对其进行数据转换。

我们发现这里的矩阵并没有行名和列名,这部分信息需要额外从其他文件中读取

bc <- read.table("barcodes.tsv")
genes <- read.table("genes.tsv", sep = "\t")
dim(bc)
#[1] 139331      1
dim(genes)
#[1] 29452     2

不难发现barcode的行数等于矩阵的列数, gene的行数等于矩阵的行数, 也就是说矩阵的列是细胞,行是基因。

row.names(mt) <- genes$V1
colnames(mt) <- bc$V1
查看部分信息

建议:将此处得到matrix保存为Rds格式,方便后续加载

saveRDS(mt, "raw_matrix.Rds")

接下来就是根据元信息来提取对应的细胞,我们以提取"Mesenchyme"细胞为例进行讲解

meta.info <- read.table("meta.tab",sep = "\t", header = TRUE)cell.info <- meta.info[meta.info$celltype == "Mesenchyme", "cell"]
cell.info <- cell.info[!is.na(cell.info)]mt.sml <- mt[, cell.info]
format(object.size(mt.sml), units = "Mb")
# "280.9 Mb"

代码的核心逻辑为提取出对应行的细胞名,然后根据细胞名提取矩阵中的对应列。

过滤后的细胞就可以用作后续分析。不过在开始分析之前,让我们先把原始的矩阵给删掉,因为它实在是太占用内存了。

rm(mt); gc()

除了用元信息进行过滤外,你还可以通过随机抽样,从原始数据中抽出部分细胞,这样子也能够在内存吃紧的情况进行后续分析。

这篇关于「单细胞转录组系列」如何从稀疏矩阵中提取部分数据进行分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088132

相关文章

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient