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');
