Estimation de la demande potentielle en logements à horizon 2035
Selon les départements, la demande potentielle en logements est très variable, entre 100 (pour l’Orne) et 2 600 (pour la Seine-Maritime) logements par an pour le scénario central.
Code
data_DPL_scenarios_t =transpose (data_DPL_scenarios)// mettre à jour librairie plot pour faire des round cornersPlot =import("https://cdn.jsdelivr.net/npm/@observablehq/plot/+esm")// doc :// https://observablehq.com/@observablehq/input-tableInputs.table(data_DPL_scenarios_t,{header: {"valeur":"Nb de logements / an" },format: {"valeur": d =>Math.round(d) }})
Plot.plot({marginLeft:100,marginRight:100,marginTop:50,//height: 1100,width:1100,style: {fontSize:16, },y: {domain:[0,6000],ticks:6,tickFormat: d => d.toLocaleString('fr-FR'),grid:true,label:"Nb de logements / an"},x: {label:"",inset:10},color: {legend:true,domain: ["lgts commencés 2015-2019","lgts commencés 2020-2023 (Sitadel)"],// les catégories de fillrange: ["orange","#16fa53"] // les couleurs choisies },title:"Estimation de la demande potentielle en logements à horizon 2035 (moyenne annuelle)",marks: [ Plot.barY(data_DPL_scenarios_t, {x:"Libellé zonage",y1:"Tendanciel BAS",y2:"Tendanciel HAUT",fill:"steelblue",r:5,insetRight:40,insetLeft:40 }), Plot.dot(data_DPL_scenarios_t, {x:"Libellé zonage",y:"Tendanciel BAS",fill:"steelblue",symbol:"diamond",r:10,tip: {format: { y: d =>Math.round(d).toLocaleString('fr-FR'), } } }), Plot.dot(data_DPL_scenarios_t, {x:"Libellé zonage",y:"Tendanciel HAUT",fill:"steelblue",symbol:"diamond",r:10,tip: {format: { y: d =>Math.round(d).toLocaleString('fr-FR'), } } }), Plot.dot(data_DPL_scenarios_t, {x:"Libellé zonage",y:"Tendanciel CENTRAL",fill:"black",symbol:"star",r:5,tip: {format: { y: d =>Math.round(d).toLocaleString('fr-FR'), } } }), Plot.ruleY([0]), Plot.text(data_DPL_scenarios_t, {x:"Libellé zonage",y:"Tendanciel CENTRAL",dx:45,text: d =>`Scénario central:\n${Math.round(d["Tendanciel CENTRAL"]).toLocaleString('fr-FR')} logt/an`,// stroke:"white, fill:"black",fontSize:13,textAnchor:"start" }), Plot.tickY(logt_comm_periode, {x:"Libellé zonage",y:"Logts ordinaires commencés /an",stroke:"periode",strokeWidth:2,fill:"periode",insetRight:40,insetLeft:40,tip:true }) ]})
Décomposition par effets
Si l’on s’intéresse au scénario central, on peut connaître de façon plus précise l’origine de cette demande.
Code
data_long_central_ojs =transpose (data_long_central)// doc :// https://observablehq.com/@observablehq/input-tableInputs.table(data_long_central_ojs,{header: {"valeur":"Nb de logements / an" },format: {"valeur": d =>Math.round(d) }})
Décomposition de l’évolution annuelle du nombre de ménages en Normandie selon le type d’effet (scénario central)
Code
colorPalette = { return {"Ménage par an – effet nouvelle population":"#83caff",// Bleu"Ménage par an – effet déformation pyramide des âges":"#9999ff",// Violet"Ménage par an – effet évolution des modes de cohabitation":"#198a8a",// Cyan"Renouvellement par an":"#c5000b",// Rouge"Vacance par an":"#ffd320",// Jaune"Résidences Secondaires et Logts Occasion. par an":"#81d41a"// Vert}};Plot.plot({marginLeft:100,marginRight:200,//height: 1100,width:1200,style: {fontSize:16, },x: {label:""},y: {grid:true,label:"Nb de logts / an",tickFormat: y => y.toLocaleString('fr-FR') },color: {legend:true,domain:Object.keys(colorPalette),range:Object.values(colorPalette)},marks: [ Plot.barY(data_long_central_ojs.filter(d => d.effet!="Moyenne annuelle Demande Potentielle logements"), {x:"Libellé zonage",y:"valeur",fill:"effet",tip:true,insetRight:40,insetLeft:40 }), Plot.ruleY([0]),// Cercle pour le fond de texte Plot.dotY(data_long_central_ojs.filter(d => d.effet=="Moyenne annuelle Demande Potentielle logements"), {x:"Libellé zonage",y:"valeur",fill:"white",stroke:"black",r:20 }), Plot.text(data_long_central_ojs.filter(d => d.effet=="Moyenne annuelle Demande Potentielle logements"), {x:"Libellé zonage",y:"valeur",text: d =>Math.round(d.valeur).toLocaleString('fr-FR'),fontSize:12,textAnchor:"middle" }) ]})
L’origine de la demande potentielle en logements diffère fortement d’un département à l’autre. Ainsi, la Seine-Maritime et le Calvados, et dans une moindre mesure l’Eure et la Manche, présentent un besoin important lié au desserrement des ménages (principalement dû au vieillissement de la population). La Manche, quant à elle, se démarque par un besoin prononcé lié aux résidences secondaires. On peut noter que le Calvados est le seul département qui ne perd pas d’habitants.
À l’échelle de chaque département, la part de la demande potentielle en logements liée à l’évolution des ménages (= résidences principales) et celle liée à l’évolution du parc représentent respectivement :
Calvados : 74% / 26%
Eure : 88% / 12%
Manche : 56% / 44%
Orne : -46% / 146%
Seine-Maritime : 83% / 17%
Age et composition familiale des ménages
Variation annuelle du nombre de ménages selon leur âge
Entre 2018 et 2035, tous les départements voient une forte augmentation du nombre de ménages de plus de 65 ans. Le Calvados et la Seine-Maritime sont les seuls départements dont le nombre de ménages de moins de 35 ans augmente légèrement. Les ménages de 35 à 65 ans diminuent dans tous les départements.
Code
data_long_age_ojs =transpose (data_long_age)// doc :// https://observablehq.com/@observablehq/input-tableInputs.table(data_long_age_ojs,{header: {"valeur":"Nb de logements / an" },format: {"valeur": d =>Math.round(d) }})
Code
Plot.plot({label:null,marginLeft:100,width:900,x: {label:"nb ménages /an sur la période 2018-2035",labelAnchor:"center",x: (d) => d.valeur.toLocaleString('fr-FR'),grid:true,tickFormat: y => y.toLocaleString('fr-FR') },y: { domain: ["> 80 ans","65-79 ans","50-64 ans","35-49 ans","< 35 ans"],axis:"left" },color: {scheme:"PiYG",type:"ordinal"},//title: "Variation annuelle du nombre de ménages selon leur âge",marks: [ Plot.barX(data_long_age_ojs, {x:"valeur",y:"tranche_age",r:3,channels: {nb_menages: d => d.valeur.toLocaleString('fr-FR'),age:"tranche_age"},tip: { format: {x:false,y:false,fill:false }},fill: (d) => d.valeur>0 }), Plot.ruleX([0]) ]})
temp_2018 = data_long_age_2018_t.map(objet => ({...objet,annee:"2018"// en texte parce que c'est pas des choses que je veux additioner ou mettre en continu}));// On ajoute la propriété année à 2018temp_2035 = data_long_age_2035_t.map(objet => ({...objet,annee:"2035"}));// on fusionne les 2 tableauxdata_long_age_2018_2035_t = [...temp_2018,...temp_2035]// on vérifie la donnée//data_long_age_2018_2035_t// pour mémoire, on récupère du texte dans valeur, on les retransforme en nombre du coup...Plot.plot({label:null,marginLeft:50,width:400,height:200,y: {label:"nb ménages",grid:true,tickFormat: y => y.toLocaleString('fr-FR') },x: { domain: ["< 35 ans","35-49 ans","50-64 ans","65-79 ans","> 80 ans"]},color: {legend:true,domain: ["2018","2035"],// les catégories de fillrange: ["steelblue","#b00465"] // les couleurs que tu choisis },marks: [ Plot.lineY(data_long_age_2018_2035_t, {x:"tranche_age",y: d =>Number(d.valeur.replace(/\s/g,"")),r:3,stroke:"annee" }), Plot.dot(data_long_age_2018_2035_t, {x:"tranche_age",y: d =>Number(d.valeur.replace(/\s/g,"")),tip:true,fill:"annee" }), Plot.ruleY([0]), Plot.axisX({y:0}) ]})
Variation annuelle du nombre de ménages selon leur composition familiale
Entre 2018 et 2035, le nombre de ménages de personne seule va considérablement augmenter.
En 2035, les ménages de personne seule devraient représenter 42 % de l’ensemble des ménages de la région.
Code
data_long_moco_ojs =transpose (data_long_moco)// doc :// https://observablehq.com/@observablehq/input-tableInputs.table(data_long_moco_ojs,{header: {"valeur":"Nb de logements / an" },format: {"valeur": d =>Math.round(d) }})
Code
colorPalette2 = { return {"Couple avec ou sans enfant":"#81d41a",// vert"Personne seule":"#800080",// Violet"Famille monoparentale":"#729fcf",// bleu"Personne hors famille":"#8d281e"// marron}};Plot.plot({label:null,marginLeft:200,width:900,x: {label:"nb ménages /an sur la période 2018-2035",labelAnchor:"center",x: (d) => d.valeur.toLocaleString('fr-FR'),tickFormat: y => y.toLocaleString('fr-FR'),grid:true },y: { domain: ["Personne hors famille","Famille monoparentale","Personne seule","Couple avec ou sans enfant"],axis:"left" },color: {legend:true,domain:Object.keys(colorPalette2),range:Object.values(colorPalette2)},//title: "Variation annuelle du nombre de ménages selon leur âge",marks: [ Plot.barX(data_long_moco_ojs, {x:"valeur",y:"mode_cohab",r:3,channels: {nb_menages: d => d.valeur.toLocaleString('fr-FR')},tip: { format: {x:false,y:true,fill:false }},fill:"mode_cohab" }), Plot.ruleX([0]) ]})
Nombre de ménages en 2035 selon leur composition familiale
Code
data_long_moco_2035_ojs =transpose (data_long_moco_2035)// doc :// https://observablehq.com/@observablehq/input-table/*Inputs.table(data_long_moco_2035_ojs,{ header: { "valeur": "Nb de logements" }, format: { "valeur": d => Math.round(d) }})*/
Code
total_number =Number( data_long_moco_2035_ojs.filter(d => d.mode_cohab=='total' )[0].valeur.replace(/\s/g,'') )Plot.plot({subtitle:"Composition des ménages en 2035",marginLeft:100,color: {legend:true,domain:Object.keys(colorPalette2),range:Object.values(colorPalette2)},y: {label:"nb ménages en 2035",grid:true,tickFormat: y => y.toLocaleString('fr-FR') },x: { domain: ["Couple avec ou sans enfant","Personne seule","Famille monoparentale","Personne hors famille"],label:"" },marks: [ Plot.barY(data_long_moco_2035_ojs.filter(d => d.mode_cohab!='total' ), {x:"mode_cohab",y: d =>Number(d.valeur.replace(/\s/g,"")),fill:"mode_cohab",tip: { format: {fill:false}},r:3 }), Plot.text(data_long_moco_2035_ojs.filter(d => d.mode_cohab!='total'), {text: d =>`${(d.valeur.replace(/\s/g,"") / total_number *100).toFixed(1) } %`,// toFixed de 1 pour 1 décimaley: d =>Number(d.valeur.replace(/\s/g,"")),x:"mode_cohab",textAnchor:"middle",lineAnchor:"top",fontWeight:"bold",fontSize:15,dy:-13,fill:"black" }) ]})