[Javascript] Moyennes sur long terme.

Et là comme son nom l’indique un forum pour dire quelque chose qui ne rentre pas dans un des différents forums ci-dessus, réclamer, critiquer, améliorer, parler quoi !
Répondre
Avatar du membre
WakawaRider
Participation 0
Participation 0
Messages : 23
Enregistré le : 29 janv. 2014, 18:39
Localisation : Villeneuve sur Lot
Contact :

[Javascript] Moyennes sur long terme.

Message par WakawaRider » 18 févr. 2014, 14:55

Bonjour,
Dans le template start.html le menu permet de voir à la rubrique Valeur sur long terme/Total les moyennes de pluies et de températures mensuelles telles que la station les a calculées depuis sa mise en place.
N'ayant pas de référence Météo France à Villeneuve Sur Lot, Il me paraissait intéressant de faire figurer ces valeurs sur le site dans les tableaux et graphiques comparatifs.
Après avoir cherché sans succès le tag indiquant ces variables, Je les ai calculées en Javascript.
Voici les données comparées entre celles de WsWin et celles calculées avec la fontion Javascript aujourd'hui pour la pluviométrie:
tableau.jpg
tableau.jpg (43.49 Kio) Vu 20476 fois
Notez que le total WsWin est faux puisque si on calcul la somme des mois cela donne 698,42.
Ces valeurs sont calculées du 1er janvier 2007 au 18 février 2014.
Le mois en cours (février 2014) n'est pas pris en compte, ni dans le calcul WsWIn ni dans celui de la fonction Javascript.
En considérant que la précision de la fonction Javascript est légèrement inférieure (volontairement) à celle de WsWin, on peut considérer que les résultats sont similaires.
Je vous propose donc cette fonction avec un petit tuto à ma façon pour sa mise en place dans votre page html.
Modifié en dernier par WakawaRider le 18 févr. 2014, 17:15, modifié 1 fois.
Image

mm91
Participation 6
Participation 6
Messages : 2581
Enregistré le : 31 mars 2007, 07:46
Localisation : 25 Km au sud-ouest de Paris FRANCE
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par mm91 » 18 févr. 2014, 16:37

La moyenne de chaque mois de toute la période, même avec 3 décimales affichées, est forcément arrondie.
Il ne faut donc pas faire la somme de ces moyennes pour trouver la moyenne annuelle, mais partir du total de pluie réel et diviser par le nombre d'années (au prorata du nombre de mois)
Je pense que c'est ça que fait Wswin32 (*)

Bon, de toute façon la différence est infime (2.7 mm sur la moyenne annuelle pour tes chiffres)


Mais quel est l'intérêt de ta méthode puisque Wswin32 fait ces calculs et donne ces résultats ?

Excuse moi si j'ai loupé quelque chose.

(*) Edit
Je viens de vérifier chez moi:
sur 10 ans, Wswin32 fais le calcul sur le nombre de mois réels d'enregistrements complets,
soit 119 mois chez moi.

le total de pluie est 6566.7 mm

soit 6566.7 / 119 *12 = 662.188 mm de moyenne annuelle

pour 662.191 mm
donné dans ce tableau (disponible sur mon site):
Image
Michel
La Crosse WS2300 modifiée (pluvio, abri ventilé, mesure d'ensoleillement), Wswin32, Watchdog.
mon site météo

Avatar du membre
WakawaRider
Participation 0
Participation 0
Messages : 23
Enregistré le : 29 janv. 2014, 18:39
Localisation : Villeneuve sur Lot
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par WakawaRider » 18 févr. 2014, 17:01

Il faut d'abord pouvoir disposer de nos variables en Javascript.
Pour cela on déclare dans WsWin un fichier texte "custom" qui permettra à WsWin de générer sur notre serveur un fichier contenant les variables Javascript.
Je vais prendre un exemple simple pour illustrer ce tuto en déclarant les variables de moyennes de pluies du premier trimestre.
Le fichier texte se nomme (par exemple) varwswin.txt, sont contenu est :

Code : Tout sélectionner

<!-- %customfile=varwswin.js% -->
%unit_off%
var rain_mpast01 = "%rain_mpast[01~0000]%,%rain_mpast[01~-001]%,%rain_mpast[01~-002]%,%rain_mpast[01~-003]%,%rain_mpast[01~-004]%,%rain_mpast[01~-005]%,%rain_mpast[01~-006]%,"+
"%rain_mpast[01~-007]%,%rain_mpast[01~-008]%,%rain_mpast[01~-009]%,%rain_mpast[01~-010]%,%rain_mpast[01~-011]%,%rain_mpast[01~-012]%,%rain_mpast[01~-013]%,"+
"%rain_mpast[01~-014]%,%rain_mpast[01~-015]%,%rain_mpast[01~-016]%,%rain_mpast[01~-017]%,%rain_mpast[01~-018]%,%rain_mpast[01~-019]%,%rain_mpast[01~-020]%"
var rain_mpast02 = "%rain_mpast[02~0000]%,%rain_mpast[02~-001]%,%rain_mpast[02~-002]%,%rain_mpast[02~-003]%,%rain_mpast[02~-004]%,%rain_mpast[02~-005]%,%rain_mpast[02~-006]%,"+
"%rain_mpast[02~-007]%,%rain_mpast[02~-008]%,%rain_mpast[02~-009]%,%rain_mpast[02~-010]%,%rain_mpast[02~-011]%,%rain_mpast[02~-012]%,%rain_mpast[02~-013]%,"+
"%rain_mpast[02~-014]%,%rain_mpast[02~-015]%,%rain_mpast[02~-016]%,%rain_mpast[02~-017]%,%rain_mpast[02~-018]%,%rain_mpast[02~-019]%,%rain_mpast[02~-020]%"
var rain_mpast03 = "%rain_mpast[03~0000]%,%rain_mpast[03~-001]%,%rain_mpast[03~-002]%,%rain_mpast[03~-003]%,%rain_mpast[03~-004]%,%rain_mpast[03~-005]%,%rain_mpast[03~-006]%,"+
"%rain_mpast[03~-007]%,%rain_mpast[03~-008]%,%rain_mpast[03~-009]%,%rain_mpast[03~-010]%,%rain_mpast[03~-011]%,%rain_mpast[03~-012]%,%rain_mpast[03~-013]%,"+
"%rain_mpast[03~-014]%,%rain_mpast[03~-015]%,%rain_mpast[03~-016]%,%rain_mpast[03~-017]%,%rain_mpast[03~-018]%,%rain_mpast[03~-019]%,%rain_mpast[03~-020]%"
%unit_on%
Il va permettre à WsWin de générer à la fréquence choisie (toutes les minutes, toutes les heures, ...) le fichier varwswin.js qui va contenir nos variables, ce qui donne ceci :

Code : Tout sélectionner

var rain_mpast01 = "119.2,135.4,46.8,34.4,79.8,84.8,91.6,"+
"29.4,--,--,--,--,--,--,"+
"--,--,--,--,--,--,--"
var rain_mpast02 = "58.2,63.0,14.0,40.6,35.4,11.8,15.6,"+
"110.0,--,--,--,--,--,--,"+
"--,--,--,--,--,--,--"
var rain_mpast03 = "0.0,86.6,42.0,28.0,51.0,26.6,74.6,"+
"64.0,--,--,--,--,--,--,"+
"--,--,--,--,--,--,--"
Quelques explications sont nécessaires :
- WsWin ne peux traiter que 10 tags maximum par ligne.
- Chaque variable contient 21 tags. Le premier est celui de l'année en cours (%rain_mpast[01~0000]%), le suivant celui de l'année précédente (%rain_mpast[01~-001]%) puis celui d'il y a 2 ans (%rain_mpast[01~-002]%) etc, jusqu'à celui d'il y a 20 ans (rain_mpast[01~-020]%)
- Dans ce cas là, 3 lignes sont donc nécessaires pour reconstituer la variable complète ce qui impose de les "assembler" en javascript avec le signe "+" en fin de ligne.

Une petite parenthèse pour dire que la moyenne est plus précisément calculée sur les 20 dernières années et l'année en cours. Libre à vous d'adapter cette variable à vos besoins.

- La première variable, celle de l'année en cours, retourne "0.0" pour les mois qui ne sont pas encore commencés.
- Les années inexistantes (à partir de la 8éme année dans mon exemple puisque la station a enregistré des relevés depuis 2007) sont représentées par le signe "--".

Pour ne pas surcharger la page html, je crée un autre fichier Javascript qui va contenir mes différentes fonctions (meteo-anglade.js par exemple). Ces 2 fichiers sont déclarés dans ma page html comme ceci :

Code : Tout sélectionner

<!doctype html>
<head>
<script type="text/javascript" src="js/varwswin.js"></script>
<script type="text/javascript" src="js/mto-anglade.js"></script>
</head>
Voici la fonction dans le fichier meteo-anglade.js :

Code : Tout sélectionner

// Calcul de la moyenne des données mensuelles d'une variable
// m_capteur = données enregistrées par la station pour une valeur mensuelle
// m_analyse = numéro du mois de la valeur mensuelle de 1 à 12
function statpast(m_capteur, m_analyse) {
  // dispose-t-on des données du mois
  // précédent ?
var d = new Date();
    var m_courant = d.getMonth() + 1;
    if ( (m_analyse >= m_courant) && 
    (! ((m_analyse == 12) && (m_courant == 1)) ) )
    {
        if (m_analyse != m_courant) {
            // le mois analysé n'est pas le mois courant
            // le 0.0 éventuel doit être retiré
            m_capteur = m_capteur.replace(/^0\.0,/,"");

        } else {
            // le mois analysé est le mois courant
            // la mesure n'étant pas complète, on retire
            // la première mesure
            m_capteur = m_capteur.replace(/^\d+\.?\d*,/,"");   
        }
    };
  // capture des chiffres
  var myRe = /(\d+\.?\d*)/g;
  var myArray = m_capteur.match(myRe);
  // calcul de la moyenne des précipitations
  // contenues dans le tableau myArray
  var moyenne = 0;
  if (myArray.length > 0) {
    for (var i=0; i<myArray.length; i++) {
      moyenne = moyenne  + Number(myArray[i]);
    }
    moyenne = (moyenne / myArray.length).toFixed(2);
  } else {
    // erreur, aucune précipitation détectée
    moyenne = -1;
  };
  return moyenne;
};
Pour insérer une variable dans la page html il suffit d'appeler la fonction et la variable comme ceci par exemple :

Code : Tout sélectionner

<script>document.write ("Moyenne de janvier : "+statpast(rain_mpast01, 1)+" mm")</script>
La première variable est celle des valeurs du mois de janvier (rain_mpast01) la seconde est celle du numéro du mois de la variable (1 pour janvier, 2 pour février, etc).
A l'endroit où ce script sera inséré il sera écrit : Moyenne de janvier : 77.67 mm

C'est cette fonction que j'utilise par exemple dans le tableau à cette adresse : http://www.meteo-anglade.fr/mto-anglade-analyse.html#G1

J'espère que ce petit tuto est assez clair et qu'il pourra être utile à quelques-uns d'entre vous.
Cordialement
Laurent
Image

Avatar du membre
WakawaRider
Participation 0
Participation 0
Messages : 23
Enregistré le : 29 janv. 2014, 18:39
Localisation : Villeneuve sur Lot
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par WakawaRider » 18 févr. 2014, 17:06

Bonjour Michel,
l'intérêt est de pouvoir utiliser cette variable autre part que dans le tableau (très coloré) de WsWin.
A noter également que cette fonction peut-être utilisée pour d'autres capteurs ...
Cordialement
Laurent
Image

Avatar du membre
WakawaRider
Participation 0
Participation 0
Messages : 23
Enregistré le : 29 janv. 2014, 18:39
Localisation : Villeneuve sur Lot
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par WakawaRider » 18 févr. 2014, 17:13

En ce qui concerne la précision des valeurs calculées :

Elle peut être réglée en modifiant le nombre de chiffres après la virgule.
Dans la fonction Javascript elle est représenté par ".toFixed(2)" pour 2 chiffres après la virgule.
Image

mm91
Participation 6
Participation 6
Messages : 2581
Enregistré le : 31 mars 2007, 07:46
Localisation : 25 Km au sud-ouest de Paris FRANCE
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par mm91 » 18 févr. 2014, 17:33

WakawaRider a écrit :En ce qui concerne la précision des valeurs calculées :

Elle peut être réglée en modifiant le nombre de chiffres après la virgule.
Dans la fonction Javascript elle est représenté par ".toFixed(2)" pour 2 chiffres après la virgule.
C'est une règle générale assez logique:

La moyenne de moyennes fait bien une moyenne,
mais il est bien évident qu'il vaut mieux partir de la somme exacte et diviser par le nombre exact pour faire une moyenne.

voir "Edit" ci-dessus
Michel
La Crosse WS2300 modifiée (pluvio, abri ventilé, mesure d'ensoleillement), Wswin32, Watchdog.
mon site météo

mm91
Participation 6
Participation 6
Messages : 2581
Enregistré le : 31 mars 2007, 07:46
Localisation : 25 Km au sud-ouest de Paris FRANCE
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par mm91 » 18 févr. 2014, 17:34

WakawaRider a écrit :Bonjour Michel,
l'intérêt est de pouvoir utiliser cette variable autre part que dans le tableau (très coloré) de WsWin.
A noter également que cette fonction peut-être utilisée pour d'autres capteurs ...
Cordialement
Laurent
OK, merci.
Beau travail quand même.
Michel
La Crosse WS2300 modifiée (pluvio, abri ventilé, mesure d'ensoleillement), Wswin32, Watchdog.
mon site météo

mm91
Participation 6
Participation 6
Messages : 2581
Enregistré le : 31 mars 2007, 07:46
Localisation : 25 Km au sud-ouest de Paris FRANCE
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par mm91 » 18 févr. 2014, 17:48

WakawaRider a écrit : ......
le tableau (très coloré) de WsWin.
......
Les goûts et les couleurs ne se discutent pas :lol: :

http://www.meteo-anglade.fr/mto-anglade-analyse.html#G1

http://icare.cinq.free.fr/meteo/longtimecalculated.gif
Michel
La Crosse WS2300 modifiée (pluvio, abri ventilé, mesure d'ensoleillement), Wswin32, Watchdog.
mon site météo

Avatar du membre
WakawaRider
Participation 0
Participation 0
Messages : 23
Enregistré le : 29 janv. 2014, 18:39
Localisation : Villeneuve sur Lot
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par WakawaRider » 18 févr. 2014, 18:01

:lol: Bien vu !!!
Image

Avatar du membre
WakawaRider
Participation 0
Participation 0
Messages : 23
Enregistré le : 29 janv. 2014, 18:39
Localisation : Villeneuve sur Lot
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par WakawaRider » 18 févr. 2014, 18:17

mm91 a écrit : La moyenne de moyennes fait bien une moyenne,
mais il est bien évident qu'il vaut mieux partir de la somme exacte et diviser par le nombre exact pour faire une moyenne.

voir "Edit" ci-dessus
Je ne sais comment est calculée la moyenne annuelle dans WsWin mais en tout cas certainement pas avec la somme des moyennes qui sont au dessus dans le tableau, même si on ajoute les hypothétiques millièmes de millimètres manquants.
La différence est moindre dans ton cas que dans le mien, sans doute due au nombre d'années de références.
La pluviométrie de février 2014, qui ne devrait pas être prise en compte dans le calcul, en est peut-être la cause étant donné que ce mois de février devrait contribuer à augmenter les moyennes. C'est le cas à Villeneuve... Mais même en prenant cette variable en compte je n'arrive encore pas au total de WsWin ...

Cordialement
Laurent
Image

mm91
Participation 6
Participation 6
Messages : 2581
Enregistré le : 31 mars 2007, 07:46
Localisation : 25 Km au sud-ouest de Paris FRANCE
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par mm91 » 18 févr. 2014, 18:59

WakawaRider a écrit : Je ne sais comment est calculée la moyenne annuelle dans WsWin mais en tout cas certainement pas avec la somme des moyennes qui sont au dessus dans le tableau, même si on ajoute les hypothétiques millièmes de millimètres manquants.
La différence est moindre dans ton cas que dans le mien, sans doute due au nombre d'années de références.
La pluviométrie de février 2014, qui ne devrait pas être prise en compte dans le calcul, en est peut-être la cause étant donné que ce mois de février devrait contribuer à augmenter les moyennes. C'est le cas à Villeneuve... Mais même en prenant cette variable en compte je n'arrive encore pas au total de WsWin ...

Cordialement
Laurent
Elle est calculée comme je te l'ai expliqué (et démontré !):
dans les tableaux Wswin32 la moyenne annuelle n'est pas calculée en faisant la somme des moyennes mensuelles (comme tu le fais toi), mais en faisant le calcul exact (celui que j'ai fait dans "Edit" plus haut)

OK, contrairement à ce que j'ai écrit, n'y a pas que les arrondis qui font la différence, mais surtout la durée exacte prise en compte:

Si tu fais la moyenne des moyennes mensuelle et qu'il y a des mois manquants (c'est mon cas et c'est pour ça que je trouve une plus grande différence que toi) il n'en est pas tenu compte (à tort)
(les moyennes mensuelles peuvent être faites sur un nombre différents de mois)

Alors que le calcul exact en tient compte (à juste titre):


- je n'ai pas pris en compte le mois de février 2014.

- j'ai fais (à la calculatrice !) le total annuel des précipitations (de déc 2003 à janvier 2014 compris = 122 mois), je trouve 6566.7 mm

- j'ai enlevé trois mois (complets) manquants dans mes enregistrements (juillet et aout 2004 et avril 2007, voir http://icare.cinq.free.fr/meteo/jours_manquants.htm )

et je trouve bien 6566.7 /119*12 = 662.18822 mm, c'est la vraie moyenne / 12 mois.

soit comme dans le tableau de Wswin32 à 2.7 microns près!! (662.191 mm)

C'est donc bien ce calcul que fait (à juste titre) Wswin32.

Cordialement,
Michel
La Crosse WS2300 modifiée (pluvio, abri ventilé, mesure d'ensoleillement), Wswin32, Watchdog.
mon site météo

Avatar du membre
WakawaRider
Participation 0
Participation 0
Messages : 23
Enregistré le : 29 janv. 2014, 18:39
Localisation : Villeneuve sur Lot
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par WakawaRider » 18 févr. 2014, 22:30

Bonsoir Michel,

Ta démonstration concernant la moyenne annuelle est magistrale.
Ce qui me dérange un peu c'est que le tableau WsWin présente des chiffres mensuels et annuels qui ne sont pas basés sur la même méthode de calcul.
C'est dommage.
Donc à moins de trouver le moyen de calculer les moyennes mensuelles de la même manière que la moyenne annuelle, je préfère que mes données restent cohérentes avec les chiffres dont je dispose.
Peut-être devrais-je me pencher à nouveau sur les tags WsWin pour voir si je peux récupérer les bonnes variables mensuelles ?...

En tout cas la fonction Javascript fait les bons calculs avec les chiffres qu'on lui donne, c'était le but de cette présentation.
Je rappelle que j'ai pris la pluviométrie à titre d'exemple mais qu'on peut utiliser cette fonction pour les températures (pas de problème de totaux dans ces cas là :smile: ) ou tout autre paramètre ...

Cordialement
Laurent
Image

mm91
Participation 6
Participation 6
Messages : 2581
Enregistré le : 31 mars 2007, 07:46
Localisation : 25 Km au sud-ouest de Paris FRANCE
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par mm91 » 19 févr. 2014, 10:11

L'addition des moyennes mensuelles (*) pour faire les moyennes annuelles n'est valable que s'il n'y a aucun manque dans les enregistrements.

Justement plutôt que de faire l'adition il vaut mieux faire le même calcul (total des mesures divisé par nombre de mesures dans les deux cas: mensuel et annuel)

Bon, maintenant je crois que je ne peux plus rien pour toi, dommage…
Mais il serait souhaitable, si tu diffuses tes mesures, d'expliquer clairement que tu utilises ta propre définition d'une moyenne !

Cordialement

(*) je te rappelle qu'il s'agit ici des moyennes par mois, c'est à dire:
- moyenne de tous les mois de janvier
- moyenne de tous les mois de février
- moyenne de tous les mois de mars
- etc...

le nombre de ces mois peut être variable; par exemple 4 mois de janvier, 5 mois de février, etc.(ce qui n'empêche pas de faire une moyenne)
c'est pour cela que la somme de ces moyennes peut ne pas correspondre à la moyenne annuelle.
Michel
La Crosse WS2300 modifiée (pluvio, abri ventilé, mesure d'ensoleillement), Wswin32, Watchdog.
mon site météo

Avatar du membre
WakawaRider
Participation 0
Participation 0
Messages : 23
Enregistré le : 29 janv. 2014, 18:39
Localisation : Villeneuve sur Lot
Contact :

Re: [Javascript] Moyennes sur long terme.

Message par WakawaRider » 19 févr. 2014, 11:05

Ok Ok je jette l'éponge Michel !!!
Mon article s'adresse en fait plus à des gestionnaires de site météo qu'à des météorologues chevronnés.
Je ne fais pas partie de la deuxième catégorie, je gère juste le site d'un ami passionné.
Je lui ferai donc part de tes remarques.
En revanche si tu as des questions concernant la mise en place de Javascript sur ton site, je suis à ta disposition.
Cordialement
Laurent
Image

Répondre