zonal_stats.org 11.9 KB

Construction d’un data frame avec les stats zonales

Init

Petit bout de python vide pour initialiser la session. Ca permet d’avoir la version de python utilisée

import geopandas as gp
import pandas as pd

Import des fichiers dans des DF

Le fichier TERLAB qui contient le dept 31 est:

terlabdir = '/work/OT/theia/oso/shapes/TERLAB/'
terlab31 = terlabdir+'SURFACES-2017-PARCELLES-GRAPHIQUES-CONSTATEES_031_20180210.shp'
df_terlab = gp.read_file(terlab31)
print(df_terlab.head())

Les fichiers shape avec les stats sont

zs_dir='/work/OT/theia/oso/jordi/maassp_data'
zs_rf1=zs_dir+'/zonal_stats_refl_1.shp'
zs_rf2=zs_dir+'/zonal_stats_refl_2.shp'
zs_dem=zs_dir+'/zonal_stats_dem.shp'
zs_mask=zs_dir+'/zonal_stats_mask.shp'

Lire les fichiers dans un DF pandas

df_rf1 = gp.read_file(zs_rf1)
df_rf2 = gp.read_file(zs_rf2)
df_dem = gp.read_file(zs_dem).to_crs
df_mask = gp.read_file(zs_mask)
print(len(df_rf1))
print(len(df_rf2))
print(len(df_dem))
print(len(df_mask))

Il paraît que le fichier de DEM a perdu quelques polygones?

Vérification des projections :

print(df_dem.crs)
print(df_mask.crs)
print(df_rf1.crs)
print(df_rf1.crs)

Reprojection du DEM

df_dem = df_dem.to_crs(df_mask.crs)
print(df_dem.crs)

Fusion dans un seul DF

for c in df_terlab.columns:
    print(c)

for c in df_mask.columns:
    print(c)

print(df_dem.geometry.head())
print(df_mask.geometry.head())
print(df_rf1.geometry.head())
print(df_rf2.geometry.head())

On fait un spatial join.

df_dem_mask = gp.sjoin(df_mask, df_mask, op='intersects')
print(df_dem_mask.head())
print(len(df_dem_mask))

On a beaucoup trop d’éléments dans le nouveau DF, ce qui veut dire qu’il y a trop d’intersections. Si on le fait entre les 2 fichiers de réflectances, qui sont issus de la même donnée :

df_dem_mask = gp.sjoin(df_rf2, df_rf1, op='intersects')
print(df_dem_mask.head())
print(len(df_dem_mask))

Essayons de merger sur plusieurs colonnes

df_tmp = df_mask
df_dem_mask = df_tmp.merge(df_rf1, on=['CODE_CULTU', 'SURF_ADM'])
print(df_dem_mask.head())
print(len(df_dem_mask))

Templates


import matplotlib.pyplot as plt
# plt.figure(figsize=(10,5))
# df31.hist(column='RENDNORME')
# plt.savefig(matplot_lib_filename)
matplot_lib_filename