def liste_triee_selon_critere(self, donnees, critere): liste = [] for num_pays in range(len(donnees)): pays = Pays(num_pays, donnees) if pays.get_name() and self.numerisation_critere(pays, critere) != 'NA': liste.append((self.numerisation_critere(pays, critere), pays)) liste.sort() return liste
def liste_triee_selon_critere(self, donnees, critere): """Cette méthode a besoin d'un jeu de données et d'un critère. Elle renvoie une liste triée selon un critère choisi par le data scientist.""" liste = [] for num_pays in range(len(donnees)): pays = Pays(num_pays, donnees) if pays.get_name() and self.numerisation_critere(pays, critere) != 'NA': liste.append((self.numerisation_critere(pays, critere), pays)) liste.sort() return liste
def clustering(self, nb_clusters): """Cette méthode utilise la méthode des Kmeans pour permettre à la fonction de créer des classes entre les pays. Elle prend en argument le nombre de classes que l'utilisateur veut former. Cette méthode renvoie un data frame où chaque colonne correspond à chaque classe avec le nom des pays dans celles ci.""" donnees = Data_Base().donnees criteres = [ 'superficie', 'population', 'croissance démographique', 'inflation', 'dette', 'chômage', 'dépenses santé', 'dépenses éducation', 'dépenses militaires' ] valeurs_pays = [] liste_des_pays_comptabilises = [] for num_pays in range(len(donnees)): pays = Pays(num_pays, donnees) if pays.get_name(): if True not in [ self.numerisation_critere(pays, critere) == 'NA' for critere in criteres ]: liste_des_pays_comptabilises.append( self.simplification(pays.get_name())) valeurs_pays.append([ self.numerisation_critere(pays, critere) for critere in criteres ]) clf = KMeans(n_clusters=nb_clusters) clf.fit(np.array(valeurs_pays)) labels = clf.labels_ pays_dans_clusters = [[] for i in range(nb_clusters)] for i in range(len(labels)): for cl in range(nb_clusters): if labels[i] == cl: pays_dans_clusters[cl].append( liste_des_pays_comptabilises[i]) for cluster in pays_dans_clusters: while len(cluster) < max([len(cl) for cl in pays_dans_clusters]): cluster.append('') liste_des_clusters = [ 'Cluster {}'.format(i + 1) for i in range(nb_clusters) ] return pandas.DataFrame(pays_dans_clusters, index=liste_des_clusters).T
def supprimer_pays(self, contenu): gestionnaire = Gestionnaire() donnees = Data_Base().donnees noms_pays = [ Pays(num_pays, donnees).get_name() for num_pays in range(len(donnees)) ] if self.verification_connexion(): nom_pays_a_supprimer = input( '\nEntrez le nom du pays à supprimer\n> ') if nom_pays_a_supprimer not in noms_pays: input( "\nCe pays n'existe pas.\nAppuyez sur entrer pour continuer." ) return self.afficher_pays(contenu) else: num_pays_a_supprimer = noms_pays.index(nom_pays_a_supprimer) confirmation = input( "\nConfirmation de la suppression du pays (O/N) ? #Cela supprimera aussi toutes ses données#\n> " ) if confirmation in ["o", "O"]: del donnees[num_pays_a_supprimer] gestionnaire.update(donnees) input( "\nLe pays a bien été supprimée.\nAppuyez sur entrer pour continuer." ) else: input( "\nVotre tentative de suppression n'a pas abouti.\nAppuyez sur entrer pour continuer." ) return self.afficher_pays(contenu)
def clustering(self, nb_clusters): donnees = Data_Base().donnees criteres = [ 'superficie', 'population', 'croissance démographique', 'inflation', 'dette', 'chômage', 'dépenses santé', 'dépenses éducation', 'dépenses militaires' ] valeurs_pays = [] liste_des_pays_comptabilises = [] for num_pays in range(len(donnees)): pays = Pays(num_pays, donnees) if pays.get_name(): if True not in [ self.numerisation_critere(pays, critere) == 'NA' for critere in criteres ]: liste_des_pays_comptabilises.append( self.simplification(pays.get_name())) valeurs_pays.append([ self.numerisation_critere(pays, critere) for critere in criteres ]) clf = KMeans(n_clusters=nb_clusters) clf.fit(np.array(valeurs_pays)) labels = clf.labels_ pays_dans_clusters = [[] for i in range(nb_clusters)] for i in range(len(labels)): for cl in range(nb_clusters): if labels[i] == cl: pays_dans_clusters[cl].append( liste_des_pays_comptabilises[i]) for cluster in pays_dans_clusters: while len(cluster) < max([len(cl) for cl in pays_dans_clusters]): cluster.append('') liste_des_clusters = [ 'Cluster {}'.format(i + 1) for i in range(nb_clusters) ] return pandas.DataFrame(pays_dans_clusters, index=liste_des_clusters).T
def ajout_pays(self, contenu): """Cette méthode permet d'ajouter un pays comme la précédente méthode ajout_section""" gestionnaire = Gestionnaire() donnees = Data_Base().donnees noms_indisponibles = [Pays(num_pays, donnees).get_name() for num_pays in range(len(donnees)) if Pays(num_pays, donnees).get_name()] if self.verification_connexion(): nom_pays = input('\nEntrez le nom du pays à ajouter :\n> ') if nom_pays == 'none': input("\nVous ne pouvez pas nommer un pays 'none'.\nAppyez sur entrer pour continuer.") return self.afficher_pays(contenu) if nom_pays in noms_indisponibles: input('\nCe pays est déjà dans la liste.\nAppyez sur entrer pour continuer.') return self.afficher_pays(contenu) confirmation = input("\nConfirmation de l'ajout du pays (O/N) ?\n> ") if confirmation not in ["o","O"]: input("\nEchec de l'ajout du pays.\nAppyez sur entrer pour continuer.") return self.afficher_pays(contenu) donnees.append({}) nouveau_pays = Pays(len(donnees)-1, donnees) nouveau_pays.set_name(nom_pays) nouveau_pays.set_infos_de_base() gestionnaire.update(nouveau_pays.donnees) input("\nLe pays a bien été ajouté.\nAppuyez sur entrer pour continuer.") return self.afficher_pays(contenu)
def _ajout_pays_table_criteres(self, contenu, liste_pays_a_afficher, fonction_a_appliquer): """Cette méthode permet d'ajouter un pays à une liste afin d'appliquer une autre méthode en fonction d'un certain critère. Cette méthode est utilisée par la fonction critere_usuel.""" donnees = Data_Base().donnees nb_pays = len(donnees) if len(liste_pays_a_afficher) >= 10: input( "\nVous ne pouvez pas afficher plus de 10 pays à la fois.\nAppuyez sur entrer pour continuer." ) return fonction_a_appliquer(contenu, liste_pays_a_afficher) choix_pays = {} choix_pays['question'] = 'Choisissez un pays.' choix_pays['individu'] = contenu['individu'] choix_pays['pseudo'] = contenu['pseudo'] liste_des_pays = [] liste_des_nums_pays_a_afficher = [ pays.num_pays for pays in liste_pays_a_afficher ] liste_des_noms_pays_a_afficher = [ pays.get_name() for pays in liste_pays_a_afficher ] for num_pays in range(nb_pays): nom_pays = Pays(num_pays, donnees).get_name() if nom_pays and nom_pays not in liste_des_noms_pays_a_afficher: liste_des_pays.append((nom_pays, num_pays)) liste_des_pays.sort() liste_des_noms = [pays[0] for pays in liste_des_pays] liste_des_nums = [pays[1] for pays in liste_des_pays] choix_pays['options'] = liste_des_noms choix_pays['options basiques'] = [] choix_pays['actions'] = [ lambda var, num=num: fonction_a_appliquer( contenu, liste_pays_a_afficher + [Pays(num, donnees)]) for num in liste_des_nums if num not in liste_des_nums_pays_a_afficher ] return Menu_Ouvert(choix_pays)
def afficher_section(self, section, contenu): donnees = Data_Base().donnees num_pays = section.num_pays chemin = section.chemin choix_section = {} chemin_a_afficher = Pays(section.num_pays, donnees).get_name() for partie in chemin: chemin_a_afficher += ' -> {}'.format(partie) if section.is_section_de_texte(): print('\n{} :\n'.format(chemin_a_afficher)) print(section.contenu['text']) self.correction(choix_section, section) return self.afficher_section(Section(num_pays, donnees, chemin[:-1]), contenu) sous_sections = section.get_noms_sous_sections() if len(sous_sections) == 0: choix_section['question'] = '{}\n\nCette section est vide.'.format(chemin_a_afficher) else : choix_section['question'] = '{}\n\nChoisissez une option.'.format(chemin_a_afficher) choix_section['individu'] = contenu['individu'] choix_section['options'] = sous_sections choix_section['options basiques'] = [] choix_section['actions'] = [] for partie in sous_sections: nouveau_chemin = chemin + [partie] choix_section['actions'].append((lambda contenu, nouveau_chemin=nouveau_chemin : self.afficher_section(Section(num_pays, donnees, nouveau_chemin), contenu))) if self.statut == 'g' or self.statut == 'a': if len(sous_sections) == 0: choix_section['options basiques'].append(['AJOUTER UN TEXTE', 'AT']) choix_section['actions'].append(lambda var : self.ajout_texte(contenu, section)) choix_section['options basiques'].append(['AJOUTER UNE SECTION', 'AS']) choix_section['actions'].append(lambda var : self.ajout_section(contenu, section)) if self.statut == 'a' and len(sous_sections) != 0: choix_section['options basiques'].append(['SUPPRIMER UNE SECTION', 'S']) choix_section['actions'].append(lambda var : self.supprimer_section(contenu, section)) choix_section['options basiques'].append(['RETOUR', 'R']) if len(chemin) == 0: choix_section['actions'].append(lambda var : self.afficher_pays(contenu)) else: choix_section['actions'].append(lambda var : self.afficher_section(Section(num_pays, donnees, chemin[:-1]), contenu)) choix_section['options basiques'].append(["RETOUR AU MENU DE L'ACTEUR", 'RMA']) choix_section['actions'].append(lambda contenu : Menu_Ouvert(self.contenu_initial)) choix_section['options basiques'].append(['QUITTER', 'Q']) choix_section['actions'].append(self.quitter) return Menu_Ouvert(choix_section)
def boites_a_moustache(self): """Cette méthode crée une boîte à moustache sur les différentes classes d'ages.""" donnees = Data_Base().donnees classe_age_0 = [] classe_age_1 = [] classe_age_2 = [] classe_age_3 = [] classe_age_4 = [] for num_pays in range(len(donnees)): pays = Pays(num_pays, donnees) if pays.get_name(): if self.numerisation_critere(pays, '0-14') != 'NA': classe_age_0.append(self.numerisation_critere( pays, '0-14')) if self.numerisation_critere(pays, '15-24') != 'NA': classe_age_1.append( self.numerisation_critere(pays, '15-24')) if self.numerisation_critere(pays, '25-54') != 'NA': classe_age_2.append( self.numerisation_critere(pays, '25-54')) if self.numerisation_critere(pays, '55-64') != 'NA': classe_age_3.append( self.numerisation_critere(pays, '55-64')) if self.numerisation_critere(pays, '>=65') != 'NA': classe_age_4.append(self.numerisation_critere( pays, '>=65')) plt.title( "Box-plots correspondants aux répartitions des valeurs des 5 classes d’âge pour tous les pays." ) plt.boxplot([ classe_age_0, classe_age_1, classe_age_2, classe_age_3, classe_age_4 ], labels=[ "0-14 years", "15-24 years", "25-54 years", "55-64 years", ">=65" ]) plt.show()
def afficher_pays(self, contenu): """ Cette méthode permet au consultant d'afficher la liste des différents pays et d'en choisir un par le nombre correspondant au pays affiché dans le menu""" if self.contenu_initial == {}: self.contenu_initial = contenu donnees = Data_Base().donnees nb_pays = len(donnees) choix_pays = {} choix_pays['question'] = 'Choisissez un pays.' choix_pays['individu'] = contenu['individu'] liste_des_pays = [] for num_pays in range(nb_pays): nom_pays = Pays(num_pays, donnees).get_name() if nom_pays: liste_des_pays.append((nom_pays, num_pays)) liste_des_pays.sort() liste_des_noms = [pays[0] for pays in liste_des_pays] liste_des_nums = [pays[1] for pays in liste_des_pays] choix_pays['options'] = liste_des_noms choix_pays['options basiques'] = [] choix_pays['actions'] = [ lambda var, num=num: self.afficher_section(Section( num, donnees), contenu) for num in liste_des_nums ] if self.statut == 'g' or self.statut == 'a': choix_pays['options basiques'].append(['AJOUTER UN PAYS', 'A']) choix_pays['actions'].append(lambda var: self.ajout_pays(contenu)) if self.statut == 'a': choix_pays['options basiques'].append(['SUPPRIMER UN PAYS', 'S']) choix_pays['actions'].append( lambda var: self.supprimer_pays(contenu)) choix_pays['options basiques'].append( ["RETOUR AU MENU DE L'ACTEUR", 'R']) choix_pays['actions'].append( lambda var: Menu_Ouvert(self.contenu_initial)) choix_pays['options basiques'].append(['QUITTER', 'Q']) choix_pays['actions'].append(self.quitter) return Menu_Ouvert(choix_pays)
def __str__(self): donnees = Data_Base().donnees res = Pays(self.num_pays, donnees).get_name() + '/' for i in range(len(self.chemin_prop)): res += self.chemin_prop[i] + '/' return res