pyspc.data.sacha.data.Sacha

class pyspc.data.sacha.data.Sacha(filename=None)[source]

Bases : Mdb

Classe destinée à traiter les bases SACHA.

filename

Chemin de la base de données

Type:

str

sql

Requête courante au format SQL

Type:

str

__init__(filename=None)[source]

Initialisation de l’instance Sacha.

Paramètres:

filename (str) – Chemin de la base de données

Methods

__init__([filename])

Initialisation de l'instance Sacha.

check_datatypes(datatype)

Contrôle du type de base SACHA.

check_hydrotypes(hydrotype)

Contrôle du référentiel des stations.

check_prcp_src(prcp_src)

Contrôle des sources de données de pluie dans Sacha.

check_sql_return([content, warning])

Contrôler le retour de la requête SQL.

check_varnames(varname)

Contrôle de la grandeur SACHA.

close()

Fermer la connexion à la base de données et le curseur <dbase>.

commit()

Commiter/accepter les enregistrements ajoutés.

connect()

Créer la connexion à la base de données et le curseur pyodbc.

execute([warning])

Exécution de la requête SQL.

from_datetime([dtime, fmt, tolerance])

Convertir un <string> ou un <datetime> au format accepté par Access.

get_datacoverage([nosta, realtime, varname, ...])

Récupérer les informations relatives au contenu en données de la base.

get_datatypes()

Types de base SACHA.

get_hydrotypes()

Référentiels des stations.

get_inventory([dirname])

Recenser le contenu de la base SACHA.

get_locations([hydro_version])

Recenser les lieux existant dans la base SACHA.

get_prcp_src()

Lister les sources de données de pluie dans Sacha.

get_varnames()

Grandeurs dans SACHA.

insert_locations([locations, hydro_version])

Insérer les lieux dans la base SACHA.

read([codes, first_dt, last_dt, realtime, ...])

Lecture de la base Sacha.

rollback()

Annuler les enregistrements ajoutés.

check_datatypes(datatype)[source]

Contrôle du type de base SACHA.

Paramètres:

dataype (str) – Type de base SACHA

Lève:

ValueError – Si le type de base Sacha est incorrect

Voir aussi

Sacha.get_datatypes

check_hydrotypes(hydrotype)[source]

Contrôle du référentiel des stations.

Paramètres:

hydrotype (str) – Référentiel des stations

Lève:

ValueError – Si le référentiel des stations est incorrect

check_prcp_src(prcp_src)[source]

Contrôle des sources de données de pluie dans Sacha.

Paramètres:

prcp_src (str) – Source de données de pluie dans Sacha Valeurs possibles [“gauge”, “radar”]

Lève:

ValueError – Si la source de données de pluie

Voir aussi

Sacha.get_prcp_src

check_sql_return(content=None, warning=False)

Contrôler le retour de la requête SQL.

check_varnames(varname)[source]

Contrôle de la grandeur SACHA.

Paramètres:

varname (str) – Grandeur

Lève:

ValueError – Si la grandeur est incorrecte

Voir aussi

Sacha.get_varnames

close()

Fermer la connexion à la base de données et le curseur <dbase>.

commit()

Commiter/accepter les enregistrements ajoutés.

connect()

Créer la connexion à la base de données et le curseur pyodbc.

Avertissement

Cette méthode nécessite l’import de la bibliothèque tierce pyodbc

execute(warning=True)

Exécution de la requête SQL.

Paramètres:

warning (bool) – Afficher les avertissements. Par défaut: True

Renvoie:

  • list or None – Eléments retenus par la requête SQL

  • .. warning:: Cette méthode nécessite l’import de la – bibliothèque tierce pyodbc

static from_datetime(dtime=None, fmt=None, tolerance=0)

Convertir un <string> ou un <datetime> au format accepté par Access.

  • Convertir les dates du format “str” au format “datetime.datetime”

  • Convertir en réel: mode de stockage des dates dans Access
    • Il faut ajouter 1 jour lors du calcul du flottant car 366j en 1900 (Access) et 365j en 1900 (datetime.datetime)

    • Il faut enlever/ajouter 60 sec. (tolerance) dans le calcul du flottant pour contrer le pb de précision numérique SQL/ACCESS

Paramètres:
  • dtime (datetime ou str) – Date à convertir

  • fmt (str) – Format de la date, si définie comme un str

  • tolerance (int) – Tolérance en secondes. Par défaut: 0

Renvoie:

Valeur réelle correspondant à la date et à la tolérance

Type renvoyé:

float

get_datacoverage(nosta=None, realtime=False, varname=None, prcp_src=None)[source]

Récupérer les informations relatives au contenu en données de la base.

Paramètres:
  • nosta (int) – Clé unique de la station. Voir Sacha.get_locations

  • realtime (bool) – Données temps-réel (True) ou historique (False). Défaut: False

  • varname (str) – Grandeur

  • prcp_src (str) – Origine des données pluviométriques

Renvoie:

Couverture des données: valeur minimale, valeur maximale, compteur date minimale, date maximale, taux de valeurs manquantes

Type renvoyé:

dict

Voir aussi

Sacha.get_locations

Exemples

>>> from pyspc.data.sacha import Sacha
>>> f = 'data/io/dbase/sacha_montpezat.mdb'
>>> reader = Sacha(filename=f)
>>> coverage = reader.get_datacoverage(nosta=6, realtime=False,
...                                    varname='PH', prcp_src='gauge')
>>> coverage
[{'end': datetime.datetime(2008, 11, 5, 0, 0),
  'length': 145,
  'length_ratio': 1.0,
  'missing_length': 0,
  'missing_ratio': 0.0,
  'start': datetime.datetime(2008, 10, 30, 0, 0),
  'value_max': 16.0,
  'value_min': 0.0}]
>>> coverage = reader.get_datacoverage(nosta=6, realtime=False,
...                                    varname='TH')
>>> coverage
[{'end': None,
  'length': 0,
  'length_ratio': nan,
  'missing_length': nan,
  'missing_ratio': nan,
  'start': None,
  'value_max': nan,
  'value_min': nan}]
classmethod get_datatypes()[source]

Types de base SACHA.

Renvoie:

Types de base SACHA

Type renvoyé:

list

classmethod get_hydrotypes()[source]

Référentiels des stations.

Renvoie:

Référentiels des stations

Type renvoyé:

list

get_inventory(dirname=None)[source]

Recenser le contenu de la base SACHA.

Paramètres:

dirname (str) – Répertoire de destination des fichiers csv exportés. Si non défini, la méthode renvoie les informations sous la forme de dictionnaires Si défini, la méthode renvoie la liste des fichiers csv écrits

Renvoie:

  • tuple – Si dirname n’est pas défini: (locations, datacoverages)

  • list – Si dirname est défini : fichiers csv écrits

Exemples

>>> from pyspc.data.sacha import Sacha
>>> f = 'data/io/dbase/sacha_montpezat.mdb'
>>> reader = Sacha(filename=f)
>>> filenames = reader.get_inventory(dirname='inventory')
>>> for x in filenames:
...     print(x)
inventory/sacha_montpezat_locs_hydro2.csv
inventory/sacha_montpezat_locs_hydro3.csv
inventory/sacha_montpezat_HH_donnees_treel.csv
inventory/sacha_montpezat_PH-gauge_donnees_treel.csv
inventory/sacha_montpezat_PH-radar_donnees_treel.csv
inventory/sacha_montpezat_QH_donnees_treel.csv
inventory/sacha_montpezat_TH_donnees_treel.csv
inventory/sacha_montpezat_HH_donnees.csv
inventory/sacha_montpezat_PH-gauge_donnees.csv
inventory/sacha_montpezat_PH-radar_donnees.csv
inventory/sacha_montpezat_QH_donnees.csv
inventory/sacha_montpezat_TH_donnees.csv
get_locations(hydro_version='hydro2')[source]

Recenser les lieux existant dans la base SACHA.

Paramètres:

hydro_version (str) – Référentiel hydrométrique parmi [“hydro2”, “hydro3”]. Par défaut: “hydro2”

Renvoie:

locations – Dictionnaire des méta-données des lieux

Type renvoyé:

dict

Exemples

>>> from pyspc.data.sacha import Sacha
>>> f = 'data/io/dbase/sacha_montpezat.mdb'
>>> reader = Sacha(filename=f)
>>> locs = reader.get_locations()
>>> locs
{1: {'altitude': None,
     'bv': None,
     'code_bareme': None,
     'codeh': None,
     'codep': 'K0009910',
     'codeq': None,
     'codet': None,
     'comment': None,
     'courdo': 'Loire Amont',
     'nom': 'Sainte-Eulalie',
     'nosta': 1,
     'xlmabert': None,
     'ylambert': None},
 2: {'altitude': None,
     'bv': None,
     'code_bareme': 'K0010020',
     'codeh': 'K0010020',
     'codep': None,
     'codeq': 'K0010020',
     'codet': None,
     'comment': None,
     'courdo': 'Loire',
     'nom': 'Barrage-de-la-Palisse',
     'nosta': 2,
     'xlmabert': None,
     'ylambert': None},
 3: {'altitude': None,
     'bv': None,
     'code_bareme': 'K0018720',
     'codeh': 'K0018720',
     'codep': None,
     'codeq': 'K0018720',
     'codet': None,
     'comment': None,
     'courdo': 'Loire',
     'nom': 'Barrage-du-Peyron',
     'nosta': 3,
     'xlmabert': None,
     'ylambert': None},
 4: {'altitude': None,
     'bv': None,
     'code_bareme': None,
     'codeh': None,
     'codep': 'K0029910',
     'codeq': None,
     'codet': None,
     'comment': None,
     'courdo': 'Loire Amont',
     'nom': "Lac d'Issarlès",
     'nosta': 4,
     'xlmabert': None,
     'ylambert': None},
 5: {'altitude': None,
     'bv': 229.0,
     'code_bareme': 'K0030020',
     'codeh': 'K0030020',
     'codep': 'K0030020',
     'codeq': 'K0030020',
     'codet': None,
     'comment': None,
     'courdo': 'Loire',
     'nom': 'Pont-de-la-Borie',
     'nosta': 5,
     'xlmabert': None,
     'ylambert': None},
 6: {'altitude': None,
     'bv': 432.0,
     'code_bareme': None,
     'codeh': 'K0100020',
     'codep': 'K0100020',
     'codeq': 'K0100020',
     'codet': None,
     'comment': 'Périodes de retour des seuils réglementaires',
     'courdo': 'Loire',
     'nom': 'Goudet',
     'nosta': 6,
     'xlmabert': None,
     'ylambert': None},
 7: {'altitude': None,
     'bv': None,
     'code_bareme': None,
     'codeh': None,
     'codep': '07154005',
     'codeq': None,
     'codet': '07154005',
     'comment': None,
     'courdo': 'Haut Bassin Loire',
     'nom': "Mazan-L'Abbaye MF",
     'nosta': 7,
     'xlmabert': None,
     'ylambert': None}}
>>> locs = reader.get_locations(hydro_version='hydro3')
>>> locs
{'1_2_07235005': {'nature': 2,
                  'nosta': 1,
                  'ordre': 0,
                  'tr': 1,
                  'valeur': '07235005'},
 '2_0_K001002010': {'nature': 0,
                    'nosta': 2,
                    'ordre': 0,
                    'tr': 1,
                    'valeur': 'K001002010'},
 '2_1_K001002010': {'nature': 1,
                    'nosta': 2,
                    'ordre': 0,
                    'tr': 1,
                    'valeur': 'K001002010'},
 '3_0_K001872010': {'nature': 0,
                    'nosta': 3,
                    'ordre': 0,
                    'tr': 1,
                    'valeur': 'K001872010'},
 '3_1_K001872010': {'nature': 1,
                    'nosta': 3,
                    'ordre': 0,
                    'tr': 1,
                    'valeur': 'K001872010'},
 '4_2_07119002': {'nature': 2,
                  'nosta': 4,
                  'ordre': 0,
                  'tr': 1,
                  'valeur': '07119002'},
 '5_0_K003002010': {'nature': 0,
                    'nosta': 5,
                    'ordre': 0,
                    'tr': 1,
                    'valeur': 'K003002010'},
 '5_1_K003002010': {'nature': 1,
                    'nosta': 5,
                    'ordre': 0,
                    'tr': 1,
                    'valeur': 'K003002010'},
 '6_0_K010002010': {'nature': 0,
                    'nosta': 6,
                    'ordre': 0,
                    'tr': 1,
                    'valeur': 'K010002010'},
 '6_1_K010002010': {'nature': 1,
                    'nosta': 6,
                    'ordre': 0,
                    'tr': 1,
                    'valeur': 'K010002010'},
 '6_1_K010002011': {'nature': 1,
                    'nosta': 6,
                    'ordre': 1,
                    'tr': 0,
                    'valeur': 'K010002011'},
 '6_2_43101002': {'nature': 2,
                  'nosta': 6,
                  'ordre': 0,
                  'tr': 1,
                  'valeur': '43101002'},
 '7_2_07154005': {'nature': 2,
                  'nosta': 7,
                  'ordre': 0,
                  'tr': 1,
                  'valeur': '07154005'}}
classmethod get_prcp_src()[source]

Lister les sources de données de pluie dans Sacha.

Renvoie:

Sources de données de pluie dans Sacha

Type renvoyé:

list

classmethod get_varnames()[source]

Grandeurs dans SACHA.

Renvoie:

Grandeurs dans SACHA

Type renvoyé:

list

insert_locations(locations=None, hydro_version='hydro2')[source]

Insérer les lieux dans la base SACHA.

Paramètres:
  • locations (dict) – Méta-données des lieux

  • hydro_version (str) – Référentiel hydrométrique parmi [“hydro2”, “hydro3”]. Par défaut: “hydro2”

Renvoie:

rows – Dictionnaire de correspondance entre les clés de <locations> et les clés primaires

Type renvoyé:

dict

Voir aussi

Sacha.get_locations

read(codes=None, first_dt=None, last_dt=None, realtime=False, varname=None, prcp_src=None, hydro_version='hydro3', strict=True, warning=False)[source]

Lecture de la base Sacha.

Paramètres:
  • codes (list) – Liste des identifiants des stations

  • first_dt (datetime) – Premier pas de temps des données

  • last_dt (datetime) – Dernier pas de temps des données

  • realtime (bool) – Données temps-réel (True) ou historique (False). Défaut: False

  • varname (str) – Grandeur

  • prcp_src (str) – Origine des données pluviométriques

  • hydro_version (str) – Référentiel hydrométrique parmi [“hydro2”, “hydro3”]

  • strict (bool) – Codification stricte selon la norme Hydro3. Par défaut: True

  • warning (bool) – Afficher les avertissements ? Par défaut: False

Renvoie:

Tableau des données

Type renvoyé:

pnd.DataFrame

Exemples

>>> from pyspc.data.sacha import Sacha
>>> f = 'data/io/dbase/sacha_montpezat.mdb'
>>> reader = Sacha(filename=f)

Extraction des données historiques, dans le référentiel Hydro2

>>> content = reader.read(
...     codes=['K0030020', 'K0100020'],
...     varname='QH',
...     first_dt=dt(2008, 11, 1, 23),
...     last_dt=dt(2008, 11, 2, 2),
...     realtime=False,
...     hydro_version='hydro2'
... )
>>> content
                    K0030020 K0100020
                          QH       QH
2008-11-01 23:00:00    206.0    222.0
2008-11-02 00:00:00    288.0    195.0
2008-11-02 01:00:00    280.0    677.0
2008-11-02 02:00:00    137.0    771.0
rollback()

Annuler les enregistrements ajoutés.