エクササイズ データセットの紹介: 1324 フィットネス アクション データ セットをインストールして使用する方法

hasaneyldrm/exercises-dataset のデータ内容、インストール方法、オフライン閲覧、JSON 読み込み、データベースインポート、API アクセスプロセスを紹介し、メディアリソースとフィールドの違いを思い出させます。

hasaneyldrm/exercises-dataset は、フィットネス アプリケーション開発者向けのデータセット プロジェクトです。フィットネス アクションを構造化された JSON に編成し、2 つのフロントエンド ページが付属しています。index.html はアクションの参照に使用され、setup.html はデータベース インポート SQL、API 呼び出しの例、バックエンド開発プロンプトの生成を支援するために使用されます。

プロジェクトの README によると、現在のデータセットは 1,324 の動作をカバーしており、動作の名前、体の部位、器具、対象となる筋肉、補助筋群、段階的な指示が含まれています。このプロジェクトは、フィットネス アプリのプロトタイプ、トレーニング計画ツール、アクション検索ページ、レコメンデーション システムの実験、または大規模モデルのフィットネス API バックエンドを生成する際の基礎データとして適しています。

最初に 1 つの詳細に注意する必要があります。ウェアハウスの概要、README、setup.html、および data/exercises.json の現在の説明は完全には一致していません。 README には、メディア画像と GIF がウェアハウスとともに配布されないことが明確に示されています。 setup.html には「画像/ビデオが含まれる」という古い説明がまだ残っています。 imagegif_url などの相対パス フィールドも、現在の生の JSON に表示される場合があります。実際にアクセスするときは、ウェアハウス内の現在のファイルが優先される必要があります。画像とアニメーション ファイルが使用可能である必要があることをデフォルトにしないでください。

どのようなシーンに適しているか

このプロジェクトは完全なフィットネス アプリケーションではなく、アプリケーションに直接接続できるデータベースです。それは次の 3 つの部分に分けて理解できます。

  • data/exercises.json: コア データ ファイル。アプリケーションが最終的に読み取るものです。
  • index.html: ローカル ブラウザー バージョンのアクション取得ツール。バックエンドは必要ありません。
  • setup.html: 開発者統合ウィザード。データベース テーブルの作成、INSERT SQL 生成、API サンプル、LLM プロンプト ワードを提供します。

データをすばやく表示したいだけの場合は、index.html をオンにするだけで十分です。独自の製品にデータを入れたい場合は、data/exercises.json から始めて、JSON を直接読み取るか、データベースにインポートするか、REST API を生成するかを決定する必要があります。

インストールとダウンロード

最も簡単な方法は、リポジトリを直接クローン作成することです。

1
2
git clone https://github.com/hasaneyldrm/exercises-dataset.git
cd exercises-dataset

ウェアハウス自体は主に静的ファイルであり、npm install を必要とせず、開始する必要があるバックエンド サービスもありません。クローン作成が完了すると、ディレクトリは次のようになります。

1
2
3
4
5
6
exercises-dataset/
├── data/
│   └── exercises.json
├── index.html
├── setup.html
└── README.md

データ ファイルをダウンロードするだけの場合は、生の JSON を直接保存することもできます。

1
curl -L -o exercises.json https://raw.githubusercontent.com/hasaneyldrm/exercises-dataset/main/data/exercises.json

Windows PowerShell は次のようにダウンロードできます。

1
2
3
Invoke-WebRequest `
  -Uri "https://raw.githubusercontent.com/hasaneyldrm/exercises-dataset/main/data/exercises.json" `
  -OutFile "exercises.json"

ダウンロード後、ファイルが正常に解析できるかどうかを確認することをお勧めします。

1
python -m json.tool data/exercises.json > /tmp/exercises.pretty.json

Windows で利用可能:

1
python -m json.tool .\data\exercises.json > .\exercises.pretty.json

このステップでエラーが報告された場合は、ファイルのダウンロードが不完全であることを意味します。まず、ウェアハウスを再プルするか、JSON を再ダウンロードします。

ブラウザツールをローカルで開く

ウェアハウスの index.html は、直接開くことができる純粋なフロントエンド ブラウザです。

1
2
3
4
5
# macOS
open index.html

# Windows PowerShell
Start-Process .\index.html

動きのデータをすばやく確認するのに最適です。動きの名前を検索し、体の部位、マシン、またはターゲットの筋肉でフィルターし、カードをクリックして手順を表示します。 README には、メディア リソースはウェアハウスとともに配布されないと記載されているため、閲覧時に画像または GIF が空であっても、データのロードが失敗したわけではありません。

セキュリティ ポリシーによりブラウザがローカル ファイルの読み取りを制限している場合は、ウェアハウス ディレクトリで一時的な静的サーバーを起動できます。

1
python -m http.server 8000

次に、次の場所にアクセスしてください。

1
http://localhost:8000/index.html

Node.js ユーザーは以下も使用できます。

1
npx serve .

次に、コマンド ライン プロンプトを押してローカル アドレスを開きます。

setup.html を使用してデータベースと API のサンプルを生成する

setup.html は、開発者向けの統合ウィザードです。開く方法は index.html と同じです。

1
python -m http.server 8000

次に、次の場所にアクセスしてください。

1
http://localhost:8000/setup.html

そのプロセスは主に 3 つのステップで構成されます。

最初のステップはデータベースのセットアップです。このページでは、SQL Server、PostgreSQL、MySQL、SQLite などのデータベース タイプを切り替え、対応する CREATE TABLE ステートメントをコピーし、1,324 のアクション データを含む INSERT SQL ファイルを生成できます。この生成プロセスはブラウザーでローカルに完了し、データをアップロードする必要はありません。

2 番目のステップは API 統合です。独自の API ベース URL を入力すると、ページは cURL、JavaScript、Python、C#、Java、PHP、Go などのさまざまな言語で呼び出し例を生成します。インターフェイスの例には次のものがあります。

1
2
3
GET /exercises/:id
GET /exercises?page=1&limit=20
GET /exercises?category=Strength&body_part=Chest

ここでのインターフェイスは、ウェアハウスによってすでに提供されているオンライン サービスではなく、独自のバックエンドに実装することが推奨されるインターフェイス形状です。つまり、setup.html は呼び出しメソッドを整理するのに役立ち、API を開始しません。

3 番目のステップは、LLM に質問することです。 Pages は、Express.js + PostgreSQL、FastAPI + SQLite、Spring Boot + MySQL、ASP.NET Core + SQL Server、Laravel、Gin などのフレームワークとデータベースの組み合わせに基づいてプロンプトを生成できます。プロンプトの単語を ChatGPT、Claude、または Gemini に貼り付けて、モデルにデータ構造に基づいてバックエンド コードを生成させることができます。

JSONを直接読み取る

アプリケーションが小さい場合は、data/exercises.json を直接読み取るのが最も速い方法です。 Python の例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import json

with open("data/exercises.json", "r", encoding="utf-8") as f:
    exercises = json.load(f)

print("动作总数:", len(exercises))

chest = [item for item in exercises if item.get("category") == "chest"]
bodyweight = [item for item in exercises if item.get("equipment") == "body weight"]

print("胸部动作:", len(chest))
print("自重动作:", len(bodyweight))

first = exercises[0]
print(first["id"], first["name"])
print(first.get("instructions", {}).get("en"))

Node.js の例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
const exercises = require("./data/exercises.json");

console.log("Total:", exercises.length);

const bodyweight = exercises.filter((item) => item.equipment === "body weight");
const byCategory = exercises.reduce((acc, item) => {
  const key = item.category || "unknown";
  acc[key] = acc[key] || [];
  acc[key].push(item);
  return acc;
}, {});

console.log("Bodyweight:", bodyweight.length);
console.log(Object.keys(byCategory));

フロントエンド プロジェクトでは、JSON を public/data/exercises.json に配置し、fetch を使用して読み込むことができます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
async function loadExercises() {
  const res = await fetch("/data/exercises.json");
  if (!res.ok) {
    throw new Error(`Failed to load exercises: ${res.status}`);
  }
  return await res.json();
}

loadExercises().then((exercises) => {
  console.log(exercises.length);
});

TypeScript を使用する場合は、最初に保守的な型を定義することをお勧めします。 README フィールドと現在の JSON フィールドの違いにより、imagegif_urlmedia_idinstruction_steps などのフィールドはオプションとして記述するのが最適です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
type Exercise = {
  id: string;
  name: string;
  category?: string;
  body_part?: string;
  equipment?: string;
  target?: string;
  muscle_group?: string;
  secondary_muscles?: string[];
  instructions?: Record<string, string>;
  instruction_steps?: Record<string, string[]>;
  media_id?: string | null;
  image?: string | null;
  gif_url?: string | null;
  created_at?: string;
};

このようにすると、後でウェアハウスがフィールドを調整したとしても、フィールドの欠落が原因でアプリケーションが簡単にクラッシュすることはありません。

データベースをインポートする方法

正式なプロジェクトの場合は、データをデータベースにインポートすることをお勧めします。理由は簡単です。ページング、フィルタリング、検索、バックグラウンド編集、API 権限制御がすべて簡単に実行できるからです。

一般的なテーブル構造は次のように設計できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
CREATE TABLE exercises (
  id VARCHAR(32) PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  category VARCHAR(100),
  body_part VARCHAR(100),
  equipment VARCHAR(100),
  target VARCHAR(100),
  muscle_group VARCHAR(100),
  secondary_muscles JSON,
  instructions JSON,
  instruction_steps JSON,
  image VARCHAR(255),
  gif_url VARCHAR(255),
  media_id VARCHAR(100),
  created_at VARCHAR(64)
);

PostgreSQL は、JSON フィールドを jsonb に変更できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
CREATE TABLE exercises (
  id text PRIMARY KEY,
  name text NOT NULL,
  category text,
  body_part text,
  equipment text,
  target text,
  muscle_group text,
  secondary_muscles jsonb,
  instructions jsonb,
  instruction_steps jsonb,
  image text,
  gif_url text,
  media_id text,
  created_at text
);

インポート プロセスは次の順序で実行することをお勧めします。

  1. setup.html を使用して、対応するデータベースのテーブル作成 SQL と INSERT SQL を生成します。
  2. 最初にローカル データベースまたはテスト ライブラリで実行し、運用ライブラリに直接インポートしないでください。
  3. 行の合計数が JSON 配列の長さと等しいかどうかを確認します。
  4. インデックスの構築: 少なくとも通常のインデックスを categorybody_partequipmenttarget に追加します。
  5. キーワード検索を行う場合は、全文インデックス作成または外部検索サービスを検討してください。

たとえば、PostgreSQL は最初に次のインデックスを追加できます。

1
2
3
4
CREATE INDEX idx_exercises_category ON exercises(category);
CREATE INDEX idx_exercises_body_part ON exercises(body_part);
CREATE INDEX idx_exercises_equipment ON exercises(equipment);
CREATE INDEX idx_exercises_target ON exercises(target);

バックエンド API は、まず 4 種類のインターフェイスを実装できます。

1
2
3
4
GET /exercises
GET /exercises/:id
GET /exercises?category=chest
GET /exercises?equipment=body%20weight

ページングパラメータは次のように統一することをお勧めします。

1
page=1&limit=20

応答構造は安定した状態を維持できます。

1
2
3
4
5
6
{
  "items": [],
  "page": 1,
  "limit": 20,
  "total": 1324
}

これにより、フロントエンド リスト、フィルター、無限スクロールにアクセスしやすくなります。

メディアリソースの扱い方

README のヒントは重要です。直接市販されているアクション イメージや GIF を含むリポジトリをデフォルトにしないでください。基盤となるデータは ExerciseDB v1 から取得され、メディア アセットはリポジトリとともに再配布されず、一部のレコードはメディア参照または相対パスを保持すると記載されています。

実際のプロジェクトでは次の 3 つの処理方法があります。

  • テキスト データのみを使用し、画像や GIF は表示しません。
  • 法的に許可されたアクション画像またはビデオを自分で準備し、id またはアクション名を使用してマッピングを確立します。
  • ExerciseDB のメディア リソースを使用する権利がある場合は、関連する条件に従って、対応する CDN またはリソース アドレスにアクセスします。

image フィールドと gif_url フィールドを直接「ウェアハウスに存在する必要があるファイル」として扱わないでください。アクセスする前に、次のことを確認してください。

1
2
ls images
ls videos

ディレクトリが存在しない場合、アプリケーションはメディア領域を空にするか、画像とアニメーションのエントリを非表示にする必要があります。

アクセス時に踏み込みやすい落とし穴

まず、フィールドが変更される可能性があります。 README の例と生の JSON のフィールドはどこでも一貫しているわけではないため、コード内ですべてのフィールドを必須にしないでください。特にメディア関連フィールドと多言語フィールドでは、オプションの読み取りを使用する必要があります。

2 番目に、カテゴリ値は、chestbackupper legsbody weight などの英語の小文字スタイルです。フロントエンドで中国語が表示される場合は、アプリケーションでマッピングのレイヤーを実行する必要があります。

1
2
3
4
5
6
7
8
const categoryLabel = {
  chest: "胸部",
  back: "背部",
  waist: "腰腹",
  "upper legs": "大腿",
  "upper arms": "上臂",
  shoulders: "肩部",
};

第三に、行動指示は医学的アドバイスではありません。これは、製品のプロトタイプ、教育コンテンツ、アクション検索データとして使用するのに適していますが、正式なフィットネス製品には安全に関するヒント、禁忌、専門的なレビュープロセスが含まれている必要があります。

4 番目に、ソースと承認を無視しないでください。 README には、基礎となるデータの出所、メディアが配布されない理由、および権利表明が説明されています。 ExerciseDB、Kaggle の再ホスト、およびウェアハウスの利用規約は、商用利用の前に再確認する必要があります。

おすすめルート

デモを行うだけの場合は、直接 git clone を実行し、index.html を開いて、data/exercises.json からデータを読み取ることができます。

完全なフィットネス アプリケーションを作成したい場合は、次の順序で作業を進めることができます。

  1. リポジトリのクローンを作成し、コミットを固定して、後続のフィールド変更がプロジェクトに影響を与えないようにします。
  2. 実際の分野と言語の範囲については、data/exercises.json を確認してください。
  3. setup.html を使用してデータベース SQL を生成し、それをテスト ライブラリにインポートします。
  4. /exercises/exercises/:id、フィルタリングおよびページング API を実装します。
  5. フロントエンドはテキストデータを表示し、最初にメディア領域がショートされます。
  6. ライセンスに従って、独自の画像、GIF、またはビデオを追加します。

このプロセスの利点は、シンプルで制御可能であり、メディア認証の問題によって行き詰まらないことです。 exercises-dataset の最も価値のある部分は、フィットネス アクションの知識を、直接読み取りおよび取得できるデータ構造に編成することです。メディア表示、トレーニング プラン ロジック、およびパーソナライズされた推奨事項については、さらなる改善のために独自のアプリケーション層に配置する必要があります。

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。