很多时候从数据库下载的处理过的各种单细胞数据格式都是.h5ad或者.h5。
本篇内容就先给一个处理.h5ad文件的脚本。
import scanpy as sc
import pandas as pd
import numpy as np
import scipy.io
from scipy.io import mmwrite
import os
# 使用scanpy读取
adata = sc.read_h5ad("/share/scRNAseq_of_human_nature.h5ad")
# 查看基本信息
print(adata)
print(f"细胞数: {adata.n_obs}")
print(f"基因数: {adata.n_vars}")
print(f"观测值元数据: {adata.obs.columns.tolist()}")
print(f"变量元数据: {adata.var.columns.tolist()}")
# 查看表达矩阵
print(adata.X.shape) # 稀疏矩阵格式
# 创建输出目录
os.makedirs("scRNAseq_of_human_nature", exist_ok=True)
读取文件,并查看文件包括的信息。
从里面提取所需要的信息,然后将其转化成10× genomics标准输入文件。
然后使用Seurat读取上述文件,进行标准分析即可。
# 1. 保存矩阵(稀疏矩阵格式)
if isinstance(adata.X, np.ndarray):
# 如果是 dense matrix
from scipy.io import mmwrite
mmwrite("scRNAseq_of_human_nature/matrix.mtx", adata.X.T)
else:
# 如果是 sparse matrix
scipy.io.mmwrite("scRNAseq_of_human_nature/matrix.mtx.gz", adata.X.T)
gene_df = pd.DataFrame({
'gene_ids': adata.var_names,
'gene_names': adata.var['feature_name'] if 'feature_name' in adata.var.columns else adata.var_names,
'feature_types': 'Gene Expression' # 这里很重要,注意要统一写死,不要从 adata.var 读取
})
gene_df.to_csv("scRNAseq_of_human_nature/features.tsv.gz",
sep='\t', index=False, header=False)
#查看所包含的信息
adata.var.columns
# 3. 保存细胞barcode信息
barcode_df = pd.DataFrame({
'barcode': adata.obs_names,
'cell_type': adata.obs['cell_type'], # 添加 cell_type 列
'study_name': adata.obs['study_name'],# 添加 样本来源 列
'disease': adata.obs['disease'],#添加是正常还是疾病
'sex': adata.obs['sex'],#添加性别列
'donor_id': adata.obs['donor_id'], ## 这里我添加了很多,因为我需要这些。
'donor_age': adata.obs['donor_age'] ## 根据实际情况选择即可。
})
barcode_df.to_csv("scRNAseq_of_human_nature/barcodes.tsv", sep='\t', index=False, header=False)
完成上述转换之后,直接使用Seurat读取文件即可。
library(Seurat)
# 读取数据
seurat_obj <- Read10X("scRNAseq_of_human_nature/")
seurat_obj <- CreateSeuratObject(counts = seurat_obj)
#之后的标准处理。
欢迎大家交流补充~~有问题请在评论区或者私信留言,我看到之后一定回复。