Package: valemo-data-query
VALEMO_DATA_QUERYOutils de requêtes de données sur Python pour ValemoFonctionnalitésazure_datalake_gen2Rechercher les fichiers .csv dans une architecture partitionnée du datalake gen2 ;Filtrer les partitions et sélectionner les dossiers ;Télécharger les .csv depuis le datalake et les agréger en dataframes Pandas ;Transformer les données et préparer des analyses ;user_credentialsenregistrer vos informations de connexion et les importer facilement ;InstallationInstallervalemo-data-queryvia command promptpipinstall--upgradevalemo-data-queryDésinstallervalemo-data-queryvia command promptpipuninstallvalemo-data-queryvalemo-data-queryrequiert :Un abonnement Azure. Consultez la page d'obtention d’un essai gratuit d’Azure;Un compte de stockage doté d’un espace de noms hiérarchique activé. Pour créer un test, suivezcesinstructions ;Pour plus d'informations sur la gestion de datalake gen2 de microsoft via Python voir cettepage;Installation à jour de Python 3.8 ou supérieure. DistributionAnacondarecommandée. ;Librairie Pandas version 1.1.4 ou supérieure ;Librairie Numpy version 1.21.3 ou supérieure ;Librairie Azure (azure-storage-file-datalake) version 12.5.0 ;Exemple : enregistrer ses connexionsfromvalemo_data_queryimportuser_credentialscredentials=user_credentials()# Déclarer une nouvelle connexiondatalake_1={"account":"datalake_name","key":"password"}credentials.add_datasource(datalake_1,"datalake_1")datalake_2={"account":"datalake_name_2","key":"password"}credentials.add_datasource(datalake_2,"datalake_2")# Récupérer une connexiondataconnexion=credentials.get_credentialsdatalake_1=dataconnexion["datalake_1"]#Supprimer toutes les connexionscredentials.clear_credentials()Exemple : Azure datalake - gérer les partitionsAprès avoir configurer ses connexions au datalake Azure gen2, la fonctionread_csv_partitionreconstruit l'arborescence des fichiers csv sans lire le contenu. Lors de cette phase des filtres peuvent être appliqués basés sur la reconnaissance des hiérarchiesprojet=,year=etmonth=. La méthode statiqueget_file_partition_dfrenvoie les partitions des fichiers csv. Un deuxième filtre basé sur ce dataframe est applicable avecapply_user_partition_filteravant la lecture  et la concaténation des données via la méthodeconcatenate_pandas.fromvalemo_data_queryimportazure_datalake_gen2,user_credentialsdatalake_connexion=user_credentials().get_credentials["datalake_1"]"""On recherche les fichiers csv dans le dossier :"detailed/wind/metrics/csv/project=X/year=Y/month=Z/..."Avec X,Y,Z :X = ["BAM","DSN","PUDP","PAACS"]Y = ["2021","2022"]Z : Mois [de 06 à 10]"""basepath="detailed/wind/metrics/csv/"azure_query=azure_datalake_gen2(datalake_connexion,basepath)azure_query.filter_partitionProject(["BAM","DSN","PUDP","PAACS"])azure_query.filter_partitionYear(["2021","2022"])# Pour les mois on pourrait spécifier le filtre via .filter_partitionMonth# ou utiliser .apply_user_partition_filter basé sur le dataframe des# partitions renvoyé par la méthode .get_file_partition_dfazure_query.read_csv_partition()#recherche de l'arborescence des fichiers csvpartition_df=azure_query.get_file_partition_df"""filepath               partition  ...                              year       month0   detailed/wind/metr...  project=BAM/year=2021/month=10/day=01  ...  year=2021  month=101   detailed/wind/metr...  project=BAM/year=2021/month=10/day=02  ...  year=2021  month=102   detailed/wind/metr...  project=BAM/year=2021/month=10/day=03  ...  year=2021  month=103   detailed/wind/metr...  project=BAM/year=2021/month=10/day=04  ...  year=2021  month=10"""month_number=partition_df["month"].str.replace("month=","").astype(int)filter_month=(month_number>=6)&(month_number<=10)azure_query.apply_user_partition_filter(filter_month)azure_query.concatenate_pandas(aggregation_level=['year','month'])#concaténer par moisazure_query.write_concatenated_dataset_csv("my/local_path/",file_prefixe="Wind")# génère plusieurs fichiers# CONCAT DATASET ...# my/local_path/Wind_year=2021_month=06.csv# my/local_path/Wind_year=2021_month=07.csv# ...Exemple : Azure datalake - retravailler les donnéesLorsque l'arborescence des fichiers ne nécessite pas de filtre viaapply_user_partition_filter, il est possible de rechercher les partitions et lire les fichiers csv trouvés dynamiquement en utilisantconcatenate_pandassansread_csv_partition. Les fonctionsselect_columnsetdataframe_transformationpermettent de gérer les dataframes lus de manière dynamique à chaque lecture de fichiers.
Il est possible de différer ces opérations après la lecture des données (après concatenate_pandas). L'optionreturn_copyrenvoie une copie des transformations appliquées en différé.fromvalemo_data_queryimportazure_datalake_gen2,user_credentialsimportpandasaspddatalake_connexion=user_credentials().get_credentials["datalake_1"]basepath="consolidated/pv/metrics/subs/csv/"projets=["Project1","Project2"]annees=["2021"]mois=["09","10"]query_azure=azure_datalake_gen2(credentials_dict,basepath)# Filtragequery_azure.filter_partitionProject(projets)query_azure.filter_partitionYear(annees)query_azure.filter_partitionMonth(mois)#Transformation des données et sélectionselect_col=["projectCode","localTimestamp","activePower","gii"]defdaily_metrics_func(data:pd.DataFrame):"""agrégation des données par jour, par parc"""data["day"]=data["localTimestamp"].astype("datetime64[D]")aggdata=data.drop(columns='localTimestamp').\groupby(["projectCode","day"]).\sum().\rename(columns={"activePower":"activeEnergy","irradiance":"irradianceEnergy"}).\reset_index(drop=False)aggdata[["activeEnergy","irradianceEnergy"]]=aggdata[["activeEnergy","irradianceEnergy"]]/(1000*6)returnaggdata#Les transformations + sélections sont appliquées à la lecture.query_azure.select_columns(select_col)query_azure.dataframe_transformation(daily_metrics_func)#Lecture des fichiersquery_azure.concatenate_pandas(aggregation_level=['project','year',"month"],convert_dtypes=True)query_azure.write_concatenated_dataset_csv("dataset/")