From f9086215115da88e88f363da5a1b342603c96f0e Mon Sep 17 00:00:00 2001 From: Richard Dern Date: Tue, 2 Dec 2025 14:28:11 +0100 Subject: [PATCH] =?UTF-8?q?Compl=C3=A8te=20l=E2=80=99=C3=A9tape=2026=20ave?= =?UTF-8?q?c=20l=E2=80=99=C3=A9volution=20minifigs/set?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + figures/step26/minifigs_per_set_timeline.png | Bin 0 -> 104467 bytes lib/plots/minifig_parts_timeline.py | 45 +++++++++++++ lib/rebrickable/minifig_parts_correlation.py | 67 +++++++++++++++++++ scripts/plot_minifig_parts_correlation.py | 18 ++++- tests/test_minifig_parts_correlation.py | 55 ++++++++++++++- tests/test_minifig_parts_timeline_plot.py | 27 ++++++++ 7 files changed, 211 insertions(+), 2 deletions(-) create mode 100644 figures/step26/minifigs_per_set_timeline.png create mode 100644 lib/plots/minifig_parts_timeline.py create mode 100644 tests/test_minifig_parts_timeline_plot.py diff --git a/README.md b/README.md index a1667da..603202f 100644 --- a/README.md +++ b/README.md @@ -268,3 +268,4 @@ Le script lit `data/intermediate/minifigs_by_set.csv`, agrège le nombre de mini 2. `python -m scripts.plot_minifig_parts_correlation` Le script lit `data/intermediate/minifig_counts_by_set.csv`, `data/intermediate/sets_enriched.csv`, `data/raw/sets.csv`, `data/raw/inventories.csv` et `data/raw/inventory_minifigs.csv`, produit `data/intermediate/minifig_parts_correlation.csv` (pièces vs minifigs pour le catalogue global et les thèmes filtrés), puis trace `figures/step26/minifig_parts_correlation.png` en superposant les nuages de points et leurs tendances linéaires. +Un second export `data/intermediate/minifigs_per_set_timeline.csv` est généré pour l'évolution annuelle du nombre moyen de minifigs par set, visualisé dans `figures/step26/minifigs_per_set_timeline.png` (courbes catalogue vs thèmes filtrés). diff --git a/figures/step26/minifigs_per_set_timeline.png b/figures/step26/minifigs_per_set_timeline.png new file mode 100644 index 0000000000000000000000000000000000000000..c15831e49d83ca01bd2e505f69d8a88f9778c4e6 GIT binary patch literal 104467 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 E0E?|-^Z)<= literal 0 HcmV?d00001 diff --git a/lib/plots/minifig_parts_timeline.py b/lib/plots/minifig_parts_timeline.py new file mode 100644 index 0000000..cb7c3d7 --- /dev/null +++ b/lib/plots/minifig_parts_timeline.py @@ -0,0 +1,45 @@ +"""Évolution annuelle du nombre moyen de minifigs par set.""" + +from pathlib import Path +from typing import List + +import matplotlib.pyplot as plt + +from lib.filesystem import ensure_parent_dir +from lib.rebrickable.stats import read_rows + + +def load_minifigs_per_year(path: Path, scope: str) -> List[tuple[int, float]]: + """Charge les moyennes annuelles pour un scope donné.""" + rows = read_rows(path) + values: List[tuple[int, float]] = [] + for row in rows: + if row["scope"] != scope: + continue + values.append((int(row["year"]), float(row["average_minifigs_per_set"]))) + values.sort(key=lambda item: item[0]) + return values + + +def plot_minifigs_per_set_timeline(path: Path, destination_path: Path) -> None: + """Trace l'évolution annuelle des minifigs par set (global vs filtré).""" + filtered = load_minifigs_per_year(path, "filtered") + catalog = load_minifigs_per_year(path, "catalog") + if not filtered or not catalog: + return + filtered_years, filtered_values = zip(*filtered) + catalog_years, catalog_values = zip(*catalog) + + fig, ax = plt.subplots(figsize=(12, 6)) + ax.plot(catalog_years, catalog_values, color="#888888", linestyle="--", linewidth=1.6, label="Catalogue global") + ax.plot(filtered_years, filtered_values, color="#1f77b4", linewidth=2.2, marker="o", label="Thèmes filtrés") + ax.set_xlabel("Année") + ax.set_ylabel("Nombre moyen de minifigs par set") + ax.set_title("Évolution des minifigs par set") + ax.grid(True, linestyle="--", alpha=0.3) + ax.legend(loc="upper left") + + ensure_parent_dir(destination_path) + fig.tight_layout() + fig.savefig(destination_path, dpi=160) + plt.close(fig) diff --git a/lib/rebrickable/minifig_parts_correlation.py b/lib/rebrickable/minifig_parts_correlation.py index 4a2ad05..4410d43 100644 --- a/lib/rebrickable/minifig_parts_correlation.py +++ b/lib/rebrickable/minifig_parts_correlation.py @@ -80,6 +80,62 @@ def build_correlation_rows( return rows +def build_minifigs_per_year( + filtered_counts_path: Path, + all_sets_path: Path, + inventories_path: Path, + inventory_minifigs_path: Path, +) -> List[dict]: + """Calcule le nombre moyen de minifigs par set et par année (filtré vs catalogue).""" + filtered_totals: Dict[int, Dict[str, int]] = {} + with filtered_counts_path.open() as csv_file: + reader = csv.DictReader(csv_file) + for row in reader: + year = int(row["year"]) + current = filtered_totals.get(year) + if current is None: + filtered_totals[year] = {"minifigs": int(row["minifig_count"]), "sets": 1} + else: + current["minifigs"] += int(row["minifig_count"]) + current["sets"] += 1 + global_minifigs = build_global_minifig_counts(inventories_path, inventory_minifigs_path) + catalog_totals: Dict[int, Dict[str, int]] = {} + with all_sets_path.open() as csv_file: + reader = csv.DictReader(csv_file) + for row in reader: + year = int(row["year"]) + current = catalog_totals.get(year) + if current is None: + catalog_totals[year] = {"minifigs": global_minifigs.get(row["set_num"], 0), "sets": 1} + else: + current["minifigs"] += global_minifigs.get(row["set_num"], 0) + current["sets"] += 1 + rows: List[dict] = [] + for year in sorted(filtered_totals.keys()): + totals = filtered_totals[year] + average = totals["minifigs"] / totals["sets"] + rows.append( + { + "scope": "filtered", + "year": str(year), + "average_minifigs_per_set": f"{average:.3f}", + "set_count": str(totals["sets"]), + } + ) + for year in sorted(catalog_totals.keys()): + totals = catalog_totals[year] + average = totals["minifigs"] / totals["sets"] + rows.append( + { + "scope": "catalog", + "year": str(year), + "average_minifigs_per_set": f"{average:.3f}", + "set_count": str(totals["sets"]), + } + ) + return rows + + def write_correlation_rows(path: Path, rows: Sequence[dict]) -> None: """Écrit les lignes de corrélation pièces/minifigs.""" ensure_parent_dir(path) @@ -91,6 +147,17 @@ def write_correlation_rows(path: Path, rows: Sequence[dict]) -> None: writer.writerow(row) +def write_minifigs_per_year(path: Path, rows: Sequence[dict]) -> None: + """Écrit le CSV annuel minifigs / set.""" + ensure_parent_dir(path) + fieldnames = ["scope", "year", "average_minifigs_per_set", "set_count"] + with path.open("w", newline="") as csv_file: + writer = csv.DictWriter(csv_file, fieldnames=fieldnames) + writer.writeheader() + for row in rows: + writer.writerow(row) + + def load_correlation_rows(path: Path) -> List[dict]: """Charge le CSV de corrélation pièces/minifigs.""" return read_rows(path) diff --git a/scripts/plot_minifig_parts_correlation.py b/scripts/plot_minifig_parts_correlation.py index d0828d3..ffca63a 100644 --- a/scripts/plot_minifig_parts_correlation.py +++ b/scripts/plot_minifig_parts_correlation.py @@ -3,7 +3,13 @@ from pathlib import Path from lib.plots.minifig_parts_correlation import plot_minifig_parts_correlation -from lib.rebrickable.minifig_parts_correlation import build_correlation_rows, write_correlation_rows +from lib.plots.minifig_parts_timeline import plot_minifigs_per_set_timeline +from lib.rebrickable.minifig_parts_correlation import ( + build_correlation_rows, + build_minifigs_per_year, + write_correlation_rows, + write_minifigs_per_year, +) FILTERED_MINIFIG_COUNTS_PATH = Path("data/intermediate/minifig_counts_by_set.csv") @@ -12,7 +18,9 @@ ALL_SETS_PATH = Path("data/raw/sets.csv") INVENTORIES_PATH = Path("data/raw/inventories.csv") INVENTORY_MINIFIGS_PATH = Path("data/raw/inventory_minifigs.csv") CORRELATION_PATH = Path("data/intermediate/minifig_parts_correlation.csv") +MINIFIGS_PER_YEAR_PATH = Path("data/intermediate/minifigs_per_set_timeline.csv") DESTINATION_PATH = Path("figures/step26/minifig_parts_correlation.png") +TIMELINE_DESTINATION_PATH = Path("figures/step26/minifigs_per_set_timeline.png") def main() -> None: @@ -26,6 +34,14 @@ def main() -> None: ) write_correlation_rows(CORRELATION_PATH, rows) plot_minifig_parts_correlation(CORRELATION_PATH, DESTINATION_PATH) + per_year = build_minifigs_per_year( + FILTERED_MINIFIG_COUNTS_PATH, + ALL_SETS_PATH, + INVENTORIES_PATH, + INVENTORY_MINIFIGS_PATH, + ) + write_minifigs_per_year(MINIFIGS_PER_YEAR_PATH, per_year) + plot_minifigs_per_set_timeline(MINIFIGS_PER_YEAR_PATH, TIMELINE_DESTINATION_PATH) if __name__ == "__main__": diff --git a/tests/test_minifig_parts_correlation.py b/tests/test_minifig_parts_correlation.py index c0f40a8..e0e0581 100644 --- a/tests/test_minifig_parts_correlation.py +++ b/tests/test_minifig_parts_correlation.py @@ -2,7 +2,7 @@ from pathlib import Path -from lib.rebrickable.minifig_parts_correlation import build_correlation_rows +from lib.rebrickable.minifig_parts_correlation import build_correlation_rows, build_minifigs_per_year def write_csv(path: Path, content: str) -> None: @@ -68,3 +68,56 @@ def test_build_correlation_rows_merges_filtered_and_catalog(tmp_path: Path) -> N {"scope": "catalog", "set_num": "124-1", "num_parts": "150", "minifig_count": "1"}, {"scope": "catalog", "set_num": "200-1", "num_parts": "100", "minifig_count": "3"}, ] + + +def test_build_minifigs_per_year_computes_averages(tmp_path: Path) -> None: + """Calcule les moyennes annuelles minifigs/set pour filtrés et catalogue.""" + filtered_counts_path = tmp_path / "minifig_counts_by_set.csv" + write_csv( + filtered_counts_path, + "set_num,set_id,name,year,minifig_count\n" + "123-1,123,Set A,2020,2\n" + "124-1,124,Set B,2020,1\n" + "125-1,125,Set C,2021,3\n", + ) + all_sets_path = tmp_path / "sets.csv" + write_csv( + all_sets_path, + "set_num,name,year,theme_id,num_parts\n" + "123-1,Set A,2020,1,300\n" + "124-1,Set B,2020,1,150\n" + "125-1,Set C,2021,1,100\n" + "200-1,Set D,2020,1,50\n", + ) + inventories_path = tmp_path / "inventories.csv" + write_csv( + inventories_path, + "id,version,set_num\n" + "10,1,123-1\n" + "20,1,124-1\n" + "30,1,125-1\n" + "40,1,200-1\n", + ) + inventory_minifigs_path = tmp_path / "inventory_minifigs.csv" + write_csv( + inventory_minifigs_path, + "inventory_id,fig_num,quantity\n" + "10,fig-a,2\n" + "20,fig-b,1\n" + "30,fig-c,3\n" + "40,fig-d,4\n", + ) + + rows = build_minifigs_per_year( + filtered_counts_path, + all_sets_path, + inventories_path, + inventory_minifigs_path, + ) + + assert rows == [ + {"scope": "filtered", "year": "2020", "average_minifigs_per_set": "1.500", "set_count": "2"}, + {"scope": "filtered", "year": "2021", "average_minifigs_per_set": "3.000", "set_count": "1"}, + {"scope": "catalog", "year": "2020", "average_minifigs_per_set": "2.333", "set_count": "3"}, + {"scope": "catalog", "year": "2021", "average_minifigs_per_set": "3.000", "set_count": "1"}, + ] diff --git a/tests/test_minifig_parts_timeline_plot.py b/tests/test_minifig_parts_timeline_plot.py new file mode 100644 index 0000000..3584f1a --- /dev/null +++ b/tests/test_minifig_parts_timeline_plot.py @@ -0,0 +1,27 @@ +"""Tests du graphique d'évolution minifigs/set.""" + +import matplotlib +from pathlib import Path + +from lib.plots.minifig_parts_timeline import plot_minifigs_per_set_timeline + + +matplotlib.use("Agg") + + +def test_plot_minifigs_per_set_timeline(tmp_path: Path) -> None: + """Génère la courbe minifigs/set.""" + timeline_path = tmp_path / "minifigs_per_set_timeline.csv" + destination = tmp_path / "figures" / "step26" / "minifigs_per_set_timeline.png" + timeline_path.write_text( + "scope,year,average_minifigs_per_set,set_count\n" + "filtered,2020,1.500,2\n" + "filtered,2021,2.000,1\n" + "catalog,2020,1.000,3\n" + "catalog,2021,2.500,2\n" + ) + + plot_minifigs_per_set_timeline(timeline_path, destination) + + assert destination.exists() + assert destination.stat().st_size > 0