... | @@ -25,7 +25,7 @@ freq_depassement(obs) = ( rang(obs) - a ) / ( N + b ) |
... | @@ -25,7 +25,7 @@ freq_depassement(obs) = ( rang(obs) - a ) / ( N + b ) |
|
|
|
|
|
On vérifie que pour les rangs petits proches de un on tend vers une fréquence nulle, pour des rangs proches de N on tend vers une fréquence de 1 en restant en dessous, et entre deux observations la différence de fréquence est constante, égale à 1 / (N+b) donc légèrement inférieure à 1/N.
|
|
On vérifie que pour les rangs petits proches de un on tend vers une fréquence nulle, pour des rangs proches de N on tend vers une fréquence de 1 en restant en dessous, et entre deux observations la différence de fréquence est constante, égale à 1 / (N+b) donc légèrement inférieure à 1/N.
|
|
|
|
|
|
On va raisonner dans la suite soit en fréquence soit en période de retour, notée T, si on suppose que l'échantillon correspond à des maxima annuels (une valeur par an), liées par T= 1/f.
|
|
On va raisonner dans la suite soit en fréquence soit en période de retour, notée T, si on suppose que l'échantillon correspond à des maxima annuels (une valeur par an), liées par T= 1/f si f = fréquence au dépassement = 1 - fréquence au non dépassement.
|
|
La fonction pour calculer les périodes de retour d'un échantillon donnée prend en argument N et les paramètres a et b ; elle s'écrit donc :
|
|
La fonction pour calculer les périodes de retour d'un échantillon donnée prend en argument N et les paramètres a et b ; elle s'écrit donc :
|
|
``` python
|
|
``` python
|
|
def T_emp_parametre(n_annees, a , b):
|
|
def T_emp_parametre(n_annees, a , b):
|
... | @@ -56,12 +56,13 @@ def T_emp_parametre_avec_defaut_Tchego(n_annees, a=0.3, b=0.4): |
... | @@ -56,12 +56,13 @@ def T_emp_parametre_avec_defaut_Tchego(n_annees, a=0.3, b=0.4): |
|
```
|
|
```
|
|
|
|
|
|
### Les variables du programme principal
|
|
### Les variables du programme principal
|
|
Les valeurs *a*, *b* et *N* vont être transmises des curseurs aux fonctions puis aux graphiques ; on peut les passer comme arguments mais on préfèrera ici les déclarer comme variables globales dans les fonctions.
|
|
|
|
C'est sans doute à discuter.
|
|
|
|
Le critère retenu ici est que le slider qui sert à modifier b va déclencher un recalcul du vecteur des fréquences (ou T) qui nécessite de connaître a et b aussi.
|
|
|
|
|
|
|
|
On donc définir *a*, *b* et *N* dès le départ, avec une valeur par défaut.
|
|
On a ici une difficulté ; les sliders vont permettre de modifier a, b et N ; les modifications doivent être répercutées pour tout le programme (si je change a, il doit être modifié pour tous les calculs qui suivent). Cela va nous permettre de manipuler la notion de portée des variables.
|
|
Dans cette version, on insiste sur le fait que la fréquence empirique d'une observation s'exprime uniquement en fonction de son rang ; on propose de créer un *échantillon* de N valeurs de 1 à N... ce qui correspondra de fait aux rangs !
|
|
|
|
|
|
#### initialisations
|
|
|
|
|
|
|
|
On définit *a*, *b* et *N* dès le départ, avec une valeur par défaut.
|
|
|
|
Il faut également un échantillon de N valeurs. Dans cette version, on insiste sur le fait que la fréquence empirique d'une observation s'exprime uniquement en fonction de son rang ; on propose de créer un *échantillon* de N valeurs de 1 à N... ce qui correspondra de fait aux rangs !
|
|
Une autre solution, plus radicale, serait de décider que echantillon=[1]*N mais tous les graphiques seraient alors horizontaux et plus difficiles à lire... mais c'est une option quand même.
|
|
Une autre solution, plus radicale, serait de décider que echantillon=[1]*N mais tous les graphiques seraient alors horizontaux et plus difficiles à lire... mais c'est une option quand même.
|
|
|
|
|
|
``` python
|
|
``` python
|
... | @@ -102,6 +103,20 @@ N = 10 |
... | @@ -102,6 +103,20 @@ N = 10 |
|
methode_echantillonnage = echantillon_uniforme
|
|
methode_echantillonnage = echantillon_uniforme
|
|
echantillon = methode_echantillonnage(N)
|
|
echantillon = methode_echantillonnage(N)
|
|
en_periode_de_retour = True
|
|
en_periode_de_retour = True
|
|
|
|
|
|
|
|
#### notion de portée des variables dans une fonction, mot-clé "global"
|
|
|
|
|
|
|
|
Depuis les fonctions, les valeurs de *a*, *b* et *N* sont connues : si on ne définit pas une variable, le code va chercher si elle n'est pas définie au niveau supérieur.
|
|
|
|
Cependant, on a quand même défini ces variables explicitement comme **arguments des fonctions**, d'autant plus qu'un des buts du code est de montrer que les fréquences ou périodes de retour calculées ne dépendent que du rang de l'observation et pas de la fonction.
|
|
|
|
|
|
|
|
Des curseurs vont permettre de modifier les valeurs de *a*, *b* et *N* ; ces modifications devront être transmises à des fonctions pour recalculer et retracer le graphique.
|
|
|
|
Il y a deux façons de répercuter les modifications de a, b et N dans tout le programme (en fait, sans doute plus...):
|
|
|
|
- on va déclarer dans les fonctions activées par les sliders qu'on travaille sur a, b ou N "global", c'est à dire que si on les modifie dans la fonction la modification sera répercutée dans la variable au niveau du programme principal (ce qui n'est pas le cas sinon).
|
|
|
|
- on pourrait travailler dans le code avec l'attribut "val" des sliders, à condition que ces sliders soient bien connus du programme principal, ce qui est le cas ici car ils sont définis dans le corps du programme .
|
|
|
|
|
|
|
|
|
|
|
|
C'est sans doute à discuter : quelle méthode est la plus claire ? la plus sûre ?
|
|
|
|
|
|
```
|
|
```
|
|
|
|
|
|
## La figure
|
|
## La figure
|
... | | ... | |