appleparan/telemanom
NASA SMAP and MSL Spacecraft Anomaly Detection Dataset Dataset Description This dataset contains real spacecraft telemetry data and labeled anomalies from two NASA missions: SMAP (Soil Moisture Active Passive satellite) MSL (Mars Science Laboratory / Curiosity Rover) The data was originally used in the 2018 KDD paper Detecting Spacecraft Anomalies Using LSTMs and Nonparametric Dynamic Thresholding and released via the telemanom repository. Dataset… See the full description on the dataset page: https://huggingface.co/datasets/appleparan/telemanom.
NASA SMAP and MSL Spacecraft Anomaly Detection Dataset
Dataset Description
This dataset contains real spacecraft telemetry data and labeled anomalies from two NASA missions:
- SMAP (Soil Moisture Active Passive satellite)
- MSL (Mars Science Laboratory / Curiosity Rover)
The data was originally used in the 2018 KDD paper Detecting Spacecraft Anomalies Using LSTMs and Nonparametric Dynamic Thresholding and released via the telemanom repository.
Dataset Structure
data/
train/ # 82 Parquet files (one per channel)
test/ # 82 Parquet files (one per channel)
data/
train/ # 82 .npy files (original format)
test/ # 82 .npy files (original format)
labeled_anomalies.csvEach channel is available as a separate config (e.g., A-1, P-1, M-1) that can be selected in the dataset viewer or loaded programmatically.
Data Files
Each Parquet file contains the following columns:
- All telemetry values are anonymized and normalized to
[-1, 1]based on min/max in the test set. - Channel IDs are anonymized; the first letter indicates channel type (
P= power,R= radiation, etc.). - SMAP channels have 24 command columns; MSL channels have 54 command columns.
Anomaly Labels (labeled_anomalies.csv)
Dataset Statistics
Usage
Using datasets library (recommended)
from datasets import load_dataset
# Load a specific channel (e.g., P-1)
ds = load_dataset("appleparan/telemanom", name="P-1")
print(ds)
# DatasetDict({
# train: Dataset({features: ['timestep', 'value', 'cmd_0', ...], num_rows: ...})
# test: Dataset({features: ['timestep', 'value', 'cmd_0', ...], num_rows: ...})
# })
# Access train/test splits
train_df = ds["train"].to_pandas()
test_df = ds["test"].to_pandas()Using numpy (original .npy format)
import numpy as np
from huggingface_hub import hf_hub_download
path = hf_hub_download(
repo_id="appleparan/telemanom",
filename="data/data/test/P-1.npy",
repo_type="dataset",
)
data = np.load(path)
print(data.shape) # (n_timesteps, n_inputs)Source
- Original repository: khundman/telemanom
- Paper: arXiv:1802.04431
- Contributors: Kyle Hundman, Valentinos Constantinou, Christopher Laporte, Ian Colwell, Tom Soderstrom (NASA JPL)
Citation
@inproceedings{hundman2018detecting,
title = {Detecting Spacecraft Anomalies Using LSTMs and Nonparametric Dynamic Thresholding},
author = {Hundman, Kyle and Constantinou, Valentino and Laporte, Christopher and Colwell, Ian and Soderstrom, Tom},
booktitle = {Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining},
year = {2018}
}License
This dataset is distributed under the BSD 3-Clause License (Copyright (c) 2018, California Institute of Technology).
Note: The original repository's README states Apache 2.0, but the actual LICENSE.txt file contains a BSD 3-Clause license from Caltech/JPL. This dataset card follows the license file.
