You've already forked etude_lego_jurassic_world
Ajoute le graphique variations vs total par personnage
This commit is contained in:
@@ -5,10 +5,12 @@ from pathlib import Path
|
||||
from lib.rebrickable.minifig_characters import (
|
||||
aggregate_by_character,
|
||||
aggregate_by_gender,
|
||||
aggregate_variations_and_totals,
|
||||
aggregate_character_spans,
|
||||
aggregate_presence_by_year,
|
||||
load_sets_enriched,
|
||||
write_character_counts,
|
||||
write_character_variations_totals,
|
||||
write_gender_counts,
|
||||
)
|
||||
|
||||
@@ -68,6 +70,55 @@ def test_aggregate_by_character_counts_unique_figs() -> None:
|
||||
]
|
||||
|
||||
|
||||
def test_aggregate_variations_and_totals_excludes_figurants() -> None:
|
||||
"""Compter le total et les variations en excluant les figurants."""
|
||||
aggregates = aggregate_variations_and_totals(
|
||||
[
|
||||
{
|
||||
"set_num": "123-1",
|
||||
"part_num": "head-a",
|
||||
"known_character": "Owen Grady",
|
||||
"fig_num": "fig-owen-1",
|
||||
"gender": "male",
|
||||
},
|
||||
{
|
||||
"set_num": "124-1",
|
||||
"part_num": "head-b",
|
||||
"known_character": "Owen Grady",
|
||||
"fig_num": "fig-owen-1",
|
||||
"gender": "male",
|
||||
},
|
||||
{
|
||||
"set_num": "125-1",
|
||||
"part_num": "head-c",
|
||||
"known_character": "Owen Grady",
|
||||
"fig_num": "fig-owen-2",
|
||||
"gender": "male",
|
||||
},
|
||||
{
|
||||
"set_num": "126-1",
|
||||
"part_num": "head-d",
|
||||
"known_character": "Ellie Sattler",
|
||||
"fig_num": "fig-ellie-1",
|
||||
"gender": "female",
|
||||
},
|
||||
{
|
||||
"set_num": "127-1",
|
||||
"part_num": "head-e",
|
||||
"known_character": "Figurant",
|
||||
"fig_num": "fig-guard-1",
|
||||
"gender": "unknown",
|
||||
},
|
||||
],
|
||||
excluded_characters=["Figurant"],
|
||||
)
|
||||
|
||||
assert aggregates == [
|
||||
{"known_character": "Owen Grady", "gender": "male", "variation_count": 2, "total_minifigs": 3},
|
||||
{"known_character": "Ellie Sattler", "gender": "female", "variation_count": 1, "total_minifigs": 1},
|
||||
]
|
||||
|
||||
|
||||
def test_aggregate_by_gender_counts_unique_figs() -> None:
|
||||
"""Compter les minifigs distinctes par genre."""
|
||||
aggregates = aggregate_by_gender(
|
||||
@@ -112,6 +163,19 @@ def test_write_gender_counts_outputs_csv(tmp_path: Path) -> None:
|
||||
assert destination.read_text() == "gender,minifig_count\nmale,2\nfemale,1\n"
|
||||
|
||||
|
||||
def test_write_character_variations_totals_outputs_csv(tmp_path: Path) -> None:
|
||||
"""Écrit le CSV comparatif variations/total."""
|
||||
destination = tmp_path / "variations.csv"
|
||||
rows = [
|
||||
{"known_character": "A", "gender": "male", "variation_count": 2, "total_minifigs": 3},
|
||||
{"known_character": "B", "gender": "female", "variation_count": 1, "total_minifigs": 1},
|
||||
]
|
||||
|
||||
write_character_variations_totals(destination, rows)
|
||||
|
||||
assert destination.read_text() == "known_character,gender,variation_count,total_minifigs\nA,male,2,3\nB,female,1,1\n"
|
||||
|
||||
|
||||
def test_aggregate_presence_by_year_excludes_figurants(tmp_path: Path) -> None:
|
||||
"""Calcule le total annuel en excluant les figurants."""
|
||||
sets_path = tmp_path / "sets_enriched.csv"
|
||||
|
||||
@@ -4,6 +4,7 @@ import matplotlib
|
||||
from pathlib import Path
|
||||
|
||||
from lib.plots.minifig_characters import plot_minifigs_per_character
|
||||
from lib.plots.minifig_characters import plot_character_variations_vs_total
|
||||
|
||||
|
||||
matplotlib.use("Agg")
|
||||
@@ -23,3 +24,19 @@ def test_plot_minifigs_per_character(tmp_path: Path) -> None:
|
||||
|
||||
assert destination.exists()
|
||||
assert destination.stat().st_size > 0
|
||||
|
||||
|
||||
def test_plot_character_variations_vs_total(tmp_path: Path) -> None:
|
||||
"""Génère l'image comparant total et variations par personnage."""
|
||||
counts_path = tmp_path / "variations.csv"
|
||||
destination = tmp_path / "figures" / "step22" / "minifig_character_variations_totals.png"
|
||||
counts_path.write_text(
|
||||
"known_character,gender,variation_count,total_minifigs\n"
|
||||
"Owen Grady,male,2,3\n"
|
||||
"Ellie Sattler,female,1,2\n"
|
||||
)
|
||||
|
||||
plot_character_variations_vs_total(counts_path, destination)
|
||||
|
||||
assert destination.exists()
|
||||
assert destination.stat().st_size > 0
|
||||
|
||||
Reference in New Issue
Block a user