refpypmsi-checkpoint.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # -*- coding: utf-8 -*-
  2. # #
  3. # refpypmsi - Implémentation en python de refpmsi
  4. # @https://github.com/denisGustin/refpmsi refpmsi est un package crée par denisGustin
  5. # Ce package est sous license GPL
  6. # #
  7. import os
  8. import pandas as pd
  9. chemin_module = os.path.dirname(os.path.abspath(__file__))
  10. def refpypmsi (referentiel = '', periodepmsi = '', ignorer_periode_manquante = True):
  11. '''
  12. referentiel - fonction de récupération d'un référenciel
  13. inputs :
  14. referentiel, str : nom du référentiel à extraire, la liste des référentiels disponibles est accessible par la commande liste_refpypmsi
  15. 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.
  16. 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.
  17. output :
  18. Pandas Dataframe : dataframe contenant le référentiel sélectionné
  19. '''
  20. chemin_refentiel = "/".join([
  21. chemin_module,
  22. 'inst/referentiels',
  23. referentiel+".json.gz"
  24. ])
  25. if (os.path.exists(chemin_refentiel) == False):
  26. # Déclenchement de l'erreur
  27. if referentiel != 'liste_refpmsi':
  28. # Referentiels attendus
  29. liste_referentiels = liste_refpypmsi()
  30. raise Exception("Référentiel invalide. Devrait être l'un des suivants : {}".format(
  31. ", ".join(liste_referentiels)
  32. ))
  33. else:
  34. raise Exception("Liste de référentiels inexistante, essayez de ré-installer le package.")
  35. # Chargement du référentiel
  36. donnees_referentiel = pd.read_json(chemin_refentiel)
  37. # Filtre par année quand nécessaire
  38. if (periodepmsi != ''):
  39. if type(periodepmsi) != type(list()):
  40. periodepmsi = [periodepmsi] # On s'assure que c'est une liste
  41. periodepmsi = [int(x) for x in periodepmsi] # On s'assure que c'est du int
  42. if (('anpmsi' not in donnees_referentiel.columns) or (sum(donnees_referentiel["anpmsi"].isin(periodepmsi)) > 0)):
  43. donnees_referentiel = donnees_referentiel[donnees_referentiel["anpmsi"].isin(periodepmsi)] \
  44. .reset_index(drop = True)
  45. else:
  46. if ignorer_periode_manquante == False:
  47. raise Exception("Année de référentiel invalide.")
  48. # On retourne le référentiel
  49. return(donnees_referentiel)
  50. def liste_refpypmsi():
  51. '''
  52. liste_refpypmsi - Fonction qui renvoie la liste des référentiels existants
  53. output :
  54. Pandas Dataframe : dataframe contenant la liste des référentiels existants
  55. '''
  56. liste_referentiels = refpypmsi("liste_refpmsi")
  57. return(liste_referentiels)
  58. def refpmsi(referentiel = '', periodepmsi = '', ignorer_periode_manquante = True, chemin = ''):
  59. return refpypmsi(referentiel=referentiel, periodepmsi=periodepmsi, ignorer_periode_manquante=ignorer_periode_manquante)
  60. def liste_refpmsi():
  61. return liste_refpypmsi()