dataset-profiling

A first-step guide for inspecting a machine-learning dataset before selecting a model, metric, or data split. It supports local files, Kaggle datasets, and data stored in Google Colab.

In plain words
What is it for?
Use it to inspect file structures, columns, labels, sample counts, and dataset characteristics, then use that profile to choose the next modelling and evaluation steps.
Why use it?
It prevents decisions based on assumptions about the data and explains how to profile datasets that the assistant cannot directly access, such as files inside a Kaggle run.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/mxslr/mlcraft/dataset-profiling
Any agent
npx skills add mxslr/mlcraft --skill dataset-profiling
Clone the repo
git clone --depth 1 https://github.com/mxslr/mlcraft

Made for: Claude Code, Codex.

Per session 150 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 884 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00150 $0.00884
Opus 5 $0.00075 $0.00442
Sonnet 5 $0.00030 $0.00177
Haiku 4.5 $0.00015 $0.00088

Measured 2d ago against content hash f4108f6247ef, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

dataset-profiling scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/dataset-profiling/SKILL.md · 56 lines

How it starts

The opening of the file, as written. The whole thing — 56 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Dataset Profiling (understand the data first)

Never choose a model, metric, or split before inspecting the actual data. The profile drives every later decision.

Where is the data? Pick the access path.

Situation How the assistant sees the data
Local files (a folder or CSV on this machine) The assistant reads them directly with its file tools. Ask for the path.
Kaggle dataset (only on Kaggle) The assistant CANNOT read /kaggle/input from your machine. Use option A or B below.
Google Colab (data in Drive) Mount Drive, then treat it as local.

/kaggle/input exists only inside a Kaggle kernel. During a Commit the notebook code reads it; the assistant running on your machine cannot.

Kaggle option A (recommended, no download): run a profiling cell, paste the output back

Emit this cell for the user to run on Kaggle, then use the printed summary to decide method, metric, and split:

import glob, os, pandas as pd
base = '/kaggle/input'
print('TREE (top levels):')
for r, d, f in os.walk(base):
    depth = r[len(base):].count(os.sep)
    if depth <= 2:
        print('  ' * depth, os.path.basename(r) or r, f'[{len(f)} files]')
for c in glob.glob(base + '/**/*.csv', recursive=True)[:5]:
    df = pd.read_csv(c, nrows=5)
    print('\nCSV', c, df.shape, list(df.columns))
    print(df.head(3).to_string())
imgs = glob.glob(base + '/**/*.jp*g', recursive=True) + glob.glob(base + '/**/*.png', recursive=True)
print('\nimage files:', len(imgs))

Ask the user to paste the output, then extend the cell as needed (class counts, image sizes, label joins).

Kaggle option B: download locally with the Kaggle API

If the user has a kaggle.json token: kaggle datasets download -d <owner/dataset> (or kaggle competitions download -c <name>), unzip, then profile the local folder directly.

What to profile (by modality)

  • Tabular: shape, column dtypes, missing percentage, target distribution, high-cardinality columns, and columns that could leak the label.
  • Images: count per class, image sizes and aspect ratios, color vs grayscale, corrupt files, folder layout, and a few sample views.
  • Text: length distribution, label balance, duplicates, and language.
  • Time-series: sampling frequency, gaps, time range, and count per series.
  • Audio: sample rate, clip duration, and count per class.

Read the full file on GitHub · 56 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 56 lines · 150 tokens per session scan A f4108f6247ef

Subscribe to this mod's changes

dataset-profiling is a skill published in the GitHub repository mxslr/mlcraft (8 stars, last pushed 1mo ago), licensed MIT. It adds 150 tokens to every session and 884 once invoked, about $0.0007 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

torch-performance-optimization

Optimize or review eager CPU-only Albucore PyTorch runtime paths with benchmark-backed decisions. Use when adding or changing Torch CPU kernels, Tensor/NumPy bridges, Torch backend routing, tensor layouts, allocations, threading, profiling, memory-format candidates, or Torch performance benchmarks.

albumentations-team/albucore · 60 tokens

ml-for-aec

Computer vision for buildings, image-to-floorplan, generative ML models, performance prediction, structural analysis ML, energy prediction, natural language to design, and point cloud ML for AEC computational design.

Abhinavbwj/Claude-skills-for-Computational-Designers · 39 tokens

yolo-export

Use when exporting or deploying Ultralytics YOLO models in Platform or code — the Platform Export tab and yolo export/model.export() for ONNX, TensorRT, CoreML, OpenVINO, LiteRT, NCNN, ExecuTorch, and NPUs (RKNN, QNN, Hailo, Ascend, IMX, Axelera, DeepX), FP16/INT8 quantization, benchmarking, and non-Python runtimes.…

ultralytics/skills · 114 tokens

yolo-training

Use when training, fine-tuning, or validating Ultralytics YOLO models in Platform, cloud GPUs, or local code — model.train(), yolo train/val, remote metric streaming, epochs, batch, imgsz, devices, augmentation, multi-GPU, resumes, results, and fixing OOM, NaN loss, low mAP, or overfitting. For hyperparameter search…

ultralytics/skills · 95 tokens

yolo-datasets

Use when uploading, annotating, building, converting, analyzing, or debugging datasets in Ultralytics Platform or local YOLO — Platform dataset management and Smart Annotation, data.yaml, YOLO label .txt formats, COCO/DOTA/mask conversion, auto-labeling, splits, validation, and errors like "no labels found" or mAP…

ultralytics/skills · 97 tokens

yolo-models

Use when choosing or comparing Ultralytics models in Platform or code — picking a model family (YOLO26/YOLO11/YOLOv8, YOLO-World, YOLOE, SAM/SAM2/FastSAM, RT-DETR, YOLO-NAS), size (n/s/m/l/x), task variant (-seg, -sem, -cls, -pose, -obb, -depth), pretrained checkpoint, open-vocabulary or promptable…

ultralytics/skills · 128 tokens