Skip to content
Back to skills

Dataset Management

ASecurity

"Select, inspect, configure, and safely load MOABB datasets,

  • 247 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 8, 2026
businesspythonrustapidocumentation

Works with

  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 7 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill dataset-management --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dataset Management?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dataset Management
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-dataset-management/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-dataset-management)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dataset-management
description: "Select, inspect, configure, and safely load MOABB datasets,
  including catalog search, MNE data directories and providers, subject/session
  filtering, FakeDataset, local BIDS data, metadata, and cache/download
  recovery."
disable-model-invocation: true
metadata:
  disco-role: operating
license: BSD 3-Clause
---

# Dataset management

Use this route when the task is to choose a MOABB dataset, inspect its catalog
metadata, select subjects or sessions, configure where data lives, use a local
or synthetic dataset, or diagnose a data/cache/BIDS problem. This route owns
**data acquisition and representation**, not paradigm preprocessing, evaluation
protocols, or result analysis.

## Install and establish the boundary

Install the base distribution in the active environment (`python -m pip install
moabb`); its inspected project dependencies include MNE and `mne-bids`. Verify
with `python -c "import moabb, mne, mne_bids; print(moabb.__version__)"`.
Plotly is optional and only needed for `generate_figures=True` (`moabb[interactive]`).
The built-in XDF reader is part of MOABB; it is used by selected dataset loaders,
not a replacement for validating a recording.

- **No network / tests / tutorials:** use `FakeDataset` or a local BIDS root.
  These paths are deterministic and do not authorize a real download.
- **Catalog choice:** use `moabb.datasets.utils.dataset_search`; inspect the
  returned dataset objects (`code`, `paradigm`, `event_id`, `subject_list`,
  `n_sessions`, `interval`) before handing the object to a paradigm.
- **Root and sibling routes:** use the [MOABB root skill directory](../../),
  [paradigms-and-pipelines](../paradigms-and-pipelines/),
  [evaluations-and-benchmarks](../evaluations-and-benchmarks/), and
  [analysis-and-visualization](../analysis-and-visualization/) links for
  work outside this route.
- **Real data:** state the dataset, subjects, storage root, provider, license
  acceptance, and expected size first. `data_path()` and `get_data()` may
  download missing files; do not run them on an offline or read-only machine.
- **Pipeline/evaluation:** after data selection, route processing to
  `../paradigms-and-pipelines/SKILL.md` and generalization/split decisions to
  `../evaluations-and-benchmarks/SKILL.md` when those sibling routes are
  available. Plotting and result tables belong to
  `../analysis-and-visualization/SKILL.md`.

See [API reference](references/api-reference.md) for verified signatures,
[formats](references/data-formats.md) for structures and metadata, and
[workflows](references/workflows.md) for bounded recipes. Run the bundled
[safe download check](scripts/check_download_config.py) and
[fake/catalog smoke](scripts/smoke_catalog_fake.py) before attempting network
work.

## Select and inspect a dataset

1. Import public classes from `moabb.datasets`; `LocalBIDSDataset` is imported
   from `moabb.datasets.base`. Instantiate the smallest representative object
   first. Dataset objects print their `code`.
2. For filtering, call `dataset_search(paradigm=..., multi_session=...,
   events=..., has_all_events=..., interval=..., min_subjects=...,
   channels=...)`. Valid paradigm values are `imagery`, `p300`, `ssvep`,
   `cvep`, or `None`. `channels` filtering reads subject 1, so it is not an
   offline-safe filter for a catalog with real datasets.
3. Confirm `dataset.subject_list` (selected subjects), `dataset.all_subjects`
   (an immutable-copy view of the full release), `dataset.n_sessions`,
   `dataset.event_id`, `dataset.paradigm`, and `dataset.interval`. Do not
   infer trial counts or channel availability from a dataset name; use the
   summary tables or `metadata`.
4. Use representative catalog families rather than memorizing the whole
   catalog: BNCI classes cover MAT/MI and ERP variants, `PhysionetMI` is a
   large imagery release, and `Nakanishi2015` is a multi-class SSVEP release.
   The catalog and per-dataset docs remain bounded references, not a promise
   that any host is online or that every dataset is installed locally.

## Configure storage and acquisition deliberately

- `moabb.set_download_dir(path)` sets MNE's shared `MNE_DATA` directory and
  creates a missing directory. `None` restores the MNE default only when no
  prior `MNE_DATA` is configured. Prefer an explicit writable project/cache
  directory and verify it with `mne.get_config("MNE_DATA")`.
- Dataset-specific `MNE_DATASETS_<SIGNIFIER>_PATH` settings and an explicit
  `path=` take precedence according to the MNE resolver. `get_dataset_path()`
  may create the default home data directory. Never put credentials or private
  absolute paths in scripts or reports.
- `set_download_provider("auto" | "nemar" | "upstream" | None)` controls
  MOABB's source policy; `get_download_provider()` reports the effective value.
  The `MOABB_DOWNLOAD_PROVIDER` environment variable wins for a run. `auto`
  prefers NEMAR's original `sourcedata/` when available and falls back per
  subject; `nemar` fails instead of falling back; `upstream` bypasses NEMAR.
- `dataset.data_path(subject, path=None, force_update=False,
  update_path=None, verbose=None)` returns a list of local file paths and may
  fetch one subject. `dataset.download(subject_list=None, path=None,
  force_update=False, update_path=None, accept=False, verbose=None)` fetches
  all or selected subjects and returns `None`. `accept=True` is a deliberate
  license choice, not a generic troubleshooting flag.
- Treat `force_update=True` and cache `overwrite_*` as destructive to the
  selected cache/data representation. First preserve or separately copy user
  data, inspect available files, and prefer a new writable `path`.

## Use subjects, sessions, and raw data

`BaseDataset.get_data(subjects=None, cache_config=None, process_pipeline=None,
n_jobs=1)` returns `subject -> session -> run -> mne.io.BaseRaw` (or the object
produced by a fixed process pipeline). `subjects` must be a list drawn from
`dataset.subject_list`; an invalid subject raises `ValueError`. Constructor
filters are the safer repeatable form: `Dataset(subjects=[...], sessions=[...])`.
Session selectors accept integers or strings. Integer `0` matches session keys
such as `"0train"`; exact strings match compound keys. Returned session and run
keys must begin with a numeric index, optionally followed by letters/numbers.

Default loading keeps EEG channels and excludes `stim`; set
`return_all_modalities=True` or pass a channel-type dict such as
`{"eeg": True, "eog": True}` when auxiliary channels are needed. Check
`raw.info["sfreq"]`, `raw.ch_names`, `raw.get_channel_types()`, annotations, and
`raw.n_times` before downstream processing. A stimulus channel may be added by
a loader and is not necessarily a recorded EEG channel.

## Safe offline paths

- `FakeDataset(...)` creates deterministic MNE `RawArray` objects. Set
  `seed`, small `n_subjects`, `n_sessions`, `n_runs`, `duration`, and `n_events`
  for a tiny fixture; choose `stim=True` or `annotations=True` to exercise the
  intended event path. Its `data_path()` is intentionally a no-op and must not
  be used to test network behavior.
- `LocalBIDSDataset(bids_root, path_search_params=None,
  read_extra_params=None, *, subjects=None, sessions_per_subject=None,
  events, code="LocalBIDSDataset-", interval, paradigm, doi=None,
  unit_factor=1e6, return_all_modalities=False)` consumes an existing BIDS root.
  It infers subjects and the minimum sessions per subject when omitted; an
  empty/non-BIDS root raises `ValueError`. The inspected MOABB distribution
  declares `mne-bids` as a base dependency; an import failure means the active
  installation is incomplete or incompatible.
- `dataset.convert_to_bids(path=None, subjects=None, overwrite=False,
  format="EDF", verbose=None, generate_figures=False)` writes a clean BIDS
  representation and returns its root. Supported formats are `EDF`,
  `BrainVision`, `EEGLAB`, and `BDF`; `generate_figures=True` is optional
  Plotly work. This is a data-writing operation: use a new output root and
  verify channel/event metadata before sharing it.
- For archives from untrusted sources, use MOABB's
  `safe_extract_zip()`/`safe_extract_tar()` rather than raw `extractall()`.
  They reject traversal outside the destination and links. The helpers do not
  validate scientific content, checksums, or license terms.

## Validate metadata and mismatches

`dataset.metadata` is a cached `DatasetMetadata` object or `None`; catalog
entries include acquisition (`sampling_rate`, channel counts/types/sensors),
participants, experiment/paradigm, sessions/runs, documentation, and optional
processing/application fields. `get_dataset_metadata("BNCI2014_001")` retrieves
a catalog entry. `validate_metadata_against_dataset(dataset, metadata)` returns
a list of mismatch strings (empty means no checked mismatch). It compares full
release subject counts via `all_subjects`, not a constructor-filtered
`subject_list`; it also checks sessions and country-code validity.

For a BIDS mismatch, first compare the actual `Raw` object and sidecars: exclude
`stim` from EEG channel counts, compare names/types and sampling rate, and check
that `events.tsv` labels intersect `dataset.event_id`. MOABB's BIDS conversion
can enrich `dataset_description.json`, EEG sidecars, `participants.tsv`,
`electrodes.tsv`, event sidecars, and a metadata YAML file. Missing demographic
values are written as `n/a`; do not invent them. A channel-name or metadata
mismatch is a stop-and-review condition, not a reason to silently rename or
remove channels.

## Cache recovery and handoff

`CacheConfig.make(None | dict | CacheConfig)` normalizes cache settings.
Use `{"save_raw": True, "use": True, "path": writable_root}` only when a
repeatable cache is wanted. If a cache has files but no completed session lock,
MOABB treats it as unavailable and recomputes; this is safer than consuming a
partial session. If the root is read-only, do not delete or set overwrite flags:
write a small permission sentinel, select a new writable cache/output root, and
rerun with that `path`. Preserve the original tree for inspection. A permission
failure while writing a BIDS sidecar or lock is an environment/storage problem,
not proof that the dataset bytes are corrupt.

Keep network and large-data operations visibly separate from offline checks.
Record the dataset class/version, provider, path policy, selected subject/session
ids, event mapping, channel policy, and whether data was synthetic, local, or
downloaded. Do not claim a real dataset was downloaded or validated when only
catalog construction or a fake fixture ran.

## Route out

- Paradigm/event windows, filtering, epoching, and sklearn pipelines: [sibling
  paradigms-and-pipelines](../paradigms-and-pipelines/).
- Subject/session generalization, splitters, scores, and benchmark caching:
  [sibling evaluations-and-benchmarks](../evaluations-and-benchmarks/).
- Results DataFrames, chance levels, statistics, plots, and reports: [sibling
  analysis-and-visualization](../analysis-and-visualization/).

Files in this skill

  • SKILL.md10.8 KB
  • references/api-reference.md7.9 KB
  • references/data-formats.md6.4 KB
  • references/troubleshooting.md9 KB
  • references/workflows.md5.5 KB
  • scripts/check_download_config.py2.3 KB
  • scripts/smoke_catalog_fake.py2.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.