Étiquette : Pandas

  • Génération de définitions astronomiques sur l’ensemble des types objets du cosmos avec LLaMA

    Génération de définitions astronomiques sur l’ensemble des types objets du cosmos avec LLaMA

    Salut les passionnés d’astronomie et les codeurs curieux ! Aujourd’hui, je vous propose un voyage interstellaire à travers un script Python qui utilise l’API locale d’Ollama pour générer des définitions et des notes explicatives sur des objets astronomiques. 🌌✨

    Pourquoi ce script est-il génial ?

    Imaginez que vous avez un fichier Excel rempli de données sur des objets célestes, mais vous avez besoin de descriptions détaillées et de notes explicatives pour chaque type et sous-type d’objet. C’est là que notre script entre en jeu ! Il parcourt chaque ligne de votre fichier Excel, envoie des requêtes à l’API d’Ollama pour obtenir des définitions en français, et sauvegarde les résultats dans un nouveau fichier Excel. Et le meilleur dans tout ça ? Si un type ou un sous-type d’objet a déjà été traité, le script réutilise la définition précédemment générée pour éviter des appels redondants à l’API. 🚀

    Origine du Fichier Excel

    Le fichier Excel utilisé dans ce script provient du Catalogue Exotica de Breakthrough Listen, un projet de recherche de l’Université de Californie à Berkeley. Le Catalogue Exotica est une collection de plus de 700 objets célestes distincts, visant à inclure « un de chaque » type d’objet astronomique connu. Il comprend des exemples de chaque type dans l’échantillon Prototype, des objets extrêmes avec des propriétés record dans l’échantillon Superlative, et des cibles énigmatiques dans l’échantillon Anomaly. 🌠

    Le fichier Excel a été extrait du code source de l’article scientifique « One of Everything: The Breakthrough Listen Exotica Catalog » disponible sur arXiv. La conversion du tableau LaTeX en fichier Excel a été réalisée à l’aide du convertisseur en ligne disponible sur TableConvert.

    Prérequis

    Avant de plonger dans le code, assurez-vous d’avoir les éléments suivants :

    • Python 3.x
    • Bibliothèque pandas
    • Bibliothèque requests
    • API locale d’Ollama accessible à l’adresse http://localhost:11434/api/generate
    • Fichier Excel updated_table.xlsx avec les colonnes TypeSous-Type, et Exemple

    Installation des Prérequis

    1. Installer Python 3.x : Vous pouvez télécharger et installer Python à partir du site officiel python.org.
    2. Installer les bibliothèques nécessaires :pip install pandas requests openpyxl
    3. Configurer l’API locale d’Ollama : Assurez-vous que l’API locale d’Ollama est accessible à l’adresse http://localhost:11434/api/generate.

    Le Script Magique 🪄

    Voici le script complet avec des commentaires détaillés en français et en anglais :

    # -*- coding: utf-8 -*-
    # This program is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program. If not, see <https://www.gnu.org/licenses/>.
    
    # Description:
    # This script uses the local Ollama API to generate definitions and explanatory notes
    # on astronomical objects from an Excel file. The script iterates over each row of the
    # Excel file, sends requests to the API to obtain definitions in French, and saves the
    # results in a new Excel file. If a type or subtype of object has already been processed,
    # the script reuses the previously generated definition to avoid redundant API calls.
    #
    # Description :
    # Ce script utilise l'API locale d'Ollama pour générer des définitions et des notes explicatives
    # sur des objets astronomiques à partir d'un fichier Excel. Le script parcourt chaque ligne du
    # fichier Excel, envoie des requêtes à l'API pour obtenir des définitions en français, et sauvegarde
    # les résultats dans un nouveau fichier Excel. Si un type ou un sous-type d'objet a déjà été traité,
    # le script réutilise la définition précédemment générée pour éviter des appels redondants à l'API.
    
    # Origin of the Excel file:
    # The Excel file used in this script comes from the Breakthrough Listen Exotica Catalog,
    # a research project at the University of California, Berkeley. The Exotica Catalog is a
    # collection of over 700 distinct celestial objects, aiming to include "one of everything"
    # type of astronomical object known. It includes examples of each type in the Prototype sample,
    # extreme objects with record properties in the Superlative sample, and enigmatic targets in the Anomaly sample.
    #
    # The Excel file was extracted from the source code of the scientific article "One of Everything:
    # The Breakthrough Listen Exotica Catalog" available on arXiv. The conversion of the LaTeX table
    # to an Excel file was done using the online converter available on TableConvert.
    #
    # Origine du fichier Excel :
    # Le fichier Excel utilisé dans ce script provient du Catalogue Exotica de Breakthrough Listen,
    # un projet de recherche de l'Université de Californie à Berkeley. Le Catalogue Exotica est une
    # collection de plus de 700 objets célestes distincts, visant à inclure "un de chaque" type d'objet
    # astronomique connu. Il comprend des exemples de chaque type dans l'échantillon Prototype, des objets
    # extrêmes avec des propriétés record dans l'échantillon Superlative, et des cibles énigmatiques dans
    # l'échantillon Anomaly.
    #
    # Le fichier Excel a été extrait du code source de l'article scientifique "One of Everything:
    # The Breakthrough Listen Exotica Catalog" disponible sur arXiv. La conversion du tableau LaTeX
    # en fichier Excel a été réalisée à l'aide du convertisseur en ligne disponible sur TableConvert.
    
    # Import necessary libraries
    # Importer les bibliothèques nécessaires
    import pandas as pd
    import requests
    import json
    
    # Load the Excel file
    # Charger le fichier Excel
    print("Loading the Excel file...")
    print("Chargement du fichier Excel...")
    df = pd.read_excel('updated_table.xlsx', engine='openpyxl')
    print("Excel file loaded successfully.")
    print("Fichier Excel chargé avec succès.")
    
    # Dictionaries to store already generated definitions
    # Dictionnaires pour stocker les définitions déjà générées
    definitions_type = {}
    definitions_subtype = {}
    definitions_example = {}
    
    # Function to generate text using the local Ollama API
    # Fonction pour générer du texte avec l'API locale d'Ollama
    def generate_text(prompt):
        print(f"Sending request to the API for the prompt: {prompt}")
        print(f"Envoi de la requête à l'API pour le prompt : {prompt}")
        response = requests.post(
            "http://localhost:11434/api/generate",  # Ensure the local API is accessible at this address
            # Assurez-vous que l'API locale est accessible à cette adresse
            json={"model": "llama3.3:70b-instruct-q2_K", "prompt": prompt}
        )
        
        # Debugging: Print the raw API response
        # Débogage : Afficher la réponse brute de l'API
        print("Raw API response:", response.text)
        print("Réponse brute de l'API:", response.text)
        
        # Assemble fragmented responses
        # Assembler les réponses fragmentées
        full_response = ""
        for line in response.text.splitlines():
            try:
                json_line = json.loads(line)
                full_response += json_line["response"]
                if json_line.get("done", False):
                    break
            except json.JSONDecodeError as e:
                print("JSON decoding error:", e)
                print("Erreur de décodage JSON:", e)
                return "Text generation error"
                return "Erreur de génération de texte"
        
        print(f"Complete API response: {full_response}")
        print(f"Réponse complète de l'API : {full_response}")
        return full_response
    
    # Iterate over the DataFrame rows and fill the columns
    # Parcourir les lignes du DataFrame et remplir les colonnes
    print("Starting to process DataFrame rows...")
    print("Début du traitement des lignes du DataFrame...")
    for index, row in df.iterrows():
        print(f"Processing row {index + 1}/{len(df)}")
        print(f"Traitement de la ligne {index + 1}/{len(df)}")
        type_query = row['Type']
        subtype_query = row['Sous-Type']
        example_query = row['Exemple']
        
        # Check if the type definition has already been generated
        # Vérifier si la définition du type a déjà été générée
        if type_query in definitions_type:
            df.at[index, 'Définition du type'] = definitions_type[type_query]
        else:
            definition_type = generate_text(f"Définition du type d'objet astronomique {type_query} en français:")
            definitions_type[type_query] = definition_type
            df.at[index, 'Définition du type'] = definition_type
    
    # Save the updated Excel file after each definition
        # Sauvegarder le fichier Excel mis à jour après chaque définition
        df.to_excel(f'updated_table_with_definitions_{index + 1}_type.xlsx', index=False)
        
        # Check if the subtype definition has already been generated
        # Vérifier si la définition du sous-type a déjà été générée
        subtype_key = (type_query, subtype_query)
        if subtype_key in definitions_subtype:
            df.at[index, 'Définition du sous-type'] = definitions_subtype[subtype_key]
        else:
            definition_subtype = generate_text(f"Définition du sous-type d'objet astronomique {subtype_query} de type {type_query} en français:")
            definitions_subtype[subtype_key] = definition_subtype
            df.at[index, 'Définition du sous-type'] = definition_subtype
        
        # Save the updated Excel file after each definition
        # Sauvegarder le fichier Excel mis à jour après chaque définition
        df.to_excel(f'updated_table_with_definitions_{index + 1}_subtype.xlsx', index=False)
        
        # Check if the explanatory note on the example has already been generated
        # Vérifier si la note explicative sur l'exemple a déjà été générée
        example_key = (type_query, subtype_query, example_query)
        if example_key in definitions_example:
            df.at[index, 'Note explicative sur l\'exemple'] = definitions_example[example_key]
        else:
            definition_example = generate_text(f"Note explicative sur l'exemple d'objet astronomique {type_query}, {subtype_query}, {example_query} en français:")
            definitions_example[example_key] = definition_example
            df.at[index, 'Note explicative sur l\'exemple'] = definition_example
        
        # Save the updated Excel file after each definition
        # Sauvegarder le fichier Excel mis à jour après chaque définition
        df.to_excel(f'updated_table_with_definitions_{index + 1}_example.xlsx', index=False)
    
    print("Finished processing rows. Saving the final Excel file...")
    print("Traitement des lignes terminé. Sauvegarde du fichier Excel final...")
    
    # Save the final updated Excel file
    # Sauvegarder le fichier Excel final mis à jour
    df.to_excel('updated_table_with_definitions_final.xlsx', index=False)
    
    print("The Excel file has been updated with definitions generated by LLaMA in French.")
    print("Le fichier Excel a été mis à jour avec des définitions générées par LLaMA en français.")

    Médiagraphie

    • Breakthrough Listen. (n.d.). Exotic Target Catalog. Récupéré de http://seti.berkeley.edu/exotica/
    • Lacki, B. C., Lebofsky, M., Isaacson, H., Siemion, A., Sheikh, S., Croft, S., … & Werthimer, D. (2020). One of Everything: The Breakthrough Listen Exotica Catalog. arXiv. Récupéré de https://arxiv.org/pdf/2006.11304.pdf
    • TableConvert. (n.d.). Convert LaTeX Table to Excel Online. Récupéré de https://tableconvert.com/latex-to-excel
    • Python Software Foundation. (n.d.). pandas documentation. Récupéré de https://pandas.pydata.org/pandas-docs/stable/
    • Reitz, K., & Chovanec, T. (n.d.). Requests: HTTP for Humans. Récupéré de https://docs.python-requests.org/en/latest/

    Conclusion

    Et voilà ! Vous avez maintenant un script Python puissant et flexible pour générer des définitions et des notes explicatives sur des objets astronomiques à partir d’un fichier Excel. Ce script utilise l’API locale d’Ollama pour obtenir des définitions en français et sauvegarde les résultats dans un nouveau fichier Excel. N’hésitez pas à personnaliser ce script selon vos besoins et à explorer les merveilles de l’astronomie avec des descriptions détaillées et précises. 🚀🌌

    Si vous avez des questions ou des problèmes, n’hésitez pas à demander de l’aide ! 😊

    Bon codage et bon voyage interstellaire ! 🌠✨

    Plus de détails sur mon site Github : https://github.com/steveprudhomme/astronomical-object-type-metadata

  • Devenez le Maître des Tableaux Excel avec Python ! 🐍📊

    Devenez le Maître des Tableaux Excel avec Python ! 🐍📊

    Salut les codeurs et les amateurs de données ! Aujourd’hui, nous allons plonger dans le monde merveilleux de Python et des tableaux Excel. Vous avez déjà eu des tableaux avec des cellules vides qui devraient contenir la même valeur que la cellule précédente ? Pas de panique ! Nous avons un script pour ça. Et le meilleur ? C’est super facile et amusant à faire ! 🎉

    Pourquoi ce script est-il génial ?

    Imaginez que vous avez un tableau Excel avec des informations sur des astéroïdes et des comètes. Certaines cellules de la première colonne sont vides, mais elles devraient contenir la même valeur que la cellule précédente. Plutôt que de remplir ces cellules manuellement (quelle corvée !), nous allons utiliser Python pour le faire automatiquement. 🚀

    Ce dont vous avez besoin

    Avant de commencer, assurez-vous d’avoir les éléments suivants :

    • Python 3.x
    • Les bibliothèques Pandas et Openpyxl

    Pour installer les bibliothèques nécessaires, ouvrez votre terminal (ou invite de commande) et tapez :

    pip install pandas openpyxl
    

    Le Script Magique 🪄

    Voici le script Python qui va sauver votre journée :

    # -*- coding: utf-8 -*-
    """
    Remplir Colonne Type
    
    Description:
    Ce script Python a pour but de remplir les valeurs manquantes dans la première colonne d'un fichier Excel avec la valeur précédente de la colonne. Cela est particulièrement utile pour les tableaux où certaines cellules de la première colonne sont vides mais devraient contenir la même valeur que la cellule précédente.
    
    Functionality:
    This Python script aims to fill in missing values in the first column of an Excel file with the previous value in the column. This is particularly useful for tables where some cells in the first column are empty but should contain the same value as the previous cell.
    
    License:
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
    along with this program. If not, see <https://www.gnu.org/licenses/>.
    """
    
    import pandas as pd
    
    def remplir_colonne_type(file_path: str, output_file_path: str) -> None:
        """
        Charger le fichier Excel, remplir les valeurs manquantes dans la première colonne,
        et sauvegarder le DataFrame mis à jour dans un nouveau fichier Excel.
    
        Load the Excel file, fill missing values in the first column, and save the updated DataFrame to a new Excel file.
    
        :param file_path: Chemin du fichier Excel à charger / Path to the Excel file to load
        :param output_file_path: Chemin du fichier Excel de sortie / Path to the output Excel file
        """
        # Charger le fichier Excel
        # Load the Excel file
        df = pd.read_excel(file_path, engine='openpyxl')
        
        # Assertion pour vérifier que le DataFrame n'est pas vide
        # Assertion to check that the DataFrame is not empty
        assert not df.empty, "Le fichier Excel est vide / The Excel file is empty"
        
        # Afficher les premières lignes pour vérifier les colonnes
        # Display the first few rows to check the columns
        print(df.head())
        
        # Remplir les valeurs manquantes dans la première colonne avec la valeur précédente de la colonne
        # Fill missing values in the first column with the previous value in the column
        df.iloc[:, 0] = df.iloc[:, 0].fillna(method='ffill')
        
        # Assertion pour vérifier que les valeurs manquantes ont été remplies
        # Assertion to check that missing values have been filled
        assert df.iloc[:, 0].isnull().sum() == 0, "Il reste des valeurs manquantes dans la première colonne / There are still missing values in the first column"
        
        # Sauvegarder le DataFrame mis à jour dans un fichier Excel
        # Save the updated DataFrame to a new Excel file
        df.to_excel(output_file_path, index=False)
        
        print(f"Le tableau mis à jour a été sauvegardé dans {output_file_path}.")
        print(f"The updated table has been saved to {output_file_path}.")
    
    # Chemin du fichier Excel à charger et du fichier de sortie
    # Path to the Excel file to load and the output file
    file_path = 'tableConvert.com_o2we7a.xlsx.xlsx'
    output_file_path = 'updated_table.xlsx'
    
    # Appel de la fonction pour remplir la colonne et sauvegarder le fichier
    # Call the function to fill the column and save the file
    remplir_colonne_type(file_path, output_file_path)
    

    Comment ça marche ?

    1. Charger le fichier Excel : Le script commence par charger votre fichier Excel grâce à la bibliothèque pandas.
    2. Vérifier le contenu : Il vérifie que le fichier n’est pas vide (parce que personne n’aime les fichiers vides, n’est-ce pas ?).
    3. Remplir les valeurs manquantes : Il remplit les cellules vides de la première colonne avec la valeur précédente.
    4. Sauvegarder le fichier mis à jour : Enfin, il sauvegarde le tableau mis à jour dans un nouveau fichier Excel.

    Exécution du script

    Pour exécuter le script, assurez-vous que votre fichier Excel est dans le même répertoire que le script. Ensuite, ouvrez votre terminal et tapez :

    python remplir_colonne_type.py
    

    Et voilà ! Votre tableau Excel est maintenant complet et prêt à être utilisé. 🎉

    Conclusion

    Avec ce script, vous pouvez dire adieu aux cellules vides et bonjour à des tableaux parfaitement remplis. Python et Pandas rendent la manipulation des données tellement plus facile et amusante. Alors, qu’attendez-vous ? Essayez-le et devenez le maître des tableaux Excel ! 🐍📊

    N’hésitez pas à partager vos expériences et à poser des questions dans les commentaires. Bon codage !

    Plus de détails sur mon site Git-Hub : https://github.com/steveprudhomme/remplir_colonne_type

    Médiagraphie

    Breakthrough Listen. (n.d.). Exotic Target Catalog. Récupéré de http://seti.berkeley.edu/exotica/
    Lacki, B. C., Lebofsky, M., Isaacson, H., Siemion, A., Sheikh, S., Croft, S., … & Werthimer, D. (2020). One of Everything: The Breakthrough Listen Exotica Catalog. arXiv. Récupéré de https://arxiv.org/pdf/2006.11304.pdf
    Python Software Foundation. (2023). Pandas documentation. Repéré le 4 janvier 2025 à https://pandas.pydata.org/pandas-docs/stable/
    Python Software Foundation. (2023). Openpyxl documentation. Repéré le 4 janvier 2025 à https://openpyxl.readthedocs.io/en/stable/
    TableConvert. (n.d.). Convert LaTeX Table to Excel Online. Récupéré de https://tableconvert.com/latex-to-excel