18 déc. 2022

[Info Python] DataFrame et IronPython

 






Un DataFrame sous IronPython c'est possible ?

if this article is not in your language, use the Google Translate widget ⬈ (bottom of page for Mobile version )


Lorsque j'analyse et traite des données, généralement, je le fais avec Python3 et la bibliothèque Python Pandas (sous Dynamo ou Google Collab).

Mais qu'en est-il pour Ironpython ?, à ce jour IronPython ne prend pas en charge les librairies Python qui sont codées en partis ou totalement en C (seulement les librairies codées en pur Python sont compatibles).

De ce fait, il n'est pas possible d'utiliser par exemple Numpy et/ou Pandas, et donc impossible d'avoir un DataFrame sous IronPython....

Essayons tout de même...

Une alternative possible est d'utiliser une librairie .Net, Microsoft.Data.Analysis est parfait dans le cas présent.

Microsoft.Data.Analysis est une librairie (partie du ML.Net) open source et multiplateforme pour l'analyse et la transformation des données (cible .NET Standard2.0).



En plus de Microsoft.Data.Analysis, il faudra télécharger les dépendances (.dll) nécessaires



Voici un simple exemple avec IronPython 3.4 

code Python

import sys
import clr
import sys
# path of DLLs
sys.path.append(r'D:\...\...\Test DataFrame on Ipy2\DLL')
import System
print(f'Python version : {sys.version}')
print(f'Python Engine : {sys.implementation.name}')
print(f'TargetFramework : {clr.TargetFramework}')
#print(dir(clr))
from System.Collections.Generic import List

clr.AddReference('System.Core')
clr.AddReference('System.Buffers')
clr.AddReference('System.Memory')
clr.AddReference('Microsoft.ML.DataView')
clr.AddReference('Microsoft.Data.Analysis')
#
import Microsoft.Data.Analysis
from Microsoft.Data.Analysis import *

names = List[System.String]([ "Oliver", "Charlotte", "Henry", "Amelia", "Owen" ])
genders = List[System.String]([ "Man", "Women", "Man", "Women", "Man" ])
ages = List[System.Int32]([ 23, 19, 42, 64, 35 ])
heights = List[System.Double]([ 1.91, 1.62, 1.72, 1.57, 1.85 ])

columns = List[DataFrameColumn]([
		StringDataFrameColumn("Name", names),
		StringDataFrameColumn("Gender", genders),
		PrimitiveDataFrameColumn[System.Int32]("Age", ages),
		PrimitiveDataFrameColumn[System.Double]("Height", heights)
		])

df = DataFrame(columns)
print("----Show the DataFrame----")
print(df)
print("----Show Description of DataFrame----")
print(df.Description())
print("----Check the Type of df----")
print(df.GetType())
# add a new Column 
weights = List[System.Int32]([ 80, 60, 79, 65, 85 ])
weightCol = PrimitiveDataFrameColumn[System.Int32]("Weight", weights)
df.Columns.Add(weightCol)
# compute IMC
iqCol = df["Weight"] / (df["Height"] * df["Height"])
df.Columns.Add(PrimitiveDataFrameColumn[System.Double]("IMC", iqCol))
print("----Show the new DataFrame with column Weight and IMC ----")
print(df)
df1 = df.GroupBy("Gender").Mean("IMC")
print("----Show DataFrame groupby Gender and Mean IMC ----")
print(df1)
df = df.Filter(df["IMC"].ElementwiseGreaterThan(23.0)).OrderBy("Age")
print("----Show the new DataFrame filtered by IMC > 23 ----")
print(df)


Résultat





La plupart des méthodes sont similaires à Pandas, mais semble moins complet.


Après quelques tests Microsoft.Data.Analysis ne semble pas compatible avec IronPython2.7


Ressources

https://learn.microsoft.com/fr-fr/dotnet/api/microsoft.data.analysis?view=ml-dotnet-preview

https://towardsdatascience.com/getting-started-with-c-dataframe-and-xplot-ploty-6ea6ce0ce8e3



🎅🎅🎅🎄🎄🎄 Bonnes Fêtes de fin d'Année  🎁🎁🎁🎉🎉🎉


0 commentaires:

Enregistrer un commentaire