1

Ajoute l’analyse des catégories de pièces

This commit is contained in:
2025-12-02 17:07:41 +01:00
parent c2bf12e3fe
commit 2050d73105
10 changed files with 632 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
"""Calcule la répartition des pièces par catégories."""
from pathlib import Path
from lib.rebrickable.part_categories import (
build_category_totals,
build_global_totals,
enrich_categories_with_sets,
load_category_names,
load_parts_catalog,
load_sets_enriched,
write_categories_by_set,
write_categories_by_year,
write_categories_global,
)
from lib.rebrickable.stats import read_rows
PARTS_PATH = Path("data/intermediate/parts_filtered.csv")
PARTS_CATALOG_PATH = Path("data/raw/parts.csv")
PART_CATEGORIES_PATH = Path("data/raw/part_categories.csv")
SETS_ENRICHED_PATH = Path("data/intermediate/sets_enriched.csv")
CATEGORIES_BY_SET_PATH = Path("data/intermediate/part_categories_by_set.csv")
CATEGORIES_BY_YEAR_PATH = Path("data/intermediate/part_categories_by_year.csv")
CATEGORIES_GLOBAL_PATH = Path("data/intermediate/part_categories_global.csv")
def main() -> None:
"""Construit les agrégats par set, par année et globaux."""
parts_rows = read_rows(PARTS_PATH)
parts_catalog = load_parts_catalog(PARTS_CATALOG_PATH)
category_names = load_category_names(PART_CATEGORIES_PATH)
sets_lookup = load_sets_enriched(SETS_ENRICHED_PATH)
grouped_parts = {}
for row in parts_rows:
set_rows = grouped_parts.get(row["set_num"])
if set_rows is None:
set_rows = []
grouped_parts[row["set_num"]] = set_rows
set_rows.append(row)
categories_by_set_raw, categories_by_year = build_category_totals(grouped_parts, parts_catalog, category_names)
categories_by_set = enrich_categories_with_sets(categories_by_set_raw, sets_lookup)
categories_global = build_global_totals(categories_by_set)
write_categories_by_set(CATEGORIES_BY_SET_PATH, categories_by_set)
write_categories_by_year(CATEGORIES_BY_YEAR_PATH, categories_by_year)
write_categories_global(CATEGORIES_GLOBAL_PATH, categories_global)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,27 @@
"""Trace les graphiques de répartition par catégories de pièces."""
from pathlib import Path
from lib.plots.part_categories import (
plot_part_categories_heatmap,
plot_structural_share_timeline,
plot_top_part_categories_area,
)
CATEGORIES_BY_YEAR_PATH = Path("data/intermediate/part_categories_by_year.csv")
CATEGORIES_GLOBAL_PATH = Path("data/intermediate/part_categories_global.csv")
AREA_DESTINATION = Path("figures/step29/top_part_categories_area.png")
HEATMAP_DESTINATION = Path("figures/step29/part_categories_heatmap.png")
STRUCTURAL_DESTINATION = Path("figures/step29/structural_share_timeline.png")
def main() -> None:
"""Génère les visuels de répartition par catégorie."""
plot_top_part_categories_area(CATEGORIES_BY_YEAR_PATH, CATEGORIES_GLOBAL_PATH, AREA_DESTINATION)
plot_part_categories_heatmap(CATEGORIES_BY_YEAR_PATH, HEATMAP_DESTINATION)
plot_structural_share_timeline(CATEGORIES_BY_YEAR_PATH, STRUCTURAL_DESTINATION)
if __name__ == "__main__":
main()