Merging AnnData objects for cell-level LDSC (Duncan lab dataset)

Merging AnnData objects for cell-level LDSC (Duncan lab dataset)#

import anndata as ad
from pathlib import Path
from scipy.sparse import csr_array
import numpy as np
from tqdm.auto import tqdm
import gc
obs_map = {
    "Age": "age",
    "CellCycle": "cell_cycle",
    "CellID": "cell_id",
    "Chemistry": "chemistry",
    "Clusters": "clusters",
    "Donor": "donor",
    "NGenes": "n_genes",
    "ROIGroupCoarse": "roi_group_coarse",
    "ROIGroupFine": "roi_group_fine",
    "Roi": "roi",
    "SampleID": "sample_id",
    "Sex": "sex",
    "Subclusters": "subclusters",
    "Tissue": "tissue",
    "TotalUMI": "total_umi",
}

var_map = {
    "Accession": "accession",
    "Gene": "gene",
    "Valid": "valid",
}
adatas_paths = list(
    Path("/project/genomics/ayshan/ldsc_analysis/data_2/Single_cell_Siletti_Duncan/h5ad_chunks_new").glob("*.h5ad")
)


def read_h5ad(apath):
    adata = ad.read_h5ad(apath)
    adata.X = csr_array(adata.X.astype(np.uint16, copy=False))
    adata.obs = adata.obs.rename(columns=obs_map)
    adata.var = adata.var.rename(columns=var_map)
    adata.obs["chunk"] = apath.stem
    adata.obs = adata.obs.set_index("cell_id")
    return adata


adata = read_h5ad(adatas_paths[0])
adata.write_h5ad("/lustre/groups/shared/scgenetics/single_cell_siletti_duncan_single_chunk.h5ad")
adata
AnnData object with n_obs × n_vars = 50000 × 59480
    obs: 'age', 'cell_cycle', 'chemistry', 'clusters', 'donor', 'n_genes', 'roi_group_coarse', 'roi_group_fine', 'roi', 'sample_id', 'sex', 'subclusters', 'tissue', 'total_umi', 'chunk'
    var: 'accession', 'gene', 'valid'
for apath in tqdm(adatas_paths[1:]):
    try:
        adata2 = read_h5ad(apath)
        adata = ad.concat([adata, adata2], join="outer", merge="same")
        gc.collect()
    except Exception:
        print(f"Error merging {apath}")
        continue
adata
Error merging /project/genomics/ayshan/ldsc_analysis/data_2/Single_cell_Siletti_Duncan/h5ad_chunks_new/adata_chunk_3250000_3300000.h5ad
Error merging /project/genomics/ayshan/ldsc_analysis/data_2/Single_cell_Siletti_Duncan/h5ad_chunks_new/adata_chunk_1050000_1100000.h5ad
Error merging /project/genomics/ayshan/ldsc_analysis/data_2/Single_cell_Siletti_Duncan/h5ad_chunks_new/adata_chunk_2150000_2200000.h5ad
AnnData object with n_obs × n_vars = 3219219 × 59480
    obs: 'age', 'cell_cycle', 'chemistry', 'clusters', 'donor', 'n_genes', 'roi_group_coarse', 'roi_group_fine', 'roi', 'sample_id', 'sex', 'subclusters', 'tissue', 'total_umi', 'chunk'
    var: 'accession', 'gene', 'valid'
adata
AnnData object with n_obs × n_vars = 3219219 × 59480
    obs: 'age', 'cell_cycle', 'chemistry', 'clusters', 'donor', 'n_genes', 'roi_group_coarse', 'roi_group_fine', 'roi', 'sample_id', 'sex', 'subclusters', 'tissue', 'total_umi', 'chunk'
    var: 'accession', 'gene', 'valid'
adata.write_h5ad("/lustre/groups/shared/scgenetics/single_cell_siletti_duncan_merged.h5ad")
adata.X.indices.max()
np.int64(59479)
adata.X.indptr.max()
np.int64(15334884749)
adata.X.indptr.dtype
dtype('int64')