Spaces:
Sleeping
Decade Analysis β Content Warning Trends
A worked analytics example over the live ReelShield cache. Computed against content_warnings.warnings_json joined to movies.year, grouped into decade buckets.
Snapshot date: 2026-05-08 Cache size at snapshot: 225 movies with generated warnings
1. Cache coverage by decade
| Decade | Count |
|---|---|
| 1940s | 2 |
| 1950s | 3 |
| 1960s | 9 |
| 1970s | 14 |
| 1980s | 16 |
| 1990s | 34 |
| 2000s | 52 |
| 2010s | 61 |
| 2020s | 33 |
Sample sizes pre-1970s are small (2β9 films/decade); read those rows with appropriate caution.
2. Average severity per category per decade (0β3 scale)
| Category | 1940s | 1950s | 1960s | 1970s | 1980s | 1990s | 2000s | 2010s | 2020s |
|---|---|---|---|---|---|---|---|---|---|
| violence_gore | 0.50 | 0.67 | 0.67 | 1.29 | 1.12 | 1.56 | 1.08 | 1.44 | 1.36 |
| self_harm_suicide | 0.00 | 0.00 | 0.00 | 0.21 | 0.25 | 0.15 | 0.00 | 0.21 | 0.09 |
| miscarriage_pregnancy_loss | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.06 | 0.04 | 0.11 | 0.00 |
| sexual_content_nudity | 0.00 | 0.00 | 0.11 | 0.43 | 0.44 | 0.68 | 0.35 | 0.56 | 0.42 |
| animal_abuse | 0.00 | 0.00 | 0.22 | 0.21 | 0.25 | 0.21 | 0.17 | 0.31 | 0.27 |
| substances | 0.50 | 0.33 | 0.56 | 0.71 | 0.31 | 0.82 | 0.52 | 0.67 | 0.52 |
| language | 0.50 | 0.67 | 0.44 | 0.86 | 0.75 | 1.35 | 0.88 | 1.21 | 0.97 |
| horror_intensity | 0.50 | 0.33 | 0.00 | 0.93 | 0.81 | 0.94 | 0.79 | 1.20 | 0.88 |
| flashing_lights | 0.00 | 0.00 | 0.00 | 0.14 | 0.25 | 0.41 | 0.25 | 0.48 | 0.61 |
3. Most consistent decade-over-decade increase
flashing_lights β increased in 5 of 8 decade transitions, net change +0.61, and is the only category that ends at its all-time high (2020s = 0.61). This aligns with the rise of post-2000s digital editing and high-contrast color grading, and is exactly the trend that motivated putting the photosensitive epilepsy banner at the top of every movie page.
For comparison:
sexual_content_nudityties on transition count (5/8) but with a smaller net Ξ.violence_gorehas the largest net rise (+0.86) but more zigzag (only 4/8 transitions trending up).
4. Highest average severity, all categories combined
2010s β mean 0.689 across all 9 categories (n = 549 category-severity values), narrowly edging out the 1990s at 0.686.
Caveats
- Small sample sizes pre-1970s (2β9 movies/decade) make those rows noisy.
- The 2020s sample only covers cached entries up to ~2024β25; the decade is incomplete.
- Severities are Gemini-generated, not human-coded β the numbers reflect model perception of severity, which has known biases (e.g. it tends to under-report sexual content for older films).
Reproducing this analysis
The numbers above were generated by joining movies.year to the JSON in content_warnings.warnings_json. A representative query (SQLite, using json_extract):
SELECT
(CAST(substr(m.year, 1, 3) AS INTEGER) * 10) || 's' AS decade,
AVG(json_extract(c.warnings_json, '$.spoiler_free.violence_gore.severity')) AS violence_gore,
AVG(json_extract(c.warnings_json, '$.spoiler_free.self_harm_suicide.severity')) AS self_harm_suicide,
AVG(json_extract(c.warnings_json, '$.spoiler_free.flashing_lights.severity')) AS flashing_lights
-- ... one AVG per category
FROM movies m
JOIN content_warnings c USING (tmdb_id)
WHERE m.year GLOB '[0-9][0-9][0-9][0-9]'
GROUP BY decade
ORDER BY decade;
The full per-category query lives in the team analysis notebook. Counts in Β§1 come from a simple GROUP BY decade over movies filtered to films that have an entry in content_warnings.