IREP: registre des émissions polluantes#

Links: notebook, html, python, slides, GitHub

Ce jeu de données est disponible sous le nombre Registre des émissions polluantes.

from jyquickhelper import add_notebook_menu
add_notebook_menu()
%matplotlib inline

Récupération des données#

Les données ont été préalablement téléchargées et zippées.

from ensae_teaching_cs.data import load_irep
load_irep()
['2003/emissions.csv',
 '2003/etablissements.csv',
 '2003/Prelevements.csv',
 '2003/Prod_dechets_dangereux.csv',
 '2003/Prod_dechets_non_dangereux.csv',
 '2003/Trait_dechets_dangereux.csv',
 '2003/Trait_dechets_non_dangereux.csv',
 '2004/emissions.csv',
 '2004/etablissements.csv',
 '2004/Prelevements.csv',
 '2004/Prod_dechets_dangereux.csv',
 '2004/Prod_dechets_non_dangereux.csv',
 '2004/Trait_dechets_dangereux.csv',
 '2004/Trait_dechets_non_dangereux.csv',
 '2005/emissions.csv',
 '2005/etablissements.csv',
 '2005/Prelevements.csv',
 '2005/Prod_dechets_dangereux.csv',
 '2005/Prod_dechets_non_dangereux.csv',
 '2005/Trait_dechets_dangereux.csv',
 '2005/Trait_dechets_non_dangereux.csv',
 '2006/emissions.csv',
 '2006/etablissements.csv',
 '2006/Prelevements.csv',
 '2006/Prod_dechets_dangereux.csv',
 '2006/Prod_dechets_non_dangereux.csv',
 '2006/Trait_dechets_dangereux.csv',
 '2006/Trait_dechets_non_dangereux.csv',
 '2007/emissions.csv',
 '2007/etablissements.csv',
 '2007/Prelevements.csv',
 '2007/Prod_dechets_dangereux.csv',
 '2007/Prod_dechets_non_dangereux.csv',
 '2007/Trait_dechets_dangereux.csv',
 '2007/Trait_dechets_non_dangereux.csv',
 '2008/emissions.csv',
 '2008/etablissements.csv',
 '2008/Prelevements.csv',
 '2008/Prod_dechets_dangereux.csv',
 '2008/Prod_dechets_non_dangereux.csv',
 '2008/Trait_dechets_dangereux.csv',
 '2008/Trait_dechets_non_dangereux.csv',
 '2009/emissions.csv',
 '2009/etablissements.csv',
 '2009/Prelevements.csv',
 '2009/Prod_dechets_dangereux.csv',
 '2009/Prod_dechets_non_dangereux.csv',
 '2009/Trait_dechets_dangereux.csv',
 '2009/Trait_dechets_non_dangereux.csv',
 '2010/emissions.csv',
 '2010/etablissements.csv',
 '2010/Prelevements.csv',
 '2010/Prod_dechets_dangereux.csv',
 '2010/Prod_dechets_non_dangereux.csv',
 '2010/Trait_dechets_dangereux.csv',
 '2010/Trait_dechets_non_dangereux.csv',
 '2011/emissions.csv',
 '2011/etablissements.csv',
 '2011/Prelevements.csv',
 '2011/Prod_dechets_dangereux.csv',
 '2011/Prod_dechets_non_dangereux.csv',
 '2011/Trait_dechets_dangereux.csv',
 '2011/Trait_dechets_non_dangereux.csv',
 '2012/emissions.csv',
 '2012/etablissements.csv',
 '2012/Prelevements.csv',
 '2012/Prod_dechets_dangereux.csv',
 '2012/Prod_dechets_non_dangereux.csv',
 '2012/Trait_dechets_dangereux.csv',
 '2012/Trait_dechets_non_dangereux.csv',
 '2013/emissions.csv',
 '2013/etablissements.csv',
 '2013/Prelevements.csv',
 '2013/Prod_dechets_dangereux.csv',
 '2013/Prod_dechets_non_dangereux.csv',
 '2013/Trait_dechets_dangereux.csv',
 '2013/Trait_dechets_non_dangereux.csv',
 '2014/emissions.csv',
 '2014/etablissements.csv',
 '2014/Prelevements.csv',
 '2014/Prod_dechets_dangereux.csv',
 '2014/Prod_dechets_non_dangereux.csv',
 '2014/Trait_dechets_dangereux.csv',
 '2014/Trait_dechets_non_dangereux.csv',
 '2015/emissions.csv',
 '2015/etablissements.csv',
 '2015/Prelevements.csv',
 '2015/Prod_dechets_dangereux.csv',
 '2015/Prod_dechets_non_dangereux.csv',
 '2015/Trait_dechets_dangereux.csv',
 '2015/Trait_dechets_non_dangereux.csv',
 '2016/emissions.csv',
 '2016/etablissements.csv',
 '2016/Prelevements.csv',
 '2016/Prod_dechets_dangereux.csv',
 '2016/Prod_dechets_non_dangereux.csv',
 '2016/Trait_dechets_dangereux.csv',
 '2016/Trait_dechets_non_dangereux.csv',
 '2017/emissions.csv',
 '2017/etablissements.csv',
 '2017/Prelevements.csv',
 '2017/Prod_dechets_dangereux.csv',
 '2017/Prod_dechets_non_dangereux.csv',
 '2017/Trait_dechets_dangereux.csv',
 '2017/Trait_dechets_non_dangereux.csv']
import pandas
df = pandas.read_csv("2017/Prod_dechets_dangereux.csv")
df.head()
Identifiant Nom_Etablissement Dechet Annee Code_Operation_Eliminatio_Valorisation Libelle_Operation_Eliminatio_Valorisation Code_Departement Pays Code_Dechet Libelle_Dechet Quantite Unite
0 31.02589 POLYPROCESS Production de déchets dangereux 2017 D13 D13 Regroupement préalablement à l'une des opé... 33 NaN 16 03 03* Déchets d'origine minérale contenant des subst... 2.320 t/an
1 31.02589 POLYPROCESS Production de déchets dangereux 2017 D8 D8 Traitement biologique non spécifié ailleurs... 64 NaN 13 05 07* Eau mélangée à des hydrocarbures provenant de ... 1.500 t/an
2 31.02589 POLYPROCESS Production de déchets dangereux 2017 R12 R12 Echange de déchets en vue de les soumettre... 16 NaN 13 05 02* Boues provenant de séparateurs eau/hydrocarbures 0.500 t/an
3 31.02589 POLYPROCESS Production de déchets dangereux 2017 R13 R13 Stockage de déchets préalablement à l'une ... 33 NaN 06 10 02* Déchets contenant des substances dangereuses 0.103 t/an
4 31.02589 POLYPROCESS Production de déchets dangereux 2017 R13 R13 Stockage de déchets préalablement à l'une ... 33 NaN 15 01 10* Emballages contenant des résidus de substances... 2.400 t/an
[_ for _ in set(df.Nom_Etablissement) if "lubrizol" in _.lower()]
['LUBRIZOL FRANCE',
 'LUBRIZOL France',
 'LUBRIZOL France Site de Rouen (siège social et usine)']
df[df.Nom_Etablissement.str.contains("LUBRI")].head().T
5073 5074 5075 5076 19092
Identifiant 52.02708 52.02708 52.02708 52.02708 58.00574
Nom_Etablissement LUBRIZOL FRANCE LUBRIZOL FRANCE LUBRIZOL FRANCE LUBRIZOL FRANCE LUBRIZOL France Site de Rouen (siège social et...
Dechet Production de déchets dangereux Production de déchets dangereux Production de déchets dangereux Production de déchets dangereux Production de déchets dangereux
Annee 2017 2017 2017 2017 2017
Code_Operation_Eliminatio_Valorisation D10 D5 D8 R12 D10
Libelle_Operation_Eliminatio_Valorisation D10 Incinération à terre D5 Mise en décharge spécialement aménagée (par... D8 Traitement biologique non spécifié ailleurs... R12 Echange de déchets en vue de les soumettre... D10 Incinération à terre
Code_Departement 01 30 64 34 76
Pays NaN NaN NaN NaN NaN
Code_Dechet 07 01 01* 17 02 04* 07 07 01* 15 02 02* 07 01 04*
Libelle_Dechet Eaux de lavage et liqueurs mères aqueuses Bois, verre et matières plastiques contenant d... Eaux de lavage et liqueurs mères aqueuses Absorbants, matériaux filtrants (y compris les... Autres solvants, liquides de lavage et liqueur...
Quantite 20.0 0.0022 8.34 0.989 472.0
Unite t/an t/an t/an t/an t/an
ets = pandas.read_csv("2017/etablissements.csv")
ets.head()
Identifiant Nom_Etablissement Numero_SIRET Adresse Code_Postal Commune Departement Region Coordonnees_X Coordonnees_Y Code_APE Libelle_APE code_eprtr libelle_eprtr
0 68.11539 Carrières BERNADETS - ISDI 54608016900115 NaN 31420 AURIGNAC HAUTE-GARONNE OCCITANIE 481659.0 1802490.0 0812Z Exploitation de gravières et sablières, extrac... NaN NaN
1 61.10406 REVAGA 51058711600037 NaN 69390 MILLERY RHONE AUVERGNE-RHONE-ALPES 790678.0 2073093.0 3811Z Collecte des déchets non dangereux NaN NaN
2 124.00155 SATE 42976802100025 NaN 90150 FONTAINE TERRITOIRE-DE-BELFORT BOURGOGNE-FRANCHE-COMTE 949818.0 2305514.0 2751Z Fabrication d'appareils électroménagers NaN NaN
3 61.08347 GRTgaz - Station de Compression de St AVIT 44011762001571 NaN 26330 CHATEAUNEUF-DE-GALAURE DROME AUVERGNE-RHONE-ALPES 805789.0 2028946.0 4950Z Transports par conduites NaN NaN
4 61.10271 FONDEX SAS 60562013700030 NaN 74302 CLUSES HAUTE-SAVOIE AUVERGNE-RHONE-ALPES 928249.0 2126191.0 2550B Découpage, emboutissage NaN NaN
ets[ets.Nom_Etablissement.str.contains("LUBRI")]
Identifiant Nom_Etablissement Numero_SIRET Adresse Code_Postal Commune Departement Region Coordonnees_X Coordonnees_Y Code_APE Libelle_APE code_eprtr libelle_eprtr
5696 52.02708 LUBRIZOL FRANCE 54207095800047 Pôle 4/RD 281 avenue du Lac 64150 MOURENX PYRENEES-ATLANTIQUES NOUVELLE-AQUITAINE 359197.0 1823064.0 2059Z Fabrication d'autres produits chimiques n.c.a. 4.(a).(iii) hydrocarbures sulfurés
6147 58.00574 LUBRIZOL France Site de Rouen (siège social et... 54207095800021 25, Quai de France BP 1062 76173 ROUEN SEINE-MARITIME NORMANDIE 509411.0 2494315.0 2059Z Fabrication d'autres produits chimiques n.c.a. 4.(a).(iii) hydrocarbures sulfurés
6707 58.00575 LUBRIZOL France 54207095800039 ROUTE DU CANAL DE TANCARVILLE 76430 OUDALLE SEINE-MARITIME NORMANDIE 452455.0 2502974.0 2059Z Fabrication d'autres produits chimiques n.c.a. 4.(a).(iii) hydrocarbures sulfurés

Conversion des coordonnées#

Les coordonnées utilisées par l’admnistration française sont souvent différentes des longitudes et latitudes, il pourrait s’agir du système Lambert 93. Il faut convertir.

from pyproj import Proj, transform
p1 = Proj(init='epsg:4326')  # longitude / latidude
p2 = Proj(init='epsg:2154')  # Lambert 93
exp = (509411.0, 2494315.0)  # Rouen dans la base de données reçues.
transform(p1, p2, 1.059011, 49.434654), exp
/home/xadupre/.local/lib/python3.10/site-packages/pyproj/crs/crs.py:141: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6
  in_crs_string = _prepare_from_proj_string(in_crs_string)
/home/xadupre/.local/lib/python3.10/site-packages/pyproj/crs/crs.py:141: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6
  in_crs_string = _prepare_from_proj_string(in_crs_string)
/tmp/ipykernel_942/2485346245.py:5: DeprecationWarning: This function is deprecated. See: https://pyproj4.github.io/pyproj/stable/gotchas.html#upgrading-to-pyproj-2-from-pyproj-1
  transform(p1, p2, 1.059011, 49.434654), exp
((559176.9910858747, 6927865.768822115), (509411.0, 2494315.0))

Ca n’a pas l’air d’être ça. On en essaye plusieurs.

import warnings
from tqdm import tqdm
warnings.simplefilter("ignore")

summary = []
for i in tqdm(range(2000, 10000)):
    try:
        p2 = Proj(init='epsg:%d' % i)
    except RuntimeError:
        # does not exist
        continue
    try:
        res = transform(p1, p2, 1.059011, 49.434654)
    except RuntimeError:
        # impossible
        continue
    d = abs(res[0] - exp[0]) + abs(res[1] - exp[1])
    summary.append((d, i, res))
summary.sort()
summary[:10]
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 8000/8000 [06:25<00:00, 20.76it/s]
[(2543.3576168458094, 2192, (507295.78658682964, 2493886.8557963246)),
 (1184546.4626984685, 8352, (896552.3533453116, 1696909.8906468432)),
 (1184571.6475299357, 5513, (896599.2137060699, 1696931.5661761342)),
 (1184699.265911612, 2065, (896686.9793387237, 1696891.7134271117)),
 (1272150.92377346, 2062, (948657.2483424643, 1661410.3245690044)),
 (1472957.7033411968, 3943, (1558315.7023544684, 2918368.0009867284)),
 (1472957.7033411968, 9823, (1558315.7023544684, 2918368.0009867284)),
 (1472957.7033411968, 9843, (1558315.7023544684, 2918368.0009867284)),
 (1512638.7699062696, 3942, (1557997.8534661192, 2030263.0835598495)),
 (1512638.7699062696, 9822, (1557997.8534661192, 2030263.0835598495))]

On tombe donc sur espg:2192 ou espg:7401.

p2 = Proj(init='epsg:2192')
long, lat = transform(p2, p1, ets.Coordonnees_X.values, ets.Coordonnees_Y.values)
ets['LLX'] = long
ets['LLY'] = lat
ets[ets.Nom_Etablissement.str.contains("LUBRI")]
Identifiant Nom_Etablissement Numero_SIRET Adresse Code_Postal Commune Departement Region Coordonnees_X Coordonnees_Y Code_APE Libelle_APE code_eprtr libelle_eprtr LLX LLY
5696 52.02708 LUBRIZOL FRANCE 54207095800047 Pôle 4/RD 281 avenue du Lac 64150 MOURENX PYRENEES-ATLANTIQUES NOUVELLE-AQUITAINE 359197.0 1823064.0 2059Z Fabrication d'autres produits chimiques n.c.a. 4.(a).(iii) hydrocarbures sulfurés -0.630749 43.367983
6147 58.00574 LUBRIZOL France Site de Rouen (siège social et... 54207095800021 25, Quai de France BP 1062 76173 ROUEN SEINE-MARITIME NORMANDIE 509411.0 2494315.0 2059Z Fabrication d'autres produits chimiques n.c.a. 4.(a).(iii) hydrocarbures sulfurés 1.088048 49.438805
6707 58.00575 LUBRIZOL France 54207095800039 ROUTE DU CANAL DE TANCARVILLE 76430 OUDALLE SEINE-MARITIME NORMANDIE 452455.0 2502974.0 2059Z Fabrication d'autres produits chimiques n.c.a. 4.(a).(iii) hydrocarbures sulfurés 0.300654 49.505874

Ca a l’air de coller.

ets16 = pandas.read_csv("2016/etablissements.csv")
ets17 = pandas.read_csv("2017/etablissements.csv")
p16 = pandas.read_csv("2016/Prod_dechets_dangereux.csv")
p17 = pandas.read_csv("2017/Prod_dechets_dangereux.csv")

long, lat = transform(p2, p1, ets16.Coordonnees_X.values, ets16.Coordonnees_Y.values)
ets16['LLX'] = long
ets16['LLY'] = lat

long, lat = transform(p2, p1, ets17.Coordonnees_X.values, ets17.Coordonnees_Y.values)
ets17['LLX'] = long
ets17['LLY'] = lat
ets16_2 = p16.merge(ets16, on="Identifiant")
ets16_2.shape, p16.shape
((72337, 27), (72337, 12))
ets17_2 = p17.merge(ets17, on="Identifiant")
ets17_2.shape, p17.shape
((73863, 27), (73863, 12))

Les fusions se sont bien passées. On vérifie que les unités sont comparables.

set(p16.Unite), set(p17.Unite)
({'t/an'}, {'t/an'})

Vue dynamique#

from ipywidgets import interact
@interact(annee=[2016, 2017], column=list(sorted(p16.columns)), x=(0, 100000, 100))
def show_rows(annee=2017, column='Quantite', x=100000):
    if annee == 2017:
        return ets17_2[ets17_2[column] >= x].sort_values(column).T
    else:
        return ets16_2[ets16_2[column] >= x].sort_values(column).T
42643 11262 40946 40945 38335
Identifiant 65.03322 55.01076 64.10462 64.10462 64.00243
Nom_Etablissement_x SARP Industries RMB Société Nouvelle JCG Environnement Société Nouvelle JCG Environnement Hydro Extrusion Puget
Dechet Production de déchets dangereux Production de déchets dangereux Production de déchets dangereux Production de déchets dangereux Production de déchets dangereux
Annee 2017 2017 2017 2017 2017
Code_Operation_Eliminatio_Valorisation D5 R4 D1 D1 R4
Libelle_Operation_Eliminatio_Valorisation D5 Mise en décharge spécialement aménagée (par... R4 Recyclage ou récupération des métaux et des... D1 Dépôt sur ou dans le sol (par exemple, mise... D1 Dépôt sur ou dans le sol (par exemple, mise... R4 Recyclage ou récupération des métaux et des...
Code_Departement 78 45 13 04 34
Pays NaN NaN NaN NaN NaN
Code_Dechet 19 03 04* 16 06 01* 18 01 03* 18 01 03* 10 03 09*
Libelle_Dechet Déchets catalogués comme dangereux, partiellem... Accumulateurs au plomb Déchets dont la collecte et l'élimination font... Déchets dont la collecte et l'élimination font... Crasses noires de production secondaire
Quantite 122000.0 284000.0 316000.0 341000.0 1400000.0
Unite t/an t/an t/an t/an t/an
Nom_Etablissement_y SARP Industries RMB Société Nouvelle JCG Environnement Société Nouvelle JCG Environnement Hydro Extrusion Puget
Numero_SIRET 30377298200029 39776516500022 80845353400014 80845353400014 31275797400018
Adresse 451 Route du Hazay 14 rue des prairies\n BP 10236 NaN NaN Zi Camp dessert Nord
Code_Postal 78520 29400 13500 13500 83488
Commune LIMAY PLOUGOURVEST MARTIGUES MARTIGUES PUGET-SUR-ARGENS
Departement YVELINES FINISTERE BOUCHES-DU-RHONE BOUCHES-DU-RHONE VAR
Region ILE-DE-FRANCE BRETAGNE PROVENCE-ALPES-COTE-D'AZUR PROVENCE-ALPES-COTE-D'AZUR PROVENCE-ALPES-COTE-D'AZUR
Coordonnees_X 555829.0 126274.0 819944.0 819944.0 952243.0
Coordonnees_Y 2444400.0 2414348.0 1825343.0 1825343.0 1837875.0
Code_APE 3822Z 3832Z 3822Z 3822Z 2442Z
Libelle_APE Traitement et élimination des déchets dangereux Récupération de déchets triés Traitement et élimination des déchets dangereux Traitement et élimination des déchets dangereux Métallurgie de l'aluminium
code_eprtr 5.(a) 5.(c) NaN NaN 2.(f)
libelle_eprtr Installations pour la valorisation ou l'élimin... Installations destinées à l'élimination des dé... NaN NaN Installations de traitement de surface de méta...
LLX 1.73272 -4.085768 5.047053 5.047053 6.683578
LLY 48.995285 48.552602 43.395281 43.395281 43.45444
interactive(children=(Dropdown(description='annee', index=1, options=(2016, 2017), value=2017), Dropdown(descr…

Cartes#

On regarde les projets sur la métropole en 2017.

lim_metropole = [-5, 10, 41, 52]

ets17_2_metro = ets17_2[((ets17_2.LLX >= lim_metropole[0]) & (ets17_2.LLX <= lim_metropole[1]) &
                         (ets17_2.LLY >= lim_metropole[2]) & (ets17_2.LLY <= lim_metropole[3]))]
ets17_2_metro.shape, ets17_2.shape
((73384, 27), (73863, 27))
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(7,7))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.set_extent(lim_metropole)
ax.add_feature(cfeature.OCEAN.with_scale('50m'))
ax.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax.add_feature(cfeature.RIVERS.with_scale('50m'))
ax.add_feature(cfeature.BORDERS.with_scale('50m'), linestyle=':')
ax.scatter(ets17_2_metro.LLX, ets17_2_metro.LLY,
           s=ets17_2_metro.Quantite ** 0.5 / 5, alpha=0.5)
ax.set_title('France 2017\nproduction de produits dangereux');
../_images/data_irep_28_0.png