More

    Intégrer Python dans une application C# avec Python.NET

    France

    Dans le cadre de l’analyse de portefeuille, j’ai récemment utilisé la bibliothèque yfinance de Python. Au lieu d’utiliser un notebook Jupyter pour exécuter le code Python et visualiser les résultats, j’ai décidé de créer une application de bureau .NET avec WinUI 3.0, XAML et C#. Cette application permet de définir un portefeuille et de gérer la présentation graphique des résultats, tandis que l’analyse sous-jacente est effectuée en Python. J’utilise Python.NET pour appeler le code Python depuis C#. Cet article décrit comment utiliser Python.NET pour appeler des fonctions Python à partir d’une application C#.

    Versions Utilisées

    Nous avons utilisé les versions suivantes :

    • Python 3.12
    • yfinance 0.2.54
    • Python.NET 3.0.5

    L’API Python

    J’ai commencé par écrire un script simple d’analyse de portefeuille. Ce script est basé sur une application de gestion de portefeuille écrite en Python, mais j’ai réorganisé la fonctionnalité principale pour séparer les calculs et l’analyse de la couche de présentation graphique. Cela m’a permis d’appeler les fonctions Python depuis C# pour obtenir les données et ensuite traiter ces données dans l’application C#.

    L’API est composée de quatre fonctions :

    • portfolio_returns(ticker_values, start_date, end_date) : Cette fonction calcule les poids des tickers et obtient les prix de clôture ajustés pour chaque ticker à l’aide de la bibliothèque yfinance.
    • perform_portfolio_analysis(data, ticker_weights, risk_free_rate) : Elle utilise les données de retour du portefeuille et calcule les rendements des titres individuels, les rendements cumulés, la volatilité et les ratios de Sharpe.
    • benchmark_returns(benchmark, start_date, end_date) : Cette fonction obtient les données de référence depuis yfinance à l’aide des paramètres fournis.
    • portfolio_vs_benchmark(port_returns, benchmark_returns, risk_free_rate) : Elle calcule les rendements cumulés, la volatilité annualisée et les ratios de Sharpe pour comparer le portefeuille et la référence.

    L’application .NET

    Pré-requis

    Pour l’application .NET, il faut d’abord télécharger et construire Python.NET. Le code est disponible sur GitHub. Une fois téléchargé, ouvrez le fichier de solution et sélectionnez Python.Runtime comme projet de démarrage. Après avoir compilé la version de débogage, Python.Runtime.dll sera situé dans le répertoire pythonnet.

    Application PortfolioManager

    Après avoir construit Python.Runtime.dll, il faut l’ajouter à l’application Portfolio Manager. Cette dernière est une application WinUI 3.0 qui utilise le Windows Community Toolkit pour l’injection de dépendances et l’architecture MVVM, ainsi qu’une base de données Sqlite pour gérer les portefeuilles.

    La solution se compose de deux projets principaux : PortfolioManager et PortfolioManager.Core. Le projet PortfolioManager gère la logique de l’application, les paramètres utilisateur et les vues. Nous ajoutons Python.Runtime.dll aux Dépendances sous le nœud Assemblies.

    Le Service Python

    Dans la bibliothèque de base, nous définissons une interface simple IPythonService qui encapsule l’initialisation et les appels à l’API Python.

    Dans le projet PortfolioManager, nous ajoutons IPythonService à la liste des services à activer et passons une instance de celui-ci au PortfolioDetailViewModel.

    Analyse de Portefeuille

    La fonction principale RunPortfolioAnalysis est appelée avec l’élément de portefeuille sélectionné. Elle charge le script d’analyse de portefeuille et le passe à Python.NET, qui crée un objet module pour accéder aux fonctions et variables du script.

    Une fois l’analyse terminée, les résultats sont copiés dans les membres de données de l’élément de portefeuille. Le modèle de données du portefeuille est ensuite utilisé pour mettre à jour les graphiques affichés dans l’application.

    Couche d’interopérabilité

    Cette couche fournit des facilités pour convertir entre les types C# et Python. Les types de base (chaînes, entiers, doubles, etc.) sont convertis de manière transparente. Nous utilisons la méthode d’extension .ToPython() pour convertir un objet C# en objet Python.

    Performance et Investigations

    Il est à noter que les performances sont relativement lentes. L’initialisation du moteur Python prend du temps, et il pourrait être intéressant de l’effectuer une seule fois au démarrage. De plus, le PortfolioDetailViewModel crée plusieurs graphiques séquentiellement, ce qui pourrait être amélioré en utilisant un traitement asynchrone en C#.

    Pythonnet | Python | C | Analyse De Portefeuille | Winui | France
    source:https://www.r-bloggers.com/2025/02/calling-python-from-c-using-python-net/

    LAISSER UN COMMENTAIRE

    S'il vous plaît entrez votre commentaire!
    S'il vous plaît entrez votre nom ici


    Actualités

    L’acteur de Friends, Matthew Perry, décède à 54 ans

    "Matthew Perry, célèbre pour son rôle de Chandler Bing dans Friends, décède à 54 ans. Acteur très apprécié, sa mort suscite l'émotion mondiale."

    Entité sioniste déploie des navires de guerre en Mer Rouge selon un expert militaire

    Entité sioniste déploie des navires de guerre en Mer Rouge pour contrer les Houthis au Yémen, une manœuvre vue comme une démonstration de force envers l'Iran.

    L’affaire des SMS entre Pfizer et la Commission européenne : ce qu’il faut savoir

    En avril 2021, le New York Times a révélé...

    Banque suisse : Credit Suisse en chute libre après la faillite de la SVB

    L'action de Credit Suisse a dévissé de plus de...

    Le Retour de Microsoft avec Bing et Edge : Une Menace pour Google ?

    Depuis moins de trois mois, ChatGPT a déjà créé...

    Bangladesh bat le Pakistan et remporte une série Test historique

    Bangladesh bat le Pakistan de 78 runs à Sylhet et remporte une série Test historique à domicile grâce à Taijul Islam.

    Xi Jinping et Vladimir Poutine discutent à Beijing

    Xi Jinping et Vladimir Poutine tiennent des discussions à Beijing sur la Chine, la Russie, l’Ukraine et le Moyen-Orient.

    L’ONU révise à la baisse la croissance mondiale face à la crise au Moyen-Orient

    L’ONU abaisse ses prévisions de croissance mondiale à 2,5 % en 2026, citant la crise au Moyen-Orient et la hausse des prix de l’énergie.

    Xi Jinping reçoit Vladimir Poutine à Pékin: ce que révèle ce sommet sur l’axe Chine-Russie

    Le sommet de Pékin entre Xi Jinping et Vladimir Poutine confirme la solidité d’un partenariat central pour l’Ukraine, l’énergie et l’équilibre géopolitique mondial.

    Kentucky : Thomas Massie battu en primaire, Donald Trump impose son candidat

    Thomas Massie, élu républicain du Kentucky, a perdu sa primaire face à Ed Gallrein, candidat soutenu par Donald Trump, dans une course très coûteuse et symbolique.

    Hantavirus : pourquoi les autorités ne parlent pas d’un « nouveau Covid » et quels symptômes doivent vraiment alerter

    Le risque pour le grand public reste faible, mais le hantavirus peut être grave après exposition réelle. Voici ce que disent l’OMS et le CDC sur les symptômes, la transmission et la prévention.

    Le Sénat américain freine Trump sur la guerre contre l’Iran

    Le Sénat américain avance une résolution pour limiter les pouvoirs de guerre de Trump contre l’Iran, dans un rare revers présidentiel.

    Édouard Philippe visé par une information judiciaire: ce que change vraiment l’enquête ouverte au Havre

    L’ouverture d’une information judiciaire visant Édouard Philippe place désormais le dossier havrais sous l’autorité d’un juge d’instruction.

    à Lire

    Categories