from omicslog import log_start import numpy as np import pandas as pd import anndata as ad from scipy .sparse import csr_matrix 📝 Note
The AnnData object were generated using code from the original
AnnData documentation.
counts = csr_matrix (np .random .poisson (1 , size = (100 , 2000 )), dtype = np .float32 )
adata = ad .AnnData (counts )
adata .obs_names = [f"Cell_{ i :d} " for i in range (adata .n_obs )]
adata .var_names = [f"Gene_{ i :d} " for i in range (adata .n_vars )]
logdata = log_start (adata )
print (logdata )
ct = np .random .choice (["B" , "T" , "Monocyte" ], size = (logdata .n_obs ,))
logdata .obs ["cell_type" ] = pd .Categorical (ct ) # Categoricals are preferred for efficiency print (logdata )
logdata .uns ["_omicslog" ]AnnData object with n_obs × n_vars = 100 × 2000
uns: '_omicslog'
AnnData object with n_obs × n_vars = 100 × 2000
obs: 'cell_type'
uns: '_omicslog'
Operation log:
[2026-05-20 13:49:41] obs: 'cell_type' added
<style scoped>
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
Time Operation Message 0 2026-05-20 13:49:41 obs 'cell_type' added
Fltrating by Cells (.obs) logdata = logdata [logdata .obs .cell_type == "B" ]
print (logdata )
logdata .uns ["_omicslog" ]AnnData object with n_obs × n_vars = 27 × 2000
obs: 'cell_type'
uns: '_omicslog'
Operation log:
[2026-05-20 13:49:41] obs: 'cell_type' added
[2026-05-20 13:49:43] subset: removed 73 samples (73%), 27 samples remaining
<style scoped>
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
Time Operation Message 0 2026-05-20 13:49:41 obs 'cell_type' added 1 2026-05-20 13:49:43 subset removed 73 samples (73%), 27 samples remaining
Filtering by Genes (.var) logdata = logdata [:,logdata .var_names .str .endswith ("1" )]
print (logdata )
logdata .uns ["_omicslog" ]AnnData object with n_obs × n_vars = 27 × 200
obs: 'cell_type'
uns: '_omicslog'
Operation log:
[2026-05-20 13:49:41] obs: 'cell_type' added
[2026-05-20 13:49:43] subset: removed 73 samples (73%), 27 samples remaining
[2026-05-20 13:49:46] subset: removed 1800 genes (90%), 200 genes remaining
<style scoped>
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
Time Operation Message 0 2026-05-20 13:49:41 obs 'cell_type' added 1 2026-05-20 13:49:43 subset removed 73 samples (73%), 27 samples remaining 2 2026-05-20 13:49:46 subset removed 1800 genes (90%), 200 genes remaining
Adding observatons and variables logdata .obsm ["X_umap" ] = np .random .normal (0 , 1 , size = (logdata .n_obs , 2 ))
logdata .varm ["gene_stuff" ] = np .random .normal (0 , 1 , size = (logdata .n_vars , 5 ))
print (logdata )
logdata .uns ["_omicslog" ]AnnData object with n_obs × n_vars = 27 × 200
obs: 'cell_type'
uns: '_omicslog'
obsm: 'X_umap'
varm: 'gene_stuff'
Operation log:
[2026-05-20 13:49:41] obs: 'cell_type' added
[2026-05-20 13:49:43] subset: removed 73 samples (73%), 27 samples remaining
[2026-05-20 13:49:46] subset: removed 1800 genes (90%), 200 genes remaining
[2026-05-20 13:49:48] obsm: 'X_umap' added
[2026-05-20 13:49:48] varm: 'gene_stuff' added
<style scoped>
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
Time Operation Message 0 2026-05-20 13:49:41 obs 'cell_type' added 1 2026-05-20 13:49:43 subset removed 73 samples (73%), 27 samples remaining 2 2026-05-20 13:49:46 subset removed 1800 genes (90%), 200 genes remaining 3 2026-05-20 13:49:48 obsm 'X_umap' added 4 2026-05-20 13:49:48 varm 'gene_stuff' added
logdata .layers ["log_transformed" ] = np .log1p (logdata .X )
print (logdata )
logdata .uns ["_omicslog" ]AnnData object with n_obs × n_vars = 27 × 200
obs: 'cell_type'
uns: '_omicslog'
obsm: 'X_umap'
varm: 'gene_stuff'
layers: 'log_transformed'
Operation log:
[2026-05-20 13:49:41] obs: 'cell_type' added
[2026-05-20 13:49:43] subset: removed 73 samples (73%), 27 samples remaining
[2026-05-20 13:49:46] subset: removed 1800 genes (90%), 200 genes remaining
[2026-05-20 13:49:48] obsm: 'X_umap' added
[2026-05-20 13:49:48] varm: 'gene_stuff' added
[2026-05-20 13:49:50] layers: 'log_transformed' added
<style scoped>
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
Time Operation Message 0 2026-05-20 13:49:41 obs 'cell_type' added 1 2026-05-20 13:49:43 subset removed 73 samples (73%), 27 samples remaining 2 2026-05-20 13:49:46 subset removed 1800 genes (90%), 200 genes remaining 3 2026-05-20 13:49:48 obsm 'X_umap' added 4 2026-05-20 13:49:48 varm 'gene_stuff' added 5 2026-05-20 13:49:50 layers 'log_transformed' added