Markdown Converter
Agent skill for markdown-converter
Brute Force Plotter is a Python tool designed to visualize data quickly with minimal configuration. It automatically generates various plots based on data types (categorical, numeric) from CSV files.
Sign in to like and favorite skills
Brute Force Plotter is a Python tool designed to visualize data quickly with minimal configuration. It automatically generates various plots based on data types (categorical, numeric) from CSV files.
src/ - Main source code directory
__init__.py - Package initialization and public API__main__.py - Entry point for module executionbrute_force_plotter.py - Backward compatibility layerlibrary.py - Python library interfacecore/ - Core functionality
config.py - Global configuration and constantsdata_types.py - Data type inference logicutils.py - Utility functionsplotting/ - Plotting modules
base.py - Base plotting functions and decoratorssingle_variable.py - 1D distribution plotstwo_variable.py - 2D interaction plotsthree_variable.py - 3D interaction plotssummary.py - Correlation and missing values plotstimeseries.py - Time series visualizationsmaps.py - Geographic map visualizationsstats/ - Statistical exports
export.py - Statistical summary exportcli/ - Command-line interface
commands.py - Click CLI commandsorchestration.py - Plot generation orchestrationexample/ - Example data and output
titanic.csv - Sample CSV datatitanic_dtypes.json - Data type definitionsoutput/ - Generated plots directorytests/ - Test suite (143 tests, ~96% coverage)pyproject.toml - Python project configuration and dependenciesuv.lock - Locked dependency versions for reproducibilityREADME.md - Documentation in Markdown formatThe tool is executed as a Python module:
python3 -m src <input_file.csv> <dtypes.json> <output_directory>
"c" - categorical variable"n" - numeric variable"i" - ignore this columnuv run python3 -m src example/titanic.csv example/titanic_dtypes.json example/output
uv sync
The tool generates three types of visualizations:
Distribution Plots (1D):
2D Interaction Plots:
3D Interaction Plots: (currently commented out in code)
matplotlib.use("agg") for non-interactive backend@dask.delayed decorator for lazy evaluation@ignore_if_exist_or_save decorator to skip existing plotsGenerated plots are organized in subdirectories:
distributions/ - Single variable plots2d_interactions/ - Two variable relationship plots3d_interactions/ - (reserved for future use)The project includes a comprehensive test suite with 81+ tests covering:
Running Tests:
# Run all tests pytest # Run with coverage pytest --cov=src --cov-report=html # Run specific test categories pytest -m unit # Unit tests only pytest -m integration # Integration tests only pytest -m edge_case # Edge case tests only
Test Coverage: ~96% code coverage across the codebase.
The codebase is organized into modular components for maintainability:
core/: Core functionality shared across modules
config.py: Global configuration, constants, and state managementdata_types.py: Automatic data type inference logicutils.py: Utility functions (path handling, decorators, sampling)plotting/: All visualization logic organized by plot type
base.py: Common plotting functions and decoratorssingle_variable.py: Distribution plots for individual variablestwo_variable.py: Interaction plots between two variablesthree_variable.py: 3D visualizations for three variablessummary.py: Correlation matrices and missing value analysistimeseries.py: Time series specific visualizationsmaps.py: Geographic map generation with Foliumstats/: Statistical analysis and export
export.py: CSV export of statistical summariescli/: Command-line interface
commands.py: Click command definitions and argument parsingorchestration.py: Main plot generation orchestration logiclibrary.py: Programmatic Python API for use in scripts
brute_force_plotter.py: Backward compatibility layer that re-exports all functions for existing code
This modular structure reduces merge conflicts when multiple features are developed in parallel and makes the codebase easier to navigate and maintain.
When modifying this codebase:
brute_force_plotter.py re-exports new functions@dask.delayed for performanceIMPORTANT: Always run ruff before creating a PR to ensure tests pass in CI.
This project uses Ruff for linting and formatting:
# Check for linting issues ruff check . # Auto-fix linting issues ruff check --fix . # Format code ruff format .
Pre-commit Hooks: The project uses pre-commit hooks to automatically enforce code quality on every commit:
# Install pre-commit hooks pre-commit install # Run all hooks manually pre-commit run --all-files
Before Making a PR:
ruff check --fix . to fix any linting issuesruff format . to format codepytest to ensure all tests passThe CI pipeline runs these checks automatically:
ruff check .)ruff format --check .)Note: PRs that fail linting or formatting checks will not be merged. Always run ruff locally before pushing.
This project uses GitHub Actions for continuous integration and deployment:
CI Workflow (
):
Runs on every push to .github/workflows/python-package.yml
master and on all pull requests:
uv sync --all-extrasuv run ruff check .uv run ruff format --check .uv run pytestPublishing Workflow (
):
Automatically publishes to PyPI when a release is created..github/workflows/python-publish.yml
Important: All code changes must pass CI checks (linting, formatting, and tests) before they can be merged.
✅ Good Tasks for Copilot:
❌ Tasks Better Done by Humans:
When making code changes: