Skip to main content

VALEMO_DATA_QUERY

Outils de requêtes de données sur Python pour Valemo

Fonctionnalités

azure_datalake_gen2

  • Rechercher 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_credentials

  • enregistrer vos informations de connexion et les importer facilement ;

Installation

Installer valemo-data-query via command prompt

pip install --upgrade valemo-data-query

Désinstaller valemo-data-query via command prompt

pip uninstall valemo-data-query

valemo-data-query requiert :

  • 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, suivez ces instructions ;
  • Pour plus d'informations sur la gestion de datalake gen2 de microsoft via Python voir cette page ;
  • Installation à jour de Python 3.8 ou supérieure. Distribution Anaconda recommandé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 connexions

from valemo_data_query import user_credentials

credentials = user_credentials()

# Déclarer une nouvelle connexion 
datalake_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 connexion 
dataconnexion = credentials.get_credentials
datalake_1 = dataconnexion["datalake_1"]

#Supprimer toutes les connexions 
credentials.clear_credentials()

Exemple : Azure datalake - gérer les partitions

Après avoir configurer ses connexions au datalake Azure gen2, la fonction read_csv_partition reconstruit 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érarchies projet=, year= et month=. La méthode statique get_file_partition_df renvoie les partitions des fichiers csv. Un deuxième filtre basé sur ce dataframe est applicable avec apply_user_partition_filter avant la lecture et la concaténation des données via la méthode concatenate_pandas.

from valemo_data_query import azure_datalake_gen2, user_credentials
datalake_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_df

azure_query.read_csv_partition() #recherche de l'arborescence des fichiers csv
partition_df = azure_query.get_file_partition_df
"""
    filepath               partition  ...                              year       month
0   detailed/wind/metr...  project=BAM/year=2021/month=10/day=01  ...  year=2021  month=10
1   detailed/wind/metr...  project=BAM/year=2021/month=10/day=02  ...  year=2021  month=10
2   detailed/wind/metr...  project=BAM/year=2021/month=10/day=03  ...  year=2021  month=10
3   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 mois
azure_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ées

Lorsque l'arborescence des fichiers ne nécessite pas de filtre via apply_user_partition_filter, il est possible de rechercher les partitions et lire les fichiers csv trouvés dynamiquement en utilisant concatenate_pandas sans read_csv_partition. Les fonctions select_columns et dataframe_transformation permettent 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'option return_copy renvoie une copie des transformations appliquées en différé.

from valemo_data_query import azure_datalake_gen2, user_credentials
import pandas as pd
datalake_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)

# Filtrage
query_azure.filter_partitionProject(projets)
query_azure.filter_partitionYear(annees)
query_azure.filter_partitionMonth(mois)


#Transformation des données et sélection

select_col = ["projectCode","localTimestamp","activePower","gii"]

def daily_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)
    return aggdata

#Les transformations + sélections sont appliquées à la lecture. 
query_azure.select_columns(select_col)
query_azure.dataframe_transformation(daily_metrics_func)


#Lecture des fichiers

query_azure.concatenate_pandas(aggregation_level=['project','year',"month"],
                                convert_dtypes=True)

query_azure.write_concatenated_dataset_csv("dataset/")

Metadata

Release files for valemo-data-query 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for valemo-data-query 1.0.1
File Interpreter ABI Platform
valemo_data_query-1.0.1-py3-none-any.whl Python 3 none any Details

Release files / valemo_data_query-1.0.1-py3-none-any.whl

Download URL valemo_data_query-1.0.1-py3-none-any.whl
Size 23.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cb07cd97cca4fe405a6319658a92f6467bd7258b28195625179fc137075c26c9
BLAKE2b-256 checksum
How to use checksums
5b4435f630617d33993c9cd9295d9032c3cff242710caafcf1031a481aa6fc2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.5.0.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

Release history Release notifications | RSS feed

This release

1.0.1 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page