很多時候從數(shù)據(jù)庫下載的處理過的各種單細胞數(shù)據(jù)格式都是.h5ad或者.h5。
本篇內(nèi)容就先給一個處理.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"細胞數(shù): {adata.n_obs}")
print(f"基因數(shù): {adata.n_vars}")
print(f"觀測值元數(shù)據(jù): {adata.obs.columns.tolist()}")
print(f"變量元數(shù)據(jù): {adata.var.columns.tolist()}")
# 查看表達矩陣
print(adata.X.shape) # 稀疏矩陣格式
# 創(chuàng)建輸出目錄
os.makedirs("scRNAseq_of_human_nature", exist_ok=True)
讀取文件,并查看文件包括的信息。
從里面提取所需要的信息,然后將其轉(zhuǎn)化成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' # 這里很重要,注意要統(tǒng)一寫死,不要從 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'] ## 根據(jù)實際情況選擇即可。
})
barcode_df.to_csv("scRNAseq_of_human_nature/barcodes.tsv", sep='\t', index=False, header=False)
完成上述轉(zhuǎn)換之后,直接使用Seurat讀取文件即可。
library(Seurat)
# 讀取數(shù)據(jù)
seurat_obj <- Read10X("scRNAseq_of_human_nature/")
seurat_obj <- CreateSeuratObject(counts = seurat_obj)
#之后的標準處理。
歡迎大家交流補充~~有問題請在評論區(qū)或者私信留言,我看到之后一定回復(fù)。