python和R写出表达矩阵为稀疏矩阵matrix.mtx.gz的方法

###python部分
加载读取稀疏矩阵的mmread和构建数据框的pandas

from scipy.io import mmread
import pandas as pd
import numpy as np

读取10X单细胞矩阵文件: matrix.mtx.gz(coo_matrix格式的sparse 矩阵) 、barcodes.tsv.gz (构成单细胞密集表达矩阵的列名,对应测序的细胞样本)、features.tsv.gz (构成单细胞密集表达矩阵的行名,是细胞的表达基因ID或symbolName)

_index = pd.read_csv("./features.tsv.gz", index_col=0,sep = '\t',header=None)
_index.index.name =None #把索引列的列名去掉
_col   = pd.read_csv("./barcodes.tsv.gz", index_col=0,sep = '\t',header=None)
_col.index.name =None #把列名向量的名去掉
_data  = mmread("./matrix.mtx.gz").todense()

将稀疏矩阵转换成DataFrame用pandas处理:

rna_count = pd.DataFrame(data=_data,index = _index.index,columns=_col.index)
print(rna_count .iloc[0:3,0:2])
print("gene_ID_len : "+str(rna_count .shape[0]))  #获取表达矩阵基因长度

image.png

对pd类型的表达矩阵简单标准化处理:

rna_count  = ( rna_count +1 ).applymap(np.log2)

对处理后的DataFrame保存出同cellranger格式的sparse matrix等相关文件

import os
import shutil 
import gzip
import scipy
import time
fmt='%Y-%m-%d %a %H:%M:%S'
Date=time.strftime(fmt,time.localtime(time.time()))
outdir = ".Matrix_reAnno"
os.makedirs(outdir, exist_ok=True)
##save matrix.mtx.gz
reAnno_count_sparse_mtx = scipy.sparse.coo_matrix(rna_countrna_count_combine.values)
scipy.io.mmwrite(os.path.join(outdir,'matrix.mtx'),
                 reAnno_count_sparse_mtx,
                 comment='This counts is regenerate and remapped symbol by zhuzhiyong \n Generate DateTime::'+str(Date)
                )
with open(os.path.join(outdir,'matrix.mtx'),'rb') as mtx_in:
        with gzip.open(os.path.join(outdir,'matrix.mtx') + '.gz','wb') as mtx_gz: #创建一个读写文件'matrix.mtx.gz',用以将matrix.mtx拷贝过去
            shutil.copyfileobj(mtx_in, mtx_gz)
os.remove(os.path.join(outdir,'matrix.mtx'))
##save barcodes.tsv.gz
barcodesFile = pd.DataFrame(rna_countrna_count_combine.columns)
barcodesFile.to_csv(os.path.join(outdir,"barcodes.tsv.gz"),sep='\t',header =False,index=False)
##save features.tsv.gz
featuresFile = pd.DataFrame(rna_countrna_count_combine.index)
featuresFile.to_csv(os.path.join(outdir,"features.tsv.gz"),sep='\t',header =False,index=False)

###R部分
写出expr counts 为matrix.mtx.gz

library(Matrix)
sparse.gbm <- Matrix(scRNA@assays$RNA@counts, sparse = T )
write(x = sparse.gbm@Dimnames[[1]], file = "features.tsv")
write.table(scRAN@meta.data, file = 'scRNA_ref_meta.tsv', sep = '\t', quote = FALSE)
writeMM(obj = sparse.gbm, file="matrix.mtx")
system("gzip matrix.mtx")  #创建压缩文件并删除原文件 matrix.mtx.gz
scales::number_bytes(file.size("matrix.mtx.gz"))
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,我们可以使用以下代码读取数据: ```r library(Matrix) library(ggplot2) # 读取数据 mat <- readMM("matrix.mtx") genes <- read.table("genes.tsv", stringsAsFactors = FALSE) barcodes <- read.table("barcodes.tsv", stringsAsFactors = FALSE) # 转换成稠密矩阵 mat_dense <- as.matrix(mat) # 设置行名和列名 rownames(mat_dense) <- genes$V2 colnames(mat_dense) <- barcodes$V1 ``` 接下来,我们可以对表达矩阵进行主成分分析(PCA): ```r # 对表达矩阵进行主成分分析 pca <- prcomp(t(mat_dense)) # 提取前两个主成分 pca_df <- data.frame(PC1 = pca$x[,1], PC2 = pca$x[,2], row.names = colnames(mat_dense)) # 绘制散点图 ggplot(pca_df, aes(x = PC1, y = PC2)) + geom_point() + theme_classic() ``` 最后,我们可以画出第一、第二主成分的散点图。 ### 回答2: R是一种用于统计分析和数据可视化的编程语言。对于给定的PBMCs单细胞转录组数据,我们可以利用R中的Bioconductor包(filtered_gene_bc_matrices)来读取此数据集的基因和细胞条形码信息,并将稀疏矩阵(matrix.mtx)转换为表达矩阵。 首先,我们可以使用read.table函数来读取genes.tsv和barcodes.tsv文件,得到基因和细胞条形码的信息,并将其存储在相应的变量中。 ```R genes <- read.table("genes.tsv", header = TRUE) barcodes <- read.table("barcodes.tsv", header = TRUE) ``` 接下来,我们需要安装和加载相应的包来处理单细胞转录组数据并进行主成分分析。安装和加载Seurat包可以方便地对单细胞数据进行处理和分析。 ```R install.packages("Seurat") library(Seurat) ``` 现在,我们可以使用CreateSeuratObject函数创建一个Seurat对象,并将转录组数据(matrix.mtx)、基因和细胞条形码信息传递给它。 ```R data <- Read10X(data.dir = "filtered_gene_bc_matrices") pbmc <- CreateSeuratObject(counts = data, min.cells = 3, min.features = 200) pbmc <- NormalizeData(pbmc) pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000) pbmc <- ScaleData(pbmc) pbmc <- RunPCA(pbmc, npcs = 30) ``` 最后,我们可以提取主成分分析的结果,并以散点图的形式展示第一和第二主成分的分布。 ```R pc1 <- pbmc@dr$pca@cell.embeddings[,1] pc2 <- pbmc@dr$pca@cell.embeddings[,2] plot(pc1, pc2, main = "PCA", xlab = "PC1", ylab = "PC2") ``` 通过以上步骤,我们可以根据genes.tsv和barcodes.tsv信息将稀疏矩阵matrix.mtx转换为表达矩阵,并使用主成分分析来可视化PBMCs单细胞转录组数据的主要变化。 ### 回答3: 首先,我们需要使用genes.tsv文件和barcodes.tsv文件中的信息来解析稀疏矩阵matrix.mtx并转换成表达矩阵。genes.tsv文件包含基因名称和对应的索引值,而barcodes.tsv文件则包含细胞的唯一标识。 我们可以使用R语言中的read.table函数读取genes.tsv和barcodes.tsv文件,并将文件中的内容分别存储在一个数据框中。然后,我们可以使用Matrix包中的readMM函数来读取matrix.mtx文件,并将其转换成一个稀疏矩阵。接下来,我们可以使用sparsity函数来计算稀疏矩阵的稀疏度,确保转换成功。 一旦我们得到了稀疏矩阵,我们可以使用drop0函数将稀疏矩阵中的零值删除。然后,我们可以使用Matrix包中的t函数,将稀疏矩阵进行转置,以便基因对应于行,而细胞对应于列。 然后,我们可以使用prcomp函数来进行主成分分析(PCA)。我们可以将转换后的表达矩阵作为输入,并指定n=2,以仅保留前两个主成分。然后,我们可以使用biplot函数来绘制第一和第二主成分。 最后,我们可以使用plot函数来可视化第一和第二主成分的结果,其中x轴对应于第一主成分,y轴对应于第二主成分。 总结起来,我们首先通过解析genes.tsv和barcodes.tsv文件来将稀疏矩阵matrix.mtx转换成表达矩阵。然后,我们使用主成分分析(PCA)来计算前两个主成分,并使用绘图函数将其可视化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值