Corpus study · semantic network analysis ·

I watched 382 Dan John Strength Coach YouTube videos so that you don't have to.

Then i carried out a Sematic Network Analysis on all the videos so that nobody else had to either. Then I identified the five videos you definitely should watch.

What emerged

Buried inside 382 videos is something sturdier than a pile of tips: a recurring set of decisions for turning movements into programmes.

Research question

What does the complete usable corpus reveal about how Dan John communicates and structures strength training?

Purpose

To demonstrate a general method for discovering meaningful structure in a large, unstructured corpus.

382
analysed videos
18,254
extracted labels after basic normalisation
115
analysis-group objects
7,342
objects through second order
5
representative videos

01 / Core discovery

Across 382 videos, the same programme-design grammar keeps reappearing

The corpus reveals something more general than one universal prescription: a stable system for generating different programmes according to the objective, trainee and circumstances.

The implicit grammar

Choose the objective. Select the movements. Fit the variations to the trainee. Progress, regress or substitute. Combine and dose simply. Protect recovery and repeatability.

The programme implicit across the corpus

Six decisions repeatedly organise the teaching

This is an inference from recurring objects and relations—not a programme Dan John states in this exact form.

  1. 01Choose the objective
  2. 02Select fundamental movement categories
  3. 03Choose suitable variations
  4. 04Apply progressions, regressions or substitutions
  5. 05Combine and dose them simply
  6. 06Preserve recovery and repeatability
Named programmes

Different expressions of one logic

Easy Strength, Southwood, Rite of Passage, Armor Building Complex and Mass Made Simple select from overlapping movement families and vary their volume, density and progression by goal.

Communication

Exercises are taught relationally

Movements become understandable through what precedes them, replaces them, combines with them, follows them or performs the same function.

Compression

Five videos cover every selected structure

The smallest defensible viewing set covers all seven structures used as the coverage target, turning a 382-video corpus into a compact route through the inferred system.

What the system appears to optimise

Useful physical improvement with the least unnecessary complexity and fatigue

The objective is not to maximise one lift at any cost. It is to get meaningfully better without needing a recovery plan from the recovery plan.

  • Strength and power that transfer to real activities.
  • Repeatable training that can be sustained over time.
  • Adequate—not maximal—training volume.
  • Progress without undermining recovery.
  • Simple exercise selection and program structure.
  • Broad physical competence: strength, mobility, work capacity and body composition.
  • Adjusting the program to the trainee’s immediate goal.
Inferred optimisation principle

Maximise useful, sustainable results per unit of time, effort, complexity and recovery cost.

Why this interpretation is visible

Turn down the noise and recognisable subjects appear

The frequency-≥3 network is not random noise wearing a lab coat. It breaks into named programmes, exercise systems and recurring training concerns.

147
connected objects
137
retained edges
23
connected components
99
objects in the main component
Inferred topicRepresentative objects
Kettlebell practice and Rite of Passagekettlebell swing, clean and press, kettlebell snatch, Pavel Tsatsouline, Rite of Passage
Easy Strength and general strength developmentEasy Strength, strength, pull-up, overhead press, repetitions in reserve
Loaded carries and trunk/hip strengthloaded carry, suitcase carry, waiter walk, bear-hug carry, hip thrust, Stuart McGill
Swing challenges and work capacity10,000 Swing Challenge, 500 daily swings, loaded carries, grip strength, work capacity
Fat loss and recoveryEasy Strength for Fat Loss, walking, fat loss, protein, sleep, recovery, body composition
Original Strength and mobility resetsOriginal Strength, Tim Anderson, neck nod, six-point rock, mobility, Humane Burpee
Southwood programpower clean, military press, front squat, bench press, Southwood program
Repetition schemes and transformation programsthree sets of eight, three sets of five, one-minute rest, transformation program
Armor Building Complexdouble-kettlebell clean, front squat and press, Armor Building Complex
Mass Made Simplehigh-repetition squat, barbell complex, muscle mass, Mass Made Simple
Basic nutritionhealth, nutrition, vegetable

Strongest structural hubs · connection score

Some ideas do more of the heavy lifting

armor building complex
78
kettlebell swing
44
easy strength
40
southwood program
34
rite of passage
32

Cross-topic bridges

What connects otherwise distinct subjects

  • kettlebell swing
  • easy strength
  • armor building complex
  • humane burpee
  • goblet squat
  • overhead squat
  • armor building formula
  • easy strength for fat loss

The ≥3 threshold gives the cleanest view of the strongest recurring programmes and systems. Dropping to ≥2 is messier but better for seeing how those subjects bleed into one another. The topic names are interpretations of the shapes in the network, not labels smuggled into the original data.

02 / Training structures

The relations show how exercises become programmes

Frequency identifies what Dan John repeatedly discusses. Exercise pairs identify what repeatedly travels together. Relation wording reveals whether that connection is a progression, regression, substitute, sequence, combination or functional analogy.

124
relation instances
58
distinct exercise pairs
38
exercises with a direct exercise relation
19
exercises retained at pair frequency ≥3

Five groups at pair frequency ≥3

Repeated exercise pairs form recognisable training systems

The largest group contains a squat progression, a swing-teaching progression and a complete workout composition. Four smaller groups preserve pressing, clean, get-up and carry relationships.

01

Squat, swing and Humane Burpee group

Squat: progression and substitution · Swing: regression, preparation and substitution · Humane Burpee: composition

The dominant group contains three overlapping structures. The Humane Burpee connects the squat and swing systems by combining the goblet squat, kettlebell swing and push-up.

Squat progression
back squat ─9─ front squat
front squat ─5─ overhead squat
goblet squat ─6─ overhead squat

Swing progression
glute bridge ─3─ hip thrust ─6─ kettlebell swing
                              ├─6─ Bulgarian goat-bag swing
                              └─4─ kettlebell snatch

Humane Burpee combination
                  push-up
                    │ 8
goblet squat ─6─ humane burpee ─6─ kettlebell swing
02

Pressing progression

Load progression and variation

The push press follows, progressively replaces or permits greater loading than the strict press.

strict press ─4─ push press
03

Clean variations

Substitution and suitability

The clean and press and clean and jerk are discussed as alternatives with different suitability and purposes.

clean and press ─3─ clean and jerk
04

Get-up progression

Assessment and unloaded variation

The naked get-up is consistently treated as an unloaded or assessment version of the Turkish get-up.

naked get-up ─3─ Turkish get-up
05

Carry and trunk relationship

Functional equivalence

The suitcase carry is repeatedly described as functioning like a moving plank.

moving plank ─3─ suitcase carry

What returns at frequency ≥2

Weaker pairs extend rather than overturn the structure

  • Bench press ↔ military pressComparison: historical displacement and relative strength levels, not a programme combination.
  • Swimming ↔ walkingInterchangeable or alternating conditioning and recovery activities.
  • Farmer walk ↔ moving plankFunctional analogy: the farmer walk is also characterised as a moving plank.
  • Power clean → front squatExercise sequencing: the power clean precedes the front squat.
  • Clean and jerk → front squatExercise sequencing: the front squat follows the clean and jerk.
  • Glute bridge → kettlebell swingExplicit regression, reinforcing the swing-teaching sequence.
Progression / regressionSubstitutionProgram compositionExercise sequencingFunctional equivalenceComparison

Some relation directions are inconsistent—particularly between glute bridge and hip thrust, and between strict press and push press. The evidence supports the relationship type more confidently than one universal direction.

A linguistic signal in the relations

Singular and plural terms do different work

In four tested noun pairs, the singular and plural forms occupy strikingly different relational neighbourhoods. Singular terms tend to name or classify a thing; plurals more often carry programming context such as doses, blocks, methods or accumulated effects.

loaded carry / loaded carries
7.1% neighbour overlap
Olympic lift / Olympic lifts
5.4% neighbour overlap
hill sprint / hill sprints
0% neighbour overlap
vegetable / vegetables
3.4% neighbour overlap

This is a small test, but it provides a reason not to collapse the forms automatically as aliases.

Reverse reading of the methodology

Reading the research backwards exposed its real result

Viewed chronologically, the work is a record of extraction and analysis. Viewed from its findings backwards, it becomes an argument for an implicit programme-generating framework.

Reverse-reading stageWhat it contributes
Exercise relation groupsThe practical structure: squat, hinge/swing, press, get-up and carry/trunk work
Exercise listThe available variations for filling those movement roles
Implicit methodologyWhy those exercises are organised this way
Recurring programs and communitiesExamples of the framework applied to different goals
Frequency and relation analysisEvidence that the structure recurs across the corpus
Extraction experimentsHow that evidence was obtained and its limitations

Implied programme architecture

The movement roles remain stable while their contents change

The named programmes look less like unrelated prescriptions and more like different implementations of this shared architecture.

Physical training
├── Squat
│   └── choose an appropriate variation or progression
├── Hinge and ballistic work
│   └── regress through bridge, hip thrust or goat-bag swing
│       before progressing toward swings and snatches
├── Press
│   └── move between strict and push-press variations
├── Get-up
│   └── assess unloaded before adding load
├── Loaded carry and trunk work
└── Simple combinations
    └── example: Humane Burpee
        ├── goblet squat
        ├── kettlebell swing
        └── push-up
Strongest supported conclusion

Dan John repeatedly applies a recurring programme-design grammar to produce different programmes for different circumstances.

03 / Minimum sufficient viewing

The five videos you definitely should watch

Five is the smallest set that covers all seven recurring exercise structures identified in the selected exercise set. It covers 13 of 22 repeated exercise pairs; it is not a claim that five videos represent every subject in the corpus.

01 · Best single overview

Kettlebell Swings, WTH Effect, Easy Strength, Armor Building, 65+ Training & More | DJU Podcast #217

Covers Easy Strength, recovery, kettlebell and Olympic-lift integration, Armor Building Complex, Humane Burpees, get-ups, snatches and carries. It also provides an alternating programme and argues for selecting the most important tools rather than using everything.

Open on YouTube

02 · Progression and programme balance

Armor Building Complex, Kettlebell Weights, Easy Strength & Balancing Training | DJU Podcast #248

Explains progression as more than adding load, including the route from glute bridge through hip thrust and rack deadlift to swings and Olympic lifts. It also covers pressing progressions, clean-and-press variations and front squats.

Open on YouTube

03 · The squat-teaching sequence

Steve Maxwell, Worst Exercises, Squats, Bodyweight Training, Kettlebells & More | DJU Podcast 197

Provides the clearest explicit progression from goblet squat to overhead squat, front squat and back squat, including the reason for teaching them in that order.

Open on YouTube

04 · Loaded carries and trunk training

The Dan John Podcast - Ep 35 | Single Leg Training, Deadlift Height, My Favorite Exercise

Supplies the loaded-carry rationale: loaded carries operate as moving planks, and the suitcase carry functions as a single-arm farmer walk.

Open on YouTube

05 · Get-ups and goal-specific application

Turkish Get-Ups, Easy Strength, Mass Made Simple, Mobility, Fat Loss & More | DJU Podcast #234

Shows how the get-up can be decomposed, assessed and performed unloaded, while connecting Easy Strength, Mass Made Simple, mobility and fat-loss work.

Open on YouTube

Coverage trade-off

Why stop at five?

The first three provide the efficient short version. Videos four and five add the otherwise missing loaded-carry and get-up systems.

VideosRepeated pairsSystems
14 of 222 of 7
27 of 224 of 7
310 of 225 of 7
412 of 226 of 7
513 of 227 of 7
One video

#217 is the best overview

It crosses more of the identified framework than any other single source.

Three videos

#217, #248 and #197 give the essential framework

Together they explain most of the programme architecture and much of its rationale.

Five videos

The smallest seven-system set

Loaded carries and get-ups complete all seven systems. Covering all 22 repeated pairs would require 13 videos for substantially less return.

04 / Interactive evidence

Test the interpretation against the source-linked relation network

Search the ranked frequency table, select an object and carry that selection into the relation network. Adjust object scope, direct or second-order depth, and the minimum pair frequency from one to four. The explorer preserves disconnected components rather than implying that every subject belongs to one graph region.

ExtractedObjects, relations and sources
ComputedFrequency, pairs and graph distance
InterpretedStructures and programme grammar

Interactive evidence

Load the full frequency table and relation network when you need them

The large browser dataset is deferred until this section approaches the viewport. You can also load it now.

05 / Code and reproducibility

The operations that generated and exposed the results

Each stage keeps the operation, executable code and observed output together. The snippets come from the working Jupyter notebook and the browser explorer used on this page. The Python for NLP and Semantic SEO reference provides the broader implementation context for these operations.

01 / Prepare

Load ranked objects and source-linked records

Python
from pathlib import Path
import json
import pandas as pd

frequency_data = (
    pd.read_csv(Path("object_frequencies.csv"))
    .sort_values("rank")
    .reset_index(drop=True)
)
records_dir = Path("v1_1_objects_relations/records")
record_paths = list(records_dir.glob("*.json"))

print(f"Objects: {len(frequency_data):,}")
print(f"Video records: {len(record_paths):,}")
Result18,254 object labels · 382 video records

02 / Cutoff

Calculate the recurring-object elbow

Python
recurring_objects = frequency_data.loc[
    frequency_data["frequency"] > 1
].copy()

normalized_rank = (
    (recurring_objects["rank"] - recurring_objects["rank"].min())
    / (recurring_objects["rank"].max() - recurring_objects["rank"].min())
)
normalized_frequency = (
    (recurring_objects["frequency"] - recurring_objects["frequency"].min())
    / (recurring_objects["frequency"].max() - recurring_objects["frequency"].min())
)

distance_from_endpoint_line = (1 - normalized_rank) - normalized_frequency
knee_index = distance_from_endpoint_line.idxmax()
cutoff_frequency = int(frequency_data.loc[knee_index, "frequency"])
cutoff_rank = int(frequency_data.loc[
    frequency_data["frequency"] >= cutoff_frequency, "rank"
].max())
ResultCutoff after rank 115 · minimum total frequency 15

03 / Network

Count pairs and expand relational neighbourhoods

Python
from collections import Counter, defaultdict

analysis_group = set(
    frequency_data.head(cutoff_rank)["object"].str.strip().str.lower()
)
adjacency = defaultdict(set)
pair_frequency = Counter()

for record_path in records_dir.glob("*.json"):
    record = json.loads(record_path.read_text(encoding="utf-8-sig"))
    labels = {
        item["id"]: item["label"].strip().lower()
        for item in record.get("objects", [])
    }
    for relation in record.get("relations", []):
        subject = labels.get(relation.get("subject"))
        object_ = labels.get(relation.get("object"))
        if subject and object_ and subject != object_:
            pair_frequency[tuple(sorted((subject, object_)))] += 1
            adjacency[subject].add(object_)
            adjacency[object_].add(subject)

first_order = set().union(*(adjacency[item] for item in analysis_group)) - analysis_group
second_order = (
    set().union(*(adjacency[item] for item in first_order))
    - analysis_group - first_order
)
Result115 analysis · 3,168 first order · 4,059 second order

04 / Structure

Retain recurring pairs and find connected groups

Python
def connected_groups(pair_counts, minimum_frequency):
    graph = defaultdict(set)
    for (left, right), count in pair_counts.items():
        if count >= minimum_frequency:
            graph[left].add(right)
            graph[right].add(left)

    groups, visited = [], set()
    for start in sorted(graph):
        if start in visited:
            continue
        stack, component = [start], set()
        visited.add(start)
        while stack:
            node = stack.pop()
            component.add(node)
            for neighbour in graph[node] - visited:
                visited.add(neighbour)
                stack.append(neighbour)
        groups.append(sorted(component))

    return sorted(groups, key=lambda group: (-len(group), group))

retained_pairs = {
    pair: count for pair, count in pair_frequency.items()
    if count >= 3
}
Result137 pairs at frequency ≥3 · 23 connected components

05 / Explore

Filter and render the browser network

JavaScript
const filteredEdges = data.edges.filter(
    (edge) =>
        edge.frequency >= minPairFrequency &&
        scopeNodes.has(edge.source) &&
        scopeNodes.has(edge.target)
);

const visible = new Set([selectedId, ...direct, ...second]);

cytoscape({
    container: networkRef.current,
    elements,
    minZoom: 0.04,
    maxZoom: 5,
    style: networkStyles,
    layout: selectedId
        ? { name: "concentric", animate: false }
        : { name: "preset", fit: true, padding: 38 },
});
ResultSearchable, thresholded, first- and second-order neighbourhoods

06 / Methodological record

How the unit of analysis changed across ten epochs

The discovery appears first on this page. This chronological record preserves the experiments, failures and corrections that made it possible—and shows how the project moved from maximum extraction towards minimum sufficient explanation. It extends the site's research pipeline into a bounded transcript corpus.

Extraction record
V1.1 source-linked object–relation JSON records produced directly from downloaded transcripts with Codex 5.6 Sol at extra-high reasoning
Responsibilities
Codex extracted candidate objects and relations; Python aggregated frequencies and pairs; human analysis defined the question, thresholds, interpretation and return to sources

The separation of automated extraction, computation and human interpretation follows the human-supervised research approach documented in the Semantic SEO Lab.

General method

Discover structure, then return to the sources

This is the transferable operation demonstrated by the Dan John corpus.

Large unstructured corpus
    ↓
Acquire and preserve sources
    ↓
Extract objects and relations
    ↓
Count recurring objects
    ↓
Identify persistent object pairs
    ↓
Construct relational neighbourhoods
    ↓
Recognise larger structures
    ↓
Return to individual sources for interpretation

The project’s deeper progression

The unit of analysis expanded before the answer contracted

Individual records became a network; the network then made it possible to return to a small number of particularly informative sources.

Playlist
    ↓
Transcripts
    ↓
Per-video objects and relations
    ↓
Corpus-wide object frequencies
    ↓
Repeated object pairs
    ↓
Relation network
    ↓
Exercise and program structures
    ↓
Implicit program-design methodology
    ↓
Minimum representative video set

The CreepyTok analysis provides a parallel case: it prepares a TikTok corpus for supervised interpretation, while this study continues through corpus-wide relational analysis and return to individual sources.

01

Corpus acquisition

What videos exist, and can their transcripts be obtained?

The playlist was inspected, a dedicated project directory was created, transcripts were downloaded, and collection failures were checked.

02

Record definition

What should be stored for each video?

The proposed record included URL, official title, alternative title, summary, transcript, semantic map, objects and relations. Repeated discussion exposed where premature database and ontology design was overreaching.

03

Rich-analysis experiment

Can each video immediately be interpreted in depth?

Initial records attempted titles, summaries, semantic maps, objects and relations. The summaries were sometimes useful, but the process was slow and produced more interpretation than the developing analysis required.

04

Model comparison

Could API models perform equivalent extraction faster?

GPT-4.1 and GPT-4.1 mini were tested against the original Codex 5.6 Sol work, run with extra-high reasoning. GPT-4.1 mini was rejected as unsuitable. GPT-4.1 produced useful relations but required pruning.

05

Minimal collection specification

What is the smallest useful extraction task?

The task was reduced to official title, objects and relations. Attempts to make the API analyse, prune or construct higher-order relations were identified as unnecessary scope inflation.

06

Corpus-scale direct extraction

Can the entire corpus be processed consistently?

Codex extracted objects and relations directly, in batches, from the complete transcript set. Stalling and continuity were recurring operational failures. One irrelevant Asmongold transcript was identified and removed. A rapid error check followed completion.

07

Object-frequency analysis

Which extracted objects warrant attention first?

The corpus contained 18,254 normalized object labels. The recurring-object curve produced an elbow after rank 115, corresponding to frequency 15 or greater. These 115 became the analysis group.

08

Relational expansion and visualisation

What surrounds the analysis group?

The 115 objects connected to 3,168 first-order objects and 4,059 additional second-order objects, producing a 7,342-object network. The notebook gained frequency plots, cutoff calculation, interactive network navigation, node scaling, edge-opacity changes and a frequency slider.

09

Repeated-pair and community analysis

Which connections persist across the corpus?

Object-pair frequency became the main simplification mechanism. At pair frequency ≥3, the network revealed programs, exercise systems, hubs and bridges. Southwood, Easy Strength, Armor Building Complex, Rite of Passage and swing-related structures became visible.

10

Program-grammar synthesis

What does the network imply about Dan John’s underlying method?

Exercise relations exposed squat, swing, press, clean, get-up and carry systems. Reading the findings backwards revealed a program-generating framework optimising useful improvement, simplicity, repeatability and recovery. The corpus was then compressed into a five-video viewing set covering the complete framework.

Three broader eras

The project changed character twice

01

Collection era

The project treated each video as a document to preserve and interpret. This established provenance and produced the raw object–relation records, while rich per-video analysis repeatedly exceeded what the corpus-level question required.

02

Structural-analysis era

The unit of analysis changed from the individual transcript to the complete usable corpus. Frequency established recurrence, object pairs exposed persistent associations, and graph distance supplied first- and second-order context.

03

Interpretive-synthesis era

The work moved from repeated objects to what their relations implied: exercise systems, a programme-generating grammar, and a minimum set of source videos covering the selected framework.

07 / Research artefacts

Inspect the notebook, corpus metadata and derived data

The page is an interface to the analysis, not a replacement for its working materials.

To reproduce the notebook, install the listed Python packages, keep the frequency CSV beside it, and extract the records archive so its v1_1_objects_relations directory is beside the notebook.

08 / Limits

What the analysis does not establish

Recurrence directs attention. It does not convert extracted language into truth or remove the need to inspect sources.

  • Transcript inaccuracies can affect the extracted evidence.
  • Two playlist entries lacked usable transcripts and received no analysis.
  • Object aliases and composite labels remain incompletely resolved.
  • Singular and plural forms remain separate because their relational neighbourhoods differed.
  • Relation wording and direction vary between records.
  • Changing the pair-frequency threshold changes the visible network.
  • The model comparison was not like-for-like: the original rich-analysis records used Codex 5.6 Sol with extra-high reasoning, while the later tests used GPT-4.1 and GPT-4.1 mini.
  • Frequency measures recurrence, not whether a claim is correct or universally applicable.

Return to the question

The corpus makes visible the recurring decisions from which many Dan John programmes can be built.

It does not reduce the work to one prescription. It shows how objectives, movement roles, suitable variations, progressions, substitutions, dosage and recovery repeatedly combine—and identifies five videos covering every exercise structure used as the final coverage target.