SPB Git
2.2 KB · 38 lines python
1#!/usr/bin/env python32"""Figure ch05 — prix par mètre carré habitable et distance au centre, cas 1 (Gatineau, DONNÉES SYNTHÉTIQUES, graine 20261031).3Nuage des 600 ventes, médianes par tranche de distance et gradient exponentiel ajusté (ln(P/S) sur d).4Sortie : assets/figures/ch05/ch05-fig-prix-distance-cas1.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 numpy as np9import matplotlib.pyplot as plt10from traite.style import setup, palette, savefig, LARGEUR, fmt_milliers11from traite import cas112from traite import hedonique as h13import ch05_rente as c51415def main():16    setup()17    v = cas1.charger()["ventes"]; v = v.assign(prix_m2=v["prix_vente"] / v["superficie_habitable_m2"])18    tr = c5.tranches_distance(v)19    d = v["dist_centre_km"].values; r = h.mco(np.column_stack([np.ones_like(d), d]), np.log(v["prix_m2"].values))20    fig, ax = plt.subplots(figsize=(LARGEUR, 3.4))21    ax.scatter(d, v["prix_m2"], s=9, color=palette.cat[0], alpha=0.35, lw=0, label="Ventes (n = 600)")22    ax.plot(tr["dist_mediane"], tr["prix_m2_median"], color=palette.ink, marker="o", ms=5, lw=1.6, label="Médiane par tranche de distance")23    xx = np.linspace(0, 33, 200)24    ax.plot(xx, np.exp(r["beta"][0] + r["beta"][1] * xx), color=palette.cat[3], lw=1.6, ls="--", label=f"Gradient exponentiel ajusté ({-r['beta'][1]*100:.2f} %/km)")25    for sct, xpos in [("Hull", 1.6), ("Gatineau", 7.4), ("Aylmer", 10.9), ("Buckingham et\nMasson-Angers", 28.0)]:26        ax.text(xpos, 5150, sct, ha="center", fontsize=7, color=palette.ink2)27    s = cas1.charger()["sujet"]28    ax.axvline(s["dist_centre_km"], color=palette.ink2, lw=0.8, ls=":")29    ax.text(s["dist_centre_km"] + 0.3, 1600, "sujet (2,1 km)", fontsize=7, color=palette.ink2)30    ax.set_xlim(-0.5, 33.5); ax.set_ylim(1500, 5400)31    ax.yaxis.set_major_formatter(plt.FuncFormatter(fmt_milliers))32    ax.set_xlabel("Distance au centre de référence (km)"); ax.set_ylabel("Prix par m² habitable ($/m²)")33    ax.legend(loc="lower center", bbox_to_anchor=(0.52, 0.0), fontsize=7.5)34    out = savefig(fig, "ch05/ch05-fig-prix-distance-cas1.pdf"); print("OK", out)3536if __name__ == "__main__":37    main()38
Files · 185d04a62ff66f3d004407340590d377c512efce
Menu

Theme