Skip to content

La toute puissance zodiacale du Machine Learning #277

@Steuv1871

Description

@Steuv1871

Le Machine Learning est la réponse à tous les problèmes.

Hola les péons, agenouillez vous devant la toute puissance du Machine Learning !
La fonction predictionDuSigne PREDIT avec EXACTITUDE le signe astrologique d'une personne à partir de sa date de naissance (et ramène l'être aimé) grace à la puissance du Machine Learning ancestrale.

import pandas as pd
from datetime import datetime, timedelta
from sklearn.tree import DecisionTreeClassifier

def predictionDuSigne(date):
    '''
    Algorithme de Machine Learning pour prédire le signe astrologique d'une personne
    en fonction de sa date de naissance

    Parameters
    ----------
    date : str
        Date de naissance au format 'JJ/MM/AAAA'.

    Returns
    -------
    signe : str
        Signe astrologique de la personne.

    '''
    #Génération des données d'entrainement :
    df = trainData()
    
    #Entrainement du modèle
    dt_clf = DecisionTreeClassifier()
    
    X_train = pd.DataFrame(columns=['annee','mois', 'jour'])
    
    X_train['annee'] = df['date'].dt.year
    X_train['mois'] = df['date'].dt.month
    X_train['jour'] = df['date'].dt.day
    
    dt_clf.fit(X_train,df['signe'])
    
    #Prédiction
    X = pd.DataFrame([[date[-4:],date[3:5],date[:2]]],columns=['annee','mois','jour'])
    return dt_clf.predict(X)

def trainData():
    '''
    Génération des données d'apprentissage du modèle de Machine Learning
    Crée un DataFrame Pandas contenant le signe associé à chaque jour
    depuis le 1er Janvier 1970 jusqu'à aujourd'hui.

    Returns
    -------
    df : DataFrame contenant le signe associé à chaque date depuis le 1er Janvier 1970 jusqu'à aujourd'hui.

    '''
    date = datetime(1970,1,1)
    df = pd.DataFrame(columns=['date','signe'])
    
    while date < datetime.now():
        df.loc[len(df.index)] = [date, defSigneTrain(date)]                                                  
        date += timedelta(days = 1)
    return df

def defSigneTrain(date):
    '''
    Ptite fonction à la con rapide pour retourner le signe de chaque date de mes données d'entrainement.
    Du code de non initié à la toute puissance du Machine Learning qui n'a que peut d'intéret en soit.
    J'ai confié ça à un stagière qui utilise chatGPT.

    Parameters
    ----------
    date : datetime64
        date à catégoriser.

    Returns
    -------
    signe : str
        Signe correspondant à la date du jeux de donnée.

    '''
    signes = {
        'Bélier' : ['21/03','20/04'],
        'Taureau' : ['21/04','20/05'],
        'Gémeaux' : ['21/05','21/06'],
        'Cancer' : ['22/06','22/07'],
        'Lion':  ['23/07','22/08'],
        'Vierge' : ['23/08','22/09'],
        'Balance' : ['23/09','22/10'],
        'Scorpion' : ['23/10','22/11'],
        'Sagittaire' : ['23/11','21/12'],
        'Capricorne' : ['22/12','20/01'],
        'Verseau' : ['21/01','18/02'],
        'Poissons' : ['19/02','20/03'],
    }
    
    for signe in signes :
        if date.month == int(signes[signe][0][-2:]) and date.day >= int(signes[signe][0][:2]):
             return signe
        if date.month == int(signes[signe][1][-2:]) and date.day <= int(signes[signe][1][:2]):
            return signe 

Mise en pratique, attention les yeux !

import time

date_de_naissance = '01/04/2023'
debut = time.time()
signe = predictionDuSigne(date_de_naissance)
fin = time.time()
duree = round(fin - debut,1)
print(f"Le signe d'une personne née le {date_de_naissance} est {signe[0]}")
print(f"La fonction a pris {duree} secondes à s'exécuter.")
>>> Le signe d'une personne née le 01/04/2023 est Bélier
>>> La fonction a pris 35.0 secondes à s'exécuter.

Metadata

Metadata

Assignees

No one assigned

    Labels

    movaicode/18Code en réponse au 18ème concours (mars 2023)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions