Cell type deconvolution using STitch3D
We first use STitch3D to estimate cell type proportions. After loading the MCube package in R, you can call system.file("deconvolution", package = "MCube") to obtain the path of the modified version of STitch3D used here.
[1]:
import sys
sys.path.append(r'/import/home/share/zw/pql/STitch3D/')
import STitch3D
import pandas as pd
import numpy as np
import scanpy as sc
import anndata as ad
from scipy.io import mmread
import os
import warnings
warnings.filterwarnings("ignore")
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
/home/zwanghc/anaconda3/envs/stitch3d/lib/python3.7/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
[2]:
DATA_PATH = "/import/home/share/zw/data/mouse_brain"
SAVE_PATH = "/import/home/share/zw/pql/data/mouse_brain"
os.makedirs(os.path.join(SAVE_PATH, "visium_1"), exist_ok=True)
os.makedirs(os.path.join(SAVE_PATH, "visium_2"), exist_ok=True)
os.makedirs(os.path.join(SAVE_PATH, "ST_3D"), exist_ok=True)
[3]:
# scRNA-seq reference data
adata_ref = sc.read_h5ad(os.path.join(DATA_PATH, "reference/all_cells_20200625.h5ad"))
adata_ref.var.index = adata_ref.var["SYMBOL"].astype(str)
adata_ref.var_names_make_unique() # make gene names unique
labels = pd.read_csv(os.path.join(DATA_PATH, "reference/snRNA_annotation_astro_subtypes_refined59_20200823.csv"), index_col=0)
labels = labels.reindex(index=adata_ref.obs_names)
adata_ref.obs[labels.columns] = labels
adata_ref = adata_ref[~adata_ref.obs['annotation_1'].isna(), :]
adata_ref.obs['celltype'] = adata_ref.obs['annotation_1']
Trying to set attribute `.obs` of view, copying.
[4]:
# sc_counts = pd.DataFrame(adata_ref.X.toarray().astype(int), index=adata_ref.obs_names, columns=adata_ref.var_names)
# sc_labels = pd.DataFrame(adata_ref.obs['celltype'], index=adata_ref.obs_names, columns=['celltype'])
# sc_counts.to_csv(os.path.join(DATA_PATH, "reference/sc_counts.csv"))
# sc_labels.to_csv(os.path.join(DATA_PATH, "reference/sc_labels.csv"))
Visium Slice 1
[5]:
counts = pd.read_csv(os.path.join(DATA_PATH, "visium/visium_1/mouse_brain_visium_1_counts.csv"), index_col=0)
coordinates = pd.read_csv(os.path.join(DATA_PATH, "visium/visium_1/mouse_brain_visium_1_coordinates.csv"), index_col=0)
adata_st = ad.AnnData(X = counts.values)
adata_st.obs.index = counts.index
adata_st.var.index = counts.columns
adata_st.obsm['spatial'] = coordinates.values
adata_st.obs["array_row"] = coordinates.iloc[:, 0]
adata_st.obs["array_col"] = coordinates.iloc[:, 1]
adata_st_list_raw = [adata_st]
[6]:
adata_st_list = STitch3D.utils.align_spots(adata_st_list_raw, data_type = "other", coor_key = "spatial", plot = False) # Since the original array_col and array_row are not valid, we set data_type = "other"
Using the Iterative Closest Point algorithm for alignemnt.
Detecting edges...
Aligning edges...
[7]:
adata_st, adata_basis = STitch3D.utils.preprocess(adata_st_list,
adata_ref,
celltype_ref_col = "celltype",
n_hvg_group = 500,
save_path = os.path.join(SAVE_PATH, "visium_1"))
Finding highly variable genes...
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
... storing 'annotation_1' as categorical
... storing 'celltype' as categorical
6415 highly variable genes selected.
Calculate basis for deconvolution...
Trying to set attribute `.obs` of view, copying.
Preprocess ST data...
Start building a graph...
Radius for graph connection is 110.0110.
5.8565 neighbors per cell on average.
[8]:
model = STitch3D.model.Model(adata_st, adata_basis)
model.train()
result = model.eval(adata_st_list_raw, save = True, output_path = os.path.join(SAVE_PATH, "visium_1"))
0%| | 3/20000 [00:00<15:17, 21.80it/s]
Step: 0, Loss: 4553.4561, d_loss: 4548.4971, f_loss: 49.5921
10%|█ | 2004/20000 [01:19<11:45, 25.50it/s]
Step: 2000, Loss: -5176.4712, d_loss: -5178.6089, f_loss: 21.3766
20%|██ | 4005/20000 [02:39<10:40, 24.98it/s]
Step: 4000, Loss: -5725.5771, d_loss: -5727.6641, f_loss: 20.8672
30%|███ | 6006/20000 [04:00<09:19, 25.01it/s]
Step: 6000, Loss: -5767.5298, d_loss: -5769.5776, f_loss: 20.4786
40%|████ | 8004/20000 [05:20<08:03, 24.81it/s]
Step: 8000, Loss: -5784.5317, d_loss: -5786.5420, f_loss: 20.1032
50%|█████ | 10005/20000 [06:40<06:43, 24.77it/s]
Step: 10000, Loss: -5789.8452, d_loss: -5791.8379, f_loss: 19.9255
60%|██████ | 12006/20000 [08:01<05:21, 24.87it/s]
Step: 12000, Loss: -5791.4277, d_loss: -5793.4141, f_loss: 19.8643
70%|███████ | 14004/20000 [09:21<04:00, 24.90it/s]
Step: 14000, Loss: -5794.2085, d_loss: -5796.1821, f_loss: 19.7349
80%|████████ | 16005/20000 [10:41<02:39, 24.98it/s]
Step: 16000, Loss: -5794.9873, d_loss: -5796.9580, f_loss: 19.7055
90%|█████████ | 18006/20000 [12:01<01:18, 25.56it/s]
Step: 18000, Loss: -5795.8618, d_loss: -5797.8257, f_loss: 19.6408
100%|██████████| 20000/20000 [13:21<00:00, 24.94it/s]
Visium Slice 2
[9]:
counts = pd.read_csv(os.path.join(DATA_PATH, "visium/visium_2/mouse_brain_visium_2_counts.csv"), index_col=0)
coordinates = pd.read_csv(os.path.join(DATA_PATH, "visium/visium_2/mouse_brain_visium_2_coordinates.csv"), index_col=0)
adata_st = ad.AnnData(X = counts.values)
adata_st.obs.index = counts.index
adata_st.var.index = counts.columns
adata_st.obsm['spatial'] = coordinates.values
adata_st.obs["array_row"] = coordinates.iloc[:, 0]
adata_st.obs["array_col"] = coordinates.iloc[:, 1]
adata_st_list_raw = [adata_st]
[10]:
adata_st_list = STitch3D.utils.align_spots(adata_st_list_raw, data_type = "other", coor_key = "spatial", plot = False) # Since the original array_col and array_row are not valid, we set data_type = "other"
Using the Iterative Closest Point algorithm for alignemnt.
Detecting edges...
Aligning edges...
[11]:
adata_st, adata_basis = STitch3D.utils.preprocess(adata_st_list,
adata_ref,
celltype_ref_col="celltype",
n_hvg_group = 500,
save_path = os.path.join(SAVE_PATH, "visium_2"))
Finding highly variable genes...
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
... storing 'annotation_1' as categorical
... storing 'celltype' as categorical
6415 highly variable genes selected.
Calculate basis for deconvolution...
Trying to set attribute `.obs` of view, copying.
Preprocess ST data...
Start building a graph...
Radius for graph connection is 110.0110.
5.8369 neighbors per cell on average.
[12]:
model = STitch3D.model.Model(adata_st, adata_basis)
model.train()
result = model.eval(adata_st_list_raw, save = True, output_path = os.path.join(SAVE_PATH, "visium_2"))
0%| | 6/20000 [00:00<13:19, 25.01it/s]
Step: 0, Loss: 4595.1479, d_loss: 4590.1846, f_loss: 49.6340
10%|█ | 2004/20000 [01:15<11:15, 26.64it/s]
Step: 2000, Loss: -4465.4653, d_loss: -4467.7061, f_loss: 22.4096
20%|██ | 4005/20000 [02:29<09:58, 26.73it/s]
Step: 4000, Loss: -4970.6846, d_loss: -4972.8516, f_loss: 21.6709
30%|███ | 6006/20000 [03:45<08:43, 26.72it/s]
Step: 6000, Loss: -5015.3081, d_loss: -5017.4287, f_loss: 21.2065
40%|████ | 8004/20000 [05:00<07:33, 26.46it/s]
Step: 8000, Loss: -5023.1460, d_loss: -5025.2388, f_loss: 20.9281
50%|█████ | 10005/20000 [06:15<06:13, 26.75it/s]
Step: 10000, Loss: -5027.7886, d_loss: -5029.8555, f_loss: 20.6709
60%|██████ | 12006/20000 [07:30<05:00, 26.62it/s]
Step: 12000, Loss: -5029.4053, d_loss: -5031.4585, f_loss: 20.5329
70%|███████ | 14004/20000 [08:43<03:47, 26.39it/s]
Step: 14000, Loss: -5025.7017, d_loss: -5027.7817, f_loss: 20.8011
80%|████████ | 16005/20000 [09:58<02:29, 26.69it/s]
Step: 16000, Loss: -5030.1890, d_loss: -5032.2598, f_loss: 20.7089
90%|█████████ | 18006/20000 [11:13<01:15, 26.52it/s]
Step: 18000, Loss: -5031.7710, d_loss: -5033.8086, f_loss: 20.3742
100%|██████████| 20000/20000 [12:28<00:00, 26.71it/s]
Integrating multiple slices profiled by Spatial Transcriptomics
[13]:
counts = pd.read_csv(os.path.join(DATA_PATH, "ST", "GSE147747_expr_raw_counts_table.tsv"),
sep="\t", index_col=0)
meta = pd.read_csv(os.path.join(DATA_PATH, "ST", "GSE147747_meta_table.tsv"),
sep="\t", index_col=0)
adata_st_all = ad.AnnData(X = counts.values)
adata_st_all.obs.index = counts.index
adata_st_all.obs = meta.loc[adata_st_all.obs.index]
adata_st_all.var.index = counts.columns
slice_use = ['01A', '02A', '03A', '04B', '05A', '06B', '07A', '08B', '09A', '10B',
'11A', '12A', '13B', '14A', '15A', '16A', '17A', '18A', '19A', '20B',
'21A', '22A', '23A', '24A', '25A', '26A', '27A', '28A', '29A', '30A',
'31A', '32A', '33A', '34A', '35A',]
meta_slice = pd.read_csv(os.path.join(DATA_PATH, "ST", "molecular-atlas-master/data/slicestable.tsv"),
index_col=0, sep="\t")
slice_AP = [float(meta_slice.loc[s]['AP']) * 1000 for s in slice_use]
slice_dist_micron = [-(slice_AP[i+1] - slice_AP[i]) for i in range(len(slice_AP)-1)]
adata_st_all = adata_st_all[[s in slice_use for s in adata_st_all.obs.section_index.values]]
sc.pp.filter_cells(adata_st_all, min_genes=1)
adata_st_all.obsm['spatial'] = np.concatenate((adata_st_all.obs['HE_X'].values.reshape(-1, 1),
adata_st_all.obs['HE_Y'].values.reshape(-1, 1)), axis=1)
adata_st_list_raw = []
for slice_id in sorted(set(adata_st_all.obs.section_index.values)):
adata_st_i = adata_st_all[adata_st_all.obs.section_index.values == slice_id]
array_col = np.array([np.float(loc.split("_")[1].split("x")[0]) for loc in adata_st_i.obs.index])
if slice_id == '01A':
array_col = array_col - 0.3
array_row = np.array([np.float(loc.split("_")[1].split("x")[1]) for loc in adata_st_i.obs.index])
adata_st_i.obs['array_col'] = np.round(array_col)
adata_st_i.obs['array_row'] = np.round(array_row)
adata_st_i.obsm['loc_use'] = np.concatenate((adata_st_i.obs['array_row'].values.reshape(-1, 1),
adata_st_i.obs['array_col'].values.reshape(-1, 1)), axis=1)
adata_st_list_raw.append(adata_st_i.copy())
for i in range(1, 6): # adjust spatial locations
adata_st_list_raw[i].obsm['loc_use'] = np.concatenate((adata_st_list_raw[i].obsm['loc_use'][:, 0].reshape(-1, 1),
2*np.mean(adata_st_list_raw[i].obsm['loc_use'][:, 1])-adata_st_list_raw[i].obsm['loc_use'][:, 1].reshape(-1, 1)), axis=1)
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
[14]:
adata_st_list = STitch3D.utils.align_spots(adata_st_list_raw,
data_type = "ST",
coor_key = "loc_use",
plot = True)
Using the Iterative Closest Point algorithm for alignemnt.
Detecting edges...
Aligning edges...
[15]:
adata_st, adata_basis = STitch3D.utils.preprocess(adata_st_list,
adata_ref,
sample_col = "sample",
coor_key = "loc_use",
slice_dist_micron = slice_dist_micron,
c2c_dist = 200.,
n_hvg_group = 500,
save_path = os.path.join(SAVE_PATH, "ST_3D"))
Finding highly variable genes...
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
Trying to set attribute `.obs` of view, copying.
... storing 'annotation_1' as categorical
... storing 'celltype' as categorical
6227 highly variable genes selected.
Calculate basis for deconvolution...
Trying to set attribute `.obs` of view, copying.
6 batches are used for computing the basis vector of cell type <Astro_AMY>.
6 batches are used for computing the basis vector of cell type <Astro_AMY_CTX>.
6 batches are used for computing the basis vector of cell type <Astro_CTX>.
6 batches are used for computing the basis vector of cell type <Astro_HPC>.
6 batches are used for computing the basis vector of cell type <Astro_HYPO>.
4 batches are used for computing the basis vector of cell type <Astro_STR>.
5 batches are used for computing the basis vector of cell type <Astro_THAL_hab>.
6 batches are used for computing the basis vector of cell type <Astro_THAL_lat>.
6 batches are used for computing the basis vector of cell type <Astro_THAL_med>.
6 batches are used for computing the basis vector of cell type <Astro_WM>.
4 batches are used for computing the basis vector of cell type <Endo>.
6 batches are used for computing the basis vector of cell type <Ext_Amy_1>.
6 batches are used for computing the basis vector of cell type <Ext_Amy_2>.
6 batches are used for computing the basis vector of cell type <Ext_ClauPyr>.
6 batches are used for computing the basis vector of cell type <Ext_Hpc_CA1>.
4 batches are used for computing the basis vector of cell type <Ext_Hpc_CA2>.
6 batches are used for computing the basis vector of cell type <Ext_Hpc_CA3>.
6 batches are used for computing the basis vector of cell type <Ext_Hpc_DG1>.
6 batches are used for computing the basis vector of cell type <Ext_Hpc_DG2>.
6 batches are used for computing the basis vector of cell type <Ext_L23>.
6 batches are used for computing the basis vector of cell type <Ext_L25>.
6 batches are used for computing the basis vector of cell type <Ext_L56>.
6 batches are used for computing the basis vector of cell type <Ext_L5_1>.
6 batches are used for computing the basis vector of cell type <Ext_L5_2>.
6 batches are used for computing the basis vector of cell type <Ext_L5_3>.
6 batches are used for computing the basis vector of cell type <Ext_L6>.
6 batches are used for computing the basis vector of cell type <Ext_L6B>.
5 batches are used for computing the basis vector of cell type <Ext_Med>.
6 batches are used for computing the basis vector of cell type <Ext_Pir>.
6 batches are used for computing the basis vector of cell type <Ext_Thal_1>.
6 batches are used for computing the basis vector of cell type <Ext_Thal_2>.
5 batches are used for computing the basis vector of cell type <Ext_Unk_1>.
3 batches are used for computing the basis vector of cell type <Ext_Unk_2>.
5 batches are used for computing the basis vector of cell type <Ext_Unk_3>.
6 batches are used for computing the basis vector of cell type <Inh_1>.
6 batches are used for computing the basis vector of cell type <Inh_2>.
6 batches are used for computing the basis vector of cell type <Inh_3>.
6 batches are used for computing the basis vector of cell type <Inh_4>.
5 batches are used for computing the basis vector of cell type <Inh_5>.
6 batches are used for computing the basis vector of cell type <Inh_6>.
6 batches are used for computing the basis vector of cell type <Inh_Lamp5>.
6 batches are used for computing the basis vector of cell type <Inh_Meis2_1>.
6 batches are used for computing the basis vector of cell type <Inh_Meis2_2>.
6 batches are used for computing the basis vector of cell type <Inh_Meis2_3>.
6 batches are used for computing the basis vector of cell type <Inh_Meis2_4>.
6 batches are used for computing the basis vector of cell type <Inh_Pvalb>.
6 batches are used for computing the basis vector of cell type <Inh_Sst>.
6 batches are used for computing the basis vector of cell type <Inh_Vip>.
6 batches are used for computing the basis vector of cell type <LowQ_1>.
6 batches are used for computing the basis vector of cell type <LowQ_2>.
6 batches are used for computing the basis vector of cell type <Micro>.
6 batches are used for computing the basis vector of cell type <Nb_1>.
6 batches are used for computing the basis vector of cell type <Nb_2>.
6 batches are used for computing the basis vector of cell type <OPC_1>.
6 batches are used for computing the basis vector of cell type <OPC_2>.
6 batches are used for computing the basis vector of cell type <Oligo_1>.
6 batches are used for computing the basis vector of cell type <Oligo_2>.
6 batches are used for computing the basis vector of cell type <Unk_1>.
6 batches are used for computing the basis vector of cell type <Unk_2>.
Preprocess ST data...
Start building a graph...
Radius for graph connection is 1.1000.
6.2781 neighbors per cell on average.
[16]:
model = STitch3D.model.Model(adata_st, adata_basis)
model.train()
result = model.eval(adata_st_list_raw, save = True, output_path = os.path.join(SAVE_PATH, "ST_3D"))
0%| | 1/20000 [00:00<1:34:57, 3.51it/s]
Step: 0, Loss: 5119.6099, d_loss: 5114.2056, f_loss: 54.0438
10%|█ | 2001/20000 [09:06<1:23:29, 3.59it/s]
Step: 2000, Loss: -1542.9170, d_loss: -1545.5353, f_loss: 26.1826
20%|██ | 4001/20000 [18:12<1:14:17, 3.59it/s]
Step: 4000, Loss: -1757.3751, d_loss: -1760.0167, f_loss: 26.4166
30%|███ | 6001/20000 [27:20<1:05:18, 3.57it/s]
Step: 6000, Loss: -1803.1438, d_loss: -1805.7177, f_loss: 25.7389
40%|████ | 8001/20000 [36:27<55:46, 3.59it/s]
Step: 8000, Loss: -1810.8571, d_loss: -1813.4163, f_loss: 25.5923
50%|█████ | 10001/20000 [45:34<46:26, 3.59it/s]
Step: 10000, Loss: -1815.0193, d_loss: -1817.5730, f_loss: 25.5376
60%|██████ | 12001/20000 [54:41<37:14, 3.58it/s]
Step: 12000, Loss: -1817.7644, d_loss: -1820.3264, f_loss: 25.6207
70%|███████ | 14001/20000 [1:03:48<27:49, 3.59it/s]
Step: 14000, Loss: -1819.8013, d_loss: -1822.3513, f_loss: 25.5006
80%|████████ | 16001/20000 [1:12:55<18:35, 3.59it/s]
Step: 16000, Loss: -1818.8445, d_loss: -1821.4131, f_loss: 25.6859
90%|█████████ | 18001/20000 [1:22:03<09:17, 3.58it/s]
Step: 18000, Loss: -1823.9906, d_loss: -1826.5345, f_loss: 25.4397
100%|██████████| 20000/20000 [1:31:12<00:00, 3.65it/s]
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
... storing 'section_index' as categorical
... storing 'ABA_acronym' as categorical
... storing 'ABA_name' as categorical
... storing 'ABA_parent' as categorical
... storing 'cluster_name' as categorical
[ ]: