A library with core primitives for analysis shared across all `Aind.Behavior` tasks
Project description
aind-behavior-core-analysis
A repository with core primitives for analysis shared across all Aind.Behavior tasks.
This repository is part of a bigger infrastructure that is summarized here.
⚠️ Caution:
This repository is currently under active development and is subject to frequent changes. Features and APIs may evolve without prior notice.
Installing and Upgrading
If you choose to clone the repository, you can install the package by running the following command from the root directory of the repository:
pip install .
Otherwise, you can use pip:
pip install aind-behavior-core-analysis
Getting started and API usage
The library provides two main functionalities: data contracts for standardized data loading and quality control tools for data validation.
Creating and Using Data Contracts
Data contracts provide a standard way to access and load data from various sources. Here's a simple example:
from pathlib import Path
from aind_behavior_core_analysis.contract import Dataset, DataStreamCollection
from aind_behavior_core_analysis.contract.csv import Csv
from aind_behavior_core_analysis.contract.text import Text
# Define the dataset structure
dataset_root = Path("path/to/dataset")
my_dataset = Dataset(
name="my_dataset",
version="1.0.0",
description="Example dataset",
data_streams=[
DataStreamCollection(
name="Behavior",
description="Behavior data",
data_streams=[
Csv(
"Position",
description="Animal position data",
reader_params=Csv.make_params(
path=dataset_root / "behavior/position.csv",
),
),
Text(
name="Log",
description="Session log file",
reader_params=Text.make_params(
path=dataset_root / "behavior/session.log",
),
),
],
),
],
)
# Load a specific stream
position_data = my_dataset["Behavior"]["Position"].load().data
print(f"Position data shape: {position_data.shape}")
# Load all streams and handle errors
my_dataset.load_all()
Quality Control of Primary Data
The QC module helps validate your data to ensure it meets specific requirements:
import aind_behavior_core_analysis.qc as qc
# Using the dataset created above
data_stream = my_dataset["Behavior"]["Position"]
# Create and run test suites
runner = qc.Runner()
# Add test suites for different data types
runner.add_suite(qc.csv.CsvTestSuite(data_stream))
# Or create your own custom test suite
class MyCustomTestSuite(qc.Suite):
def __init__(self, data_stream):
self.data_stream = data_stream
def test_has_expected_columns(self):
"""Check if data has required columns."""
expected_cols = {"timestamp", "x", "y", "speed"}
if not expected_cols.issubset(self.data_stream.data.columns):
missing = expected_cols - set(self.data_stream.data.columns)
return self.fail_test(None, f"Missing columns: {missing}")
return self.pass_test(None, "All required columns present")
runner.add_suite(MyCustomTestSuite(data_stream))
# Run all tests and display results
results = runner.run_all_with_progress()
For more detailed examples, please check the Examples folder.
Contributors
Contributions to this repository are welcome! However, please ensure that your code adheres to the recommended DevOps practices below:
Linting
We use ruff as our primary linting tool.
Testing
Attempt to add tests when new features are added.
To run the currently available tests, run uv run pytest from the root of the repository.
Lock files
We use uv to manage our lock files and therefore encourage everyone to use uv as a package manager as well.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aind_behavior_core_analysis-0.2.1.tar.gz.
File metadata
- Download URL: aind_behavior_core_analysis-0.2.1.tar.gz
- Upload date:
- Size: 152.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ca9c3cf706ebad7853c9e2622897479530167a6f7b9e61df34b37694f6ab98d
|
|
| MD5 |
840f4350da535d22d6c2d7ad3832649f
|
|
| BLAKE2b-256 |
27d4d31e05fa5130f5c595c0f06b60c8de9d378932c413eb3522a805faee7431
|
File details
Details for the file aind_behavior_core_analysis-0.2.1-py3-none-any.whl.
File metadata
- Download URL: aind_behavior_core_analysis-0.2.1-py3-none-any.whl
- Upload date:
- Size: 41.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a954c68875465dbdddc1bffcc2a2bc1056b801527452a795a5afb3dc8552470
|
|
| MD5 |
28f1e7895cc56601ec5fb7547c8ec719
|
|
| BLAKE2b-256 |
42dec80312eb80a1406fd719e409f994eec75acfa1e1fc142faed6939581ee6f
|