Skip to main content

No project description provided

Project description

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/")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

valemo_data_query-1.0.1-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

File details

Details for the file valemo_data_query-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: valemo_data_query-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 23.4 kB
  • Tags: Python 3
  • Uploaded using 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

File hashes

Hashes for valemo_data_query-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cb07cd97cca4fe405a6319658a92f6467bd7258b28195625179fc137075c26c9
MD5 e2bac3dae8b895ce29471e56c1ab64ce
BLAKE2b-256 5b4435f630617d33993c9cd9295d9032c3cff242710caafcf1031a481aa6fc2a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page