How martj42/international_results works
This repository is a curated data package, not an application. Its architecture is centered on a small set of CSV assets that together describe historical men’s international football matches from 1872 through 2024.
1. Primary purpose
The repo exists to provide a “semi-definitive” machine-readable archive of international match history. There is no executable code, backend, or UI layer; the main interface is the data files themselves.
2. Core dataset: results.csv
This is the primary fact table. Each row represents one match and carries the match date, teams, scoreline, tournament, venue city/country, and a neutral flag. This file is the central hub for most analysis and is the baseline dataset other files augment.
3. Derived match detail: shootouts.csv
This file adds penalty shootout outcomes for matches that were decided that way. It is keyed by the same match identity fields as results.csv (date, home_team, away_team) and supplies post-match resolution data: shootout winner and which side shot first.
4. Derived player detail: goalscorers.csv
This file is a second match-linked extension of the main results data. It stores goal-level events: who scored, for which team, and whether it was an own goal or penalty. In architectural terms, it is a one-to-many child table of match results.
5. Normalization/supporting mapping: former_names.csv
This file exists to reconcile historical team names with current team identities. The README makes clear that home/away teams use current successor names, while country names reflect the place name at the time of the match. This mapping layer is important for longitudinal analysis and prevents historical naming drift from fragmenting team statistics.
6. Data modeling boundary
The repo separates three layers of information:
- match outcomes in results.csv
- shootout outcomes in shootouts.csv
- scoring events in goalscorers.csv
This separation keeps the base match record clean while allowing optional detail tables to enrich it.
7. Identity and join strategy
The consistent match key across files is the combination of date, home_team, and away_team. That is the main relational boundary in the dataset. Any diagram should show results.csv as the parent dataset with the other two files joined onto it by these fields.
8. Temporal and geopolitical handling
The data model explicitly distinguishes between team identity and host-country identity. Team names are normalized to present-day successors; country names are historically accurate for the match date. The neutral flag captures whether the venue should be considered neutral despite naming changes or historical boundaries.
9. Data provenance
The dataset is manually compiled from multiple external sources, including Wikipedia, RSSSF, and national association sites. These sources are upstream inputs, but the repository itself contains only the curated output, not source ingestion code.
10. Repository role and consumption
Consumers are expected to read the CSVs directly from GitHub or after download. There is no service layer, API, or transformation pipeline in the repo. In architecture terms, this is a static data distribution repository.
11. Ancillary repository contents
.github/FUNDING.yml is operational metadata for GitHub sponsorship and does not affect the data model. LICENSE governs reuse. These files are peripheral to the dataset architecture.
12. How to diagram it
A good architecture diagram would show:
- upstream external historical sources
- a curation/normalization step
- four output artifacts: results.csv, shootouts.csv, goalscorers.csv, former_names.csv
- downstream analysts or tools consuming the CSVs directly
The main conceptual boundary is between curated canonical match data and supporting normalization/detail tables.
Main entry points: results.csv Results · shootouts.csv Shootouts · goalscorers.csv Goalscorers · README.md README
Components 15
External inputs
Upstream historical sources and downstream consumers around the curated dataset.
- Historical sources · Manual input sources such as Wikipedia, RSSSF, and national association records.
- Curation · Manual compilation and reconciliation of historical match records into a consistent archive.
- Analysts · People and tools reading the CSVs directly for analysis or download.
- Data tools · Scripts and notebooks that consume the CSV files directly.
Core data
Canonical match archive and its match-linked extensions.
- Results · Primary match record: date, teams, scoreline, tournament, venue, country, and neutral flag.
results.csv - Shootouts · Penalty shootout outcomes keyed to the match identity fields in results.csv.
shootouts.csv - Goalscorers · Goal-level events linked to matches: scorer, team, own goals, and penalties.
goalscorers.csv - Former names · Normalization map for historical team names and successor identities.
former_names.csv - Match key · Shared identity across files: date + home_team + away_team.
- Team identity · Current successor team names used for home and away teams across the archive.
- Place identity · Country names remain historically accurate for the match date, separate from team normalization.
- Neutral flag · Marks whether the venue should be considered neutral despite historical naming or boundary changes.
Connections 25
- Historical sources → Curation: feed · External historical records are manually compiled into the curated archive.
- Curation → Results: produces · Curation yields the canonical match fact table.
- Curation → Shootouts: produces · Curation extracts shootout outcomes where relevant.
- Curation → Goalscorers: produces · Curation extracts goal-level event data.
- Curation → Former names: normalizes · Curation maintains the team-name mapping used across the archive.
- Results → Match key: keys · Core match identity is the join boundary for extensions.
- Shootouts → Match key: joins on · Shootout rows attach via the shared match key.
- Goalscorers → Match key: joins on · Scorer rows attach via the shared match key.
- Former names → Team identity: maps · Historic names are reconciled to current successor team identities.
- Results → Team identity: uses · Home and away teams use normalized current identities.
- Results → Place identity: records · Country values preserve the historical place name at match time.
- Results → Neutral flag: contains · Neutral venue status is stored on the base match record.
- Shootouts → Results: extends · Shootout detail enriches the base match outcome record.
- Goalscorers → Results: extends · Scoring events are a one-to-many child of match results.
- README → Results: documents · README explains the primary dataset and its conventions.
- README → Shootouts: documents · README describes shootout linkage and meaning.
- README → Goalscorers: documents · README describes goal-event structure and joins.
- README → Former names: documents · README explains historical name normalization.
- License → Analysts: permits use · License governs downstream reuse of the dataset.
- Results → Analysts: consumed by · Analysts read the CSVs directly from the repository or after download.
- Results → Data tools: consumed by · Tools and notebooks ingest the CSVs directly.
- Shootouts → Data tools: consumed by · Downstream tools optionally use shootout detail.
- Goalscorers → Data tools: consumed by · Downstream tools optionally use scorer detail.
- Former names → Data tools: consumed by · Downstream tools use mappings to avoid historical name drift.
- Funding → Analysts: metadata only · Operational GitHub sponsorship metadata; not part of the data model.