UPDATE tools, pers, sites

This commit is contained in:
Colas Geier 2021-11-30 15:32:41 +01:00
parent d554ac16ea
commit 991286e4df
3 changed files with 87 additions and 5 deletions

View File

@ -29,11 +29,41 @@ def get_auteur(nom=None, prenom=None):
sql = sql, sql = sql,
con = con, con = con,
params = {'nom': to_tuple(nom), 'prenom': to_tuple(prenom) }) params = {'nom': to_tuple(nom), 'prenom': to_tuple(prenom) })
df['nom_prenom'] = df.nom + ' ' + df.prenom df['nom_prenom'] = (df.nom + ' ' + df.prenom).str.strip()
df.loc[df.nom_prenom.isna(), 'nom_prenom'] = df.loc[df.nom_prenom.isna(), 'nom'] df.loc[df.nom_prenom.isna(), 'nom_prenom'] = df.loc[df.nom_prenom.isna(), 'nom']
return df return df
def get_auteur2(nom=None, prenom=None, organisme=None):
# table = 'personne'
# sql = 'SELECT * FROM %s.%s'%(schema,table)
# if nom or prenom : sql = sql + ' WHERE '
# if nom :
# sql = sql + 'nom IN %(nom)s'
# nom = to_upper(nom)
# if nom and prenom : sql = sql + ' AND '
# if prenom :
# sql = sql + 'prenom IN %(prenom)s'
# prenom = to_upperfirst(prenom)
# df = read_sql(
# sql = sql,
# con = con,
# params = {'nom': to_tuple(nom), 'prenom': to_tuple(prenom) })
# df['nom_prenom'] = (df.nom + ' ' + df.prenom).str.strip()
# df.loc[df.nom_prenom.isna(), 'nom_prenom'] = df.loc[df.nom_prenom.isna(), 'nom']
df = get_auteur(nom=nom, prenom=prenom)
org = get_organisme(nom=organisme).rename(columns={'nom':'organisme'})
df = df.merge(org,how='left',left_on='id_organisme',right_index=True)
df['np_orga'] = ['%s (%s)'%(x.nom_prenom,x.organisme) for i,x in df.iterrows()]
df['np_abbrev'] = ['%s (%s)'%(x.nom_prenom,x.abbrev) for i,x in df.iterrows()]
df.loc[(df.organisme!='Inconnu')&(df.abbrev.isna()),['nom_prenom']] = df.loc[(df.organisme!='Inconnu')&(df.abbrev.isna()),'np_orga']
df.loc[~df.abbrev.isna(),['nom_prenom']] = df.loc[~df.abbrev.isna(),'np_abbrev']
df.drop(columns=[
'np_orga','np_abbrev',*org.columns.drop('organisme'),'id_organisme'], inplace=True)
df.set_index('id', inplace=True)
return df
def get_organisme(ids=None, nom=None): def get_organisme(ids=None, nom=None):
table = 'organisme' table = 'organisme'
df = _get_table(con, schema, table, ids=ids, nom=nom) df = _get_table(con, schema, table, ids=ids, nom=nom)
@ -62,10 +92,39 @@ def _merge_orga(df, split_cols):
return df return df
def _merge_author2(df, col_aut):
# récupération des auteurs
aut = get_auteur2().fillna('')
# aut['nom_prenom'] = (aut['nom'] + ' ' + aut['prenom']).str.strip()
aut.reset_index(drop=False, inplace=True)
aut['id'] = aut['id'].astype(str)
id_inconnu = aut[aut.nom == 'INCONNU'].id[0]
# merge des auteurs
df[col_aut].fillna(id_inconnu, inplace=True)
df[col_aut] = df[col_aut].replace(['\.0'],'',regex=True)
r_id = df[['id', col_aut]].copy()
r_idSplit = r_id[col_aut].str.split(' & ', expand=True)
r_id = r_id.join(r_idSplit)
cSplit = r_idSplit.shape[1]
cSplit = list(range(cSplit))
r_id[cSplit] = r_id[cSplit].replace(aut['id'].tolist(),aut['nom_prenom'].tolist())
r_id = _aggr_cols(r_id,cSplit,' & ') \
.rename(columns={'aggreg': 'auteur'}) \
.drop(columns=cSplit)
df = merge(df,r_id,how='left', on=['id', col_aut], suffixes=[None,'_y']) \
.drop(columns=[col_aut])
return df
def _merge_author(df, col_aut, orga=False, on_index=False): def _merge_author(df, col_aut, orga=False, on_index=False):
# récupération des auteurs # récupération des auteurs
aut = get_auteur().fillna('') aut = get_auteur().fillna('')
aut['nom_prenom'] = (aut['nom'] + ' ' + aut['prenom']).str.strip() # aut['nom_prenom'] = (aut['nom'] + ' ' + aut['prenom']).str.strip()
aut['id'] = aut['id'].astype(str) aut['id'] = aut['id'].astype(str)
id_inconnu = aut[aut.nom == 'INCONNU'].id[0] id_inconnu = aut[aut.nom == 'INCONNU'].id[0]

View File

@ -7,7 +7,7 @@
#Version : 1.0 #Version : 1.0
from ..tools import _get_table from ..tools import _get_table
from ..pers.pers import _get_table,_merge_author,_merge_relation from ..pers.pers import _merge_author,_merge_relation

View File

@ -6,6 +6,7 @@
#Auteur : Colas Geier #Auteur : Colas Geier
#Version : 1.0 #Version : 1.0
from numpy.core.numeric import True_
from pandas import Series, Index, read_sql, merge from pandas import Series, Index, read_sql, merge
@ -119,8 +120,13 @@ def _set_geom(df, hex=True):
import geopandas as gpd # set_geometry import geopandas as gpd # set_geometry
if hex: if hex:
df['geom'] = [(loads(geom, hex=True)) for geom in df['geom']] # df['geometry'] = [(loads(geom, hex=hex)) for geom in df['geom']]
df = df.set_geometry('geom', crs='EPSG:2154') geometry = [(loads(geom, hex=hex)) for geom in df['geom']]
df.drop(columns=['geom'], inplace=True)
df = gpd.GeoDataFrame(df,geometry=geometry,crs='EPSG:2154')
df.rename_geometry('geom', inplace=True)
else:
df = df.set_geometry('geom', crs='EPSG:2154')
return df return df
@ -237,6 +243,23 @@ def _get_relation_autor(df, relation_tab, schema, id_df, id_relation, id_rela_au
def _get_relation_autor2(df, relation_tab, schema, id_df, id_relation, id_rela_auth='id_auteur'):
from .pers.pers import _merge_relation, get_auteur2
if 'site' in relation_tab:
suffixe = relation_tab.split('_')[1].split('site')[1]
suffixe = '_' + suffixe
df = _merge_relation(df=df,table=relation_tab,schema=schema,
left_id = id_df,
right_id = id_relation)
aut = get_auteur2()[['nom_prenom']]
df[id_rela_auth] = df[id_rela_auth].astype(float)
df = df.merge(aut,how='left', left_on=id_rela_auth, right_index=True)
# df = _merge_author(df=df, col_aut=id_rela_auth, on_index=True)
df.rename(columns={'auteur': 'auteur'+suffixe}, inplace=True)
return df
def to_geoms(geometries): def to_geoms(geometries):
from shapely.geometry import Polygon,LineString from shapely.geometry import Polygon,LineString
for geometry in geometries: for geometry in geometries: