filoma recommends using ydata-profiling to generate a report for a given dataframe. Below is an example of how to do this in a Jupyter notebook.
In [1]:
!uv pip install ydata-profiling ipywidgets ipympl setuptools --upgrade
Using Python 3.11.11 environment at: /home/kalfasy/repos/filoma/.venv Resolved 70 packages in 469ms Resolved 70 packages in 469ms ⠙ Preparing packages... (0/43) ⠙ Preparing packages... (0/43)--- 0 B/4.75 MiB ⠙ Preparing packages... (0/43)--- 16.00 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 32.00 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 48.00 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 62.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 78.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 94.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 110.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 126.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 142.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 158.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 174.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 190.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 206.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 222.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)------- 238.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 0 B/4.75 MiB ⠙ Preparing packages... (0/43)--- 16.00 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 32.00 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 48.00 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 62.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 78.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 94.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 110.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 126.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 142.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 158.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 174.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 190.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 206.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 222.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 238.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 254.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 270.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 718.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 254.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 270.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 718.20 KiB/4.75 MiB ⠙ Preparing packages... (0/43)--- 1.28 MiB/4.75 MiB ⠹ Preparing packages... (42/43)-- 1.28 MiB/4.75 MiB ⠹ Preparing packages... (42/43)-- 1.79 MiB/4.75 MiB ⠹ Preparing packages... (42/43)-- 1.79 MiB/4.75 MiB ⠹ Preparing packages... (42/43)-- 2.36 MiB/4.75 MiB ⠹ Preparing packages... (42/43)-- 2.36 MiB/4.75 MiB ⠹ Preparing packages... (42/43)-- 2.92 MiB/4.75 MiB ⠹ Preparing packages... (42/43)-- 2.92 MiB/4.75 MiB ⠹ Preparing packages... (42/43)-- 3.48 MiB/4.75 MiB ⠸ Preparing packages... (42/43)-- 3.48 MiB/4.75 MiB ⠸ Preparing packages... (42/43)-- 4.02 MiB/4.75 MiB ⠸ Preparing packages... (42/43)-- 4.02 MiB/4.75 MiB ⠸ Preparing packages... (42/43)m- 4.56 MiB/4.75 MiB Prepared 43 packages in 466ms Uninstalled 10 packages in 40ms Prepared 43 packages in 466ms Uninstalled 10 packages in 40ms Installed 43 packages in 51ms + annotated-types==0.7.0 - certifi==2025.6.15 + certifi==2025.8.3 - charset-normalizer==3.4.2 + charset-normalizer==3.4.3 + contourpy==1.3.3 + cycler==0.12.1 + dacite==1.9.2 - executing==2.2.0 + executing==2.2.1 + fonttools==4.60.0 + htmlmin==0.1.12 + imagehash==4.3.1 + ipympl==0.9.7 - ipython==9.4.0 + ipython==9.5.0 + ipywidgets==8.1.7 + joblib==1.5.2 + jupyterlab-widgets==3.0.15 + kiwisolver==1.4.9 + llvmlite==0.44.0 + matplotlib==3.10.0 + multimethod==1.12 + networkx==3.5 + numba==0.61.0 - numpy==2.3.1 + numpy==2.1.3 - parso==0.8.4 + parso==0.8.5 + patsy==1.0.1 + phik==0.12.5 - prompt-toolkit==3.0.51 + prompt-toolkit==3.0.52 + puremagic==1.30 + pydantic==2.11.9 + pydantic-core==2.33.2 + pyparsing==3.2.4 + pywavelets==1.9.0 - requests==2.32.4 + requests==2.32.5 - scipy==1.16.2 + scipy==1.15.3 + seaborn==0.13.2 + statsmodels==0.14.5 + tqdm==4.67.1 + typeguard==4.4.4 - typing-extensions==4.14.1 + typing-extensions==4.15.0 + typing-inspection==0.4.1 + visions==0.8.1 + widgetsnbextension==4.0.14 + wordcloud==1.9.4 + ydata-profiling==4.16.1 Installed 43 packages in 51ms + annotated-types==0.7.0 - certifi==2025.6.15 + certifi==2025.8.3 - charset-normalizer==3.4.2 + charset-normalizer==3.4.3 + contourpy==1.3.3 + cycler==0.12.1 + dacite==1.9.2 - executing==2.2.0 + executing==2.2.1 + fonttools==4.60.0 + htmlmin==0.1.12 + imagehash==4.3.1 + ipympl==0.9.7 - ipython==9.4.0 + ipython==9.5.0 + ipywidgets==8.1.7 + joblib==1.5.2 + jupyterlab-widgets==3.0.15 + kiwisolver==1.4.9 + llvmlite==0.44.0 + matplotlib==3.10.0 + multimethod==1.12 + networkx==3.5 + numba==0.61.0 - numpy==2.3.1 + numpy==2.1.3 - parso==0.8.4 + parso==0.8.5 + patsy==1.0.1 + phik==0.12.5 - prompt-toolkit==3.0.51 + prompt-toolkit==3.0.52 + puremagic==1.30 + pydantic==2.11.9 + pydantic-core==2.33.2 + pyparsing==3.2.4 + pywavelets==1.9.0 - requests==2.32.4 + requests==2.32.5 - scipy==1.16.2 + scipy==1.15.3 + seaborn==0.13.2 + statsmodels==0.14.5 + tqdm==4.67.1 + typeguard==4.4.4 - typing-extensions==4.14.1 + typing-extensions==4.15.0 + typing-inspection==0.4.1 + visions==0.8.1 + widgetsnbextension==4.0.14 + wordcloud==1.9.4 + ydata-profiling==4.16.1
In [2]:
%reset -f
%load_ext autoreload
%autoreload 2
In [3]:
import filoma
dfw = filoma.probe_to_df("../")
dfw = dfw.filter(dfw["suffix"] == ".py")
2025-09-20 21:42:29.318 | DEBUG | filoma.directories.directory_profiler:__init__:352 - Interactive environment detected, disabling progress bars to avoid conflicts 2025-09-20 21:42:29.318 | INFO | filoma.directories.directory_profiler:probe:439 - Starting directory analysis of '../' using 🦀 Rust (Parallel) implementation 2025-09-20 21:42:29.318 | INFO | filoma.directories.directory_profiler:probe:439 - Starting directory analysis of '../' using 🦀 Rust (Parallel) implementation 2025-09-20 21:42:30.518 | SUCCESS | filoma.directories.directory_profiler:probe:455 - Directory analysis completed in 1.20s - Found 84,737 items (78,623 files, 6,114 folders) using 🦀 Rust (Parallel) 2025-09-20 21:42:30.518 | SUCCESS | filoma.directories.directory_profiler:probe:455 - Directory analysis completed in 1.20s - Found 84,737 items (78,623 files, 6,114 folders) using 🦀 Rust (Parallel)
In [5]:
from ydata_profiling import ProfileReport
profile = ProfileReport(dfw.to_pandas(), title="Filoma Report");
In [6]:
profile
Summarize dataset: 0%| | 0/5 [00:00<?, ?it/s]
100%|██████████| 18/18 [00:00<00:00, 4054.43it/s]
Generate report structure: 0%| | 0/1 [00:00<?, ?it/s]
Render HTML: 0%| | 0/1 [00:00<?, ?it/s]
Out[6]:
In [ ]: