Changelog

0.1.5

New features

  • Continuous variable support — numeric (float/int) columns are now profiled automatically alongside categorical ones. Each continuous column gets:

    • A histogram with KDE overlay.

    • Vertical lines marking the mean (dashed red) and median (dotted orange).

    • A descriptive-statistics card: mean, median, standard deviation, min, max, Q1 (25th percentile), Q3 (75th percentile), and missing-value count.

  • Pearson correlation heatmap — when a DataFrame contains two or more continuous columns the default and modern templates add a Pearson correlation heatmap alongside the Cramér’s V heatmap (categorical columns only).

  • Modern template — alternative static visual style (template="modern").

  • Custom template support — pass any file-system path to a .html.j2 Jinja2 file; mode (static/interactive) is auto-detected from a tag in the file.

  • Unified renderer — a single _profile_render function handles all templates; _build_context produces one canonical context dict consumed by both static and interactive modes.

  • verbose parameter on profile() and prepare() — progress visible by default, suppressible via verbose=False.

Graphics improvements

  • Applied sns.set_theme(style="whitegrid", palette="muted") consistently across all charts.

  • All plot functions now use the fig, ax = plt.subplots() pattern and call plt.close(fig) after saving, eliminating figure memory leaks.

  • Memory-usage bar chart extracted into _plot_memory_bar().

  • Templates renamed to version-independent .html.j2 names: default.html.j2, modern.html.j2, interactive.html.j2.

Bug fixes

  • Jinja2 Environment now uses autoescape=True — prevents HTML injection via dataset_name.

  • handle_missing_values and _automatic_data_conversions no longer mutate the caller’s DataFrame (operate on df.copy()).

  • Interactive renderer now detects continuous columns correctly and excludes them from Cramér’s V and Theil’s U.

  • pd.concat inside correlation loop replaced with list-of-dicts + single pd.DataFrame(rows) call, eliminating O(n²) memory growth.

Code quality

  • Replaced os.path with pathlib.Path throughout.

  • Added type hints to all public and private functions.

  • Expanded test suite to 83 tests.

0.1.4

  • out_html parameter added to profile() — specify the output filename instead of always writing report.html.

  • prepare() default changed from auto_data_prep='CLM' to auto_data_prep='internal' — built-in conversion used by default, CleverMiner opt-in only.

  • Added _to_float_codes() helper for Spearman rank correlation encoding in the interactive template.

0.1.3

  • Interactive report template (credit: Jan Nejedly) — profile() gained template parameter; pass template='interactive' to use it.

  • handle_missing_values() with 75+ built-in sentinel strings.

  • na_values, na_ignore, keep_default_na options.

  • _theils_u() — asymmetric uncertainty coefficient for interactive correlation analysis.

  • Updated default template (default_0_1_3.tem).

0.1.2

  • prepare() gained auto_data_prep parameter — 'CLM' (default) uses CleverMiner; any other value uses the new built-in _automatic_data_conversions() fallback.

0.1.0

  • Initial release.

  • profile() with default template (static HTML, Cramér’s V heatmaps).

  • prepare() via CleverMiner for automatic numeric category ordering.