calcul de moyenne mobile sur un énorme nombre de relevés

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : calcul de moyenne mobile sur un énorme nombre de relevés

Re: calcul de moyenne mobile, sans bibliothèque ou librairie

par Blaise032 » 08 avr. 2022, 07:47

Bonjour
Je reviens ici pour celles et ceux qui font la même recherche que moi et qui rechignent à utiliser une libraire ou une bibliothèque. Voici le code en Python suffisamment documenté pour le transposer en PHP.

Bon développement !

PS : comme l'indentation n'est pas respectée (important dans Python), je partage une copie d'écran : https://drive.google.com/file/d/1VrR30 ... sp=sharing

Code : Tout sélectionner

def moyenne_mobile(plage): # plage est le nombre de données dont on veut faire la moyenne i = 0 # pour l'index de la liste s = 0 # pour la somme for cpm in cpm_datas: # parcourt la liste / array if i < plage : # fait une simple moyenne tout au début des données < à la plage, # qui n'est pas du tout affinée pour les 1ères valeurs ! # mais on a au moins quelque chose à afficher s += cpm # s = somme des valeurs m = s / (i+1) else : # mobile s -= cpm_datas[i-plage] # retire de la somme la valeur juste sous la plage s += cpm # ajoute à la somme la nouvelle valeur m = s / plage # moyenne # fin de if else m=round(m,1) # arrondit à une décimale cpm_mm.append(m) # ajoute la valeur à la liste/array des moyennes i += 1 # incrémente l'index

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par Blaise032 » 02 avr. 2022, 10:46

D'accord.
Là, bien qu'il y ait une ou deux librairies en Python, je l'ai programmée moi-même.
La prochaine étape est de fabriquer le graphe en Python, parce 90000 données pour JPGraph prenant une bonne vingtaine de secondes, qu'est-ce que ce sera avec une deuxième série ! ?
Les visiteurs ne vont pas attendre pour voir le graphe. Le fabriquer en amont est une bonne solution.

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par @rthur » 02 avr. 2022, 00:19

Composer sert à télécharger des scripts PHP ainsi que leurs dépendances.
Le principe c'est qu'un script qui va permettre de faire une action précise va avoir besoin d'autres fonctionnalités que d'autres ont déjà développés, et donc plutôt que de tout intégrer dans le 1er script, le développeur se concentre sur sa fonctionnalité et indique (dans le fichier composer.json) les scripts à importer également pour que l'ensemble fonctionne.

De fait tu n'as besoin de composer que sur ta machine de dev pour télécharger et mettre à jour ces scripts tiers.
Et ensuite pour passer en prod, et bah c'est comme d'habitude tu transfères via (S)FTP l'ensemble des fichiers sur ton serveur de prod.
Tu n'as pas besoin de composer en prod.

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par Blaise032 » 31 mars 2022, 10:18

Là, @rthur, je ne comprends pas : je dois avoir la même configuration en développement qu'en production.
Composer sert à installer moving-average, non ? Si je ne sais pas l'installer en production, je ne sais pas l'utiliser.
De toute façon, je vais contourner le problème en la calculant à partir de la source. C'est un script Python (sur Rasberry)

Merci à tous pour vos contributions

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par @rthur » 31 mars 2022, 00:25

Tu peux installer composer sur ta machine locale pour développer, et ensuite sur ton serveur de prod, pas besoin de composer

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par Blaise032 » 30 mars 2022, 14:53

Ok, quand j'ai accès au serveur, ce qui n'est pas le cas pour mon hébergement (mutualisé) chez OVH.

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par @rthur » 29 mars 2022, 16:55

Une fois composer installé, il faudra que tu lances la commande :

Code : Tout sélectionner

composer require dcvn/moving-average

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par GuillaumeLM » 29 mars 2022, 13:11

Bonjour,
va voir ici composer. :D

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par Blaise032 » 29 mars 2022, 12:41

heu non, je ne connais pas composer (éléphanteau) Peux-tu m'expliquer ?
Là, je teste avec Wampserver sous Windows, la production finale chez OVH.
Mais j'avance un peu car j'ai eu cette dernière erreur : Fatal error: Maximum execution time of 120 seconds exceeded in (...)\moving_average\functions.php on line 14
Devrais-je réduire la voilure ? elle est ambitieuse : +/- 90000 données pour 25 heures que je peux réduire à tâtons pour que cela soit acceptable à PHP. Déjà réduire à 12 heures ?, moins de la moitié actuelle

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par @rthur » 29 mars 2022, 12:31

Tu as bien fait l'installation par composer ?

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par Blaise032 » 29 mars 2022, 12:15

Bonjour @rthur et merci pour la réponse

include, require ou même require_once ne changent rien.
Le chemin spécifié est correct car j'ai une erreur si j'en spécifie un mauvais.

Bref, toujours bloqué je suis :?

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par @rthur » 29 mars 2022, 10:56

Remplace tes include() par des require()
Et vérifie que tu inclus bien les bons fichiers avec le bon chemin

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par Blaise032 » 26 mars 2022, 17:03

Bonjour,

Je n'arrive pas à mettre en œuvre la fonction.
J'ai téléchargé les fichiers function.php et MovingAverage.php dans le dossier moving_average

Code : Tout sélectionner

include( "../moving_average/functions.php" ); include( "../moving_average/MovingAverage.php" ); $movingAverage = new MovingAverage(); $movingAverage->setPeriod(1800); $moyenneMobile = $movingAverage->getCalculatedFromArray($cpm);
et j'ai les erreurs suivantes :
( ! ) Fatal error: Uncaught Error: Class "MovingAverage" not found in ... on line ...
( ! ) Error: Class "MovingAverage" not found in ... on line ...

Re: calcul de moyenne mobile sur un énorme nombre de relevés

par or 1 » 23 mars 2022, 14:06

calcul de moyenne mobile sur un énorme nombre de relevés

par Blaise032 » 23 mars 2022, 14:02

Bonjour,

J'ai un fichier avec +/- 25 heures de relevés de radioactivité par seconde, soit +/- 90 000 données de nombres entiers normalement inférieurs à 50 (le bruit de fond normal). Je visualise avec jpgraph :
https://1drv.ms/u/s!Armdq6t2CzgHmvQCBywr3L3dMxagjw

Mais du bruit de fond, se dégage une "tendance" visible avec une moyenne mobile, ici avec un tableur sur les 30 dernières minutes (1800 données)
https://1drv.ms/u/s!Armdq6t2CzgHmvQDe62 ... A?e=1KNVE3

Question : comment faire cela en PHP ?

La construction de l'image jpgraph :

Code : Tout sélectionner

<?php require_once( "../jpgraph/jpgraph.php" ); require_once( "../jpgraph/jpgraph_line.php" ); $cpm = array(); if ( !$fp = fopen( "cpm.25h", "r" ) ) { echo "Echec de l'ouverture du fichier"; exit; } else { while ( !feof( $fp ) ) { // On récupère une ligne $ligne = fgets( $fp, 50 ); if ( is_numeric( $ligne ) ) { $cpm[] = $ligne; } } fclose( $fp ); // On ferme le fichier } $largeur = 800; $hauteur = 400; // Initialisation du graphique $graph = new Graph( $largeur, $hauteur ); $graph->setScale( "textlin" ); // Creation des courbes $courbe = new LinePlot( $cpm ); // Ajout des courbes au graphique $graph->add( $courbe ); // Ajout du titre du graphique $graph->title->set( "CPM" ); // Affichage du graphique $graph->stroke(); ?>
Et un fichier de données : https://drive.google.com/file/d/1B8spXD ... sp=sharing

Bien à vous et merci d'avance,
Blaise