#!/usr/bin/python3
# -*- coding: utf-8 -*-
########################################################################
#
# This file is part of python module <pyspc>.
# Copyright (C) 2013-2021 R. Marty
# (renaud.marty@developpement-durable.gouv.fr)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program (see COPYING.txt).
# If not, see <http://www.gnu.org/licenses/>.
#
########################################################################
"""
Modélisations hydrologiques - MOHYS (SPC LACI) - Hydrogrammes unitaires
"""
import inspect
import math
import pandas as pnd
from scipy.stats import (binom, dgamma, dlaplace, gamma, nbinom, norm, skellam,
triang, uniform, weibull_min)
import pyspc.core.exception as _exception
[docs]
def build(start=0, end=0, params=None, norm=True):
"""
Construire un hydrogramme unitaire.
Parameters
----------
start : int
Premier instant
end : int
Dernier instant
params : dict
Formulations demandées et leurs paramètres
- clé : str
- valeurs : list
norm : bool
Normaliser les hydrogrammes unitaires ?
Par défaut: True.
Si True, la somme des coefficients est égale à 1.
Returns
-------
df : pandas.DataFrame
Hydrogrammes unitaires
See Also
--------
pyspc.model.mohys.unit_hydrograph.plot
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> start = -11
>>> end = 10
>>> params = {
... 'FBN': [-6, 12, 4, 0.3],
... 'FGT': [-6, 12, 4],
... 'FPU': [-6, 12, 4],
... 'RE1': [-6, 12],
... 'RE2': [-6, 12, -12, 24],
... 'TG1': [0.75, -6, 12],
... 'TG2': [0.50, -6, 12, 0.75, -12, 24],
... }
Cas avec normalisation (cas par défaut)
>>> df = uh.build(start=start, end=end, params=params)
>>> df = uh.build(start=start, end=end, params=params, norm=True)
>>> df
FBN FGT FPU RE1 RE2 TG1 TG2
-11 0.000000 0.000000 0.000000 0.000000 0.028571 0.000000 0.003195
-10 0.000000 0.000000 0.000000 0.000000 0.028571 0.000000 0.006390
-9 0.000000 0.000000 0.000000 0.000000 0.028571 0.000000 0.009585
-8 0.000000 0.000000 0.000000 0.000000 0.028571 0.000000 0.012780
-7 0.000000 0.000000 0.000000 0.000000 0.028571 0.000000 0.015974
-6 0.000000 0.000000 0.000000 0.076923 0.057143 0.000000 0.019169
-5 0.000228 0.000068 0.001502 0.076923 0.057143 0.018519 0.022364
-4 0.005077 0.001529 0.012012 0.076923 0.057143 0.037037 0.038339
-3 0.034221 0.010598 0.040541 0.076923 0.057143 0.055556 0.057508
-2 0.132888 0.046628 0.096096 0.076923 0.057143 0.074074 0.076677
-1 0.292167 0.147720 0.187688 0.076923 0.057143 0.092593 0.095847
0 0.304650 0.293457 0.324324 0.076923 0.057143 0.111111 0.115016
1 0.158333 0.293457 0.187688 0.076923 0.057143 0.129630 0.095847
2 0.054031 0.147720 0.096096 0.076923 0.057143 0.148148 0.076677
3 0.014715 0.046628 0.040541 0.076923 0.057143 0.166667 0.057508
4 0.003210 0.010598 0.012012 0.076923 0.057143 0.111111 0.051118
5 0.000459 0.001529 0.001502 0.076923 0.057143 0.055556 0.054313
6 0.000020 0.000068 0.000000 0.076923 0.057143 0.000000 0.057508
7 0.000000 0.000000 0.000000 0.000000 0.028571 0.000000 0.047923
8 0.000000 0.000000 0.000000 0.000000 0.028571 0.000000 0.038339
9 0.000000 0.000000 0.000000 0.000000 0.028571 0.000000 0.028754
10 0.000000 0.000000 0.000000 0.000000 0.028571 0.000000 0.019169
Cas sans normalisation
>>> df = uh.build(start=start, end=end, params=params, norm=False)
>>> df
FBN FGT FPU RE1 RE2 TG1 TG2
-11 0.000000 0.000000 0.000000 0.000000 0.041667 0.000000 0.004630
-10 0.000000 0.000000 0.000000 0.000000 0.041667 0.000000 0.009259
-9 0.000000 0.000000 0.000000 0.000000 0.041667 0.000000 0.013889
-8 0.000000 0.000000 0.000000 0.000000 0.041667 0.000000 0.018519
-7 0.000000 0.000000 0.000000 0.000000 0.041667 0.000000 0.023148
-6 0.000000 0.000000 0.000000 0.083333 0.083333 0.000000 0.027778
-5 0.000228 0.000068 0.001543 0.083333 0.083333 0.018519 0.032407
-4 0.005077 0.001529 0.012346 0.083333 0.083333 0.037037 0.055556
-3 0.034221 0.010598 0.041667 0.083333 0.083333 0.055556 0.083333
-2 0.132888 0.046628 0.098765 0.083333 0.083333 0.074074 0.111111
-1 0.292167 0.147720 0.192901 0.083333 0.083333 0.092593 0.138889
0 0.304650 0.293457 0.333333 0.083333 0.083333 0.111111 0.166667
1 0.158333 0.293457 0.192901 0.083333 0.083333 0.129630 0.138889
2 0.054031 0.147720 0.098765 0.083333 0.083333 0.148148 0.111111
3 0.014715 0.046628 0.041667 0.083333 0.083333 0.166667 0.083333
4 0.003210 0.010598 0.012346 0.083333 0.083333 0.111111 0.074074
5 0.000459 0.001529 0.001543 0.083333 0.083333 0.055556 0.078704
6 0.000020 0.000068 0.000000 0.083333 0.083333 0.000000 0.083333
7 0.000000 0.000000 0.000000 0.000000 0.041667 0.000000 0.069444
8 0.000000 0.000000 0.000000 0.000000 0.041667 0.000000 0.055556
9 0.000000 0.000000 0.000000 0.000000 0.041667 0.000000 0.041667
10 0.000000 0.000000 0.000000 0.000000 0.041667 0.000000 0.027778
"""
_exception.check_numeric(start)
_exception.check_numeric(end)
_exception.raise_valueerror(start > end, "'start' et 'end' incorrects")
if params is None:
params = {n: [] for n in UH_DICT}
_exception.check_dict(params)
_exception.check_bool(norm)
index = list(range(start, end+1))
df = pnd.concat([UH_DICT[n](index, *params[n])
for n in params if n in UH_DICT],
axis=1)
if norm:
return df/df.sum()
return df
[docs]
def plot(df, subplots=False, filename='unit_hydrograph.png'):
"""
Tracer un hydrogramme unitaire.
Parameters
----------
df : pandas.DataFrame
Hydrogrammes unitaires
subplots : bool
1 sous figure par hydrogramme unitaire (True) ou les regrouper (False)
filename : str
Fichier à écrire
Returns
-------
filename : str
Fichier à écrire
See Also
--------
pyspc.model.mohys.unit_hydrograph.build
"""
figsize = (11.67, 8.27)
if subplots:
figsize = (8.27, 11.67)
ax = df.plot(marker='o', subplots=subplots,
title="Hydrogramme Unitaire MOHYS",
figsize=figsize)
if subplots:
for sax in ax:
sax.set_xticks(df.index)
sax.set_xticklabels(df.index.astype(str))
ylim = sax.get_ylim()
sax.set_ylim((0, ylim[-1]))
fig = sax.get_figure()
else:
ax.set_xticks(df.index)
ax.set_xticklabels(df.index.astype(str))
ylim = ax.get_ylim()
ax.set_ylim((0, ylim[-1]))
fig = ax.get_figure()
fig.tight_layout()
fig.savefig(filename, dpi=300)
return filename
[docs]
def FBN(index, loc=0, scale=1, alpha=1, kappa=1):
"""
Hydrogramme unitaire selon Berthet (2010).
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc : int
Départ. Défaut : 0.
scale : int
Echelle. Défaut : 1.
alpha : float
Forme. Défaut : 1.
kappa : float
Centrage. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc = -407.144
>>> scale = 817.386
>>> alpha = 117.451
>>> kappa = 0.309
>>> df = uh.FBN(index, loc, scale, alpha, kappa)
>>> df
FBN
-11 0.002375
-10 0.001839
-9 0.003251
-8 0.005726
-7 0.010014
-6 0.017302
-5 0.029277
-4 0.047839
-3 0.073878
-2 0.104697
-1 0.131641
0 0.142713
1 0.131873
2 0.105043
3 0.074210
4 0.048095
5 0.029451
6 0.017411
7 0.010081
8 0.005766
9 0.003275
10 0.001852
>>> loc = -6
>>> scale = 12
>>> alpha = 4
>>> kappa = 0.3
>>> df = uh.FBN(index, loc, scale, alpha, kappa)
>>> df
FBN
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.000228
-4 0.005077
-3 0.034221
-2 0.132888
-1 0.292167
0 0.304650
1 0.158333
2 0.054031
3 0.014715
4 0.003210
5 0.000459
6 0.000020
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i <= loc:
values.append(0)
elif i >= loc + scale:
values.append(1)
else:
values.append(
((i - loc)**alpha) /
((i - loc)**alpha + kappa * (loc + scale - i)**alpha))
cdf = pnd.DataFrame({fitname: values}, index=index)
pdf = cdf.diff()
pdf.loc[index[0], fitname] = cdf.loc[index[0], fitname]
return pdf
[docs]
def FEL(index, loc=0, scale=1):
"""
Hydrogramme unitaire selon Le Moine - ELLIPTIQUE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc : int
Départ. Défaut : 0.
scale : int
Echelle. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc = -5.178
>>> scale = 9.503
>>> df = uh.FEL(index, loc, scale)
>>> df
FEL
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.036329
-4 0.088305
-3 0.112629
-2 0.126423
-1 0.133003
0 0.133442
1 0.127802
2 0.115195
3 0.092822
4 0.048701
5 0.000000
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
>>> loc = -6
>>> scale = 12
>>> df = uh.FEL(index, loc, scale)
>>> df
FEL
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.058651
-4 0.079085
-3 0.091888
-2 0.100035
-1 0.104619
0 0.106103
1 0.104619
2 0.100035
3 0.091888
4 0.079085
5 0.058651
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i <= loc:
values.append(0)
elif i >= loc + scale:
values.append(0)
elif i <= loc + scale / 2:
values.append(
2 / (math.pi * scale / 2) * math.sqrt(
((i - loc)/(scale / 2)) * (2 - ((i - loc)/(scale / 2))))
)
else:
values.append(
2 / (math.pi * scale / 2) * math.sqrt(
((loc + scale - i)/(scale / 2))
* (2 - ((loc + scale - i)/(scale / 2))))
)
pdf = pnd.DataFrame({fitname: values}, index=index)
return pdf
[docs]
def FGT(index, loc=0, scale=1, alpha=1):
"""
Hydrogramme unitaire selon TANGARA (2006).
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc : int
Départ. Défaut : 0.
scale : int
Echelle. Défaut : 1.
alpha : float
Forme. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc = -3724.708
>>> scale = 7448.433
>>> alpha = 1070.317
>>> df = uh.FGT(index, loc, scale, alpha)
>>> df
FGT
-11 0.003802
-10 0.001248
-9 0.001661
-8 0.002217
-7 0.014601
-6 0.022624
-5 0.032278
-4 0.046569
-3 0.062500
-2 0.098214
-1 0.137363
0 0.153846
1 0.137363
2 0.098214
3 0.062500
4 0.046569
5 0.032278
6 0.022624
7 0.014520
8 0.002252
9 0.001681
10 0.001259
>>> loc = -6
>>> scale = 12
>>> alpha = 4
>>> df = uh.FGT(index, loc, scale, alpha)
>>> df
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.000068
-4 0.001529
-3 0.010598
-2 0.046628
-1 0.147720
0 0.293457
1 0.293457
2 0.147720
3 0.046628
4 0.010598
5 0.001529
6 0.000068
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i <= loc:
values.append(0)
elif i >= loc + scale:
values.append(1)
elif i <= loc + scale / 2:
values.append(
(((i - loc)/(2 * scale / 2))**alpha)
/ (((i - loc)/(2 * scale / 2))**alpha
+ (1-((i - loc)/(2 * scale / 2)))**alpha)
)
else:
values.append(
1 - (((loc + scale - i)/(2 * scale / 2))**alpha)
/ (((loc + scale - i)/(2 * scale / 2))**alpha
+ (1-((loc + scale - i)/(2 * scale / 2)))**alpha))
cdf = pnd.DataFrame({fitname: values}, index=index)
pdf = cdf.diff()
pdf.loc[index[0], fitname] = cdf.loc[index[0], fitname]
return pdf
[docs]
def FPA(index, loc=0, scale=1):
"""
Hydrogramme unitaire selon Le Moine - PARABOLIQUE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc : int
Départ. Défaut : 0.
scale : int
Echelle. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc = -5.618
>>> scale = 11.079
>>> df = uh.FPA(index, loc, scale)
>>> df
FPA
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.028524
-4 0.067541
-3 0.097733
-2 0.119101
-1 0.131645
0 0.135364
1 0.130259
2 0.116330
3 0.093577
4 0.061999
5 0.021597
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
>>> loc = -6
>>> scale = 12
>>> df = uh.FPA(index, loc, scale)
>>> df
FPA
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.038194
-4 0.069444
-3 0.093750
-2 0.111111
-1 0.121528
0 0.125000
1 0.121528
2 0.111111
3 0.093750
4 0.069444
5 0.038194
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i <= loc:
values.append(0)
elif i >= loc + scale:
values.append(0)
elif i <= loc + scale / 2:
values.append(
3 / (4 * scale / 2) * ((i - loc) / (scale / 2))
* (2 - ((i - loc) / (scale / 2))))
else:
values.append(
3 / (4 * scale / 2) * ((loc + scale - i) / (scale / 2))
* (2 - ((loc + scale - i) / (scale / 2))))
pdf = pnd.DataFrame({fitname: values}, index=index)
return pdf
[docs]
def FPU(index, loc=0, scale=1, alpha=1):
"""
Hydrogramme unitaire selon Le Moine - PUISSANCE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc : int
Départ. Défaut : 0.
scale : int
Echelle. Défaut : 1.
alpha : float
Forme. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc = -239729269.709
>>> scale = 479458539.860
>>> alpha = 82122945.112
>>> df = uh.FPU(index, loc, scale, alpha)
>>> df
FPU
-11 0.003667
-10 0.005165
-9 0.007276
-8 0.010248
-7 0.014435
-6 0.020332
-5 0.028639
-4 0.040340
-3 0.056821
-2 0.080036
-1 0.112735
0 0.158794
1 0.131165
2 0.093120
3 0.066110
4 0.046935
5 0.033321
6 0.023656
7 0.016795
8 0.011923
9 0.008465
10 0.006010
>>> loc = -6
>>> scale = 12
>>> alpha = 4
>>> df = uh.FPU(index, loc, scale, alpha)
>>> df
FPU
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.001543
-4 0.012346
-3 0.041667
-2 0.098765
-1 0.192901
0 0.333333
1 0.192901
2 0.098765
3 0.041667
4 0.012346
5 0.001543
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i <= loc:
values.append(0)
elif i >= loc + scale:
values.append(0)
elif i <= loc + scale / 2:
values.append(
0.5 * alpha / (scale / 2)
* ((i - loc)/(scale / 2))**(alpha-1)) # PDF
# values.append(0.5 * ((i - x[0])/(x[1] / 2))**x[2]) # CDF
else:
values.append(
0.5 * alpha / (scale / 2)
* ((loc + scale - i)/(scale / 2))**(alpha - 1)) # PDF
# values.append(0.5 * ((x[0] + x[1] - i)/(x[1] / 2))**x[2]) # CDF
pdf = pnd.DataFrame({fitname: values}, index=index)
return pdf
[docs]
def FSI(index, loc=0, scale=1):
"""
Hydrogramme unitaire selon Le Moine - SINUSOIIDAL.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc : int
Départ. Défaut : 0.
scale : int
Echelle. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc = -7.54
>>> scale = 14.913
>>> df = uh.FSI(index, loc, scale)
>>> df
FSI
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.001728
-6 0.013627
-5 0.034870
-4 0.061743
-3 0.089545
-2 0.113413
-1 0.129174
0 0.134070
1 0.127245
2 0.109892
3 0.085048
4 0.057056
5 0.030814
6 0.010910
7 0.000826
8 0.000000
9 0.000000
10 0.000000
>>> loc = -6
>>> scale = 12
>>> df = uh.FSI(index, loc, scale)
>>> df
FSI
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.011165
-4 0.041667
-3 0.083333
-2 0.125000
-1 0.155502
0 0.166667
1 0.155502
2 0.125000
3 0.083333
4 0.041667
5 0.011165
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i <= loc:
values.append(0)
elif i >= loc + scale:
values.append(0)
elif i <= loc + scale / 2:
values.append(
1 / (2 * scale / 2) * (
1 - math.cos(math.pi * (i - loc) / (scale / 2)))
) # PDF
# values.append(
# (i - x[0]) / (2* x[1] / 2)
# - 1 / math.pi * math.sin(math.pi * (i - x[0]) / (x[1] / 2))
# ) # CDF
else:
values.append(
1 / (2 * scale / 2) * (
1 - math.cos(math.pi * (loc + scale - i) / (scale / 2)))
) # PDF
# values.append(
# (x[0] + x[1] - i) / (2* x[1] / 2)
# - 1 / math.pi * math.sin(
# math.pi * (x[0] + x[1] - i) / (x[1] / 2))
# ) # CDF
pdf = pnd.DataFrame({fitname: values}, index=index)
pdf[pdf < 0] = 0
return pdf
[docs]
def LBI(index, n=1, p=0, loc=0):
"""
Hydrogramme unitaire par loi statistique BINOMIALE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
n : int
Paramètre de la loi Binomiale.
Equivalent à 'scale' dans les fonctions. Défaut : 1.
p : float
Paramètre de la loi Binomiale. Défaut : 0.
loc : int
Départ. Défaut : 0.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.binom
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> n = 21
>>> p = 0.50
>>> loc = -11
>>> df = uh.LBI(index, n, p, loc)
>>> df
LBI
-11 0.168188
-10 0.140157
-9 0.097032
-8 0.055447
-7 0.025875
-6 0.009703
-5 0.002854
-4 0.000000
-3 0.000000
-2 0.000000
-1 0.000000
0 0.000000
1 0.000000
2 0.000000
3 0.000000
4 0.000000
5 0.000000
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
>>> n = 12
>>> p = 0.50
>>> loc = -6
>>> df = uh.LBI(index, n, p, loc)
>>> df
LBI
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.225586
-5 0.193359
-4 0.120850
-3 0.053711
-2 0.016113
-1 0.002930
0 0.000000
1 0.000000
2 0.000000
3 0.000000
4 0.000000
5 0.000000
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i < loc:
values.append(0)
elif i > loc + n:
values.append(0)
else:
values.append(binom.pmf(i - loc, n, p, loc))
pdf = pnd.DataFrame({fitname: values}, index=index)
pdf[pdf < 0.001] = 0
return pdf
[docs]
def LBN(index, n=1, p=1, loc=0):
"""
Hydrogramme unitaire par loi statistique BINOMIALE NEGATIVE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
n : int
Paramètre de la loi Binomiale Négative.
Equivalent à 'scale' dans les fonctions. Défaut : 1.
p : float
Paramètre de la loi Binomiale Négative. Défaut : 1.
loc : int
Départ. Défaut : 0.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.nbinom
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> n = 20.969
>>> p = 0.50
>>> loc = -11
>>> df = uh.LBN(index, n, p, loc)
>>> df
LBN
-11 0.019876
-10 0.026476
-9 0.033572
-8 0.040729
-7 0.047475
-6 0.053363
-5 0.058023
-4 0.061197
-3 0.062757
-2 0.062709
-1 0.061169
0 0.058346
1 0.054501
2 0.049924
3 0.044901
4 0.039693
5 0.034525
6 0.029574
7 0.024969
8 0.020795
9 0.017095
10 0.000000
>>> n = 12
>>> p = 0.50
>>> loc = -6
>>> df = uh.LBN(index, n, p, loc)
>>> df
LBN
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.047211
-5 0.060699
-4 0.072081
-3 0.080090
-2 0.084094
-1 0.084094
0 0.080590
1 0.074391
2 0.066420
3 0.057564
4 0.048570
5 0.039999
6 0.032221
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i < loc:
values.append(0)
elif i > loc + n:
values.append(0)
else:
values.append(nbinom.pmf(i - loc, n, p, loc))
pdf = pnd.DataFrame({fitname: values}, index=index)
pdf[pdf < 0] = 0
return pdf
[docs]
def LGA(index, alpha=1, loc=0, scale=1):
"""
Hydrogramme unitaire par loi statistique GAMMA.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
alpha : float
Paramètre de la loi. Défaut : 1.
loc : float
Départ. Défaut : 0.
scale : float
Echelle. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.gamma
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> alpha = 6.470
>>> loc = -3.178
>>> scale = 1.128
>>> df = uh.LGA(index, alpha, loc, scale)
>>> df
LGA
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.000000
-4 0.000000
-3 0.064537
-2 0.110755
-1 0.141350
0 0.148574
1 0.136158
2 0.112676
3 0.086169
4 0.061884
5 0.042223
6 0.027607
7 0.017414
8 0.010651
9 0.006344
10 0.003692
>>> alpha = 4
>>> loc = -6
>>> scale = 12
>>> df = uh.LGA(index, alpha, loc, scale)
>>> df
LGA
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.001053
-5 0.001538
-4 0.002113
-3 0.002768
-2 0.003493
-1 0.004278
0 0.005109
1 0.005977
2 0.006868
3 0.007772
4 0.008678
5 0.009577
6 0.010459
7 0.011318
8 0.012145
9 0.012935
10 0.013683
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i < loc:
values.append(0)
else:
values.append(gamma.pdf(i - loc, alpha, loc, scale))
pdf = pnd.DataFrame({fitname: values}, index=index)
pdf[pdf < 0] = 0
return pdf
[docs]
def LGD(index, alpha=1, loc=0, scale=1):
"""
Hydrogramme unitaire par loi statistique DOUBLE GAMMA.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
alpha : float
Paramètre de la loi. Défaut : 1.
loc : float
Départ. Défaut : 0.
scale : float
Echelle. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.dgamma
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> alpha = 4
>>> loc = -6
>>> scale = 12
>>> df = uh.LGD(index, alpha, loc, scale)
>>> df
LGD
-11 0.000331
-10 0.000184
-9 0.000085
-8 0.000027
-7 0.000004
-6 0.000000
-5 0.000004
-4 0.000027
-3 0.000085
-2 0.000184
-1 0.000331
0 0.000527
1 0.000769
2 0.001056
3 0.001384
4 0.001747
5 0.002139
6 0.002555
7 0.002988
8 0.003434
9 0.003886
10 0.004339
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame({fitname: dgamma.pdf(index, alpha, loc, scale)},
index=index)
return pdf
[docs]
def LLD(index, alpha=1, loc=0):
"""
Hydrogramme unitaire par loi statistique LAPLACE DISCRETE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
alpha : float
Paramètre de la loi. Défaut : 1.
loc : int
Départ. Défaut : 0.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.dlaplace
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> n = 20.969
>>> p = 0.50
>>> loc = -11
>>> df = uh.LLD(index, n, p, loc)
>>> df
LLD
-11 0.004441
-10 0.006159
-9 0.008542
-8 0.011846
-7 0.016428
-6 0.022782
-5 0.031594
-4 0.043814
-3 0.060762
-2 0.084264
-1 0.116858
0 0.162059
1 0.116858
2 0.084264
3 0.060762
4 0.043814
5 0.031594
6 0.022782
7 0.016428
8 0.011846
9 0.008542
10 0.006159
>>> n = 12
>>> p = 0.50
>>> loc = -6
>>> df = uh.LLD(index, n, p, loc)
>>> df
LLD
-11 0.033221
-10 0.044843
-9 0.060532
-8 0.081710
-7 0.110297
-6 0.148885
-5 0.110297
-4 0.081710
-3 0.060532
-2 0.044843
-1 0.033221
0 0.024611
1 0.018232
2 0.013507
3 0.010006
4 0.007413
5 0.005491
6 0.004068
7 0.003014
8 0.002233
9 0.001654
10 0.001225
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame({fitname: dlaplace.pmf(index, alpha, loc)},
index=index)
pdf[pdf < 0.001] = 0
return pdf
[docs]
def LNG(index, loc=0, scale=1):
"""
Hydrogramme unitaire par loi statistique NORMALE GAUSS.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc : float
Départ. Défaut : 0.
scale : float
Echelle. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.norm
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc = -0.031
>>> scale = 2.875
>>> df = uh.LNG(index, loc, scale)
>>> df
LNG
-11 0.000000
-10 0.000000
-9 0.001069
-8 0.002978
-7 0.007351
-6 0.016079
-5 0.031161
-4 0.053509
-3 0.081413
-2 0.109754
-1 0.131101
0 0.138754
1 0.130121
2 0.108120
3 0.079601
4 0.051927
5 0.030014
6 0.015371
7 0.006975
8 0.002805
9 0.000000
10 0.000000
>>> loc = -6
>>> scale = 12
>>> df = uh.LNG(index, loc, scale)
>>> df
LNG
-11 0.030481
-10 0.031449
-9 0.032222
-8 0.032787
-7 0.033130
-6 0.033245
-5 0.033130
-4 0.032787
-3 0.032222
-2 0.031449
-1 0.030481
0 0.029339
1 0.028044
2 0.026621
3 0.025095
4 0.023493
5 0.021841
6 0.020164
7 0.018488
8 0.016833
9 0.015221
10 0.013668
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame({fitname: norm.pdf(index, loc, scale)}, index=index)
pdf[pdf < 0.001] = 0
return pdf
[docs]
def LSK(index, mu1=1, mu2=1, loc=0):
"""
Hydrogramme unitaire par loi statistique SKELLAM.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
mu1 : float
Paramètre de forme mu1 de la loi statistique. Défaut : 1.
mu2 : float
Paramètre de forme mu2 de la loi statistique. Défaut : 1.
loc : float
Départ. Défaut : 0.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.skellam
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> mu1 = 3.597
>>> mu2 = 4.670
>>> loc = 1.000
>>> df = uh.LSK(index, mu1, mu2, loc)
>>> df
LSK
-11 0.000000
-10 0.000000
-9 0.001478
-8 0.003597
-7 0.008071
-6 0.016597
-5 0.031095
-4 0.052734
-3 0.080410
-2 0.109491
-1 0.132272
0 0.140982
1 0.132069
2 0.108589
3 0.078472
4 0.050032
5 0.028301
6 0.014296
7 0.006493
8 0.002669
9 0.000000
10 0.000000
>>> mu1 = 4
>>> mu2 = 4
>>> loc = -6
>>> df = uh.LSK(index, mu1, mu2, loc)
>>> df
LSK
-11 0.028694
-10 0.050500
-9 0.079194
-8 0.109896
-7 0.134142
-6 0.143432
-5 0.134142
-4 0.109896
-3 0.079194
-2 0.050500
-1 0.028694
0 0.014633
1 0.006745
2 0.002829
3 0.001087
4 0.000000
5 0.000000
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame({fitname: skellam.pmf(index, mu1, mu2, loc)},
index=index)
pdf[pdf < 0.001] = 0
return pdf
[docs]
def LWE(index, c=1, loc=0, scale=1):
"""
Hydrogramme unitaire par loi statistique WEIBULL.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
c : float
Paramètre de la loi. Défaut : 1.
loc : float
Départ. Défaut : 0.
scale : float
Echelle. Défaut : 1.
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.weibull_min
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> c = 3.047
>>> loc = -3.805
>>> scale = 8.799
>>> df = uh.LWE(index, c, loc, scale)
>>> df
LWE
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.000000
-4 0.000000
-3 0.080203
-2 0.106933
-1 0.126906
0 0.135311
1 0.129911
2 0.112119
3 0.086629
4 0.059587
5 0.036245
6 0.019353
7 0.008999
8 0.003614
9 0.001243
10 0.000363
>>> c = 4
>>> loc = -6
>>> scale = 12
>>> df = uh.LWE(index, c, loc, scale)
>>> df
LWE
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.058931
-4 0.081062
-3 0.102482
-2 0.119095
-1 0.126728
0 0.122626
1 0.106902
2 0.083011
3 0.056666
4 0.033505
5 0.016882
6 0.007121
7 0.002467
8 0.000688
9 0.000151
10 0.000025
"""
fitname = inspect.stack()[0][3]
values = []
for i in index:
if i <= loc:
values.append(0)
else:
values.append(weibull_min.pdf(i - loc, c, loc, scale))
pdf = pnd.DataFrame({fitname: values}, index=index)
pdf[pdf < 0] = 0
return pdf
[docs]
def RE1(index, loc=0, scale=1):
"""
Hydrogramme unitaire de forme géométrique RECTANGLE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc : float
Départ
scale : float
Echelle
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.uniform
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc = -12.564
>>> scale = 17.125
>>> df = uh.RE1(index, loc, scale)
>>> df
RE1
-11 0.058394
-10 0.058394
-9 0.058394
-8 0.058394
-7 0.058394
-6 0.058394
-5 0.058394
-4 0.058394
-3 0.058394
-2 0.058394
-1 0.058394
0 0.058394
1 0.058394
2 0.058394
3 0.058394
4 0.058394
5 0.000000
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
>>> loc = -6
>>> scale = 12
>>> df = uh.RE1(index, loc, scale)
>>> df
RE1
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.083333
-5 0.083333
-4 0.083333
-3 0.083333
-2 0.083333
-1 0.083333
0 0.083333
1 0.083333
2 0.083333
3 0.083333
4 0.083333
5 0.083333
6 0.083333
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame({fitname: uniform.pdf(index, loc, scale)}, index=index)
return pdf
[docs]
def RE2(index, loc1=0, scale1=1, loc2=0, scale2=1):
"""
Hydrogramme unitaire de forme géométrique DOUBLE RECTANGLE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc1 : float
Départ du rectangle 1
scale1 : float
Echelle du rectangle 1
loc2 : float
Départ du rectangle 2
scale2 : float
Echelle du rectangle 2
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.uniform
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc1 = -3.974
>>> scale1 = 6.780
>>> loc2 = -14.699
>>> scale2 = 34.547
>>> df = uh.RE2(index, loc1, scale1, loc2, scale2)
>>> df
RE2
-11 0.028946
-10 0.028946
-9 0.028946
-8 0.028946
-7 0.028946
-6 0.028946
-5 0.028946
-4 0.028946
-3 0.147493
-2 0.147493
-1 0.147493
0 0.147493
1 0.147493
2 0.147493
3 0.028946
4 0.028946
5 0.028946
6 0.028946
7 0.028946
8 0.028946
9 0.028946
10 0.028946
>>> loc1 = -6
>>> scale1 = 12
>>> loc2 = -12
>>> scale2 = 24
>>> df = uh.RE2(index, loc1, scale1, loc2, scale2)
>>> df
RE2
-11 0.041667
-10 0.041667
-9 0.041667
-8 0.041667
-7 0.041667
-6 0.083333
-5 0.083333
-4 0.083333
-3 0.083333
-2 0.083333
-1 0.083333
0 0.083333
1 0.083333
2 0.083333
3 0.083333
4 0.083333
5 0.083333
6 0.083333
7 0.041667
8 0.041667
9 0.041667
10 0.041667
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame(
{fitname: [max(uniform.pdf(i, loc1, scale1),
uniform.pdf(i, loc2, scale2)) for i in index]},
index=index)
pdf[pdf < 0] = 0
return pdf
[docs]
def RT1(index, loc1=0, scale1=1, mode2=0, loc2=0, scale2=1):
"""
Hydrogramme unitaire de forme géométrique RECTANGLE + TRIANGLE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
loc1 : float
Départ du rectangle 1
scale1 : float
Echelle du rectangle 1
mode2 : float
Départ du triangle 2 (paramètre c de scipy.stats.triang)
loc2 : float
Départ du triangle 2
scale2 : float
Echelle du triangle 2
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.uniform
scipy.stats.triang
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> loc1 = -20.368
>>> scale1 = 29.368
>>> mode2 = 0.634
>>> loc2 = -5.008
>>> scale2 = 8.856
>>> df = uh.RT1(index, loc1, scale1, mode2, loc2, scale2)
>>> df
RT1
-11 0.034051
-10 0.034051
-9 0.034051
-8 0.034051
-7 0.034051
-6 0.034051
-5 0.034051
-4 0.040544
-3 0.080766
-2 0.120988
-1 0.161210
0 0.201433
1 0.198433
2 0.128758
3 0.059084
4 0.034051
5 0.034051
6 0.034051
7 0.034051
8 0.034051
9 0.034051
10 0.000000
>>> loc1 = -6
>>> scale1 = 12
>>> mode2 = 0.75
>>> loc2 = -12
>>> scale2 = 24
>>> df = uh.RT1(index, loc1, scale1, mode2, loc2, scale2)
>>> df
RT1
-11 0.004630
-10 0.009259
-9 0.013889
-8 0.018519
-7 0.023148
-6 0.083333
-5 0.083333
-4 0.083333
-3 0.083333
-2 0.083333
-1 0.083333
0 0.083333
1 0.083333
2 0.083333
3 0.083333
4 0.083333
5 0.083333
6 0.083333
7 0.069444
8 0.055556
9 0.041667
10 0.027778
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame(
{fitname: [max(uniform.pdf(i, loc1, scale1),
triang.pdf(i, mode2, loc2, scale2)) for i in index]},
index=index)
pdf[pdf < 0] = 0
return pdf
[docs]
def TG1(index, mode=0, loc=0, scale=1):
"""
Hydrogramme unitaire de forme géométrique TRIANGLE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
mode : float
Départ du triangle (paramètre c de scipy.stats.triang)
loc : float
Départ du triangle
scale : float
Echelle du triangle
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.triang
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> mode = 0.712
>>> loc = -8.376
>>> scale = 13.133
>>> df = uh.TG1(index, mode, loc, scale)
>>> df
TG1
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.006124
-7 0.022410
-6 0.038696
-5 0.054983
-4 0.071269
-3 0.087555
-2 0.103841
-1 0.120128
0 0.136414
1 0.151269
2 0.111006
3 0.070743
4 0.030479
5 0.000000
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
>>> mode = 0.75
>>> loc = -6
>>> scale = 12
>>> df = uh.TG1(index, mode, loc, scale)
>>> df
TG1
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.000000
-5 0.018519
-4 0.037037
-3 0.055556
-2 0.074074
-1 0.092593
0 0.111111
1 0.129630
2 0.148148
3 0.166667
4 0.111111
5 0.055556
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame(
{fitname: triang.pdf(index, mode, loc, scale)}, index=index)
return pdf
[docs]
def TG2(index, mode1=0, loc1=0, scale1=1, mode2=0, loc2=0, scale2=1):
"""
Hydrogramme unitaire de forme géométrique DOUBLE TRIANGLE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
mode1 : float
Départ du triangle 1 (paramètre c de scipy.stats.triang)
loc1 : float
Départ du triangle 1
scale1 : float
Echelle du triangle 1
mode2 : float
Départ du triangle 2 (paramètre c de scipy.stats.triang)
loc2 : float
Départ du triangle 2
scale2 : float
Echelle du triangle 2
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.triang
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> mode1 = 1.000
>>> loc1 = -5.313
>>> scale1 = 7.313
>>> mode2 = 0.580
>>> loc2 = -12.575
>>> scale2 = 22.393
>>> df = uh.TG2(index, mode1, loc1, scale1, mode2, loc2, scale2)
>>> df
TG2
-11 0.010831
-10 0.017707
-9 0.024584
-8 0.031461
-7 0.038337
-6 0.045214
-5 0.052091
-4 0.058967
-3 0.086500
-2 0.123897
-1 0.161294
0 0.198691
1 0.236088
2 0.273486
3 0.064746
4 0.055250
5 0.045753
6 0.036257
7 0.026761
8 0.017264
9 0.007768
10 0.000000
>>> mode1 = 0.50
>>> loc1 = -6
>>> scale1 = 12
>>> mode2 = 0.75
>>> loc2 = -12
>>> scale2 = 24
>>> df = uh.TG2(index, mode1, loc1, scale1, mode2, loc2, scale2)
>>> df
TG2
-11 0.004630
-10 0.009259
-9 0.013889
-8 0.018519
-7 0.023148
-6 0.027778
-5 0.032407
-4 0.055556
-3 0.083333
-2 0.111111
-1 0.138889
0 0.166667
1 0.138889
2 0.111111
3 0.083333
4 0.074074
5 0.078704
6 0.083333
7 0.069444
8 0.055556
9 0.041667
10 0.027778
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame(
{fitname: [max(triang.pdf(i, mode1, loc1, scale1),
triang.pdf(i, mode2, loc2, scale2)) for i in index]},
index=index)
return pdf
[docs]
def TR1(index, mode1=0, loc1=0, scale1=1, loc2=0, scale2=1):
"""
Hydrogramme unitaire de forme géométrique TRIANGLE + RECTANGLE.
Parameters
----------
index : list, pandas.Index
Indices temporels sur lesquels il faut déterminer l'hydrogramme
mode1 : float
Départ du triangle 1 (paramètre c de scipy.stats.triang)
loc1 : float
Départ du triangle 1
scale1 : float
Echelle du triangle 1
loc2 : float
Départ du rectangle 2
scale2 : float
Echelle du rectangle 2
Returns
-------
df : pandas.DataFrame
Hydrogramme unitaire
See Also
--------
scipy.stats.triang
scipy.stats.uniform
Examples
--------
>>> from pyspc.model.mohys import unit_hydrograph as uh
>>> index = [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
... 5, 6, 7, 8, 9, 10]
>>> mode1 = 0.656
>>> loc1 = -6.727
>>> scale1 = 11.363
>>> loc2 = -3.035
>>> scale2 = 48.770
>>> df = uh.TR1(index, mode1, loc1, scale1, loc2, scale2)
>>> df
TR1
-11 0.000000
-10 0.000000
-9 0.000000
-8 0.000000
-7 0.000000
-6 0.017166
-5 0.040779
-4 0.064391
-3 0.088003
-2 0.111616
-1 0.135228
0 0.158841
1 0.163723
2 0.118695
3 0.073666
4 0.028638
5 0.020504
6 0.020504
7 0.020504
8 0.020504
9 0.020504
10 0.020504
>>> mode1 = 0.50
>>> loc1 = -6
>>> scale1 = 12
>>> loc2 = -12
>>> scale2 = 24
>>> df = uh.TR1(index, mode1, loc1, scale1, loc2, scale2)
>>> df
TR1
-11 0.041667
-10 0.041667
-9 0.041667
-8 0.041667
-7 0.041667
-6 0.041667
-5 0.041667
-4 0.055556
-3 0.083333
-2 0.111111
-1 0.138889
0 0.166667
1 0.138889
2 0.111111
3 0.083333
4 0.055556
5 0.041667
6 0.041667
7 0.041667
8 0.041667
9 0.041667
10 0.041667
"""
fitname = inspect.stack()[0][3]
pdf = pnd.DataFrame(
{fitname: [max(triang.pdf(i, mode1, loc1, scale1),
uniform.pdf(i, loc2, scale2)) for i in index]},
index=index)
return pdf
UH_DICT = {
'FBN': FBN,
'FEL': FEL,
'FGT': FGT,
'FPA': FPA,
'FPU': FPU,
'FSI': FSI,
'LBI': LBI,
'LBN': LBN,
'LGA': LGA,
'LGD': LGD,
'LLD': LLD,
'LNG': LNG,
'LSK': LSK,
'LWE': LWE,
'RE1': RE1,
'RE2': RE2,
'RT1': RT1,
'TG1': TG1,
'TG2': TG2,
'TR1': TR1,
}
"""Dictionnaire des fonctions de construction des hydrogrammes unitaires"""