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