Skip to main content

Canonada is a data science framework that helps you build production-ready streaming pipelines for data processing in Python.

Project description

Canonada

Canonada is a data science framework that helps you build production-ready streaming pipelines for data processing in Python.

GitHub branch check runs PyPI - Version PyPI - Downloads

Why Canonada?

  • Standardized: Canonada provides a standardized way to build your data projects
  • Modular: Canonada is modular and allows you to build and visualize data pipelines with ease
  • Memory Efficient: Canonada is memory efficient and can handle large datasets by streaming data through the pipeline instead of loading it all at once

Features

  • Centralized control of data sources: Manage all your data sources in one place, enabling you to keep your team in sync
  • Centralized control of the project configuration: Manage all your project configurations in one place
  • Easy dataloading: Load data from various sources like CSV, JSON, Parquet, etc.
  • Use functions as nodes: Functions are the building blocks of Canonada. You can use any function as a node in your pipeline
  • Create streaming data pipelines: Create parallel and sequential data pipelines with ease
  • Visualize your data pipeline: Visualize your data pipelines, nodes and connections

Summary

The goal of Canonada is to help data scientists and engineers to organize their data projects with a standardized structure that facilitates more maintainable code compared to one-off scripts and notebooks.

Canonada allows you to define data projects as graphs, composed of nodes and edges, that stream data dynamically from your defined sources to memory, allowing the usage datasets bigger than memory. The system parallelizes the execution of your projects allowing you to focus exclusively on the data processing logic you care about.

Let's quickly define a data pipeline as an example:

We will define this simple pipeline that transforms a few timeseries signals:

Use canonada view to get a representation of your data pipelines

# Import example functions to transform the data
from .nodes import example_nodes

# Define the pipeline
streaming_pipe = Pipeline("streaming_pipe", [
        # Read each signal from the catalog and add an offset defined in the parameters
        Node(
            func=example_nodes.add_offset, 
            input=["raw_signals", "params:section_1.offset"], # Load inputs from the catalog
            output=["offset_signals"],
            name="create_offsets",
            description="Adds parametrized offset to the signals"
            ),
        # Save the previous output to disk with a dummy module
        Node(
            func=lambda x: x, # Just pass the input to the output
            input=["offset_signals"],
            output=["offset_signals_catalog"],
            name="save_offsets",
            description="Saves the offset signals using the datahandler specified in the catalog"
        ),
        # Calculate the maximum value of each signal
        Node(
            func=example_nodes.get_signal_max,
            input=["offset_signals"],
            output=["max_values"],
            name="get_signal_max",
            description="Calculates the maximum value of the signals"
        ),
        # Calculate the mean value of each signal
        Node(
            func=example_nodes.calculate_mean,
            input=["offset_signals"],
            output=["mean_values"],
            name="calculate_mean",
            description="Calculates the mean value of the signals"
        ),
        # Save the stats of the signals in a CSV file
        Node(
            func=example_nodes.list_stats,
            input=["offset_signals", "max_values", "mean_values"],
            output=["stats"], # It will be saved in the defined file in the catalog
            name="list_stats",
            description="Returns the stats of the signals"
        )
    ],
    description="This pipeline reads signals from the catalog, adds an offset, calculates the maximum and mean values, and saves the stats to disk"
)

Done! Defining a data pipeline is as simple as that. To execute it you can type canonada run pipelines streaming_pipe on your terminal or use the .run() method of your pipeline object. Canonada will take care of the rest and parallelize the execution without any extra effort.

Checkout the Getting Started guide for more information.

Usage

Available commands:

Usage: canonada <command> <args>
Commands:
    new <project_name> - Create a new project
    catalog [list/params] - List all available datasets or get the project parameters
    registry [pipelines/systems] - List all available pipelines or systems
    run [pipelines/systems] <name(s)> - Run a pipeline or system
    view [pipelines/systems] <name(s)> - View a pipeline or system
    version - Print the version of Canonada

Installation

Canonada is available on PyPI and can be installed using pip:

pip install canonada

Check out the Getting Started guide to learn how to create a new project with Canonada.

Documentation

Check out the project's documentation here

Contributing

Contributions are welcome! If you have any suggestions, examples, datahandlers, bug reports, or feature requests, please open an issue or a discussion thread.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

canonada-0.6.2.tar.gz (26.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

canonada-0.6.2-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

Details for the file canonada-0.6.2.tar.gz.

File metadata

  • Download URL: canonada-0.6.2.tar.gz
  • Upload date:
  • Size: 26.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for canonada-0.6.2.tar.gz
Algorithm Hash digest
SHA256 8d463608f6698c3ce0eb96a3cb021c71b857d551c70b807419b3e8ae931a308e
MD5 fe5b6a9dc71cba76a0386ff0f46c763c
BLAKE2b-256 a0253e22b8cda9990d29ae836b7a636efd3be267a026397da49a5ee401634f5c

See more details on using hashes here.

File details

Details for the file canonada-0.6.2-py3-none-any.whl.

File metadata

  • Download URL: canonada-0.6.2-py3-none-any.whl
  • Upload date:
  • Size: 26.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for canonada-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 84bf9473ba1d1424c22e9f4f71c120067848ef5c06c95d9ca37cf004db6c6ef9
MD5 a091028be2367058e282d0da619f4651
BLAKE2b-256 97a25d822dadb28d6c26345a188c7c274434d80d66cd91345c9cc37d308411a0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page