Skip to content
Extraits de code Groupes Projets
algorithme_student_generate.py 12 ko
Newer Older
  • Learn to ignore specific revisions
  • Adrien Payen's avatar
    Adrien Payen a validé
    import pandas as pd
    import random
    
    # Liste de noms et prénoms
    noms = ['Smith', 'Johnson', 'Williams', 'Jones', 'Brown', 'Davis', 'Miller', 'Wilson', 'Moore', 'Taylor',
        'Anderson', 'Thomas', 'Jackson', 'White', 'Harris', 'Martin', 'Thompson', 'Garcia', 'Martinez', 'Robinson',
        'Clark', 'Rodriguez', 'Lewis', 'Lee', 'Walker', 'Hall', 'Allen', 'Young', 'Hernandez', 'King',
        'Wright', 'Lopez', 'Hill', 'Scott', 'Green', 'Adams', 'Baker', 'Gonzalez', 'Nelson', 'Carter',
        'Mitchell', 'Perez', 'Roberts', 'Turner', 'Phillips', 'Campbell', 'Parker', 'Evans', 'Edwards', 'Collins',
        'Stewart', 'Sanchez', 'Morris', 'Rogers', 'Reed', 'Cook', 'Morgan', 'Bell', 'Murphy', 'Bailey',
        'Rivera', 'Cooper', 'Richardson', 'Cox', 'Howard', 'Ward', 'Torres', 'Peterson', 'Gray', 'Ramirez',
        'James', 'Watson', 'Brooks', 'Kelly', 'Sanders', 'Price', 'Bennett', 'Wood', 'Barnes', 'Ross',
        'Henderson', 'Coleman', 'Jenkins', 'Perry', 'Powell', 'Long', 'Patterson', 'Hughes', 'Flores', 'Washington',
        'Butler', 'Simmons', 'Foster', 'Gonzales', 'Bryant', 'Alexander', 'Russell', 'Griffin', 'Diaz', 'Hayes',
        'Myers', 'Ford', 'Hamilton', 'Graham', 'Sullivan', 'Wallace', 'Woods', 'Cole', 'West', 'Jordan',
        'Owens', 'Reynolds', 'Fisher', 'Ellis', 'Harrison', 'Gibson', 'McDonald', 'Cruz', 'Marshall', 'Ortiz',
        'Gomez', 'Murray', 'Freeman', 'Wells', 'Webb', 'Simpson', 'Stevens', 'Tucker', 'Porter', 'Hunter',
        'Hicks', 'Crawford', 'Henry', 'Boyd', 'Mason', 'Morales', 'Kennedy', 'Warren', 'Dixon', 'Ramos',
        'Reyes', 'Burns', 'Gordon', 'Shaw', 'Holmes', 'Rice', 'Robertson', 'Hunt', 'Black', 'Daniels',
        'Palmer', 'Mills', 'Nichols', 'Grant', 'Knight', 'Ferguson', 'Rose', 'Stone', 'Hawkins', 'Dunn',
        'Perkins', 'Hudson', 'Spencer', 'Gardner', 'Stephens', 'Payne', 'Pierce', 'Berry', 'Matthews', 'Arnold',
        'Wagner', 'Willis', 'Ray', 'Watkins', 'Olson', 'Carroll', 'Duncan', 'Snyder', 'Hart', 'Cunningham',
        'Bradley', 'Lane', 'Andrews', 'Ruiz', 'Harper', 'Fox', 'Riley', 'Armstrong', 'Carpenter', 'Weaver',
        'Greene', 'Lawrence', 'Elliott', 'Chavez', 'Sims', 'Austin', 'Peters', 'Kelley', 'Franklin', 'Lawson',
        'Fields', 'Gutierrez', 'Ryan', 'Schmidt', 'Carr', 'Vasquez', 'Castillo', 'Wheeler', 'Chapman', 'Oliver',
        'Montgomery', 'Richards', 'Williamson', 'Johnston', 'Banks', 'Meyer', 'Bishop', 'McCoy', 'Howell', 'Alvarez',
        'Morrison', 'Hansen', 'Fernandez', 'Garza', 'Harvey', 'Little', 'Burton', 'Stanley', 'Nguyen', 'George',
        'Jacobs', 'Reid', 'Kim', 'Fuller', 'Lynch', 'Dean', 'Gilbert', 'Garrett', 'Romero', 'Welch']
    
    prenoms = ['Emma', 'Liam', 'Olivia', 'Noah', 'Ava', 'Isabella', 'Sophia', 'Jackson', 'Mia', 'Lucas',
        'Aiden', 'Ethan', 'Luna', 'Mason', 'Harper', 'Evelyn', 'Oliver', 'Aria', 'Amelia', 'Caden',
        'Grayson', 'Charlotte', 'Chloe', 'Ella', 'Sebastian', 'Carter', 'Abigail', 'Scarlett', 'Madison',
        'Lily', 'Avery', 'Ella', 'Aubrey', 'Mila', 'Layla', 'Riley', 'Zoe', 'Sofia', 'Jackson', 'Liam',
        'Leah', 'Zoe', 'Henry', 'Gabriel', 'Grace', 'Hannah', 'Mila', 'Alexa', 'Eva', 'Liam', 'Mia',
        'Logan', 'Benjamin', 'Emily', 'Nora', 'Elijah', 'Lucy', 'Owen', 'Elizabeth', 'Stella', 'Levi',
        'William', 'Lily', 'Zoey', 'Parker', 'Brooklyn', 'Samuel', 'Luke', 'Madelyn', 'Eleanor', 'Nathan',
        'Isaac', 'Ryan', 'Ariana', 'Addison', 'Scarlett', 'Julian', 'Natalie', 'Victoria', 'Adam', 'Alexis',
        'Aaron', 'Aaliyah', 'Robert', 'Samantha', 'Christopher', 'Hazel', 'Serenity', 'Jordan', 'Leah', 'Chase',
        'Lillian', 'Liam', 'Skylar', 'Bella', 'Zachary', 'Caleb', 'Tyler', 'Connor', 'Eli', 'Aaliyah',
        'Ezekiel', 'Eva', 'Landon', 'Grace', 'Makayla', 'Nicholas', 'Natalie', 'Nathan', 'Avery', 'Cameron',
        'Hudson', 'Violet', 'Claire', 'Gavin', 'Eva', 'Zachary', 'Alexa', 'Brooklyn', 'Kylie', 'Peyton',
        'Emma', 'John', 'Aubrey', 'Carter', 'Mila', 'Elena', 'Paisley', 'Grayson', 'Hailey', 'Elijah',
        'Ellie', 'Julian', 'Adrian', 'Aria', 'Liliana', 'Bentley', 'Kinsley', 'Savannah', 'Eliana', 'Sofia',
        'Liam', 'Ella', 'Evelyn', 'Avery', 'Austin', 'Scarlett', 'Leah', 'Aiden', 'Audrey', 'Amelie',
        'Julian', 'Mila', 'Olivia', 'Anthony', 'Caleb', 'Zoe', 'Autumn', 'Samantha', 'Aria', 'Cooper',
        'Eva', 'Charlie', 'Madison', 'Landon', 'Penelope', 'Kaylee', 'Lily', 'Ryder', 'Hannah', 'Maya',
        'Christopher', 'Eleanor', 'Levi', 'Aubree', 'Emma', 'Sofia', 'Evan', 'Ella', 'Gabriel', 'Zachary',
        'Taylor', 'Liam', 'Makayla', 'Zoe', 'Oliver', 'Isaiah', 'Brooklyn', 'Lily', 'Victoria', 'Cameron',
        'Madison', 'Eva', 'Gabriel', 'Zoe', 'Brooklyn', 'Sophie', 'Ella', 'Logan', 'Madison', 'Julian',
        'Alexis', 'Landon', 'Grace', 'Lucas', 'Aria', 'Aaliyah', 'Adrian', 'Riley', 'Nora', 'Isabella',
        'Eva', 'Layla', 'Aiden', 'Amelia', 'Chloe', 'Levi', 'Lillian', 'Liam', 'Zoey', 'Hazel', 'Carter',
        'Grace', 'Peyton', 'Julian', 'Eliana', 'Eva', 'Harper', 'Henry', 'Olivia', 'Lily', 'Liam', 'Abigail']
    
    annees = ['BAC1', 'BAC2', 'BAC3', 'MA1', 'MA2']
    
    
    place_of_birth = ['Mons', 'Charleroi', 'Tournai', 'La Louvière', 'Namur', 'Nivelles', 'Wavre', "Braine-l'Alleud", 'Waterloo', 'Louvain-la-Neuve',
        'Soignies', 'Thuin', 'Binche', 'Ath', 'Enghien', 'Jodoigne', 'Gembloux', 'Fleurus', 'Sambreville', 'Châtelet',
        'Marche-en-Famenne', 'Dinant', 'Ciney', 'Philippeville', 'Huy', 'Andenne', 'Ottignies-Louvain-la-Neuve', 'Hannut', 'Waremme', 'Fosses-la-Ville',
        'Tubize', 'Nivelles', 'Genappe', 'Jodoigne', 'Ottignies', 'La Hulpe', 'Court-Saint-Étienne', 'Rebecq', 'Wavre', 'Waterloo',
        'Lasne', 'Rixensart', 'Rosières', 'Ittre', 'Braine-le-Château', 'Chaumont-Gistoux', 'Walhain', 'Mont-Saint-Guibert', 'Beauvechain', 'Hélécine']
    
    noms_rues = ['Rue de la Liberté', 'Avenue des Roses', 'Chaussée de Bruxelles', 'Rue du Commerce', 'Avenue du Parc', 'Rue Saint-Pierre', 'Chemin des Cerisiers', 'Boulevard des Étoiles', 'Avenue de la Gare', 'Rue des Champs',
        'Chaussée de Namur', 'Rue de la Paix', 'Avenue des Lilas', 'Rue de la Fontaine', 'Chemin du Moulin', 'Boulevard des Arts', 'Avenue des Mésanges', 'Rue des Orangers', 'Chaussée de Liège', 'Rue de l\'Église',
        'Avenue du Lac', 'Rue des Violettes', 'Chemin des Peupliers', 'Boulevard de la Mer', 'Rue des Platanes', 'Avenue des Acacias', 'Chaussée de Mons', 'Rue de la Rivière', 'Avenue du Soleil', 'Rue des Écoles',
        'Chemin des Pommiers', 'Boulevard des Montagnes', 'Rue des Trois Fontaines', 'Avenue des Cèdres', 'Chaussée de Charleroi', 'Rue du Théâtre', 'Boulevard des Papillons', 'Rue des Primevères', 'Avenue des Charmes', 'Chemin des Saules',
        'Rue du Palais', 'Avenue de la Plage', 'Chaussée de Waterloo', 'Rue des Amandiers', 'Boulevard du Jardin', 'Avenue des Coquelicots', 'Rue des Moulins', 'Chemin des Roses', 'Boulevard de la Forêt', 'Rue des Iris']
    
    
    genre = ['M', 'F', 'O']
    
    
    campus_loc = ["Louvain-la-Neuve", "Mons"]
    
    coursBAC1 = ("Anglais 1", "Fondements du droit public", "Fondements du droit de l'entreprise", "Economie", "Espagnol 1", "Comptabilité", "Informatique de gestion", "Mathématiques de gestion 1", "Statistiques et probabilités", "Pilosophie", "Psychologie", "Sociologie", "Séminaire de travail universitaire en gestion")
    
    coursBAC2 = ("Anglais 2", "Droit de l'entreprise", "Macroéconomie", "Microéconomie", "Espagnol 2", "Marketing", "Production", "Informatique et algorithmique", "Finance", "Inférences statistiques", "Mathématiques de gestion 2", "Technologies industrielles")
    
    coursBAC3 = ("Anglais 3", "Economie industrielle", "Espagnol 3", "Séminaire : organisations et transformation digitale", "Management humain", "Projet entrepreneurial", "Comptabilité et contrôle de gestion", "Gestion de données", "Coding project", "Econométrie", "Recherche opérationnelle", "Optimization", "Séminaire : organisation et mutations sociales", "Questions de sciences religieuses")
    
    coursMA1 = ("Advanced English 1", "Español avanzado 1", "Data analytics", "Projet quantitatif et gestion de projet", "Data Mining", "Nouvelles technologies et pratiques émergentes", "Web mining", "Machine learning", "Quantitative Decision Making", "Recommender Systems", "Pilotage stratégique de l'entreprise", "Séminaire on Current Managerial Issues")
    
    coursMA2 = ("Advanced English 2", "Español avanzado 1", "Responsabilité sociétale de l'entreprise","Integrated Information Systems", "Mémoire", "Séminaire d'accompagnement du mémoire")
    
    
    # Générer des combinaisons aléatoires de noms et prénoms pour plus de 1000 personnes
    donnees = []
    
    for _ in range(100): # générer des données
    
        # nom de la personnes
        nom = random.choice(noms)
    
        # prenom de la personnes
        prenom = random.choice(prenoms)
    
        # année de cours
        annee = random.choice(annees)
    
        # ville de naissance de la personne
        ville_naissance = random.choice(place_of_birth)
    
        # attribuer un numero de téléphone à la personne
        numero_tel = []
        n = f"{random.randint(10000000, 99999999):08d}"
        if n not in numero_tel :
          numero_tel.append(n)
          numero =  f"0{n[:2]}/{n[2:4]}.{n[4:6]}.{n[6:]}"
    
        # endroit où habite la personne
        commune = random.choice(place_of_birth)
        rue = random.choice(noms_rues)
        numero_maison = random.randint(1, 200)
        adresse = f"{rue} {numero_maison}, {commune}"
    
        #attribution du sexe d'une personne
        genre_de_personne = random.choice(genre)
    
    
        #email de la personne
        email = f"{nom}{'.'}{prenom}{'@student.uclouvain.be'}"
        email_format = email.lower()
    
        #attribution des campus aux élèves
        campus = random.choice(campus_loc)
    
        # date de naissance  sachant que l'on est en 2023 donc qqn de 17 ans ne peut pas se trouver en master
        if annee == 'BAC1':
            annee_naiss = 2005
        elif annee == 'BAC2':
            annee_naiss = 2004
        elif annee == 'BAC3':
            annee_naiss = 2003
        elif annee == 'MA1':
            annee_naiss = 2002
        else:
            annee_naiss = 2001
    
        mois_naiss = random.randint(1, 12)
        jour_naiss = random.randint(1, 28)
        annee_de_naissance = f"{jour_naiss}/{mois_naiss}/{annee_naiss}"
    
    
        # attribution du matricule
        consonnes_nom = ''.join([c for c in nom if c.lower() not in 'aeiou'])[:3]
        consonnes_prenom = ''.join([c for c in prenom if c.lower() not in 'aeiou'])[:2]
        derniere_consonne_nom = ''.join([c for c in prenom if c.lower() not in 'aeiou']).lower()[-1] # ne sait pas si c'est la consonne du prénom ou du nom
        annee_naissance_str = str(annee_naiss)[-2:]
        entier_aleatoire = random.randint(0, 10)
        matricule = f"{consonnes_nom}{consonnes_prenom}{derniere_consonne_nom}{annee_naissance_str}{entier_aleatoire}"
        matricule = matricule.lower()
    
    
        #attribution des notes aléatoirement
        notes = {}
        if annee == 'MA2':
            for cours in coursBAC1 + coursBAC2 + coursBAC3 + coursMA1:
                notes[cours] = random.randint(10, 20)  # l'éléve a dû réussir ces cours pour pouvoir avoir acces en MA2
            for cours in coursMA2 :
                notes[cours] = random.randint(0, 20) # l'éléve pourrait avoir eu entre 0 et 20
        elif annee == 'MA1':
            for cours in coursBAC1 + coursBAC2 + coursBAC3 :
                notes[cours] = random.randint(10, 20)
            for cours in coursMA1 :
                notes[cours] = random.randint(0, 20)
        elif annee == 'BAC3':
            for cours in coursBAC1 + coursBAC2 :
                notes[cours] = random.randint(10, 20)
            for cours in coursBAC3 :
                notes[cours] = random.randint(0, 20)
        elif annee == 'BAC2':
            for cours in coursBAC1 :
                notes[cours] = random.randint(10, 20)
            for cours in coursBAC2 :
                notes[cours] = random.randint(0, 20)
        else:
            for cours in coursBAC1:
                notes[cours] = random.randint(0, 20)
    
    
        donnees.append({"Name": nom, "Surname": prenom, "Academic Year" : annee, "Place of Birth" : ville_naissance, "Telephone": numero, "Address": adresse, "Genre" : genre_de_personne, "Email" : email_format, "Campus" : campus, "Date of Birth" : annee_de_naissance, "Matricule" : matricule, **notes})
    
    # génération de données qui ne peuvent pas se ressembler
    
    
    
    
    # Créer un DataFrame pandas
    df = pd.DataFrame(donnees)
    
    # Enregistrer le DataFrame dans un fichier Excel
    df.to_excel("Data_Base.xlsx", index=False)