Un DataFrame sous IronPython c'est possible ?
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