123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # -*- coding: utf-8 -*-
- # #
- # refpypmsi - Implémentation en python de refpmsi
- # @https://github.com/denisGustin/refpmsi refpmsi est un package crée par denisGustin
- # Ce package est sous license GPL
- # #
- import os
- import pandas as pd
- chemin_module = os.path.dirname(os.path.abspath(__file__))
- def refpypmsi (referentiel = '', periodepmsi = '', ignorer_periode_manquante = True):
- '''
- referentiel - fonction de récupération d'un référenciel
- inputs :
- referentiel, str : nom du référentiel à extraire, la liste des référentiels disponibles est accessible par la commande liste_refpypmsi
- periodepmsi, int : année du référentiel, si l'année n'existe pas où le référentiel n'est pas daté, l'année est ignoré et l'ensemble des données sont retournés. Ce comportement peut être modifié à l'aide de l'option ignorer_periode_manquante.
- ignorer_periode_manquante, boolean : si False, une erreur est renvoyé lorsque l'année sélectionnée n'existe pas, autrement, aucune l'erreur est ignoré et l'ensemble des données disponibles sont renvoyés.
- output :
- Pandas Dataframe : dataframe contenant le référentiel sélectionné
- '''
-
- chemin_refentiel = "/".join([
- chemin_module,
- 'inst/referentiels',
- referentiel+".json.gz"
- ])
- if (os.path.exists(chemin_refentiel) == False):
- # Déclenchement de l'erreur
- if referentiel != 'liste_refpmsi':
- # Referentiels attendus
- liste_referentiels = liste_refpypmsi()
-
- raise Exception("Référentiel invalide. Devrait être l'un des suivants : {}".format(
- ", ".join(liste_referentiels)
- ))
- else:
- raise Exception("Liste de référentiels inexistante, essayez de ré-installer le package.")
- # Chargement du référentiel
- donnees_referentiel = pd.read_json(chemin_refentiel)
- # Filtre par année quand nécessaire
- if (periodepmsi != ''):
- if type(periodepmsi) != type(list()):
- periodepmsi = [periodepmsi] # On s'assure que c'est une liste
- periodepmsi = [int(x) for x in periodepmsi] # On s'assure que c'est du int
- if (('anpmsi' not in donnees_referentiel.columns) or (sum(donnees_referentiel["anpmsi"].isin(periodepmsi)) > 0)):
- donnees_referentiel = donnees_referentiel[donnees_referentiel["anpmsi"].isin(periodepmsi)] \
- .reset_index(drop = True)
- else:
- if ignorer_periode_manquante == False:
- raise Exception("Année de référentiel invalide.")
- # On retourne le référentiel
- return(donnees_referentiel)
- def liste_refpypmsi():
- '''
- liste_refpypmsi - Fonction qui renvoie la liste des référentiels existants
- output :
- Pandas Dataframe : dataframe contenant la liste des référentiels existants
- '''
-
- liste_referentiels = refpypmsi("liste_refpmsi")
- return(liste_referentiels)
- def refpmsi(referentiel = '', periodepmsi = '', ignorer_periode_manquante = True, chemin = ''):
- return refpypmsi(referentiel=referentiel, periodepmsi=periodepmsi, ignorer_periode_manquante=ignorer_periode_manquante)
- def liste_refpmsi():
- return liste_refpypmsi()
|