spb/traite-evaluation-qc
Public
1#!/usr/bin/env python32"""Figure ch44 — la « prime verte » dans la littérature : fourchettes publiées par étude (valeurs vérifiées, voir3verification/chapters/ch44-claims.csv) et, en regard, la valeur actuelle des économies des deux mesures du sujet du4cas 1 rapportée à sa valeur hédonique (DONNÉES SYNTHÉTIQUES). Sortie : assets/figures/ch44/ch44-fig-prime-verte.pdf"""5import sys, pathlib6ROOT = pathlib.Path(__file__).resolve().parents[3]7sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases"))8import matplotlib.pyplot as plt9from matplotlib.lines import Line2D10from traite.style import setup, palette, savefig, LARGEUR11import ch44_renovation as cas12from traite import cas11314ETUDES = [15 # (étiquette, bas, haut, point, catégorie)16 ("Brounen et Kok (2011), Pays-Bas :\nétiquette verte (A–C) vs autres", 3.6, 3.7, 3.7, "prix"),17 ("Brounen et Kok (2011), Pays-Bas :\nG vs D … A vs D", -5.0, 10.2, None, "prix"),18 ("Kahn et Kok (2014), Californie :\nmaison étiquetée verte", 4.5, 5.0, 5.0, "prix"),19 ("Hyland et al. (2013), Irlande :\n1 échelon BER … A vs D (prix)", 1.3, 9.3, 9.3, "prix"),20 ("Hyland et al. (2013), Irlande :\n1 échelon … A vs D (loyers)", 0.5, 1.8, 1.8, "loyer"),21 ("Fuerst et al. (2015), Angleterre :\nG vs D … A/B vs D", -6.0, 5.0, None, "prix"),22 ("Aydin et al. (2020), Pays-Bas :\n+10 % d'efficacité mesurée", 2.2, 2.2, 2.2, "prix"),23 ("Cespedes-Lopez et al. (2019), méta-analyse :\nEurope … monde … Amérique", 2.32, 5.36, 4.20, "prix"),24 ("Eichholtz et al. (2010), bureaux É.-U. :\nloyer … prix de vente", 3.0, 16.0, None, "bureaux"),25]26COUL = {"prix": palette.cat[0], "loyer": palette.cat[2], "bureaux": palette.cat[3]}272829def main():30 setup()31 mm = cas.mesures(); d = cas1.charger(); mod = cas1.hedonique(d["ventes"])32 vs = float(cas1.predire(mod, cas1.sujet_df(d["sujet"]))[0])33 va_ab = cas.flux_mesure(mm["AB"])["va_economies"]; va_a = cas.flux_mesure(mm["A"])["va_economies"]34 cout_ab = mm["AB"]["cout"]35 fig, ax = plt.subplots(figsize=(LARGEUR, 4.6))36 n = len(ETUDES)37 for i, (lab, lo, hi, pt, cat) in enumerate(ETUDES):38 y = n - 1 - i; c = COUL[cat]39 ax.plot([lo, hi], [y, y], color=c, lw=3.0, solid_capstyle="round", alpha=0.85)40 if pt is not None: ax.plot([pt], [y], marker="o", ms=6, color=c, mec="white", mew=0.8)41 ax.text(hi + 0.35, y, f"{lo:+.1f} à {hi:+.1f} %".replace(".", ",").replace("-", "−") if lo != hi else f"{hi:+.1f} %".replace(".", ",").replace("-", "−"),42 va="center", ha="left", fontsize=7.5, color=palette.ink)43 # repère du cas 1 : VA des économies rapportée à la valeur hédonique44 for k, (val, lab) in enumerate([(va_ab / vs * 100, "VA des économies\n(A + B) / valeur"), (cout_ab / vs * 100, "coût installé\n(A + B) / valeur")]):45 ax.axvline(val, color=palette.ink2, lw=0.9, ls=":" if k else "--")46 ax.text(val + (0.25 if k else -0.25), n - 0.2, f"Cas 1 : {lab} = {val:.2f} %".replace(".", ","), ha="left" if k else "right", va="bottom", fontsize=7, color=palette.ink2)47 ax.axvline(0, color=palette.ink, lw=0.7)48 ax.set_yticks(range(n)); ax.set_yticklabels([e[0] for e in ETUDES][::-1], fontsize=7.6)49 ax.set_xlim(-8, 22); ax.set_ylim(-0.7, n + 1.2)50 ax.set_xlabel("Écart de prix (ou de loyer) attribué à l'étiquette ou à l'efficacité énergétique, en %")51 ax.grid(axis="y", visible=False)52 leg = [Line2D([0], [0], color=COUL["prix"], lw=3, label="Prix de vente, logements"), Line2D([0], [0], color=COUL["loyer"], lw=3, label="Loyers, logements"),53 Line2D([0], [0], color=COUL["bureaux"], lw=3, label="Bureaux (loyers et prix)")]54 ax.legend(handles=leg, loc="upper right", fontsize=7.5, bbox_to_anchor=(1.0, 0.86))55 out = savefig(fig, "ch44/ch44-fig-prime-verte.pdf"); print("OK", out)565758if __name__ == "__main__":59 main()60