Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

translating french comments and strings #12

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/types_analyses_bio/event_core_event_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

def event_core_event_file(data, colonne_jeu_donnees, nombre_rangees):
#filtrer les champs présent dans le jeu de données et créer un tableau
#filters the fields present in the dataset and creates a table
col_analyse = {
'Nom du champ / Field name': ["datasetid","decimallatitude","decimallongitude","eventdate","eventid","footprintwkt","locationid"],
'Nécéssaire ou optionnel / Necessary or optionnal': ["Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Optionnel / Optionnal"],
Expand All @@ -25,16 +26,19 @@ def event_core_event_file(data, colonne_jeu_donnees, nombre_rangees):
colonne_analyse.sort_values(by='Présence/Presence ou/or absence', ascending=True, inplace=True)

# liste de champs présents dans le jeu de données
#lists the fields present in the dataset
liste_format = colonne_analyse[colonne_analyse['Présence/Presence ou/or absence']=='Présent/Present']['Nom du champ / Field name']
liste_format = list(liste_format)

# liste des différences entre le tableau des champs nécessaires/optionnels présents et tous les champs présents dans le jeu de données
# lists the differences between the table of required/optional fields AND the fields give in the dataset
colonnes_extra = list(set(colonne_jeu_donnees) - set(liste_format))
colonnes_extra = sorted(colonnes_extra)
if len(colonnes_extra) == 0:
colonnes_extra = ['aucune colonne / no column']

#section servant à rouler les fonctions de validation pour les colonnes présentes dans le jeu de données
#this section tests the validation functions for the columns given in the dataset
liste_affichage = []
if 'datasetid' in liste_format:
datasetid = datasetid_fonction(data)
Expand Down Expand Up @@ -62,5 +66,6 @@ def event_core_event_file(data, colonne_jeu_donnees, nombre_rangees):


# section retournant le tableau d'analyse du format ainsi que les retours des fonctions des champs présents
# section returns the format analysis table as well as the outputs from the field presence functions
return table_format_analysis(colonne_analyse, colonnes_extra, liste_affichage, nombre_rangees)

1 change: 1 addition & 0 deletions src/types_analyses_bio/event_core_occurence_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,5 @@ def event_core_occurence_file(data, colonne_jeu_donnees, nombre_rangees):


# section retournant le tableau d'analyse du format ainsi que les retours des fonctions des champs présents
# this section returns the format analysis table as well as the function outputs for field presence
return table_format_analysis(colonne_analyse, colonnes_extra, liste_affichage, nombre_rangees)
7 changes: 7 additions & 0 deletions src/types_analyses_bio/occurence_core_occurence_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

def occurence_core_occurence_file(data, colonne_jeu_donnees, nombre_rangees):
#filtrer les champs présent dans le jeu de données
#filter the fields given in the dataset
col_analyse = {
'Nom du champ / Field name': ["basisofrecord", "datasetid","decimallatitude", "decimallongitude", "eventdate", "occurrenceid", "occurrencestatus", "scientificname","scientificnameid", "taxonid","footprintwkt","locationID", "organismquantity", "organismquantitytype"],
'Nécéssaire ou optionnel / Necessary or optionnal': ["Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Nécéssaire / Necessary","Optionnel / Optionnal","Optionnel / Optionnal","Optionnel / Optionnal","Optionnel / Optionnal"],
Expand All @@ -32,16 +33,20 @@ def occurence_core_occurence_file(data, colonne_jeu_donnees, nombre_rangees):
colonne_analyse.sort_values(by='Présence/Presence ou/or absence', ascending=True, inplace=True)

# liste de champs présents dans le jeu de données
# list of fields presented in the data set
liste_format = colonne_analyse[colonne_analyse['Présence/Presence ou/or absence']=='Présent/Present']['Nom du champ / Field name']
liste_format = list(liste_format)

# liste des différences entre le tableau des champs nécessaires/optionnels présents et tous les champs présents dans le jeu de données
#listing the differences between the table of required/optional fields AND the fields given in the dataset
colonnes_extra = list(set(colonne_jeu_donnees) - set(liste_format))
colonnes_extra = sorted(colonnes_extra)
if len(colonnes_extra) == 0:
colonnes_extra = ['aucune colonne / no column']

#section servant à rouler les fonctions de validation pour les colonnes présentes dans le jeu de données
#this section tests the validation functions for the columns given in the dataset

liste_affichage = []
if 'basisofrecord' in liste_format:
basisofrecord = basisofrecord_fonction(data)
Expand Down Expand Up @@ -92,6 +97,7 @@ def occurence_core_occurence_file(data, colonne_jeu_donnees, nombre_rangees):
liste_affichage.append(locationid)

# S'assure que si organismquantitytype ou organismquantity est présent, l'autre l'est aussi
# Confirming that if one of organismquantitytype or organismquantity is present, the other is too
organismQuantityEtType = AfficheSiOrganismQuantityEtTypeSontPresent(liste_format)
if organismQuantityEtType is not None:
liste_affichage.append(organismQuantityEtType)
Expand All @@ -102,4 +108,5 @@ def occurence_core_occurence_file(data, colonne_jeu_donnees, nombre_rangees):


# section retournant le tableau d'analyse du format ainsi que les retours des fonctions des champs présents
# section returns the format analysis table as well as the output from the field presence functions
return table_format_analysis(colonne_analyse, colonnes_extra, liste_affichage, nombre_rangees)
4 changes: 4 additions & 0 deletions src/types_analyses_bio/table_format_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@ def table_format_analysis(colonne_analyse, colonnes_extra, liste_affichage, nomb

un = "Les données des champs validés comme 'Présent' dans le tableau précédent sont analysées dans cette section. / Data from fields validated as 'Present' in the previous table are analyzed in this section."
deux = f"Pour référence, il y a {nombre_rangees} rangées dans le jeu de données. / For reference, there are {nombre_rangees} rows in this dataset."
#trad

liste_item = [un, deux]

# section retournant le tableau d'analyse du format ainsi que les retours des fonctions des champs présents
# this section returns the format analysis table as well as the output for the field presence functions
return html.Div([
html.H3("Validation de format / Format validation:"),
html.H6("La présence des champs attendus pour un type d'analyse et de fichier est analysé ici-bas:"),
html.H6("The presence of the expected fields for a type of analysis and file is analyzed below:"),
#trad

dash_table.DataTable(data=
colonne_analyse.to_dict('records'),id={'type': 'colonne_analyse'},
Expand All @@ -33,6 +36,7 @@ def table_format_analysis(colonne_analyse, colonnes_extra, liste_affichage, nomb
html.P(''),
html.H6("Les colonnes suivantes font parties du jeu de données et ne sont pas prise en compte dans le tableau précédent:"),
html.H6("The following columns are part of the dataset and are not taken into account in the previous table:"),
#trad

html.Ul([html.Li(x) for x in colonnes_extra]),
html.P(''),
Expand Down
10 changes: 7 additions & 3 deletions src/validations_bio/decimal_coordinates_fonction.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,22 @@ def decimal_coordinates_fonction(data):
colonne1 = "decimallatitude"
colonne2 = "decimallongitude"

# obtenir les valeurs qui ne correspondent pas en terme de chiffre à des latitudes et longitudes
# obtenir les valeurs qui ne sont pas dans les limites données des latitudes et longitudes
# get the values that are not within the given bounds for latitude and longitude
latitudes_non_valides = data1.loc[(data1[colonne1].gt(90)) | (data1[colonne1].lt(-90)) ]
longitudes_non_valides = (data1.loc[(data1[colonne2].gt(180)) | (data1[colonne2].lt(-180))])
frames = [latitudes_non_valides, longitudes_non_valides]
coordonees_non_valides = pd.concat(frames)

# on garde les colonnes de coordonnées et la colonne d'id et on se débarasse des duplicata
# on garde les colonnes de coordonnées et la colonne d'id et on se débarasse des duplicats
# keep the coordinate columns and the id column and remove the duplicates
latitude_colonne = coordonees_non_valides.columns.get_loc(colonne1)
longitude_colonne = coordonees_non_valides.columns.get_loc(colonne2)
coordonees_non_valides = coordonees_non_valides.iloc[:,[0,latitude_colonne, longitude_colonne]]
coordonees_non_valides.drop_duplicates(inplace=True)

# obtenir les valeurs de latitudes et de longitudes entre -90 et 90 degrés et -180 et 180 degrés
# get the latitude and longitude values between -90 and 90 / -180 and 180 degrees
coordonnees_valides = data1[data1[colonne1].between(-90,90) & data1[colonne2].between(-180,180)]

def afficher_tableau_coordo_non_valides(coordonees_non_valides):
Expand Down Expand Up @@ -64,6 +67,7 @@ def afficher_phrase_coordo_valides(coordonees_non_valides):


# affichage de la carte
# print map
centre_long =.5*(max(np.asarray(np.float64(coordonnees_valides[colonne2]).tolist())) + min(np.asarray(np.float64(coordonnees_valides[colonne2]).tolist())))
centre_lat = .5*(max(np.asarray(np.float64(coordonnees_valides[colonne1]).tolist())) + min(np.asarray(np.float64(coordonnees_valides[colonne1]).tolist())))
height = max(np.asarray(np.float64(coordonnees_valides[colonne1]).tolist())) - min(np.asarray(np.float64(coordonnees_valides[colonne1]).tolist()))
Expand All @@ -75,7 +79,7 @@ def afficher_phrase_coordo_valides(coordonees_non_valides):
fp=[12, 9.5, 6, 4, 2, 1])
print('centre lat: ', centre_lat)
print('centre lon: ', centre_long)
print('aire: ', area)
print('aire/ area: ', area)
print('zoom : ', zoom)

fig = go.Figure(go.Scattermapbox(
Expand Down
10 changes: 7 additions & 3 deletions src/validations_bio/decimal_coordinates_fonction_avec_nom.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,22 @@ def decimal_coordinates_fonction_avec_nom(data, colonne1, colonne2, colonne3):
data1.astype({colonne1: 'float64'}).dtypes
print(data1[colonne1].dtypes)

# obtenir les valeurs qui ne correspondent pas en terme de chiffre à des latitudes et longitudes
# obtenir les valeurs qui ne sont pas dans les limites données des latitudes et longitudes
# get the values that are not within the given bounds for latitude and longitude
latitudes_non_valides = data1.loc[(data1[colonne1].gt(90)) | (data1[colonne1].lt(-90)) ]
longitudes_non_valides = (data1.loc[(data1[colonne2].gt(180)) | (data1[colonne2].lt(-180))])
frames = [latitudes_non_valides, longitudes_non_valides]
coordonees_non_valides = pd.concat(frames)

# on garde les colonnes de coordonnées et la colonne d'id et on se débarasse des duplicata
# keep the coordiante columns and the id column and remove the duplicates
latitude_colonne = coordonees_non_valides.columns.get_loc(colonne1)
longitude_colonne = coordonees_non_valides.columns.get_loc(colonne2)
coordonees_non_valides = coordonees_non_valides.iloc[:,[0,latitude_colonne, longitude_colonne]]
coordonees_non_valides.drop_duplicates(inplace=True)

# obtenir les valeurs de latitudes et de longitudes entre -90 et 90 degrés et -180 et 180 degrés
# get the latitude and longitude values between -90 and 90 / -180 and 180 degrees
coordonnees_valides = data1[data1[colonne1].between(-90,90) & data1[colonne2].between(-180,180)]

def afficher_tableau_coordo_non_valides(coordonees_non_valides):
Expand Down Expand Up @@ -68,6 +71,7 @@ def afficher_phrase_coordo_valides(coordonees_non_valides):
liste_affichage1.append(afficher_phrase_coordo_valides(coordonees_non_valides))

# affichage de la carte
# print the map
centre_long =.5*(max(np.asarray(np.float64(coordonnees_valides[colonne2]).tolist())) + min(np.asarray(np.float64(coordonnees_valides[colonne2]).tolist())))
centre_lat = .5*(max(np.asarray(np.float64(coordonnees_valides[colonne1]).tolist())) + min(np.asarray(np.float64(coordonnees_valides[colonne1]).tolist())))
height = max(np.asarray(np.float64(coordonnees_valides[colonne1]).tolist())) - min(np.asarray(np.float64(coordonnees_valides[colonne1]).tolist()))
Expand All @@ -79,7 +83,7 @@ def afficher_phrase_coordo_valides(coordonees_non_valides):
fp=[12, 9.5, 6, 4, 2, 1])
print('centre lat: ', centre_lat)
print('centre lon: ', centre_long)
print('aire: ', area)
print('aire / area: ', area)
print('zoom : ', zoom)

fig = go.Figure(go.Scattermapbox(
Expand All @@ -102,7 +106,7 @@ def afficher_phrase_coordo_valides(coordonees_non_valides):


html.Div(children=[liste_affichage1[i] for i in range(len(liste_affichage1))]),
html.H6("Coordonnées géographiques / Geographical coordinates:"),
html.H6("Coordonnées géographiques / Geographic coordinates:"),
dcc.Graph(figure=fig),

])
Expand Down
14 changes: 14 additions & 0 deletions src/validations_bio/sub_routines/analysis_function.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
NaN = np.nan

# fonction qui permet de vérifier le match des colonnes de noms scientifiques mais en enlevant les suffixes d'une des colonnes
# this function verifies the comparison between the scientific name columns, but removes the suffixes from one of the columns
def exact_match_suffix(a, b):
if a == b:
return "Oui/Yes"
Expand All @@ -28,6 +29,7 @@ def exact_match_suffix(a, b):
return "Non/no"

# fonction qui permet de vérifier le match des colonnes
# verifying if the columns match
def exact_match(a, b):
if a == b:
return "Oui/Yes"
Expand All @@ -37,6 +39,7 @@ def exact_match(a, b):

def names_analyse(data_valid_scientific_name):
# Comparaison des noms scientifiques du serveur vs. ceux du jeu de données initial
# compare the scientific names from the server to the names in the initial dataset
data_valid_scientific_name['Exact_Match'] = np.vectorize(exact_match_suffix)(data_valid_scientific_name["scientificname"], data_valid_scientific_name['Valid_Name'] )
return data_valid_scientific_name

Expand All @@ -45,23 +48,28 @@ def names_ids_analyse(data_valid_scientific_name, data):
data_valid_scientific_name['Exact_Match'] = np.vectorize(exact_match_suffix)(data_valid_scientific_name["scientificname"], data_valid_scientific_name['Valid_Name'] )

# Préparation du tableau de comparaison des noms scientifiques, rangs taxonimique et LSID (si applicable)
# preps a comparison table for the scientificnames, taxa, and LSID (if applicable)
data_cross_validation = data.copy()
data_cross_validation = data_cross_validation[['occurrenceid','scientificname','scientificnameid',]]
header_list1 = ['occurrenceid', 'scientificname','scientificnameid', 'ScientificName_V', 'scientificNameID_V']
data_cross_validation = data_cross_validation.reindex(columns = header_list1)
data_cross_validation= data_cross_validation.iloc[:, [0,3,4,1,2]]

# création d'une colonne avec autre nom afin de pouvoir la comparer à une autre colonne
# create a column with other name in order to compare between two values
data_valid_scientific_name['scientificname2'] = data_valid_scientific_name['scientificname']

# Merge du tableau des noms et du tableau des noms, rangs taxonomiques et LSID
# merge name table with name, taxa and LSID table
data_cross_validation = data_cross_validation.merge(data_valid_scientific_name[['Valid_Name','LSID','scientificname2']],how='left',left_on='scientificname', right_on='scientificname2' )

# Vérification des colonnes pour fin de validation
# verify columns for final validation
data_cross_validation['ScientificName_V'] = np.vectorize(exact_match_suffix)(data_cross_validation["scientificname"], data_cross_validation['Valid_Name'] )
data_cross_validation['scientificNameID_V'] = np.vectorize(exact_match)(data_cross_validation["scientificnameid"], data_cross_validation['LSID'] )

# classer les valeurs par validité
# classify the validation values
data_valid_scientific_name.sort_values(by='Exact_Match', ascending=True, inplace=True)
data_cross_validation.sort_values(by=['ScientificName_V', 'scientificNameID_V'], ascending=True, inplace=True)

Expand All @@ -71,28 +79,34 @@ def names_ids_analyse(data_valid_scientific_name, data):

def names_taxons_ids_analyse(data_valid_scientific_name, data):
# Comparaison des noms scientifiques du serveur vs. ceux du jeu de données initial
# compare the scientific names from the server to those in the initial dataset
data_valid_scientific_name['Exact_Match'] = np.vectorize(exact_match_suffix)(data_valid_scientific_name["scientificname"], data_valid_scientific_name['Valid_Name'] )

# Préparation du tableau de comparaison des noms scientifiques, rangs taxonimique et LSID (si applicable)
# preps a comparison table for scientific names, taxa ranges and LSID (if applicable)
data_cross_validation = data.copy()
data_cross_validation = data_cross_validation[['occurrenceid','scientificname','taxonrank','scientificnameid',]]
header_list1 = ['occurrenceid', 'scientificname','taxonrank','scientificnameid', 'ScientificName_V', 'TaxonRank_V', 'scientificNameID_V']
data_cross_validation = data_cross_validation.reindex(columns = header_list1)
data_cross_validation= data_cross_validation.iloc[:, [0,4,5,6,1,2,3]]

# création d'une colonne avec autre nom afin de pouvoir la comparer à une autre colonne
# creates a column with second name, for comparing the two values
data_valid_scientific_name['scientificname2'] = data_valid_scientific_name['scientificname']

# Merge du tableau des noms et du tableau des noms, rangs taxonomiques et LSID
# merge the name table with the name, taxa range and LSID table
data_cross_validation = data_cross_validation.merge(data_valid_scientific_name[['Valid_Name','Taxon_Rank','LSID','scientificname2']],how='left',left_on='scientificname', right_on='scientificname2' )

# Vérification des colonnes pour fin de validation
# Verification of columns for the final validation
data_cross_validation['ScientificName_V'] = np.vectorize(exact_match_suffix)(data_cross_validation["scientificname"], data_cross_validation['Valid_Name'] )
data_cross_validation['TaxonRank_V'] = np.vectorize(exact_match)(data_cross_validation["taxonrank"], data_cross_validation['Taxon_Rank'] )
data_cross_validation['scientificNameID_V'] = np.vectorize(exact_match)(data_cross_validation["scientificnameid"], data_cross_validation['LSID'] )


# classer les valeurs par validité
# classify the values based on validation
data_valid_scientific_name.sort_values(by='Exact_Match', ascending=True, inplace=True)
data_cross_validation.sort_values(by=['ScientificName_V', 'TaxonRank_V','scientificNameID_V'], ascending=True, inplace=True)

Expand Down
Loading