diff --git a/pycen/pers/pers.py b/pycen/pers/pers.py index ede0e5e..27a5354 100644 --- a/pycen/pers/pers.py +++ b/pycen/pers/pers.py @@ -29,11 +29,41 @@ def get_auteur(nom=None, prenom=None): sql = sql, con = con, 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'] 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): table = 'organisme' df = _get_table(con, schema, table, ids=ids, nom=nom) @@ -62,10 +92,39 @@ def _merge_orga(df, split_cols): 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): # récupération des auteurs 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) id_inconnu = aut[aut.nom == 'INCONNU'].id[0] diff --git a/pycen/sites/sites.py b/pycen/sites/sites.py index f2b2c8e..c843cf4 100644 --- a/pycen/sites/sites.py +++ b/pycen/sites/sites.py @@ -7,7 +7,7 @@ #Version : 1.0 from ..tools import _get_table -from ..pers.pers import _get_table,_merge_author,_merge_relation +from ..pers.pers import _merge_author,_merge_relation diff --git a/pycen/tools.py b/pycen/tools.py index 48d3b9d..cea4a35 100644 --- a/pycen/tools.py +++ b/pycen/tools.py @@ -6,6 +6,7 @@ #Auteur : Colas Geier #Version : 1.0 +from numpy.core.numeric import True_ from pandas import Series, Index, read_sql, merge @@ -119,8 +120,13 @@ def _set_geom(df, hex=True): import geopandas as gpd # set_geometry if hex: - df['geom'] = [(loads(geom, hex=True)) for geom in df['geom']] - df = df.set_geometry('geom', crs='EPSG:2154') + # df['geometry'] = [(loads(geom, hex=hex)) for geom in df['geom']] + 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 @@ -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): from shapely.geometry import Polygon,LineString for geometry in geometries: