pyspc.core.serie.Serie
- class pyspc.core.serie.Serie(datval, code=None, provider=None, varname=None, fill=True, missing=None, timezone=<UTC>, strict=False, warning=True)[source]
Bases :
BasicSerie,BinaryOperator,Combining,Computation,Copy,Event,Modeling,Plotting,Reindexing,Scaling,TimeSerieStructure d’une Série de données
- data_frame
Série temporelle
- Type:
pnd.DataFrame
- code
Lieu de la série
- Type:
str
- varname
Grandeur de la série
- Type:
str
- spc_varname
Grandeur de la série selon la convention de pyspc
- Type:
str
- long_varname
Intitulé de la grandeur
- Type:
str
- timestep
Pas de temps de la grandeur
- Type:
timedelta
- timeunits
Unité de temps de la grandeur
- Type:
str
- units
Unité de la grandeur
- Type:
str
- dtfmt
Format de la date
- Type:
str
- np_dtype
Type de données de la grandeur
- Type:
str
- missing
Valeur manquante “missing”
- Type:
float/int
- timezone
Fuseau horaire
- Type:
pytz
- warning
Afficher les avertissements au lieu de lever des erreurs défaut: True
- Type:
bool
- firstdt
Première date de la série de données
- Type:
datetime
- lastdt
Dernière date de la série de données
- Type:
datetime
- length
Profondeur temporelle de la série de données
- Type:
int
Voir aussi
pyspc.core.common.BasicSerie,pyspc.core.parameter.Parameter,pyspc.core.location.Location,pyspc.core.provider.Provider- __init__(datval, code=None, provider=None, varname=None, fill=True, missing=None, timezone=<UTC>, strict=False, warning=True)[source]
Initialiser l’instance de la classe Serie
- Paramètres:
datval (list, pnd.DataFrame) – Ensemble de dates et de valeurs - [“aaaamm[jj[hh[MM]]]”, “valeur”] avec “.” comme sép. décimal - [datetime(aaaa, mm, jj, hh, MM), valeur] - Série de données sous forme de DataFrame
code (str) – Lieu de la série
provider (str, Provider) – Producteur de la série
varname (str, Parameter) – Grandeur de la série
fill (bool) – Etendre la période et remplir avec valeur manquante ? défaut: True
missing (float/int) – Valeur manquante “missing”
overwrite (bool) – Remplacer les données existantes ?
timezone (pytz) – Fuseau horaire
strict (bool) – Contrôler la cohérence entre le pas de temps des données et le pas de temps de la grandeur. Défaut: False
warning (bool) – Afficher les avertissements au lieu de lever des erreurs défaut: True
Methods
__init__(datval[, code, provider, varname, ...])Initialiser l'instance de la classe Serie
above_threshold([threshold, inplace])Déclarer les valeurs inférieures au seuil comme étant manquantes
apply_RatingCurves([curves, tocode, ...])Appliquer les courbes de tarage à la série
apply_Reservoir([reservoir, tablename, ...])Appliquer le Z0 et un bareme de réservoir et créer une collections Series à partir de la série courante
apply_ReservoirTable([table, assoc, sim])Appliquer un bareme de réservoir et créer une collections Series à partir de la série courante
apply_ReservoirZ0([reservoir])Appliquer le Z0 de réservoir
below_threshold([threshold, inplace])Déclarer les valeurs supérieures au seuil comme étant manquantes
between_dates([first_dtime, last_dtime, inplace])Sous-echantillonner <self> entre les dates <first_dtime> et <last_dtime>.
comp(other[, fromfile, tofile, media])Comparer 2 instances Serie
copy()Copier 'superficiellement' l'instance <Serie>.
copy_year([src, year, start, end])Dupliquer le bloc annuel year de la source src pour compléter les données de la receveuse self entre les dates start et end
Déterminer le nombre de valeurs manquantes dans la série
cumsum([skipna])Série des sommes cumulées
deepcopy()Copier 'profondément' l'instance <Serie>.
describe([freqs])Déterminer les statistiques descriptives de la série
downscale([toparam, dayhour])Désagréger la série à un pas de temps inférieur
etp_oudin([latitude, timestep])Modélisation de l'ETP par Oudin à partir de série de température et d'une valeur de latitude
events([threshold, engine, prominence, ...])Sélectionner les événements définis par un seuil
events_basic([threshold, filename])Sélectionner les événements définis par un seuil - Version Basic
events_scipy([threshold, prominence, width, ...])Sélectionner les événements définis par un seuil - Version scipy
fill_constant([constant, inplace])Remplacer les valeurs manquantes self.missing par une valeur constante constant Si l'option inplace est définie à False, alors cette méthode crée une nouvelle instance Serie
fill_linear_interpolation([inplace])Remplacer les valeurs manquantes self.missing par une interpolation linéaire Si l'option inplace est définie à False, alors cette méthode crée une nouvelle instance Serie
find_annual_max([to_sample, exclusion_threshold])Lister les maximas annuels Année hydrologique : 01/09/aaaa-1 - 31/08/aaaa
find_annual_min([to_sample, exclusion_threshold])Lister les minimas annuels Année civile : 01/01/aaaa - 31/12/aaaa
Renvoyer la date de la première valeur valide (i.e. != np.nan).
Renvoyer la date de la dernière valeur valide (i.e. != np.nan).
max()Renvoyer le maximum de la série et la date associée
min()Renvoyer le minimum de la série et la date associée
nearlyequalscale([toparam, strict])Ré-échantilloner une série à un pas de temps proche
plot([dirname, fmt])Imprimer la série de données contenue dans <self.data-frame> dans un fichier image
regime([groupby, freqs, dayhour, strict, ...])Calculer le régime de la chronique.
Définir la similarité du régime hydro avec les références Sauquet.
Interpoler une série d'un pas de temps irrégulier à un pas de temps régulier
reindex()Re-indexer pour remplir les pas de temps manquants
set_timezone([timezone])Appliquer un nouveau fuseau horaire au contenu de l'instance de la classe Serie
shift([periods, freq, inplace])Appliquer la méthode de pnd.DataFrame.shift à l'instance Serie
sim2fcst([ref, first_dtime, last_dtime, ...])Convertir une simulation en prévision avec prise en compte de l'erreur à l'instant de prévision qui décroit linéairement avec l'échéance de prévision
socose()Déterminer les paramètrs D et RXD du modèle SOCOSE.
split([value, method])Découper la série en une collection de séries.
Standardiser la chronique par normalisation selon la valeur max.
stripna()Renvoyer une nouvelle instance sans les np.nan en début et fin de série
subhourlyscale([ts, how, howinterp])Interpoler une série d'un pas de temps horaire à un pas de temps infra-horaire
Déterminer le centre de masse temporel de la série
timelag([tlag, inplace])Décaler la série de données de l'instance Serie : - tlag Si tlag est une instance de td, - tlag*self.timestep Sinon Si l'option inplace est définie à False, alors cette méthode crée une nouvelle instance Serie
update([other, overwrite, strict])Mettre à jour de l'instance Serie par le contenu d'une autre instance Serie
upscale([toparam, dayhour, strict])Agréger/moyenner la série à un pas de temps supérieur
Attributes
Identifiant de la série.
Contenu temporel de la série
Contenu temporel de la série.
Format du datetime.
Données continues
Première date de la série de données
Dernière date de la série de données
Profondeur temporelle de la série de données
Lieu de la série.
Intitulé de la grandeur.
Valeur manquante.
Format des données dans les tableaux numpy et pandas.
Grandeur de la série.
Nom du fournisseur de la donnée.
Grandeur de la série selon la convention de pyspc.
Pas de temps.
Unité de temps.
Fuseau horaire.
Unité de la variable.
Grandeur de la série.
Afficher les avertissements
- above_threshold(threshold=None, inplace=False)
Déclarer les valeurs inférieures au seuil comme étant manquantes
- Paramètres:
threshold (int, float) – Seuil à appliquer
inplace (bool) – Traiter en place (True) ou renvoyer une nouvelle instance (False) défaut: False
- Renvoie:
Nouvelle série de données, si inplace=False
- Type renvoyé:
- apply_RatingCurves(curves=None, tocode=None, extrapolation=False)
Appliquer les courbes de tarage à la série
- Paramètres:
curves (pyspc.core.ratingcurve.RatingCurves) – Courbes de tarage et de correction
tocode (str) –
- Code de la série finale
si série de hauteurs, contient le code de la station
si série de débits, contient le code du site
extrapolation (bool) – Autoriser les conversions hors plage de validité des courbes de tarage. Défaut: False
- apply_Reservoir(reservoir=None, tablename=None, assoc=None, sim=False)
Appliquer le Z0 et un bareme de réservoir et créer une collections Series à partir de la série courante
- Paramètres:
reservoir (pyspc.core.reservoir.Reservoir) – Instance de reservoir.Reservoir
tablename (str) – Nom du bareme
assoc (dict) – Correspondance des colonnes de la table
sim (bool) – Définir les séries calculées comme étant des simulations. Défaut: False. Si True, le nom de la simulation est donné par reservoir.name
- Renvoie:
Collection de séries converties par le réservoir et son barème
- Type renvoyé:
- apply_ReservoirTable(table=None, assoc=None, sim=False)
Appliquer un bareme de réservoir et créer une collections Series à partir de la série courante
- Paramètres:
tablename (pyspc.core.reservoir.Table) – Bareme du réservoir
assoc (dict) – Correspondance des colonnes de la table
sim (bool) – Définir les séries calculées comme étant des simulations. Défaut: False. Si True, le nom de la simulation est donné par table.name
- Renvoie:
Collection de séries converties par le barème
- Type renvoyé:
- apply_ReservoirZ0(reservoir=None)
Appliquer le Z0 de réservoir
- Paramètres:
reservoir (pyspc.core.reservoir.Reservoir) – Instance de reservoir.Reservoir
- Renvoie:
Série de données converties par l’application du Z0 du réservoir
- Type renvoyé:
pyspc.core.series.Serie
- below_threshold(threshold=None, inplace=False)
Déclarer les valeurs supérieures au seuil comme étant manquantes
- Paramètres:
threshold (int, float) – Seuil à appliquer
inplace (bool) – Traiter en place (True) ou renvoyer une nouvelle instance (False) défaut: False
- Renvoie:
Nouvelle série de données, si inplace=False
- Type renvoyé:
- between_dates(first_dtime=None, last_dtime=None, inplace=False)
Sous-echantillonner <self> entre les dates <first_dtime> et <last_dtime>. Si l’option <inplace> est définie à False, alors cette méthode crée une nouvelle instance <Serie>
- Paramètres:
first_dtime (datetime) – Première date à conserver
last_dtime (datetime) – Dernière date à conserver
inplace (bool) – Traiter en place (True) ou renvoyer une nouvelle instance (False) défaut: False
- Renvoie:
pyspc.core.serie.Serie – Nouvelle série de données, si inplace=False
.. seealso:: pandas.DataFrame.index.shift
- property code
Identifiant de la série.
- comp(other, fromfile=None, tofile=None, media='screen')
Comparer 2 instances Serie
- Paramètres:
other (pyspc.core.serie.Serie) – Séries de données de référence
fromfile (str) – Nom de la référence. Si non défini, prend la valeur other.code
tofile (str) – Nom de la série courante. Si non défini, prend la valeur self.code
media (str, io.IOBase, None) –
“screen” pour impression écran (défaut)
si io.IOBase : Objet fichier, export de la comparaison.
si None : ni impression ni export, la comparaison est retournée
- Renvoie:
lines – Liste des valeurs comparées, si media = None
- Type renvoyé:
list
- copy()
Copier “superficiellement” l’instance <Serie>. Une modification dans la copie modifiera aussi l’originale! Si vous voulez une copie sans interaction, il faut utiliser self.deepcopy()
- Renvoie:
Nouvelle série de données, si inplace=False
- Type renvoyé:
- copy_year(src=None, year=None, start=None, end=None)
Dupliquer le bloc annuel year de la source src pour compléter les données de la receveuse self entre les dates start et end
- Paramètres:
src (pyspc.core.serie.Serie) – Séries de données de référence
year (int) – Année à dupliquer
start (datetime) – Premier pas de temps ciblé
end (datetime) – Dernier pas de temps ciblé
- counter_missing()
Déterminer le nombre de valeurs manquantes dans la série
- Renvoie:
Nombre de valeurs manquantes dans la série de données
- Type renvoyé:
int
- cumsum(skipna=True)
Série des sommes cumulées
- Paramètres:
skipna (bool) – Ignorer les valeurs manquantes
- Renvoie:
pyspc.core.serie.Serie – Série des valeurs cumulées
.. seealso:: pandas.DataFrame.cumsum
- property data_frame
Contenu temporel de la série
- deepcopy()
Copier “profondément” l’instance <Serie>. Une modification dans la copie ne modifiera pas l’originale!
- Renvoie:
Nouvelle série de données, si inplace=False
- Type renvoyé:
- describe(freqs=None)
Déterminer les statistiques descriptives de la série
- Paramètres:
freqs (list) – Liste des fréquences, de 0 à 100
- Renvoie:
pnd.DataFrame – Statistiques descriptives
.. seealso:: pandas.DataFrame.describe
- property df
Contenu temporel de la série. Alias de self.data_frame
- downscale(toparam=None, dayhour=6)
Désagréger la série à un pas de temps inférieur
- Paramètres:
toparam (Parameter) – Paramètre correspond au pas de temps ciblé
dayhour (int) – Heure du début de la journée. Nécessaire si la source est un pas de temps journalier. Par défaut: 6. Valeurs admises: [0, 6]
- Renvoie:
Série des valeurs désagrégées
- Type renvoyé:
- property dtfmt
Format du datetime.
- etp_oudin(latitude=None, timestep=None)
Modélisation de l’ETP par Oudin à partir de série de température et d’une valeur de latitude
- Paramètres:
latitude (float) – Latitude de la série
timestep (timedelta) – Pas de temps de la série d’ETP calculée (horaire ou journalier). Si non défini, la série d’ETP sera au même pas de temps que la série de température, si celui-ci est horaire ou journalier
- Renvoie:
Série des valeurs d’ETP
- Type renvoyé:
- Lève:
ValueError – si la série n’est pas une série de température
- events(threshold=None, engine='basic', prominence=None, width=None, before=None, after=None, filename=None)
Sélectionner les événements définis par un seuil
- Paramètres:
engine (str) –
Algorithme à utiliser
’basic” : événement défini par un seuil uniquement. Pas de prise en compte explicite des montées/décrues. Valeur par défaut pour une raison de compatibilité avec les versions antérieures
’scipy” : application de scipy.signal.find_peaks
threshold (float) – Valeur minimale d’une pointe
prominence (float) – Ecart d’amplitude minimal entre deux pointes
width (float) – Ecart temporel minimal entre deux pointes. En pas de temps, i.e. indice dans la liste des valeurs de la série
before (timedelta) – Durée maximale avant la pointe
after (timedelta) – Durée maximale après la pointe
filename (str) – Nom du fichier image. Si défini, imprime la série et ses événements dans une image
- Renvoie:
events –
- Dictionnaire des événements
clé : datetime (jour du maxi)
- valeurdict
Informations sur l’événement
’start” : date de début
’end” : date de fin
’dtmax” : date de la valeur maximale
’max” : valeur maximale
’name” : nom de l’événement (jour du max en str)
None sinon
- Type renvoyé:
dict
- events_basic(threshold=None, filename=None)
Sélectionner les événements définis par un seuil - Version Basic
- Paramètres:
threshold (float) – Valeur minimale d’une pointe
filename (str) – Nom du fichier image. Si défini, imprime la série et ses événements dans une image
- Renvoie:
events –
- Dictionnaire des événements
clé : datetime (jour du maxi)
- valeurdict
Informations sur l’événement - “start” : date de début - “end” : date de fin - “dtmax” : date de la valeur maximale - “max” : valeur maximale - “name” : nom de l’événement (jour du max en str) - None sinon
- Type renvoyé:
dict
- events_scipy(threshold=None, prominence=None, width=None, before=None, after=None, filename=None)
Sélectionner les événements définis par un seuil - Version scipy
- Paramètres:
threshold (float) – Valeur minimale d’une pointe
prominence (float) – Ecart d’amplitude minimal entre deux pointes
width (float) – Ecart temporel minimal entre deux pointes. En pas de temps, i.e. indice dans la liste des valeurs de la série
before (timedelta) – Durée maximale avant la pointe
after (timedelta) – Durée maximale après la pointe
filename (str) – Nom du fichier image. Si défini, imprime la série et ses événements dans une image
- Renvoie:
events (dict) –
- Dictionnaire des événements
clé : datetime (jour du maxi)
- valeurdict
Informations sur l’événement - “start” : date de début - “end” : date de fin - “dtmax” : date de la valeur maximale - “max” : valeur maximale - “name” : nom de l’événement (jour du max en str) - None sinon
.. warning:: Cette méthode nécessite l’import de la
bibliothèque tierce scipy.signal
- property fill
Données continues
- fill_constant(constant=None, inplace=False)
Remplacer les valeurs manquantes self.missing par une valeur constante constant Si l’option inplace est définie à False, alors cette méthode crée une nouvelle instance Serie
- Paramètres:
constant (int, float) – Valeur constante
inplace (bool) – Traiter en place (True) ou renvoyer une nouvelle instance (False) défaut: False
- Renvoie:
Nouvelle série de données, si inplace=False
- Type renvoyé:
- fill_linear_interpolation(inplace=False)
Remplacer les valeurs manquantes self.missing par une interpolation linéaire Si l’option inplace est définie à False, alors cette méthode crée une nouvelle instance Serie
- Paramètres:
inplace (bool) – Traiter en place (True) ou renvoyer une nouvelle instance (False) défaut: False
- Renvoie:
Nouvelle série de données, si inplace=False
- Type renvoyé:
- find_annual_max(to_sample=False, exclusion_threshold=None)
Lister les maximas annuels Année hydrologique : 01/09/aaaa-1 - 31/08/aaaa
- Paramètres:
to_sample (bool) – Exporter en tant que pyspc.core.samples.Sample ? Par défaut: False
exclusion_threshold (float) – Si “to_sample” est True, ce seuil permet de définir les exclusions. Si “pmv” >= seuil, alors la valeur est exclue.
- Renvoie:
- dict – Dictionnaire des maximas annuels.
- pyspc.core.samples.Sample – Échantillon des maximas annuels
Notes
- Si le retour est un dictionnaire, il est structuré ainsi :
clé : année
valeur : {“max”: float, “maxdt”: datetime, “pmv”: float}
avec - max : valeur du max - maxdt : instant du max - pmv : %age de valeurs manquantes dans l’année
- find_annual_min(to_sample=False, exclusion_threshold=None)
Lister les minimas annuels Année civile : 01/01/aaaa - 31/12/aaaa
- Paramètres:
to_sample (bool) – Exporter en tant que pyspc.core.samples.Sample ? Par défaut: False
exclusion_threshold (float) – Si “to_sample” est True, ce seuil permet de définir les exclusions. Si “pmv” >= seuil, alors la valeur est exclue.
- Renvoie:
- dict – Dictionnaire des minimas annuels.
- pyspc.core.samples.Sample – Échantillon des minimas annuels.
Notes
- Si le retour est un dictionnaire, il est structuré ainsi :
clé : année
valeur : {“min”: float, “mindt”: datetime, “pmv”: float}
avec - min : valeur du min - mindt : instant du min - pmv : %age de valeurs manquantes dans l’année
- first_valid_index()
Renvoyer la date de la première valeur valide (i.e. != np.nan)
- Renvoie:
Date de la première valeur valide
- Type renvoyé:
timestamp, datetime
- property firstdt
Première date de la série de données
- last_valid_index()
Renvoyer la date de la dernière valeur valide (i.e. != np.nan)
- Renvoie:
Date de la dernière valeur valide
- Type renvoyé:
timestamp, datetime
- property lastdt
Dernière date de la série de données
- property length
Profondeur temporelle de la série de données
- property location
Lieu de la série.
- property long_varname
Intitulé de la grandeur.
- max()
Renvoyer le maximum de la série et la date associée
- Renvoie:
float – Valeur du maximum
datetime – Date du maximum
.. seealso:: pandas.DataFrame.max et pandas.DataFrame.idxmax
- min()
Renvoyer le minimum de la série et la date associée
- Renvoie:
float – Valeur du minimum
datetime – Date du minimum
.. seealso:: pandas.DataFrame.min et pandas.DataFrame.idxmin
- property missing
Valeur manquante.
- nearlyequalscale(toparam=None, strict=True)
Ré-échantilloner une série à un pas de temps proche
- Paramètres:
toparam (Parameter) – Paramètre correspond au pas de temps ciblé
strict (bool) – Calcul strict, imposant np.nan dans la valeur agrégée si au moins un pas de temps initial vaut np.nan. Retire de la série les pas de temps où les données d’origine ne sont pas complètes Défaut: True
- Renvoie:
Série des valeurs agrégées/moyennées
- Type renvoyé:
- property np_dtype
Format des données dans les tableaux numpy et pandas.
- property parameter
Grandeur de la série.
- plot(dirname='.', fmt='png')
Imprimer la série de données contenue dans <self.data-frame> dans un fichier image
- Paramètres:
dirname (str) – Dossier où écrire l’image. Défaut: “.”
fmt (str) – Format du fichier image. Défault: png
- Renvoie:
Chemin complet du fichier image
- Type renvoyé:
str
- property provider
Nom du fournisseur de la donnée.
- regime(groupby=None, freqs=None, dayhour=6, strict=True, ignore_upscale=False)
Calculer le régime de la chronique.
- Paramètres:
groupby (str) –
Regroupement des données
’dayofyear” : par jour de l’année (défaut)
”month” : par mois
freqs (list) – Fréquences des quantiles, entre 0 et 1. Par défaut: [0.10, 0.25, 0.50, 0.75, 0.90]
dayhour (int) – Heure du début de la journée Nécessaire si la cible est un pas de temps journalier. Par défaut: 6. Valeurs admises: [0, 6]
strict (bool) – Calcul strict, imposant np.nan dans la valeur agrégée si au moins un pas de temps initial vaut np.nan. Retire de la série les pas de temps où les données d’origine ne sont pas complètes Défaut: True
ignore_upscale (bool) – Ignorer la mise à l’échelle. Défaut: False. Si le paramètre est cumulable, ignore_upscale est mis à False
- Renvoie:
Tableau du régime hydrologique contenant les minimas, maximas, moyennes et les quantiles associées aux fréquences spécifiées
- Type renvoyé:
pandas.DataFrame
Exemples
>>> from datetime import datetime as dt >>> import numpy as np >>> import pandas as pnd >>> from random import Random >>> from pyspc.core.serie import Serie
>>> random = Random('pyspc') >>> dates = pnd.date_range(dt(2000, 1, 1), dt(2023, 7, 1), freq='D') >>> df = pnd.DataFrame( ... {'sigma': [5 + 4 * np.sin( ... 2 * np.pi * min(365, d.timetuple().tm_yday/365.0)) ... for d in dates], ... 'mu': [10 * np.cos( ... 2 * np.pi * min(365, d.timetuple().tm_yday/365.0)) ... for d in dates]}, ... index=dates ... ) >>> df['normalvariate'] = df.apply( ... lambda row: random.normalvariate(row['mu'], row['sigma']), ... axis=1) >>> serie = Serie(df['normalvariate'], code='MASTATION', varname='TJ')
CAS DAYOFYEAR
>>> regime = serie.regime(groupby='dayofyear') >>> regime MASTATION TJ min mean max q10 q25 q50 q75 q90 dayofyear 1 1.944009 10.624312 20.113833 5.263542 6.774031 10.585418 14.503644 15.079707 2 -0.259760 9.405203 19.817392 2.379518 5.376413 9.916178 13.573836 15.616009 3 -0.181454 10.297588 21.049035 2.696734 6.207425 9.238487 14.893574 17.331033 4 -5.145176 8.492487 18.598175 1.284406 5.552731 8.107479 12.133227 16.312690 5 0.207759 10.119969 24.490016 4.522729 6.148460 10.294487 12.758538 18.530463 6 2.459365 10.934372 20.392852 4.335647 8.223262 11.605376 13.718347 15.589172 7 6.183924 11.048712 18.620448 6.527771 8.329515 10.557980 13.471992 15.162192 8 -2.837258 10.011024 21.114053 4.385651 6.142117 10.629248 13.173047 16.101604 9 -1.759126 9.194610 15.619534 3.082263 7.326997 10.416776 11.832072 14.088313 10 -0.831915 8.491538 18.695751 1.792905 5.164604 9.183864 12.001302 13.811218 11 -2.224917 12.474504 23.189785 3.526222 6.234537 13.716551 18.169241 20.929219 12 0.192211 8.947970 16.653351 2.155900 5.366654 9.397785 12.749126 14.162431 13 -1.863916 9.156694 23.647803 1.567216 5.279567 9.559719 12.201265 15.886308 14 -1.283101 9.916968 19.012489 3.674430 6.081189 10.318217 13.123059 17.412076 15 -0.132395 13.393634 20.754137 5.292921 9.852966 14.900619 18.073066 20.210763 16 -9.843188 7.577008 23.533791 0.467720 4.078625 7.237520 12.271942 14.753191 17 -0.945028 8.201018 19.217643 1.306905 4.509631 7.660138 11.837876 14.352006 18 -0.162434 7.865895 19.764133 0.637975 4.182544 7.683877 11.582366 13.857101 19 -1.631207 10.868952 28.835518 2.890020 5.641252 11.899187 13.981045 19.641085 20 2.877473 10.354723 20.742810 4.655265 6.319709 10.345086 12.576178 17.543802 21 -0.359789 9.753262 21.061425 3.589661 6.108222 8.882443 12.867481 17.005235 22 -1.851937 9.712771 30.366130 2.020791 3.142092 6.993661 14.838456 20.981410 23 -6.003920 12.254727 25.806680 5.528492 8.385381 11.543759 17.803213 20.503745 24 -1.366565 12.479229 28.552720 4.677895 8.569749 13.075048 17.188437 20.053550 25 1.376093 8.544323 19.961965 3.124412 4.563643 7.823728 12.067380 14.478125 26 -4.134279 7.779648 22.400089 -0.935813 3.443725 7.990922 11.244633 17.413172 27 -1.513403 9.824618 23.918041 1.980819 4.413007 10.064812 14.228396 20.450119 28 -5.114598 10.350452 23.809753 2.831210 6.193378 8.552981 14.725332 20.465081 29 -7.761090 9.869827 23.886531 2.467829 6.123588 10.901072 13.652352 18.006390 30 -4.903314 7.137828 18.869998 -0.707865 3.447457 6.974199 10.312168 15.000295 ... ... ... ... ... ... ... ... ... 336 4.351649 8.410195 14.244957 5.452110 6.248769 7.916380 10.172580 13.205556 337 4.545814 8.176946 13.055793 4.855146 5.632999 7.991481 10.304988 11.471382 338 2.023751 8.394688 13.671743 4.861224 6.886953 8.498807 10.088508 12.182250 339 5.878882 9.739374 13.343329 6.520828 7.900646 10.341276 11.430028 11.996803 340 -0.935858 9.180920 15.083883 5.137096 6.875063 9.955873 11.356597 13.055717 341 3.821531 9.702031 14.464514 7.489006 8.394184 8.883279 11.940618 13.151455 342 4.135648 9.933368 22.267054 5.407166 6.692677 8.666765 12.087093 15.001430 343 5.480372 9.526010 12.765188 7.955415 8.691168 9.864494 10.706000 11.037573 344 0.055580 8.348085 15.573621 4.893742 6.194555 8.548581 10.075738 12.029745 345 0.987658 10.016465 16.134114 5.214590 8.553301 10.828631 12.205413 13.509378 346 4.291916 9.585788 15.770062 4.808465 7.238564 10.133367 11.882017 13.698296 347 2.365325 9.447996 17.309514 5.161123 6.998339 9.650121 11.271402 13.393767 348 1.815191 9.294719 16.110000 2.701645 6.778497 9.313064 12.013235 15.267646 349 0.335351 9.172088 16.775585 5.303601 6.366535 9.946066 12.446337 14.094746 350 4.418837 11.034226 20.066203 6.836929 8.993011 11.122376 12.471647 14.533944 351 0.992976 10.118205 19.865972 3.931755 5.878853 9.863075 13.672705 17.438937 352 2.360168 9.587696 16.356217 5.135191 7.616783 9.692119 11.805785 13.738285 353 1.879207 9.721086 21.528831 5.128223 7.665339 9.636685 11.137671 14.015609 354 0.005776 9.610247 21.223430 5.016252 6.975288 9.316436 12.683450 14.666547 355 4.183093 10.805621 17.953885 6.658991 8.907132 11.562818 12.712600 13.687104 356 -2.465142 9.719868 17.231451 5.316063 6.960975 8.504196 12.946158 15.516718 357 2.207875 9.721184 20.190657 4.962292 7.182469 9.244547 11.818021 13.484418 358 4.174932 10.007208 15.627777 5.014417 7.745050 9.366240 13.280770 15.255052 359 -1.837906 9.957878 21.965943 0.363735 6.755967 10.363652 12.969316 17.755847 360 0.682689 10.486417 21.506449 4.921221 6.599487 9.890103 15.009039 17.229929 361 1.713487 12.005706 20.285289 6.604912 8.955794 12.263369 14.694296 18.709962 362 3.215175 11.295978 16.617168 6.464909 10.327176 12.133073 13.649460 14.916064 363 -0.747765 8.296246 16.288661 3.409350 5.990357 9.017231 10.270798 11.308030 364 2.919868 11.530928 19.750778 6.676048 8.894218 10.682790 15.097649 17.149895 365 3.755801 11.390088 17.965603 7.596842 8.426334 10.643652 15.149170 16.246636 [365 rows x 8 columns]
CAS MONTH
>>> regime = serie.regime(groupby='month') >>> regime MASTATION TJ min mean max q10 q25 q50 q75 q90 month 1 -10.987349 9.775277 30.366130 2.175369 5.483506 9.881925 13.756946 17.887767 2 -20.927502 7.647808 31.096103 -2.161437 2.162670 7.702300 13.467442 17.929788 3 -28.532033 2.447466 29.276437 -9.260649 -3.558794 2.684536 8.463805 14.078995 4 -28.076151 -2.284140 22.403386 -13.540367 -8.314738 -2.430664 3.609519 9.348240 5 -36.541390 -7.150944 18.317250 -17.218375 -12.848633 -7.027587 -1.690938 3.763987 6 -29.483204 -9.808500 8.399533 -17.139951 -13.776696 -9.963173 -5.798924 -2.059937 7 -24.401203 -9.630296 5.242768 -15.005319 -12.217287 -9.512707 -7.089044 -4.420848 8 -16.569580 -6.969922 0.025375 -10.138419 -8.672136 -6.874644 -5.273049 -3.783082 9 -8.038793 -2.551329 2.903838 -4.974818 -3.823146 -2.513706 -1.179915 -0.131121 10 -2.843159 2.679328 8.982568 0.252474 1.242906 2.467920 3.998118 5.349232 11 0.709528 6.937878 15.738727 3.912094 5.228819 6.599372 8.564590 10.420266 12 -2.465142 9.774600 22.267054 5.040022 7.199803 9.765345 12.172330 14.699299
- regime_sauquet()
Définir la similarité du régime hydro avec les références Sauquet.
- Renvoie:
norm (pandas.DataFrame) – Valeurs mensuelles normalisées
regimes (pandas.DataFrame) – Identifiants des colonnes de df, des régimes et critère de similarité
- regularscale()
Interpoler une série d’un pas de temps irrégulier à un pas de temps régulier
- Renvoie:
Série à pas de temps régulier
- Type renvoyé:
- reindex()
Re-indexer pour remplir les pas de temps manquants
- set_timezone(timezone=<UTC>)
Appliquer un nouveau fuseau horaire au contenu de l’instance de la classe Serie
- Paramètres:
timezone (pytz) – Date de la dernière valeur valide
- shift(periods=None, freq=None, inplace=True)
Appliquer la méthode de pnd.DataFrame.shift à l’instance Serie
- Paramètres:
periods (timedelta) – Période
freq (timedelta) – Fréquence
inplace (bool) – Traiter en place (True) ou renvoyer une nouvelle instance (False) défaut: True
- Renvoie:
pyspc.core.serie.Serie – Nouvelle série de données, si inplace=False
.. seealso:: pandas.DataFrame.index.shift
- sim2fcst(ref=None, first_dtime=None, last_dtime=None, error_depth=0, max_ltime=120)
Convertir une simulation en prévision avec prise en compte de l’erreur à l’instant de prévision qui décroit linéairement avec l’échéance de prévision
- Paramètres:
ref (Serie) – Série de référence
error_depth (int) – Durée de prise en compte de l’erreur, en pas de temps. Défaut: 0
first_dt (datetime) – Premier instant de prévision
last_dt (datetime) – Dernier instant de prévision
max_ltime (int) – Horizon de prévision maximal, en pas de temps. Défaut: 120
- Renvoie:
series – Collection de prévisions
- Type renvoyé:
- socose()
Déterminer les paramètrs D et RXD du modèle SOCOSE. - D : durée au-dessus du débit standardisé valant 0.5 (Q/Qp) - RXD : rapport du débit de pointe sur le débit moyen sur D
- Renvoie:
socose – Valeurs SOCOSE par colonne du tableau DataFrame - col: {“d”: d, “rxd”: rxd}
- Type renvoyé:
dict
Voir aussi
Exemples
>>> serie ************************************* *********** SERIE ******************* ************************************* * NOM VARIABLE SPC = QH * INTITULE VARIABLE = Débit horaire * IDENTIFIANT = K0000000 * FOURNISSEUR = Provider(name='SPC') * NOM VARIABLE = QH * UNITE = m3/s * VALEUR MANQUANTE = * SERIE CONTINUE = True * PAS DE TEMPS = 1:00:00 * UNITE DE TEMPS = hour * FUSEAU HORAIRE = UTC * PROFONDEUR SERIE = 25 * PREMIER PAS DE TEMPS = 2024-03-30 06:00:00 * DERNIER PAS DE TEMPS = 2024-03-31 06:00:00 *************************************
>>> serie.df (K0000000, QH) 2024-03-30 06:00:00 23.0 2024-03-30 07:00:00 25.5 2024-03-30 08:00:00 30.6 2024-03-30 09:00:00 53.6 2024-03-30 10:00:00 92.5 2024-03-30 11:00:00 119.4 2024-03-30 12:00:00 132.4 2024-03-30 13:00:00 137.1 2024-03-30 14:00:00 134.9 2024-03-30 15:00:00 129.6 2024-03-30 16:00:00 121.2 2024-03-30 17:00:00 111.7 2024-03-30 18:00:00 102.1 2024-03-30 19:00:00 93.7 2024-03-30 20:00:00 84.6 2024-03-30 21:00:00 76.6 2024-03-30 22:00:00 69.5 2024-03-30 23:00:00 63.9 2024-03-31 00:00:00 59.1 2024-03-31 01:00:00 55.0 2024-03-31 02:00:00 51.0 2024-03-31 03:00:00 48.1 2024-03-31 04:00:00 45.8 2024-03-31 05:00:00 43.5 2024-03-31 06:00:00 41.9
>>> values = serie.socose() >>> values {('K0000000', 'QH'): {'d': 13, 'rxd': 1.2682701202590196}}
- property spc_varname
Grandeur de la série selon la convention de pyspc.
- split(value=None, method=None)
Découper la série en une collection de séries.
- Paramètres:
value (int, float, list) – Valeur d’application de la méthodologie
method (str) –
Méthodologie de découpage de la série (N=value)
”chunks” : N blocs en cherchant une taille homogène
’chunk_size” : blocs de taille identique N sans garantir de taille homogène
’days” : fréquence de N jours (N=value)
”groups” : regroupements fournis sous la forme d’un DataFrame de même dimension que la série
’dates” : découpage selon une liste de dates fournies sous la forme de datetime.datetime
- Renvoie:
Collection de séries
- Type renvoyé:
Notes
Le nommage des nouvelles séries suit la procédure suivante:
s’il s’agit d’une série d’observation : définition d’une simulation “split-X”, avec X l’identifiant du bloc
s’il s’agit d’une série de simulation : ajout de “split-X” dans le nom de la simulation (en suffixe), avec X l’identifiant du bloc
Exemples
>>> import pandas as pnd >>> from random import Random >>> from pyspc.core.serie import Serie
>>> random = Random('pyspc') >>> dates = pnd.date_range(dt(2020, 1, 1), dt(2023, 7, 1), freq='H') >>> df = pnd.DataFrame([random.normalvariate(15, 10) for d in dates], ... index=dates) >>> obs = Serie(df, code='MASTATION', varname='TH') >>> sim = Serie(df, code='MASTATION_MASIMU', varname='TH')
CAS PAR N BLOCS DE TAILLE HOMOGENE
>>> series = obs.split(value=4, method='chunks') >>> series ************************************* ********** SERIES ******************* ************************************* * NOM DE LA COLLECTION = Split * TYPE DE COLLECTION = obs * NOMBRE DE SERIES = 4 * ---------------------------------- * SERIE #1 * - CODE = MASTATION * - VARNAME = TH * - META = split-0 * ---------------------------------- * SERIE #2 * - CODE = MASTATION * - VARNAME = TH * - META = split-1 * ---------------------------------- * SERIE #3 * - CODE = MASTATION * - VARNAME = TH * - META = split-2 * ---------------------------------- * SERIE #4 * - CODE = MASTATION * - VARNAME = TH * - META = split-3 ************************************* >>> for k, s in series.items(): ... print(k, s.length) ('MASTATION', 'TH', 'split-0') 7663 ('MASTATION', 'TH', 'split-1') 7663 ('MASTATION', 'TH', 'split-2') 7663 ('MASTATION', 'TH', 'split-3') 7660
CAS PAR BLOC DE TAILLE N - OBSERVATION
>>> series = obs.split(value=10000, method='chunk_size') >>> series ************************************* ********** SERIES ******************* ************************************* * NOM DE LA COLLECTION = Split * TYPE DE COLLECTION = obs * NOMBRE DE SERIES = 4 * ---------------------------------- * SERIE #1 * - CODE = MASTATION * - VARNAME = TH * - META = split-0 * ---------------------------------- * SERIE #2 * - CODE = MASTATION * - VARNAME = TH * - META = split-1 * ---------------------------------- * SERIE #3 * - CODE = MASTATION * - VARNAME = TH * - META = split-2 * ---------------------------------- * SERIE #4 * - CODE = MASTATION * - VARNAME = TH * - META = split-3 ************************************* >>> for k, s in series.items(): ... print(k, s.length) ('MASTATION', 'TH', 'split-0') 10000 ('MASTATION', 'TH', 'split-1') 10000 ('MASTATION', 'TH', 'split-2') 10000 ('MASTATION', 'TH', 'split-3') 649
CAS PAR BLOC DE TAILLE N - SIMULATION
>>> series = sim.split(value=10000, method='chunk_size') >>> series ************************************* ********** SERIES ******************* ************************************* * NOM DE LA COLLECTION = Split * TYPE DE COLLECTION = obs * NOMBRE DE SERIES = 4 * ---------------------------------- * SERIE #1 * - CODE = MASTATION * - VARNAME = TH * - META = MASIMU-split-0 * ---------------------------------- * SERIE #2 * - CODE = MASTATION * - VARNAME = TH * - META = MASIMU-split-1 * ---------------------------------- * SERIE #3 * - CODE = MASTATION * - VARNAME = TH * - META = MASIMU-split-2 * ---------------------------------- * SERIE #4 * - CODE = MASTATION * - VARNAME = TH * - META = MASIMU-split-3 ************************************* >>> for k, s in series.items(): ... print(k, s.length) ('MASTATION', 'TH', 'MASIMU-split-0') 10000 ('MASTATION', 'TH', 'MASIMU-split-1') 10000 ('MASTATION', 'TH', 'MASIMU-split-2') 10000 ('MASTATION', 'TH', 'MASIMU-split-3') 649
CAS PAR BLOC DE N JOURS
>>> series = obs.split(value=365, method='days') >>> series ************************************* ********** SERIES ******************* ************************************* * NOM DE LA COLLECTION = Split * TYPE DE COLLECTION = obs * NOMBRE DE SERIES = 5 * ---------------------------------- * SERIE #1 * - CODE = MASTATION * - VARNAME = TH * - META = split-0 * ---------------------------------- * SERIE #2 * - CODE = MASTATION * - VARNAME = TH * - META = split-1 * ---------------------------------- * SERIE #3 * - CODE = MASTATION * - VARNAME = TH * - META = split-2 * ---------------------------------- * SERIE #4 * - CODE = MASTATION * - VARNAME = TH * - META = split-3 * ---------------------------------- * SERIE #5 * - CODE = MASTATION * - VARNAME = TH * - META = split-4 ************************************* >>> for k, s in series.items(): ... print(k, s.length) ('MASTATION', 'TH', 'split-0') 7200 ('MASTATION', 'TH', 'split-1') 7200 ('MASTATION', 'TH', 'split-2') 7200 ('MASTATION', 'TH', 'split-3') 7200 ('MASTATION', 'TH', 'split-4') 1849
CAS PAR LISTE DE DATES
>>> split_dates = [dt(1999, 1, 1), dt(2020, 1, 1), dt(2021, 1, 1), ... dt(2022, 1, 1), dt(2023, 1, 1), dt(2024, 1, 1)] >>> series = obs.split(value=split_dates, method='dates') >>> series ************************************* ********** SERIES ******************* ************************************* * NOM DE LA COLLECTION = Split * TYPE DE COLLECTION = obs * NOMBRE DE SERIES = 4 * ---------------------------------- * SERIE #1 * - CODE = MASTATION * - VARNAME = TH * - META = split-0 * ---------------------------------- * SERIE #2 * - CODE = MASTATION * - VARNAME = TH * - META = split-1 * ---------------------------------- * SERIE #3 * - CODE = MASTATION * - VARNAME = TH * - META = split-2 * ---------------------------------- * SERIE #4 * - CODE = MASTATION * - VARNAME = TH * - META = split-3 ************************************* >>> for k, s in series.items(): ... print(k, s.firstdt, s.lastdt, s.length)
(“MASTATION”, “TH”, “split-0”) 2020-01-01 00:00 2020-12-31 23:00 8784 (“MASTATION”, “TH”, “split-1”) 2021-01-01 00:00 2021-12-31 23:00 8760 (“MASTATION”, “TH”, “split-2”) 2022-01-01 00:00 2022-12-31 23:00 8760 (“MASTATION”, “TH”, “split-3”) 2023-01-01 00:00 2023-07-01 00:00 4345
- standardize()
Standardiser la chronique par normalisation selon la valeur max.
L’index est un timedelta depuis la date du maxi. Cette chronique standardisée est utilisée par la méthode socose
- Renvoie:
df – Tableau des données standardisées
- Type renvoyé:
pandas.DataFrame
Voir aussi
Exemples
>>> serie ************************************* *********** SERIE ******************* ************************************* * NOM VARIABLE SPC = QH * INTITULE VARIABLE = Débit horaire * IDENTIFIANT = K0000000 * FOURNISSEUR = Provider(name='SPC') * NOM VARIABLE = QH * UNITE = m3/s * VALEUR MANQUANTE = * SERIE CONTINUE = True * PAS DE TEMPS = 1:00:00 * UNITE DE TEMPS = hour * FUSEAU HORAIRE = UTC * PROFONDEUR SERIE = 25 * PREMIER PAS DE TEMPS = 2024-03-30 06:00:00 * DERNIER PAS DE TEMPS = 2024-03-31 06:00:00 *************************************
>>> serie.df (K0000000, QH) 2024-03-30 06:00:00 23.0 2024-03-30 07:00:00 25.5 2024-03-30 08:00:00 30.6 2024-03-30 09:00:00 53.6 2024-03-30 10:00:00 92.5 2024-03-30 11:00:00 119.4 2024-03-30 12:00:00 132.4 2024-03-30 13:00:00 137.1 2024-03-30 14:00:00 134.9 2024-03-30 15:00:00 129.6 2024-03-30 16:00:00 121.2 2024-03-30 17:00:00 111.7 2024-03-30 18:00:00 102.1 2024-03-30 19:00:00 93.7 2024-03-30 20:00:00 84.6 2024-03-30 21:00:00 76.6 2024-03-30 22:00:00 69.5 2024-03-30 23:00:00 63.9 2024-03-31 00:00:00 59.1 2024-03-31 01:00:00 55.0 2024-03-31 02:00:00 51.0 2024-03-31 03:00:00 48.1 2024-03-31 04:00:00 45.8 2024-03-31 05:00:00 43.5 2024-03-31 06:00:00 41.9
>>> df = serie.standardize() >>> df (K0000000, QH) -1 days +17:00:00 0.167761 -1 days +18:00:00 0.185996 -1 days +19:00:00 0.223195 -1 days +20:00:00 0.390956 -1 days +21:00:00 0.674690 -1 days +22:00:00 0.870897 -1 days +23:00:00 0.965718 00:00:00 1.000000 01:00:00 0.983953 02:00:00 0.945295 03:00:00 0.884026 04:00:00 0.814734 05:00:00 0.744712 06:00:00 0.683443 07:00:00 0.617068 08:00:00 0.558716 09:00:00 0.506929 10:00:00 0.466083 11:00:00 0.431072 12:00:00 0.401167 13:00:00 0.371991 14:00:00 0.350839 15:00:00 0.334063 16:00:00 0.317287 17:00:00 0.305616
- stripna()
Renvoyer une nouvelle instance sans les np.nan en début et fin de série
- Renvoie:
Nouvelle série de données
- Type renvoyé:
- subhourlyscale(ts=None, how=None, howinterp=None)
Interpoler une série d’un pas de temps horaire à un pas de temps infra-horaire
- Paramètres:
ts (timedelta) – Pas de temps infra-horaire entre 1 min et 1h. Par défaut: 5 minutes
how (str) – Méthode de ré-échantillonnage parmi: [“bfill”, “ffill”, “nearest”, “interpolate”]
howinterp (str) – Méthode d’interpolation. Par défaut: “linear”
- Renvoie:
pyspc.core.serie.Serie – Série à pas de temps infra-horaire
.. seealso:: – pandas.DataFrame.resample.
- timecentroid()
Déterminer le centre de masse temporel de la série
- Renvoie:
Centre de masse temporel
- Type renvoyé:
datetime
- timelag(tlag=None, inplace=True)
Décaler la série de données de l’instance Serie : - tlag Si tlag est une instance de td, - tlag*self.timestep Sinon Si l’option inplace est définie à False, alors cette méthode crée une nouvelle instance Serie
- Paramètres:
tlag (int, float, timedelta) – Période
inplace (bool) – Traiter en place (True) ou renvoyer une nouvelle instance (False) défaut: True
- Renvoie:
Nouvelle série de données, si inplace=False
- Type renvoyé:
- property timestep
Pas de temps.
- property timeunits
Unité de temps.
- property timezone
Fuseau horaire.
- property units
Unité de la variable.
- update(other=None, overwrite=False, strict=False)
Mettre à jour de l’instance Serie par le contenu d’une autre instance Serie
- Paramètres:
other (pyspc.core.serie.Serie) – Séries de données de référence
overwrite (bool) – Ecraser les valeurs de self par celles d’other ? Par défaut: False, ce qui signifie que seules les valeurs manquantes sont remplacées
strict (bool) – Forcer le respect de la concordance des codes des deux Serie ? Par défaut: False
- upscale(toparam=None, dayhour=6, strict=True)
Agréger/moyenner la série à un pas de temps supérieur
- Paramètres:
toparam (Parameter) – Paramètre correspond au pas de temps ciblé
dayhour (int) – Heure du début de la journée Nécessaire si la cible est un pas de temps journalier. Par défaut: 6. Valeurs admises: [0, 6]
strict (bool) – Calcul strict, imposant np.nan dans la valeur agrégée si au moins un pas de temps initial vaut np.nan. Retire de la série les pas de temps où les données d’origine ne sont pas complètes Défaut: True
- Renvoie:
Série des valeurs agrégées/moyennées
- Type renvoyé:
- property varname
Grandeur de la série.
- property warning
Afficher les avertissements