Algorithmes : Analyse des salaires
VARIABLES :
noms_salaries, sexes_salaries, departement_salaries, salaires_salaries : TABLEAUX
total_salaries : ENTIER
choix_utilisateur : ENTIER
DEBUT
// Étape 1 : Acquisition des données
ECRIRE "Souhaitez-vous fournir les données manuellement ou via un fichier ?"
ECRIRE "1. Saisir manuellement"
ECRIRE "2. Charger depuis un fichier Excel"
LIRE choix_utilisateur
SI choix_utilisateur == 1 ALORS
ChargerDataManuellement()
SINON SI choix_utilisateur == 2 ALORS
ChargerDataFichier()
SINON
ECRIRE "Choix invalide. Veuillez relancer le programme."
FIN
FIN SI
// Étape 2 : Calculs statistiques
total_salaries <- LONGUEUR(sexes_salaries)
CalculerStatistiquesGlobales()
CalculerStatistiquesParSexe()
CalculerStatistiquesParDepartement()
// Étape 3 : Affichage des résultats
ECRIRE "Traitement terminé. Les résultats ont été affichés."
FIN
FONCTION ChargerDataManuellement()
DEBUT
ECRIRE "Entrez le nombre de salariés :"
LIRE total_salaries
POUR i DE 1 À total_salaries FAIRE
ECRIRE "Entrez le nom du salarié ", i, " :"
LIRE noms_salaries[i]
ECRIRE "Entrez le sexe du salarié ", i, " (Homme/Femme) :"
LIRE sexes_salaries[i]
ECRIRE "Entrez le département du salarié ", i, " :"
LIRE departement_salaries[i]
ECRIRE "Entrez le salaire du salarié ", i, " :"
LIRE salaires_salaries[i]
FIN POUR
FIN
FONCTION ChargerDataFichier()
DEBUT
// Charger les données depuis un fichier Excel
// Supposons que les données sont chargées dans les tableaux correspondants
noms_salaries, sexes_salaries, departement_salaries, salaires_salaries <- LireFichierExcel()
FIN
FONCTION CalculerStatistiquesGlobales()
DEBUT
// Calculer le nombre total d'employés
ECRIRE "Nombre total d'employés : ", total_salaries
// Calculer le salaire moyen
salaire_moyen <- SOMME(salaires_salaries) / total_salaries
ECRIRE "Salaire moyen : ", salaire_moyen
// Calculer le salaire médian
salaires_tries <- TRIER(salaires_salaries)
SI total_salaries MOD 2 == 0 ALORS
salaire_median <- (salaires_tries[total_salaries / 2] + salaires_tries[(total_salaries / 2) + 1]) / 2
SINON
salaire_median <- salaires_tries[(total_salaries + 1) / 2]
FIN SI
ECRIRE "Salaire médian : ", salaire_median
// Calculer le salaire minimum et maximum
salaire_min <- MIN(salaires_salaries)
salaire_max <- MAX(salaires_salaries)
ECRIRE "Salaire minimum : ", salaire_min
ECRIRE "Salaire maximum : ", salaire_max
// Calculer la somme totale des salaires
somme_salaires <- SOMME(salaires_salaries)
ECRIRE "Somme totale des salaires : ", somme_salaires
// Calculer l'écart-type des salaires
ecart_type <- RACINE(SOMME((salaires_salaries - salaire_moyen)^2) / total_salaries)
ECRIRE "Écart-type des salaires : ", ecart_type
FIN
FONCTION CalculerStatistiquesParSexe()
DEBUT
// Initialiser les compteurs et les sommes pour chaque sexe
hommes <- 0
femmes <- 0
somme_hommes <- 0
somme_femmes <- 0
POUR i DE 1 À total_salaries FAIRE
SI sexes_salaries[i] == "Homme" ALORS
hommes <- hommes + 1
somme_hommes <- somme_hommes + salaires_salaries[i]
SINON
femmes <- femmes + 1
somme_femmes <- somme_femmes + salaires_salaries[i]
FIN SI
FIN POUR
// Calculer et afficher les statistiques par sexe
ECRIRE "Nombre d'hommes : ", hommes
ECRIRE "Salaire moyen des hommes : ", somme_hommes / hommes
ECRIRE "Nombre de femmes : ", femmes
ECRIRE "Salaire moyen des femmes : ", somme_femmes / femmes
FIN
FONCTION CalculerStatistiquesParDepartement()
DEBUT
// Initialiser un dictionnaire pour stocker les compteurs et les sommes par département
departements <- DICTIONNAIRE()
POUR i DE 1 À total_salaries FAIRE
departement <- departement_salaries[i]
SI departement DANS departements ALORS
departements[departement]["nombre"] <- departements[departement]["nombre"] + 1
departements[departement]["somme"] <- departements[departement]["somme"] +
salaires_salaries[i]
SINON
departements[departement] <- {"nombre": 1, "somme": salaires_salaries[i]}
FIN SI
FIN POUR
// Calculer et afficher les statistiques par département
POUR chaque departement DANS departements FAIRE
ECRIRE "Département : ", departement
ECRIRE "Nombre d'employés : ", departements[departement]["nombre"]
ECRIRE "Salaire moyen : ", departements[departement]["somme"] /
departements[departement]["nombre"]
FIN POUR
FIN
Fonction enregistrer_resultats_excel():
# Création d'un dictionnaire pour les statistiques globales
stats_globales = {
"Statistique": ["Nombre total d'employés", "Moyenne des salaires", "Médiane des salaires",
"Salaire maximum", "Salaire minimum", "Écart-type des salaires",
"Rapport entre salaire max et min"],
"Valeur": [longueur de noms_salaries, moyenne de salaires_salaries, médiane de
salaires_salaries,
maximum de salaires_salaries, minimum de salaires_salaries, écart-type de
salaires_salaries,
maximum de salaires_salaries divisé par minimum de salaires_salaries]
df_global = Créer un DataFrame à partir de stats_globales
# Création d'un dictionnaire pour les statistiques par genre
genres_uniques = ensemble unique de genres_salaries
stats_genre = {
"Genre": [],
"Nombre d'employés": [],
"Salaire moyen": []
}
Pour chaque genre dans genres_uniques:
salaires_genre = [salaire pour salaire, g dans zip(salaires_salaries, genres_salaries) si g == genre]
Ajouter genre à stats_genre["Genre"]
Ajouter le nombre d'occurrences de genre dans genres_salaries à stats_genre["Nombre
d'employés"]
Ajouter la moyenne de salaires_genre à stats_genre["Salaire moyen"]
df_genre = Créer un DataFrame à partir de stats_genre
# Création d'un dictionnaire pour les statistiques par département
departements_uniques = ensemble unique de departement_salaries
stats_departement = {
"Département": [],
"Nombre d'employés": [],
"Salaire moyen": []
Pour chaque departement dans departements_uniques:
salaires_departement = [salaire pour salaire, d dans zip(salaires_salaries, departement_salaries)
si d == departement]
Ajouter departement à stats_departement["Département"]
Ajouter le nombre d'occurrences de departement dans departement_salaries à
stats_departement["Nombre d'employés"]
Ajouter la moyenne de salaires_departement à stats_departement["Salaire moyen"]
df_departement = Créer un DataFrame à partir de stats_departement
# Enregistrement des DataFrames dans un fichier Excel
chemin_fichier = "resultats_statistiques.xlsx"
Ouvrir un fichier Excel à chemin_fichier en tant que writer:
Écrire df_global dans la feuille "Statistiques Globales" sans index
Écrire df_genre dans la feuille "Statistiques par Genre" sans index
Écrire df_departement dans la feuille "Statistiques par Département" sans index
Afficher "Les résultats ont été enregistrés dans le fichier {chemin_fichier}"
Fin Fonction
CODE PYTHON
import pandas as pd
import numpy as np
import psycopg2
# Variables globales pour stocker les données
noms_salaries = []
genres_salaries = []
departement_salaries = []
salaires_salaries = []
# Fonction pour charger les données manuellement
def charger_data_manuellement():
print("Veuillez entrer les données des employés manuellement.")
while True:
nom = input("Nom : ")
genre = input("Genre (Femme/Homme) : ")
departement = input("Département : ")
salaire = float(input("Salaire : "))
noms_salaries.append(nom)
genres_salaries.append(genre)
departement_salaries.append(departement)
salaires_salaries.append(salaire)
continuer = input("Voulez-vous ajouter un autre employé ? (o/n) : ")
if [Link]() != 'o':
break
# Fonction pour charger les données depuis un fichier Excel
def charger_data_fichier():
chemin_fichier = input("Veuillez entrer le chemin du fichier Excel : ")
try:
df = pd.read_excel(chemin_fichier)
global noms_salaries, genres_salaries, departement_salaries, salaires_salaries
noms_salaries = df['Nom'].tolist()
genres_salaries = df['Genre'].tolist()
departement_salaries = df['Département'].tolist()
salaires_salaries = df['Salaire'].tolist()
print("Données chargées avec succès.")
except Exception as e:
print(f"Erreur lors du chargement du fichier : {e}")
# Fonction pour charger les données depuis une base de données SQL
def charger_data_sql():
# Informations de connexion à la base de données (à remplacer par vos valeurs)
host = "localhost" # Remplacez par l'adresse de votre serveur SQL
dbname = "Donnees" # Remplacez par le nom de votre base de données
user = "postgres" # Remplacez par votre nom d'utilisateur
password = "OMAR10" # Remplacez par votre mot de passe
port = "5432" # Remplacez par le port de votre base de données (par défaut 5432 pour
PostgreSQL)
try:
# Connexion à la base de données
conn = [Link](
host=host,
dbname=dbname,
user=user,
password=password,
port=port
)
cursor = [Link]()
# Exécution de la requête SQL pour récupérer les données
[Link]("SELECT Nom, Genre, Département, Salaire FROM employes")
rows = [Link]()
# Stockage des données dans les listes globales
global noms_salaries, genres_salaries, departement_salaries, salaires_salaries
for row in rows:
noms_salaries.append(row[0])
genres_salaries.append(row[1])
departement_salaries.append(row[2])
salaires_salaries.append(row[3])
print("Données chargées avec succès depuis la base de données.")
except Exception as e:
print(f"Erreur lors de la connexion à la base de données : {e}")
finally:
if conn:
[Link]()
[Link]()
# Fonction pour calculer les statistiques globales
def calculer_statistiques_globales():
print("\nStatistiques globales :")
print(f"Nombre total d'employés : {len(noms_salaries)}")
print(f"Moyenne des salaires : {[Link](salaires_salaries):.2f}")
print(f"Médiane des salaires : {[Link](salaires_salaries):.2f}")
print(f"Salaire maximum : {[Link](salaires_salaries):.2f}")
print(f"Salaire minimum : {[Link](salaires_salaries):.2f}")
print(f"Écart-type des salaires : {[Link](salaires_salaries):.2f}")
print(f"Rapport entre salaire max et min : {[Link](salaires_salaries) /
[Link](salaires_salaries):.2f}")
# Fonction pour calculer les statistiques par genre
def calculer_statistiques_par_genre():
print("\nStatistiques par genre :")
genres_uniques = set(genres_salaries)
for genre in genres_uniques:
salaires_genre = [s for s, g in zip(salaires_salaries, genres_salaries) if g == genre]
print(f"Genre : {genre}")
print(f"Nombre d'employés : {genres_salaries.count(genre)}")
print(f"Salaire moyen : {[Link](salaires_genre):.2f}")
# Fonction pour calculer les statistiques par département
def calculer_statistiques_par_departement():
print("\nStatistiques par département :")
departements_uniques = set(departement_salaries)
for departement in departements_uniques:
salaires_departement = [s for s, d in zip(salaires_salaries, departement_salaries) if d ==
departement]
print(f"Département : {departement}")
print(f"Nombre d'employés : {departement_salaries.count(departement)}")
print(f"Salaire moyen : {[Link](salaires_departement):.2f}")
# Fonction pour enregistrer les résultats dans un fichier Excel
def enregistrer_resultats_excel():
# Création d'un DataFrame pour les statistiques globales
stats_globales = {
"Statistique": ["Nombre total d'employés", "Moyenne des salaires", "Médiane des salaires",
"Salaire maximum", "Salaire minimum", "Écart-type des salaires",
"Rapport entre salaire max et min"],
"Valeur": [len(noms_salaries), [Link](salaires_salaries), [Link](salaires_salaries),
[Link](salaires_salaries), [Link](salaires_salaries), [Link](salaires_salaries),
[Link](salaires_salaries) / [Link](salaires_salaries)]
}
df_global = [Link](stats_globales)
# Création d'un DataFrame pour les statistiques par genre
genres_uniques = set(genres_salaries)
stats_genre = {
"Genre": [],
"Nombre d'employés": [],
"Salaire moyen": []
}
for genre in genres_uniques:
salaires_genre = [s for s, g in zip(salaires_salaries, genres_salaries) if g == genre]
stats_genre["Genre"].append(genre)
stats_genre["Nombre d'employés"].append(genres_salaries.count(genre))
stats_genre["Salaire moyen"].append([Link](salaires_genre))
df_genre = [Link](stats_genre)
# Création d'un DataFrame pour les statistiques par département
departements_uniques = set(departement_salaries)
stats_departement = {
"Département": [],
"Nombre d'employés": [],
"Salaire moyen": []
}
for departement in departements_uniques:
salaires_departement = [s for s, d in zip(salaires_salaries, departement_salaries) if d ==
departement]
stats_departement["Département"].append(departement)
stats_departement["Nombre d'employés"].append(departement_salaries.count(departement))
stats_departement["Salaire moyen"].append([Link](salaires_departement))
df_departement = [Link](stats_departement)
# Enregistrement des DataFrames dans un fichier Excel
chemin_fichier = "resultats_statistiques.xlsx"
with [Link](chemin_fichier) as writer:
df_global.to_excel(writer, sheet_name="Statistiques Globales", index=False)
df_genre.to_excel(writer, sheet_name="Statistiques par Genre", index=False)
df_departement.to_excel(writer, sheet_name="Statistiques par Département", index=False)
print(f"Les résultats ont été enregistrés dans le fichier {chemin_fichier}")
# Fonction principale
def main():
# Étape 1 : Acquisition des données
print("Souhaitez-vous fournir les données manuellement, via un fichier ou depuis une base de
données SQL ?")
print("1. Saisir manuellement")
print("2. Charger depuis un fichier Excel")
print("3. Charger depuis une base de données SQL")
choix_utilisateur = input("Votre choix : ")
if choix_utilisateur == "1":
charger_data_manuellement()
elif choix_utilisateur == "2":
charger_data_fichier()
elif choix_utilisateur == "3":
charger_data_sql()
else:
print("Choix invalide. Veuillez relancer le programme.")
return
# Étape 2 : Calculs statistiques
calculer_statistiques_globales()
calculer_statistiques_par_genre()
calculer_statistiques_par_departement()
# Étape 3 : Enregistrement des résultats dans un fichier Excel
enregistrer_resultats_excel()
print("\nTraitement des données terminé.")
# Exécution du programme
if __name__ == "__main__":
main()