[CG] : nettoyage du champs comment

This commit is contained in:
Colas Geier 2024-03-07 18:05:58 +01:00
parent e650930bc0
commit 1f0901a957

View File

@ -81,6 +81,7 @@ if __name__ == "__main__":
.str.replace('AbsenceZH','Absence ZH')
.str.replace('Zone humide non cartographiée et','non cartographier | ZH')
.str.replace('continuité zh de la gère, à visiter','continuité zh de la gère | à visiter')
.str.replace('à visiter','A visiter')
.replace([x for x in gdf.statut.unique() if x is not None],'',regex=True)
.replace([x for x in gdf.source.unique() if x is not None],'',regex=True)
.str.strip()
@ -112,16 +113,37 @@ if __name__ == "__main__":
gdf['source'] = (gdf['source']
.apply(lambda x: upper_first_letter(x))
.str.replace('Interprétation','Photointerprétation'))
gdf['type'] = (gdf.comment
is_inventaire = (gdf.observateu
.str.contains('Le Pic Vert|LPO Isère|Lo Parvi|Nature Vivante|ONF',case=False,na=False))
isna_source = gdf['source'].isna()
is_cenisere = gdf.observateu.str.contains('cen isère',case=False,na=False)
gdf.loc[is_inventaire&isna_source,'source'] = 'Inventaire'
gdf.loc[~is_inventaire&isna_source&~is_cenisere].observateu
gdf['type'] = (gdf.comment
.str.replace('prairie','Prairie')
.str.replace('Prairie humide','Prairiehumide')
.str.split('\\|| ',n=1)
.str[0]
.str.replace('Prairiehumide','Prairie humide')
.str.strip()
.replace('Roselières','Roselière')
.replace({
'Roselières':'Roselière',
'Ornières':'Ornière',
'Fontaine':'Source',
'Lac':'Mare/lac alpin',
'Culture':'Culture temporairement inondée',
'Grève':'Alluvion',
'ZH':'Tourbière',
})
.apply(lambda x: upper_first_letter(x))
)
gdf['comment'] = (gdf.comment
.str.replace('prairie','Prairie')
.replace([x for x in gdf.type.unique() if x is not None or x.contains('INVZH')],'',regex=True)
.str.replace('Prairie humide','Prairiehumide')
.str.split('\\|| ',n=1)
@ -141,25 +163,117 @@ if __name__ == "__main__":
gdf.loc[invzh,'type'] = None
gdf.comment = (gdf.comment
.str.strip()
.str.removeprefix('\|')
.str.strip()
.str.removeprefix('?')
.str.strip()
.str.removeprefix('-')
.str.removesuffix('-')
.str.strip()
.replace('',None)
.apply(lambda x: upper_first_letter(x)))
gdf.to_postgis('zh_ponctuelles',con,'zones_humides',if_exists='replace',index=True,index_label='gid')
is_interpret = gdf['source'].str.contains('interprétation',case=False,na=False)
gdf.loc[is_interpret,'ponctuelle'] = 'Incertain'
gdf.loc[~is_interpret,'ponctuelle'] = 'Oui'
is_jlg = gdf.observateu=='CEN Isère (J.-L. Grossi)'
type_isna = gdf['type'].isna()
gdf.loc[is_jlg&type_isna,'type'] = 'Mare'
gdf.drop(gdf[gdf.observateu.isna()].index,inplace=True)
is_balm = gdf.observateu=='CEN Isère (C. Balmain)'
is_lafo = gdf.observateu=='CEN Isère (A.Lafon)'
is_nico = gdf.observateu=='CEN Isère (N. Biron)'
is_obs_inc = gdf.observateu=='Inconnu'
is_zh = gdf['type']=='Petite zh'
is_inconnu = gdf['type']=='Inconnu'
gdf.loc[is_balm&~is_zh&is_inconnu,'type'] = 'Étang'
gdf.loc[is_balm&is_zh&is_inconnu,'type'] = 'Suintement'
gdf.loc[is_lafo&is_inconnu,'type'] = 'Boisement'
gdf.loc[is_obs_inc&is_inconnu,'type'] = 'Étang'
gdf.loc[is_nico&is_inconnu,'type'] = 'Prairie humide'
is_visite = gdf['statut'].isin(['Possible ?','Groupement fontinal possible ?','Groupement fontinal, possible ?','Roselière et possible mare','Non cartographier'])
gdf.loc[is_visite,'statut'] = 'A visiter'
statut_isna = gdf['statut'].isna()
gdf.loc[is_interpret&statut_isna,'statut'] = 'A visiter'
dict_type = {
**dict.fromkeys(['Barrage','Bassin','Lagunage'],'Artificiel'),
**dict.fromkeys(['Mégaphorbiaie','Prairie','Prairie humide','Roselière'],'Prairie humide et roselière'),
**dict.fromkeys(['Source', 'Suintement', 'Talus'],'Source et Suintement'),
**dict.fromkeys(['Ornière', 'Mare'],'Mare'),
**dict.fromkeys(['Boisement', 'Peupleraie'],'Boisement'),
}
gdf['classe'] = (gdf['type']
.replace(dict_type))
# A faire :
# - Vérifier la suppression des zhAbsentes
# - Intersecter avec la couche zh surfacique,
# dissocier les donner d'intersection et conserver
# dans une autre couche les zones ponctuelles correspondant à des Mares/Etangs/bassin/Lac
bdd_table = 'zh_ponctuelles_encours'
gdf.to_postgis(bdd_table,con,'zones_humides',if_exists='replace',index=True if 'gid' not in gdf.columns else False,index_label='gid')
sql = """
ALTER TABLE zones_humides.zh_ponctuelles ADD PRIMARY KEY (gid);
GRANT ALL ON TABLE zones_humides.zh_ponctuelles TO grp_admin;
GRANT SELECT ON TABLE zones_humides.zh_ponctuelles TO grp_consult;
ALTER TABLE zones_humides.{tab} ADD PRIMARY KEY (gid);
GRANT ALL ON TABLE zones_humides.{tab} TO grp_admin;
GRANT SELECT ON TABLE zones_humides.{tab} TO grp_consult;
""".format(tab=bdd_table)
with con.begin() as cnx:
cnx.execute(sql)
########### POTENTIELLE SURFACIQUE #############
sql = """
SELECT * FROM zones_humides.zh_ponctuelles;
"""
gdf = gpd.read_postgis(
sql = sql,
con = con)
is_interpret = gdf['source'].str.contains('interprétation',case=False,na=False)
del_notzh = ~(gdf['statut'] == 'Absence ZH')
avere = gdf[~is_interpret&del_notzh].copy()
is_visite = avere['statut'].isin(['Possible ?','Groupement fontinal, possible ?','Roselière et possible mare','Non cartographier'])
avere.loc[is_visite,'statut'] = 'A visiter'
dict_type = {
**dict.fromkeys(['Barrage','Bassin','Lagunage'],'Artificiel'),
**dict.fromkeys(['Mégaphorbiaie','Prairie','Prairie humide','Roselière'],'Prairie humide et roselière'),
**dict.fromkeys(['Source', 'Suintement', 'Talus'],'Source et Suintement'),
**dict.fromkeys(['Ornière', 'Mare'],'Mare'),
**dict.fromkeys(['Boisement', 'Peupleraie'],'Boisement'),
}
avere['classe'] = (gdf['type']
.replace(dict_type))
########### POTENTIELLE #############
ptent = gdf[is_interpret&del_notzh].copy()
# avere['a_visiter'] = None
avere.to_postgis('zh_ponctuelles_averee',con,'zones_humides',if_exists='replace',index_label='gid')
sql = """
ALTER TABLE zones_humides.zh_ponctuelles_averee ADD PRIMARY KEY (gid);
GRANT ALL ON TABLE zones_humides.zh_ponctuelles_averee TO grp_admin;
GRANT SELECT ON TABLE zones_humides.zh_ponctuelles_averee TO grp_consult;
"""
with con.begin() as cnx:
cnx.execute(sql)
test = """
SELECT * FROM zones_humides.zh_ponctuelles;
"""
data = gpd.pd.read_sql_query(
data = gpd.read_postgis(
sql = test,
con = con)