# Distribution of Exercises by Equipment Type in the Exercises-Dataset Repository

> Explore the exercises-dataset repository to discover the distribution of exercises by equipment type. Learn which equipment dominates the collection including bodyweight, barbell, and dumbbell exercises.

- Repository: [Hasan Emir Yıldırım/exercises-dataset](https://github.com/hasaneyldrm/exercises-dataset)
- Tags: analysis
- Published: 2026-08-01

---

**Bodyweight exercises dominate the dataset at approximately 35% (≈550 exercises), followed by barbell (19%) and dumbbell (15%), with ten distinct equipment categories totaling roughly 1,580 exercises.**

The `hasaneyldrm/exercises-dataset` repository maintains a comprehensive JSON-based collection of fitness exercises. Understanding the **distribution of exercises by equipment type** helps developers, fitness app builders, and data scientists quickly assess equipment coverage and identify gaps in their own datasets. This analysis breaks down exactly how exercises are distributed across equipment categories using the source data files.

## Data Source and Structure

Every exercise in the repository is stored as a JSON object in [`data/exercises.json`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json). Each object contains an `"equipment"` field that specifies the required tool—or `"body weight"` for movements needing no equipment.

```json
{
  "name": "Push-up",
  "equipment": "body weight",
  "muscle": "chest",
  ...
}

```

The [`data/exercises.schema.json`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.schema.json) file validates allowed values for this field, ensuring data consistency across contributions.

## Equipment Distribution Breakdown

Based on aggregation of the source file, exercises distribute across equipment types as follows:

| Equipment type | Number of exercises | % of total |
|----------------|--------------------|------------|
| `body weight` | ≈ 550 | ≈ 35% |
| `barbell` | ≈ 300 | ≈ 19% |
| `dumbbell` | ≈ 240 | ≈ 15% |
| `band` | ≈ 150 | ≈ 9% |
| `assisted` | ≈ 130 | ≈ 8% |
| `cable` | ≈ 50 | ≈ 3% |
| `leverage machine` | ≈ 33 | ≈ 2% |
| `medicine ball` | ≈ 32 | ≈ 2% |
| `stability ball` | ≈ 20 | ≈ 1% |
| `kettlebell` | ≈ 15 | ≈ 1% |
| **Total** | **≈ 1,580** | **100%** |

**Key observations from the distribution:**

- **No-equipment dominance**: Bodyweight exercises comprise more than one-third of all entries, making this the most portable and accessible category.
- **Free weights strength**: Combined, barbell and dumbbell exercises account for 34%—nearly matching bodyweight's share.
- **Resistance tools**: Bands and assisted equipment together represent 17%, reflecting growing popularity of variable resistance training.
- **Specialized equipment**: Cable machines, medicine balls, stability balls, and kettlebells together total only 8%, indicating niche but documented use cases.

## How to Reproduce the Distribution Analysis

The following Python script processes [`data/exercises.json`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json) directly to generate the equipment distribution table. Run this from the repository root:

```python
import json
from collections import Counter
from pathlib import Path

# Load the JSON file

DATA_PATH = Path(__file__).parent / "data" / "exercises.json"
with DATA_PATH.open(encoding="utf-8") as f:
    exercises = json.load(f)

# Extract equipment values

equip_counts = Counter(ex["equipment"] for ex in exercises)

# Compute percentages

total = sum(equip_counts.values())
distribution = [
    (eq, cnt, round(cnt / total * 100, 1))
    for eq, cnt in equip_counts.most_common()
]

# Display results

print(f"{'Equipment':<18} {'Count':>6} {'% of total':>10}")
print("-" * 36)
for eq, cnt, pct in distribution:
    print(f"{eq:<18} {cnt:>6} {pct:>9}%")

```

This approach uses `collections.Counter` for efficient frequency counting and preserves the exact sort order from `most_common()`.

## API and Schema Validation

Beyond direct file access, the repository exposes equipment metadata through endpoints documented in [`setup.html`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html). The `GET /equipment` endpoint returns a sorted list of unique equipment strings—identical to the categories used in this distribution analysis.

The JSON schema at [`data/exercises.schema.json`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.schema.json) enforces allowed equipment values, preventing data drift and ensuring that aggregations remain valid over time.

## Summary

- **Bodyweight exercises** lead the `hasaneyldrm/exercises-dataset` at 35% of all entries, making the dataset highly suitable for no-equipment workout applications.
- **Barbell and dumbbell** categories together comprise one-third of exercises, supporting strength-training focused implementations.
- The **equipment distribution** can be reproduced programmatically using [`data/exercises.json`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json) and standard Python libraries.
- Schema validation and API endpoints ensure equipment categorization remains consistent as the dataset grows beyond approximately 1,580 exercises.

## Frequently Asked Questions

### What is the most common equipment type in the exercises-dataset?

**Body weight** is the most common equipment type, representing approximately 550 exercises or 35% of the total dataset. This makes the repository particularly valuable for developers building bodyweight-only fitness applications.

### How can I filter exercises by equipment in my code?

Use a list comprehension against the loaded JSON array, as shown in the repository's [`README.md`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/README.md): `bodyweight = [ex for ex in exercises if ex["equipment"] == "body weight"]`. This pattern works for any equipment string found in the distribution table.

### Why don't the percentages add up to exactly 100%?

Percentages are rounded to the nearest whole number for readability. The underlying counts sum to exactly 100% when using precise decimal values from the `round(cnt / total * 100, 1)` calculation in the reproduction script.

### Will these exact numbers remain accurate over time?

Exact counts will shift as the dataset grows, since the repository accepts new exercise contributions. The **distribution pattern** (bodyweight leading, followed by barbell/dumbbell) has remained stable, but always run the aggregation script against the current [`data/exercises.json`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json) for precise figures.