Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucler sur Python

    9 avril 2024 à 9:43:43

    Bonjour,

    J'ai un travail assez conséquent à faire sur Python, malheureusement je ne suis pas dans ce domaine et je me retrouve complètement bloquée. 

    J'ai une base de données, que j'ai crée, de 500 produits végétaux. On y retrouve beaucoup d'informations, mais le plus important reste leurs compositions en protéines et en acides aminés (en g/100g de produit végétal). Je souhaite crée un mélange de produits végétaux qui égalise ou surpasse (mais doit toujours être le plus proche possible) de ma référence, la whey. 

    Pour ceci, je souhaite utiliser Python et des boucles, comme dans une simulation de Monte Carlo. Je veux que mon programme passe en revue tous les mélanges possibles de végétaux, avec un pas de 10g et un poids max de 300g du même produit dans le mélange. Pour donner un exemple de à quoi devrait ressembler la boucle : 0g de soja + 10g de blé, puis 0g de soja + 20g de blé, puis 0g de soja + 30g de blé, etc. jusqu'au poids max, puis 10g de soja + 0g de blé, puis 20g de soja + 0g de blé, etc. ... 

    J'ai beau chercher par moi même sur tous les sites, je n'arrive pas à faire comprendre cette commande à Python. Voici un début de code (après import des bibliothèques et de mes données bien entendu) que je pensais juste mais qui ne l'est pas : 

    # Poids maximal du produit végétal
    p_max = 301 #grammes

    # Pas 
    pas = 10 #grammes

    # Boucles : 
    for poids in range(0, p_max, pas):
        poids_g = poids / 100.0  # Convertir le poids en grammes
        
        # Calculer la composition en acides aminés et en protéines du mélange pour le poids retenu
        melange = np.sum(veg_data * poids_g, axis=0)
        
        if np.all(melange < ref_data):
                continue
        if np.all(melange == ref_data):
                break
        if np.all(melange > ref_data):
                break        

    if melange is not None : 
        # Calculer la distance par rapport à la Whey en utilisant la racine carrée de l'erreur quadratique moyenne
        difference = melange - ref_data
        mse = np.sqrt(np.mean(difference ** 2))
        print("Distance par rapport à la Whey :", mse)
        print()
        
        # Convertir melange en DataFrame
        melange_df = pd.DataFrame([melange], columns=veg_data.columns)
        # Ajouter une colonne "Type" au DataFrame melange_df pour identifier le type de données (mélange ou whey)
        melange_df.insert(0, 'Type', 'Melange')
        # Insérer une colonne "Type" au début de ref_data pour identifier le type de données (mélange ou whey)
        ref_data.insert(0, 'Type', 'Whey')
        # Concaténer les DataFrames melange_df et ref_data
        resultat_final = pd.concat([melange_df, ref_data], ignore_index=True)
        # Afficher le tableau final
        print(resultat_final)
        
        print("Quantité minimale de chaque produit végétal utilisée :", poids_g * 100, "g")

    else:
        print("Aucun mélange satisfaisant trouvé.")   

    Je ne l'ai pas précisé ci-dessus, mais étant donné la taille de la base de données, j'ai commencé ce code pour seulement deux produits. Je me dis que si le code marche pour 2 produits, il pourra marcher pour 500 même si il me faudra surement une machine plus performante pour faire tourner ce programme. 

    Si vous avez une idée ou une question, je suis preneuse. Je veux vraiment faire ce travail ... Merci pour votre aide ! 

    • Partager sur Facebook
    • Partager sur Twitter
      9 avril 2024 à 12:23:07

       melange = np.sum(veg_data * poids_g, axis=0)

      ça fait le calcul data*poids_g de chaque valeur, et fais la somme de toutes les valeurs de chaque colonne;

      • Partager sur Facebook
      • Partager sur Twitter
        9 avril 2024 à 15:07:57

        Bonjour, Merci de lire les règles du forum AVANT de créer un sujet.

        Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
        Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

        Pour plus d'informations, nous vous invitons à lire les règles générales du forum

        Merci de colorer votre code à l'aide du bouton Code </>

        Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton  </> de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: php;">Votre code ici</pre>.

        Merci de modifier votre message d'origine en fonction.

        Liens conseillés

        • Partager sur Facebook
        • Partager sur Twitter
          9 avril 2024 à 16:20:24

          BéaAraujo a écrit:

          Je veux que mon programme passe en revue tous les mélanges possibles de végétaux, avec un pas de 10g et un poids max de 300g du même produit dans le mélange. Pour donner un exemple de à quoi devrait ressembler la boucle : 0g de soja + 10g de blé, puis 0g de soja + 20g de blé, puis 0g de soja + 30g de blé, etc. jusqu'au poids max, puis 10g de soja + 0g de blé, puis 20g de soja + 0g de blé, etc. ...

          Cela me semble être plus une question d'algorithme ou plutôt sans avoir définit un algo. on ne sait pas trop quoi coder.. et si on ne sait pas quoi coder, on n'est pas arrivé de si tôt!

          Sur un coin de table un mélange (blé, soja) d'un poids max de 300 fabrique une liste de poids max (0, 300),  (10, 290), (20, 270),... ou on a une boucle où si la quantité de blé varie de 0 à 300 de 10 en 10, la quantité de soja correspondante sera 300 - I.

          Pour chacun de ces poids max, on peut calculer facilement les quantités inférieures... (et il faudrait savoir que faire des doublons).

          • Partager sur Facebook
          • Partager sur Twitter

          Boucler sur Python

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown