SPB Git
2.6 KB · 43 lines python
1#!/usr/bin/env python32"""Figure ch02 — cas 3 (DONNÉES SYNTHÉTIQUES) : (a) ratio loyer contractuel / loyer de marché selon l'ancienneté du locataire,3avec la loi de génération déclarée (0,98^ancienneté) ; (b) valeur du bail pour le locataire selon la durée de maintien attendue,4r = 7,25 %, pour quatre logements. Sortie : assets/figures/ch02/ch02-fig-ecart-logements.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 np, matplotlib.pyplot as plt9from traite.style import setup, palette, savefig, LARGEUR, fmt_dollars10import ch02_droits as cas111213def main():14    setup()15    res = cas.main(verbose=False)16    e = res["ecarts"]; r = res["d"]["hyp"]["taux_actualisation"]17    fig, (a, b) = plt.subplots(1, 2, figsize=(LARGEUR, 3.1), gridspec_kw={"width_ratios": [1, 1.1]})18    # (a) ratio vs ancienneté19    x = np.linspace(0, 20, 100)20    a.plot(x, 0.98 ** x, color=palette.ink2, lw=1.0, ls="--", label="loi de génération $0{,}98^{\\,a}$")21    a.scatter(e["anciennete"], e["ratio_contrat_marche"], color=palette.cat[0], s=28, zorder=3, label="logements du cas 3")22    for anc, grp in e.groupby("anciennete"):   # une étiquette par ancienneté (plusieurs logements partagent la même)23        lab = ", ".join(str(int(x)) for x in sorted(grp["logement"]))24        a.annotate(lab, (anc, grp["ratio_contrat_marche"].mean()), xytext=(anc + 0.45, grp["ratio_contrat_marche"].mean() + 0.004), fontsize=6.8, color=palette.ink)25    a.set_xlabel("Ancienneté du locataire (années, au 1$^{\\rm er}$ sept. 2026)"); a.set_ylabel("Loyer contractuel / loyer de marché")26    a.set_ylim(0.62, 1.02); a.set_xlim(-0.5, 20); a.legend(loc="lower left")27    a.set_title("(a) Écart au marché et ancienneté", loc="left")28    # (b) valeur du bail pour le locataire selon n29    n = np.arange(1, 11)30    for k, lg in enumerate([103, 102, 302, 101]):31        row = e.loc[e["logement"] == lg].iloc[0]32        va = [cas.valeur_bail_locataire(row["ecart_annuel"], int(j), r) for j in n]33        b.plot(n, np.array(va) / 1000, marker="o", ms=3.5, color=palette.cat[k], label=f"log. {lg} ({row['ecart_mensuel']:.0f} $/mois)")34    b.set_xlabel("Durée de maintien dans les lieux $n$ (années)"); b.set_ylabel("Valeur du bail pour le locataire (milliers de $)")35    b.set_xticks(n); b.legend(loc="upper left", fontsize=7.2)36    b.set_title("(b) $\\sum_{t \\leq n} (L^m_t - L^c_t)/(1{,}0725)^t$", loc="left")37    fig.tight_layout(w_pad=2.2)38    out = savefig(fig, "ch02/ch02-fig-ecart-logements.pdf"); print("OK", out)394041if __name__ == "__main__":42    main()43
Files · 2eb2bf4e67f754808bae5090a9e53eab37149ddb
Menu

Theme