You've already forked etude_lego_jurassic_world
Ajoute l’analyse des catégories de pièces
This commit is contained in:
50
scripts/compute_part_categories.py
Normal file
50
scripts/compute_part_categories.py
Normal 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()
|
||||
27
scripts/plot_part_categories.py
Normal file
27
scripts/plot_part_categories.py
Normal 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()
|
||||
Reference in New Issue
Block a user