Comment évolue le plan de vaccination par région ?

Evolution du stock de vaccin et des rendez-vous

Code

Les sources proviennent de l’INSEE: stock et rdv

import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from datetime import datetime
import numpy as np
from plotly.offline.offline import plot

Fetch data

regions = [
    "Ile de France", "Auvergne-Rhone-Alpes", "Nouvelle Aquitaine",
    "Haut-de-France", "Occitanie", "Grand Est", "Provence-Alpes-Cote d'Azur",
    "Pays de la Loire", "Bretagne", "Normandie",
    "Bourgogne-Franche Comté", "Centre-Val-de-Loire",
    "Guadeloupe", "Martinique", "Corse", "Gyuane"
]
stock = pd.read_csv('vaccins/stocks-es-par-region.csv', usecols=["nom_reg", "type_de_vaccin", "nb_doses", "date"])
stock.columns = ["region", "type", "nb", "date"]
stock["date"] = pd.to_datetime(stock["date"])
rdv = pd.read_csv('vaccins/2021-03-22-prise-rdv-par-reg.csv', usecols=["region", "rang_vaccinal", "date_debut_semaine", "nb"])
rdv.columns = ["region", "rang", "date", "nb"]
rdv["date"] = pd.to_datetime(rdv["date"])
def build_timeline_region(fig, reg, row, col):
    stock_r = stock[stock["region"] == reg]
    t = stock_r["date"].unique()
    t.sort()
    
    areas = pd.Series(index=t, data=np.zeros(t.size))
    
    for i, (vaccin, color) in enumerate([("AstraZeneca", "cyan"), ("Moderna", "red"), ("Pfizer", "green")]):
        stock_r_v = stock_r[stock_r["type"] == vaccin]
        stock_r_v.set_index("date", inplace=True)
        areas = areas.add(stock_r_v["nb"], fill_value=0)
        fig.add_trace(go.Scatter(
            name=vaccin, 
            x=areas.index,
            y=areas,
            mode='lines',
            line=dict(color=color),
            showlegend=reg == "IDF",
            fill=('tonexty' if i else 'tozeroy')), row=row, col=col)
        
    rdv_r = rdv[rdv["region"] == reg][["date", "nb"]]
    rdv_r = rdv_r.groupby("date").sum()
    rdv_r = rdv_r.loc[areas.index.min():areas.index.max()]
    fig.add_trace(go.Scatter(
        name='RDV', 
        x=rdv_r.index, 
        y=rdv_r["nb"], 
        mode="lines",
        showlegend=reg == "IDF",
        line=dict(color='black')), row=row, col=col)
    

    
fig = make_subplots(rows=8, cols=2, shared_xaxes=True, subplot_titles=regions)
build_timeline_region(fig, "IDF", 1, 1)
build_timeline_region(fig, "ARA", 1, 2)
build_timeline_region(fig, "NAQ", 2, 1)
build_timeline_region(fig, "HDF", 2, 2)
build_timeline_region(fig, "OCC", 3, 1)
build_timeline_region(fig, "GES", 3, 2)
build_timeline_region(fig, "PAC", 4, 1)
build_timeline_region(fig, "PDL", 4, 2)
build_timeline_region(fig, "BRE", 5, 1)
build_timeline_region(fig, "NOR", 5, 2)
build_timeline_region(fig, "BFC", 6, 1)
build_timeline_region(fig, "CVL", 6, 2)
build_timeline_region(fig, "GDP", 7, 1)
build_timeline_region(fig, "MAR", 7, 2)
build_timeline_region(fig, "COR", 8, 1)
build_timeline_region(fig, "GUY", 8, 2)


fig.update_layout(height=1000, title="Stock vs RDV par région")
# fig.show()
print(plot(fig, include_plotlyjs=False, include_mathjax=False, output_type='div'))

Ces graphiques montrent le stock de vaccin par des empilements de couleurs selon le type de vaccin et les rendez-vous par la ligne noire. A noter qu’il s’agit des rendez-vous, certains sont peut-être annulés et non donc pas donné lieu à une dose de vaccin.

De ces graphiques on remarque deux choses:

  • le fameux vaccin AstraZeneca est minoritaire, voire absent du plan de vaccination. Il a d’abord eu un pic de stock milieu février, mais l’État ne semble pas avoir renouveler son stock. Le fabricant ne peut-il pas livrer ? Ou l’État avait déjà plus ou moins banni ce vaccin avant l’annonce officielle ?
  • Certaines régions aujourd’hui confinées comme l’île de France ou l’Haut-de-France semblent être en pénurie de stock face aux prises de rendez-vous. A contrario, des régions comme la Guadeloupe ou la Martinique semblent être en surstock.

Néanmoins dans l’ensemble, vu la difficulté logistique des vaccins et la volatilité des prises de rendez-vous. Le stock de vaccin semble distribuer en adéquation avec la demande.