import numpy as np
import pandas as pd
import scanpy as sc
import seaborn as sns
import igraph as ig
import matplotlib.pyplot as plt
from scipy.sparse import csr_matrix, isspmatrix
from datetime import datetime
import sys
sys.path.append('../')
import functions as fn
print(np.__version__)
print(pd.__version__)
print(sc.__version__)
1.23.5 2.0.0 1.9.3
sc.settings.verbosity = 3
sc.settings.set_figure_params(dpi=100)
print(datetime.now())
2026-03-11 12:54:18.288343
Adata subset in SubsetHNOCA.ipynb by protol and organoid age
adata = sc.read("../../../../DataDir/ExternalData/SingleCellData/HNOCA_protocol_age.h5ad")
adata
AnnData object with n_obs × n_vars = 336027 × 35725
obs: 'assay_differentiation', 'assay_type_differentiation', 'bio_sample', 'cell_line', 'cell_type_original', 'gm', 'id', 'individual', 'state_exact', 'suspension_type', 'tech_sample', 'treatment', 'organoid_age_days', 'publication', 'doi', 'batch', 'annot_level_1', 'annot_level_2', 'annot_level_3_rev2', 'annot_level_4_rev2', 'annot_region_rev2', 'annot_ntt_rev2', 'Hallmark_Glycolysis', 'hnoca_core', 'annot_level_2_extended', 'tissue_type', 'sex_ontology_term_id', 'donor_id', 'assay_ontology_term_id', 'self_reported_ethnicity_ontology_term_id', 'tissue_ontology_term_id', 'disease_ontology_term_id', 'development_stage_ontology_term_id', 'cell_type_ontology_term_id', 'is_primary_data', 'cell_type', 'assay', 'disease', 'sex', 'tissue', 'self_reported_ethnicity', 'development_stage', 'observation_joinid'
var: 'gene_length', 'highly_variable', 'highly_variable_rank', 'highly_variable_nbatches', 'feature_is_filtered', 'feature_name', 'feature_reference', 'feature_biotype', 'feature_length', 'feature_type'
uns: 'batch_condition', 'citation', 'default_embedding', 'organism', 'organism_ontology_term_id', 'schema_reference', 'schema_version', 'title'
obsm: 'X_scpoli', 'X_umap_scpoli'
obsp: 'knn_scpoli_connectivities', 'knn_scpoli_distances'
adata.var
| gene_length | highly_variable | highly_variable_rank | highly_variable_nbatches | feature_is_filtered | feature_name | feature_reference | feature_biotype | feature_length | feature_type | |
|---|---|---|---|---|---|---|---|---|---|---|
| ENSG00000000003 | 3796 | False | 2243.0 | 118 | False | TSPAN6 | NCBITaxon:9606 | gene | 2396 | protein_coding |
| ENSG00000000005 | 1205 | True | 738.5 | 114 | False | TNMD | NCBITaxon:9606 | gene | 873 | protein_coding |
| ENSG00000000419 | 3004 | False | 2032.0 | 9 | False | DPM1 | NCBITaxon:9606 | gene | 1262 | protein_coding |
| ENSG00000000457 | 6308 | False | 2532.0 | 15 | False | SCYL3 | NCBITaxon:9606 | gene | 2916 | protein_coding |
| ENSG00000000460 | 4355 | False | 2444.0 | 37 | False | FIRRM | NCBITaxon:9606 | gene | 2661 | protein_coding |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| ENSG00000288721 | 6172 | False | NaN | 0 | False | ENSG00000288721 | NCBITaxon:9606 | gene | 3684 | protein_coding |
| ENSG00000288722 | 1707 | False | 2566.5 | 6 | False | F8A1 | NCBITaxon:9606 | gene | 1707 | protein_coding |
| ENSG00000288723 | 1015 | False | NaN | 0 | False | ENSG00000288723 | NCBITaxon:9606 | gene | 542 | lncRNA |
| ENSG00000288724 | 625 | False | NaN | 0 | False | ENSG00000288724 | NCBITaxon:9606 | gene | 494 | lncRNA |
| ENSG00000288725 | 3810 | False | NaN | 0 | False | ENSG00000288725 | NCBITaxon:9606 | gene | 3810 | protein_coding |
35725 rows × 10 columns
adata.obs.columns
Index(['assay_differentiation', 'assay_type_differentiation', 'bio_sample',
'cell_line', 'cell_type_original', 'gm', 'id', 'individual',
'state_exact', 'suspension_type', 'tech_sample', 'treatment',
'organoid_age_days', 'publication', 'doi', 'batch', 'annot_level_1',
'annot_level_2', 'annot_level_3_rev2', 'annot_level_4_rev2',
'annot_region_rev2', 'annot_ntt_rev2', 'Hallmark_Glycolysis',
'hnoca_core', 'annot_level_2_extended', 'tissue_type',
'sex_ontology_term_id', 'donor_id', 'assay_ontology_term_id',
'self_reported_ethnicity_ontology_term_id', 'tissue_ontology_term_id',
'disease_ontology_term_id', 'development_stage_ontology_term_id',
'cell_type_ontology_term_id', 'is_primary_data', 'cell_type', 'assay',
'disease', 'sex', 'tissue', 'self_reported_ethnicity',
'development_stage', 'observation_joinid'],
dtype='object')
Loading of hormonal receptor gene signature.
signatures = '../../../../DataDir/ExternalData/Receptors/ReceptorsComplete.txt'
sig = pd.read_csv(signatures, sep="\t", keep_default_na=False) #keep_default_na=False: remove Na values
print(sig.shape)
sig
(39, 2)
| GeneName | Signature | |
|---|---|---|
| 0 | THRB | Thyroid |
| 1 | THRA | Thyroid |
| 2 | THRAP3 | Thyroid |
| 3 | DIO1 | Thyroid |
| 4 | DIO2 | Thyroid |
| 5 | DIO3 | Thyroid |
| 6 | SLC16A10 | Thyroid |
| 7 | SLC16A2 | Thyroid |
| 8 | SLC7A5 | Thyroid |
| 9 | KLF9 | Thyroid |
| 10 | THRSP | Thyroid |
| 11 | ESRRG | Estrogen |
| 12 | ESRRA | Estrogen |
| 13 | GPER1 | Estrogen |
| 14 | ESR1 | Estrogen |
| 15 | ESR2 | Estrogen |
| 16 | ESRRB | Estrogen |
| 17 | CYP19A1 | Estrogen |
| 18 | AR | Androgen |
| 19 | RBP4 | Retinoic Acid |
| 20 | RARA | Retinoic Acid |
| 21 | RARB | Retinoic Acid |
| 22 | RARG | Retinoic Acid |
| 23 | RXRA | Retinoic Acid |
| 24 | RXRB | Retinoic Acid |
| 25 | RXRG | Retinoic Acid |
| 26 | AHR | AhHyd |
| 27 | NR3C1 | GC |
| 28 | NR1H2 | LivX |
| 29 | NR1H3 | LivX |
| 30 | PTGER1 | PGE2 |
| 31 | PTGER2 | PGE2 |
| 32 | PTGER3 | PGE2 |
| 33 | PTGER4 | PGE2 |
| 34 | PPARA | PPAR |
| 35 | PPARD | PPAR |
| 36 | PPARG | PPAR |
| 37 | PGR | Progesterone |
| 38 | VDR | Vitamine D |
genes = sig["GeneName"].values.tolist()
adata.obs
| assay_differentiation | assay_type_differentiation | bio_sample | cell_line | cell_type_original | gm | id | individual | state_exact | suspension_type | ... | cell_type_ontology_term_id | is_primary_data | cell_type | assay | disease | sex | tissue | self_reported_ethnicity | development_stage | observation_joinid | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| new_index | |||||||||||||||||||||
| homosapiens_None_2020_10x3v2_bhaduriaparna_001_d10_1038_s41586_020_1962_0_1_H28126SWeek3_TCGGTAAAGGCATGTG | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | custom_H28126 | Radial Glia_Hindbrain RG | unknown | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | unknown | unknown | cell | ... | CL:0000681 | True | radial glial cell | 10x 3' v2 | normal | male | telencephalon | unknown | unknown | <t`y&lfVy( |
| homosapiens_None_2020_10x3v2_bhaduriaparna_001_d10_1038_s41586_020_1962_0_33_H28126SWeek3_ATTCTACGTCATATGC | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | custom_H28126 | Radial Glia_Hindbrain RG | unknown | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | unknown | unknown | cell | ... | CL:0000681 | True | radial glial cell | 10x 3' v2 | normal | male | telencephalon | unknown | unknown | LdHroRYE4j |
| homosapiens_None_2020_10x3v2_bhaduriaparna_001_d10_1038_s41586_020_1962_0_54_H28126SWeek3_AAAGATGGTTACGACT | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | custom_H28126 | Mixed Neuron/Radial Glia_Mixed | unknown | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | unknown | unknown | cell | ... | CL:0002319 | True | neural cell | 10x 3' v2 | normal | male | telencephalon | unknown | unknown | yf?|Ue-li! |
| homosapiens_None_2020_10x3v2_bhaduriaparna_001_d10_1038_s41586_020_1962_0_97_H28126SWeek3_GCGCAGTTCATGTAGC | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | custom_H28126 | Radial Glia_Pan-radial glia | unknown | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | unknown | unknown | cell | ... | CL:0000681 | True | radial glial cell | 10x 3' v2 | normal | male | telencephalon | unknown | unknown | `hGx_2?OL{ |
| homosapiens_None_2020_10x3v2_bhaduriaparna_001_d10_1038_s41586_020_1962_0_100_H28126SWeek3_CCAGCGATCATCTGTT | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | custom_H28126 | Radial Glia_Pan-radial glia | unknown | homosapiens_None_2020_10x3v2_bhaduriaparna_001... | unknown | unknown | cell | ... | CL:0000681 | True | radial glial cell | 10x 3' v2 | normal | male | telencephalon | unknown | unknown | n;^Bhpg>KM |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| homosapiens_telencephalon_2022_10x3v3_uzquianoana_003_d10_1016_j_cell_2022_09_010_38570_3_TTTGTTGGTGATGAAT-1_2_1.5m | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_telencephalon_2022_10x3v3_uzquiano... | GM23338 | aRG | unknown | homosapiens_telencephalon_2022_10x3v3_uzquiano... | homosapiens_telencephalon_2022_10x3v3_uzquiano... | unknown | cell | ... | CL:0000681 | True | radial glial cell | 10x 3' v3 | normal | male | telencephalon | unknown | 55-year-old stage | v$^8QG1sL8 |
| homosapiens_telencephalon_2022_10x3v3_uzquianoana_003_d10_1016_j_cell_2022_09_010_38571_3_TTTGTTGTCAAGCCAT-1_2_1.5m | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_telencephalon_2022_10x3v3_uzquiano... | GM23338 | Immature DL PN | unknown | homosapiens_telencephalon_2022_10x3v3_uzquiano... | homosapiens_telencephalon_2022_10x3v3_uzquiano... | unknown | cell | ... | CL:0000598 | True | pyramidal neuron | 10x 3' v3 | normal | male | telencephalon | unknown | 55-year-old stage | g@%ZeUo^AT |
| homosapiens_telencephalon_2022_10x3v3_uzquianoana_003_d10_1016_j_cell_2022_09_010_38572_3_TTTGTTGTCAGAGCGA-1_2_1.5m | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_telencephalon_2022_10x3v3_uzquiano... | GM23338 | Immature DL PN | unknown | homosapiens_telencephalon_2022_10x3v3_uzquiano... | homosapiens_telencephalon_2022_10x3v3_uzquiano... | unknown | cell | ... | CL:0000598 | True | pyramidal neuron | 10x 3' v3 | normal | male | telencephalon | unknown | 55-year-old stage | lt!(%sk)!3 |
| homosapiens_telencephalon_2022_10x3v3_uzquianoana_003_d10_1016_j_cell_2022_09_010_38573_3_TTTGTTGTCTAGACCA-1_2_1.5m | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_telencephalon_2022_10x3v3_uzquiano... | GM23338 | aRG | unknown | homosapiens_telencephalon_2022_10x3v3_uzquiano... | homosapiens_telencephalon_2022_10x3v3_uzquiano... | unknown | cell | ... | CL:0000681 | True | radial glial cell | 10x 3' v3 | normal | male | telencephalon | unknown | 55-year-old stage | >q;KQf*b8g |
| homosapiens_telencephalon_2022_10x3v3_uzquianoana_003_d10_1016_j_cell_2022_09_010_38574_3_TTTGTTGTCTGACAGT-1_2_1.5m | Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) | guided | homosapiens_telencephalon_2022_10x3v3_uzquiano... | GM23338 | CFuPN | unknown | homosapiens_telencephalon_2022_10x3v3_uzquiano... | homosapiens_telencephalon_2022_10x3v3_uzquiano... | unknown | cell | ... | CL:4023009 | True | extratelencephalic-projecting glutamatergic co... | 10x 3' v3 | normal | male | telencephalon | unknown | 55-year-old stage | Z+NPwXB(&` |
336027 rows × 43 columns
adata.obsm
AxisArrays with keys: X_scpoli, X_umap_scpoli
sc.pl.embedding(adata, basis="X_umap_scpoli", color=['cell_type', 'organoid_age_days', 'assay_differentiation', 'tissue'], ncols=1)
/usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter(
#sc.tl.draw_graph(adata, random_state=1, neighbors_key="harmony")
#adata.obsm["X_draw_graph_fa_harmony"] = adata.obsm["X_draw_graph_fa"].copy()
#del adata.obsm["X_draw_graph_fa"]
print(adata.X.data[:10])
[6.0723834 6.0723834 6.0723834 6.0723834 6.764377 6.0723834 6.0723834 6.0723834 6.0723834 6.0723834]
adata.raw.X.data[:20] # se sparse
array([1., 1., 1., 1., 2., 1., 1., 1., 1., 1., 2., 1., 1., 7., 1., 1., 1.,
1., 1., 2.], dtype=float32)
adata.X = adata.raw.X.copy()
adata.layers['counts'] = adata.X.copy()
adata.obs['assay_differentiation'].value_counts()
assay_differentiation Velasco, 2019 (doi: 10.1038/s41586-019-1289-x) 277411 Bhaduri, 2020 (doi: 10.1038/s41586-020-1962-0); most directed 28522 Bhaduri, 2020 (doi: 10.1038/s41586-020-1962-0); directed 13272 Pellegrini, 2020 (doi: 10.1126/science.aaz5626); hChPO 9637 Trujillo, 2019 (doi: 10.1016/j.stem.2019.08.002) 4427 Pellegrini, 2020 (doi: 10.1126/science.aaz5626); hCO 2758 Name: count, dtype: int64
# Velasco
adata_velasco = adata[adata.obs['assay_differentiation'].str.contains("Velasco")].copy()
adata_velasco
AnnData object with n_obs × n_vars = 277411 × 35725
obs: 'assay_differentiation', 'assay_type_differentiation', 'bio_sample', 'cell_line', 'cell_type_original', 'gm', 'id', 'individual', 'state_exact', 'suspension_type', 'tech_sample', 'treatment', 'organoid_age_days', 'publication', 'doi', 'batch', 'annot_level_1', 'annot_level_2', 'annot_level_3_rev2', 'annot_level_4_rev2', 'annot_region_rev2', 'annot_ntt_rev2', 'Hallmark_Glycolysis', 'hnoca_core', 'annot_level_2_extended', 'tissue_type', 'sex_ontology_term_id', 'donor_id', 'assay_ontology_term_id', 'self_reported_ethnicity_ontology_term_id', 'tissue_ontology_term_id', 'disease_ontology_term_id', 'development_stage_ontology_term_id', 'cell_type_ontology_term_id', 'is_primary_data', 'cell_type', 'assay', 'disease', 'sex', 'tissue', 'self_reported_ethnicity', 'development_stage', 'observation_joinid'
var: 'gene_length', 'highly_variable', 'highly_variable_rank', 'highly_variable_nbatches', 'feature_is_filtered', 'feature_name', 'feature_reference', 'feature_biotype', 'feature_length', 'feature_type'
uns: 'batch_condition', 'citation', 'default_embedding', 'organism', 'organism_ontology_term_id', 'schema_reference', 'schema_version', 'title', 'cell_type_colors', 'assay_differentiation_colors', 'tissue_colors'
obsm: 'X_scpoli', 'X_umap_scpoli'
layers: 'counts'
obsp: 'knn_scpoli_connectivities', 'knn_scpoli_distances'
# Bhaduri (both directed and most directed)
adata_bhaduri = adata[adata.obs['assay_differentiation'].str.contains("Bhaduri")].copy()
adata_bhaduri
AnnData object with n_obs × n_vars = 41794 × 35725
obs: 'assay_differentiation', 'assay_type_differentiation', 'bio_sample', 'cell_line', 'cell_type_original', 'gm', 'id', 'individual', 'state_exact', 'suspension_type', 'tech_sample', 'treatment', 'organoid_age_days', 'publication', 'doi', 'batch', 'annot_level_1', 'annot_level_2', 'annot_level_3_rev2', 'annot_level_4_rev2', 'annot_region_rev2', 'annot_ntt_rev2', 'Hallmark_Glycolysis', 'hnoca_core', 'annot_level_2_extended', 'tissue_type', 'sex_ontology_term_id', 'donor_id', 'assay_ontology_term_id', 'self_reported_ethnicity_ontology_term_id', 'tissue_ontology_term_id', 'disease_ontology_term_id', 'development_stage_ontology_term_id', 'cell_type_ontology_term_id', 'is_primary_data', 'cell_type', 'assay', 'disease', 'sex', 'tissue', 'self_reported_ethnicity', 'development_stage', 'observation_joinid'
var: 'gene_length', 'highly_variable', 'highly_variable_rank', 'highly_variable_nbatches', 'feature_is_filtered', 'feature_name', 'feature_reference', 'feature_biotype', 'feature_length', 'feature_type'
uns: 'batch_condition', 'citation', 'default_embedding', 'organism', 'organism_ontology_term_id', 'schema_reference', 'schema_version', 'title', 'cell_type_colors', 'assay_differentiation_colors', 'tissue_colors'
obsm: 'X_scpoli', 'X_umap_scpoli'
layers: 'counts'
obsp: 'knn_scpoli_connectivities', 'knn_scpoli_distances'
# Trujillo
adata_trujillo = adata[adata.obs['assay_differentiation'].str.contains("Trujillo")].copy()
adata_trujillo
AnnData object with n_obs × n_vars = 4427 × 35725
obs: 'assay_differentiation', 'assay_type_differentiation', 'bio_sample', 'cell_line', 'cell_type_original', 'gm', 'id', 'individual', 'state_exact', 'suspension_type', 'tech_sample', 'treatment', 'organoid_age_days', 'publication', 'doi', 'batch', 'annot_level_1', 'annot_level_2', 'annot_level_3_rev2', 'annot_level_4_rev2', 'annot_region_rev2', 'annot_ntt_rev2', 'Hallmark_Glycolysis', 'hnoca_core', 'annot_level_2_extended', 'tissue_type', 'sex_ontology_term_id', 'donor_id', 'assay_ontology_term_id', 'self_reported_ethnicity_ontology_term_id', 'tissue_ontology_term_id', 'disease_ontology_term_id', 'development_stage_ontology_term_id', 'cell_type_ontology_term_id', 'is_primary_data', 'cell_type', 'assay', 'disease', 'sex', 'tissue', 'self_reported_ethnicity', 'development_stage', 'observation_joinid'
var: 'gene_length', 'highly_variable', 'highly_variable_rank', 'highly_variable_nbatches', 'feature_is_filtered', 'feature_name', 'feature_reference', 'feature_biotype', 'feature_length', 'feature_type'
uns: 'batch_condition', 'citation', 'default_embedding', 'organism', 'organism_ontology_term_id', 'schema_reference', 'schema_version', 'title', 'cell_type_colors', 'assay_differentiation_colors', 'tissue_colors'
obsm: 'X_scpoli', 'X_umap_scpoli'
layers: 'counts'
obsp: 'knn_scpoli_connectivities', 'knn_scpoli_distances'
# Pellegrini (hChPO and hCO)
adata_pellegrini = adata[adata.obs['assay_differentiation'].str.contains("Pellegrini")].copy()
adata_pellegrini
AnnData object with n_obs × n_vars = 12395 × 35725
obs: 'assay_differentiation', 'assay_type_differentiation', 'bio_sample', 'cell_line', 'cell_type_original', 'gm', 'id', 'individual', 'state_exact', 'suspension_type', 'tech_sample', 'treatment', 'organoid_age_days', 'publication', 'doi', 'batch', 'annot_level_1', 'annot_level_2', 'annot_level_3_rev2', 'annot_level_4_rev2', 'annot_region_rev2', 'annot_ntt_rev2', 'Hallmark_Glycolysis', 'hnoca_core', 'annot_level_2_extended', 'tissue_type', 'sex_ontology_term_id', 'donor_id', 'assay_ontology_term_id', 'self_reported_ethnicity_ontology_term_id', 'tissue_ontology_term_id', 'disease_ontology_term_id', 'development_stage_ontology_term_id', 'cell_type_ontology_term_id', 'is_primary_data', 'cell_type', 'assay', 'disease', 'sex', 'tissue', 'self_reported_ethnicity', 'development_stage', 'observation_joinid'
var: 'gene_length', 'highly_variable', 'highly_variable_rank', 'highly_variable_nbatches', 'feature_is_filtered', 'feature_name', 'feature_reference', 'feature_biotype', 'feature_length', 'feature_type'
uns: 'batch_condition', 'citation', 'default_embedding', 'organism', 'organism_ontology_term_id', 'schema_reference', 'schema_version', 'title', 'cell_type_colors', 'assay_differentiation_colors', 'tissue_colors'
obsm: 'X_scpoli', 'X_umap_scpoli'
layers: 'counts'
obsp: 'knn_scpoli_connectivities', 'knn_scpoli_distances'
sc.pp.normalize_total(adata, target_sum=1e4, exclude_highly_expressed=True)
sc.pp.log1p(adata)
adata.layers['lognorm'] = adata.X.copy()
sc.pp.highly_variable_genes(adata, min_mean=0.0125, max_mean=3, min_disp=0.5, batch_key='batch')
normalizing counts per cell The following highly-expressed genes are not considered during normalization factor computation:
['ENSG00000026025', 'ENSG00000054523', 'ENSG00000080824', 'ENSG00000081051', 'ENSG00000087086', 'ENSG00000091651', 'ENSG00000099797', 'ENSG00000101353', 'ENSG00000102003', 'ENSG00000105372', 'ENSG00000106261', 'ENSG00000111341', 'ENSG00000114735', 'ENSG00000118137', 'ENSG00000118271', 'ENSG00000119946', 'ENSG00000132002', 'ENSG00000133636', 'ENSG00000137135', 'ENSG00000141933', 'ENSG00000142002', 'ENSG00000147437', 'ENSG00000157005', 'ENSG00000157978', 'ENSG00000158874', 'ENSG00000160180', 'ENSG00000163220', 'ENSG00000163832', 'ENSG00000166426', 'ENSG00000167996', 'ENSG00000179965', 'ENSG00000183395', 'ENSG00000198712', 'ENSG00000198804', 'ENSG00000198899', 'ENSG00000198938', 'ENSG00000205542', 'ENSG00000251562', 'ENSG00000254505', 'ENSG00000278156']
finished (0:00:02)
extracting highly variable genes
finished (0:00:27)
--> added
'highly_variable', boolean vector (adata.var)
'means', float vector (adata.var)
'dispersions', float vector (adata.var)
'dispersions_norm', float vector (adata.var)
sc.tl.pca(adata, use_highly_variable=True)
computing PCA
on highly variable genes
with n_comps=50
finished (0:00:26)
sc.pl.pca_variance_ratio(adata, log=True)
N_NB = int(0.5 * len(adata) ** 0.5)
if N_NB > 100:
N_NB = 100
print(N_NB)
100
sc.pp.neighbors(adata, n_neighbors=N_NB, n_pcs=12, key_added="pca")
computing neighbors
using 'X_pca' with n_pcs = 12
2026-03-11 13:10:06.891220: I tensorflow/core/util/port.cc:110] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`. 2026-03-11 13:10:09.186013: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. To enable the following instructions: AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags. 2026-03-11 13:10:12.281137: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
finished: added to `.uns['pca']`
`.obsp['pca_distances']`, distances for each pair of neighbors
`.obsp['pca_connectivities']`, weighted adjacency matrix (0:06:06)
sc.tl.umap(adata, random_state=1, neighbors_key="pca")
# store coordinates in a named slot so to avoid confusion with batch-corrected
adata.obsm["X_umap_nocorr"] = adata.obsm["X_umap"].copy()
del adata.obsm["X_umap"]
computing UMAP
finished: added
'X_umap', UMAP coordinates (adata.obsm) (0:10:19)
#sc.tl.draw_graph(adata, random_state=1, neighbors_key="pca")
#adata.obsm["X_draw_graph_fa_nocorr"] = adata.obsm["X_draw_graph_fa"].copy()
#del adata.obsm["X_draw_graph_fa"]
sc.pl.embedding(adata, basis="X_umap_nocorr", color=['cell_type', 'organoid_age_days', 'assay_differentiation', 'tissue'], ncols=1)
/usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter(
sc.external.pp.harmony_integrate(adata, "batch", random_state=5)
2026-03-11 13:26:33,666 - harmonypy - INFO - Computing initial centroids with sklearn.KMeans... 2026-03-11 13:27:45,801 - harmonypy - INFO - sklearn.KMeans initialization complete. 2026-03-11 13:27:47,263 - harmonypy - INFO - Iteration 1 of 10 2026-03-11 13:30:46,306 - harmonypy - INFO - Iteration 2 of 10 2026-03-11 13:33:47,004 - harmonypy - INFO - Iteration 3 of 10 2026-03-11 13:37:04,431 - harmonypy - INFO - Iteration 4 of 10 2026-03-11 13:40:12,136 - harmonypy - INFO - Iteration 5 of 10 2026-03-11 13:42:51,247 - harmonypy - INFO - Iteration 6 of 10 2026-03-11 13:44:27,083 - harmonypy - INFO - Iteration 7 of 10 2026-03-11 13:45:56,508 - harmonypy - INFO - Iteration 8 of 10 2026-03-11 13:47:20,135 - harmonypy - INFO - Converged after 8 iterations
sc.pp.neighbors(adata, n_neighbors=N_NB, n_pcs=12, use_rep='X_pca_harmony', key_added='harmony')
computing neighbors
finished: added to `.uns['harmony']`
`.obsp['harmony_distances']`, distances for each pair of neighbors
`.obsp['harmony_connectivities']`, weighted adjacency matrix (0:05:44)
sc.tl.umap(adata, random_state=1, neighbors_key="harmony")
adata.obsm["X_umap_harmony"] = adata.obsm["X_umap"].copy()
del adata.obsm["X_umap"]
computing UMAP
finished: added
'X_umap', UMAP coordinates (adata.obsm) (0:11:48)
sc.pl.embedding(adata, basis="X_umap_harmony", color=['cell_type', 'organoid_age_days', 'assay_differentiation', 'tissue'], ncols=1)
/usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter(
sc.tl.draw_graph(adata, random_state=1, neighbors_key="harmony")
adata.obsm["X_draw_graph_fa_harmony"] = adata.obsm["X_draw_graph_fa"].copy()
del adata.obsm["X_draw_graph_fa"]
drawing single-cell graph using layout 'fa'
finished: added
'X_draw_graph_fa', graph_drawing coordinates (adata.obsm) (1:27:53)
sc.pl.embedding(adata, basis="X_draw_graph_fa_harmony", color=['cell_type', 'organoid_age_days', 'assay_differentiation', 'tissue'], ncols=1)
/usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter(
fn.CustomUmap(adata, genes, embedding="X_draw_graph_fa_harmony", var_col = "feature_name", gene_symbols="feature_name")
WARNING: saving figure to file figures/X_draw_graph_fa_harmonydraw_graph.png
fn.CustomUmap(adata, genes, embedding="X_umap_harmony", var_col = "feature_name", gene_symbols="feature_name")