Exemples sur Indicateurs de prix¶
[21]:
from apifoncier import configure
import apifoncier.ind_prix as prix
import requests
import plotly.io as pio
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import folium
import branca
pio.renderers.default = "notebook"
configure(PROGRESS_BAR=False)
Evolution des prix et des volumes de transactions¶
[22]:
df = prix.communes(code_insee="59646")
fig = make_subplots(specs=[[{"secondary_y": True}]])
palette = ["indianred", "lightsalmon"]
# Ajout des barres de nombre de transaction
fig.add_trace(
go.Bar(
x=df["annee"],
y=df["nbtrans_cod1113"],
name="Maisons anciennes",
marker_color=palette[0],
opacity=0.7,
),
secondary_y=False,
)
fig.add_trace(
go.Bar(
x=df["annee"],
y=df["nbtrans_cod1213"],
name="Appartements anciens",
marker_color=palette[1],
opacity=0.7,
),
secondary_y=False,
)
# Ajout des courbes de prix médian
fig.add_trace(
go.Scatter(
x=df["annee"],
y=df["pxm2_median_cod1113"],
mode="lines",
name="Maisons anciennes",
line=dict(color=palette[0]),
),
secondary_y=True,
)
fig.add_trace(
go.Scatter(
x=df["annee"],
y=df["pxm2_median_cod1213"],
mode="lines",
name="Appartements anciens",
line=dict(color=palette[1]),
),
secondary_y=True,
)
# Mise à jour de la mise en page du graphique
fig.update_layout(
title="Évolution annuelle des prix médian et du nombre de transaction (Wasquehal)",
xaxis_title="Année",
yaxis_title="Nombre de ventes",
yaxis2=dict(title="Prix médian au m2", overlaying="y", side="right"),
)
fig.show()
Carte communale à l’échelle d’un EPCI¶
[23]:
# On définit l'EPCI et on récupère les contours des communes qui la compose
EPCI = "245900758"
communes = requests.get(
f"https://geo.api.gouv.fr/epcis/{EPCI}/communes/?format=geojson&geometry=contour"
).json()
# On choisit un indicateur de prix
indicateur, titre = "valeurfonc_median_mmx", "Maisons - surface entre 90 et 130 m2 "
mini, maxi = 99999999, 0
# Ajout de l'indicateur pour chaque contour de communes
for i, comm in enumerate(communes["features"]):
code = comm["properties"]["code"]
nom = comm["properties"]["nom"]
print(nom, str(i + 1) + "/" + str(len(communes["features"])))
response = prix.communes(code_insee=code, periode="triennal", annee="2019")
if not response.empty:
value = response[indicateur].values[0] or 0
comm["properties"][indicateur] = value
if value > 0:
if value < mini:
mini = value
if value > maxi:
maxi = value
# Génération de la carte
colorscale = branca.colormap.linear.YlOrRd_09.scale(mini, maxi)
colorscale.caption = "Prix médian (€) communal entre 2019 et 2021"
def style_function(feature):
value = feature["properties"][indicateur]
return {
"fillOpacity": 0.8,
"weight": 1,
"fillColor": colorscale(int(value)) if value > 0 else "lightgray",
"color": "darkgray",
}
m = folium.Map(location=[50.65, 2.74], zoom_start=11)
folium.GeoJson(
communes,
name=titre,
style_function=style_function,
popup=folium.GeoJsonPopup(
fields=["nom", indicateur], aliases=["nom", "Prix median"]
),
).add_to(m)
colorscale.add_to(m)
m
Estaires 1/8
La Gorgue 2/8
Haverskerque 3/8
Merville 4/8
Fleurbaix 5/8
Laventie 6/8
Lestrem 7/8
Sailly-sur-la-Lys 8/8
[23]:
Make this Notebook Trusted to load map: File -> Trust Notebook