Mieux comprendre le fonctionnement des stats

Re: Mieux comprendre le fonctionnement des stats

par stephane ngov,
Nombre de réponses : 0

Merci de vos réponse,

 

Je mets à disposition un bout de script qui génère un histogramme en fonction

- du mombre de connexion réussi

- de l'histogramme en %

- de son nom (lastname)

 

il récupère tout le monde qui se sont connecté au moins une fois

 

 

 

<?php

header("Content-type: image/png");
$stat = new Stat();
$total = $stat->statTotalMouvActivite();
$stat->proportion($total);
$stat->statTotalMouvActivite();
$stat->statActivite();
$resultat = $stat->getResultatP100();



$im = imagecreatetruecolor(1000, 2000);
$white = imagecolorallocate($im, 255, 255, 255);
$red = imagecolorallocate($im, 255, 0, 0);
$bleu = imagecolorallocate($im, 51, 100, 255);


imagestring($im, 30, 30, 30, $total, $white);

$depart_x = 0;
$depart_y = 50;
$fin_x = 1000;

$nb_bar = 10;
$decade_y = 40;
$point_y = 0;

foreach ($resultat as $R) {
    $chiffre = round($R['chiffre'],2,PHP_ROUND_HALF_UP);
    //echo $R['nom'];
    imagefilledrectangle($im, 0, $point_y, $chiffre*100, $point_y + 25, $red);
    imagestring($im, 7, 15, $point_y ,$chiffre.'%', $white);
    imagestring($im, 10, $chiffre*100 + 20, $point_y, $R['nom'].' viste =>'.$R['brut'].' : loggin', $bleu);
    $point_y = $point_y + $decade_y;
}

imagepng($im);
imagedestroy($im);

class Stat {

    private $resultat_total;
    private $reference = NULL;
    private $somme = 0;
    private $resultat_pour100 = array();
    private $bdd;

    public function __construct() {
        $this->bdd = new PDO('mysql:host=localhost;dbname=moodle', 'root', 'pas');
    }

    public function proportion($resulat) {
        return ($resulat * 100) / $this->reference;
    }

    public function rectificatif($diviseur) {
        $this->reference = $this->reference / $diviseur;
    }

    public function statTotalMouvActivite() {//nombre total de ressource vu ou ajouter
        $query = "SELECT COUNT(*) as nb
        FROM mdl_user U
        INNER JOIN mdl_log L
        ON U.id = L.userid
        AND L.module = 'user' AND L.action='login'
        AND L.time > 1346495708";
        $prep = $this->bdd->query($query);
        $prep->execute();
        $data = $prep->fetch();
        $this->reference = $data['nb'];
    }

 

    public function statActivite() {
        $query = ("SELECT COUNT(*) as nb ,U.lastname
        FROM mdl_user U
        INNER JOIN mdl_log L
        ON U.id = L.userid
        AND L.module = 'user' AND L.action='login'
        AND L.time > 1346495708
        GROUP BY L.userid order by nb desc");
        $prep = $this->bdd->query($query);
        $prep->execute();
        while ($data = $prep->fetch(PDO::FETCH_OBJ)) {
            $this->resultat_pour100[] = array(
                "brut" => $data->nb,
                "chiffre" => $this->proportion($data->nb),
                "nom" => $data->lastname);
        }
    }

    public function getSommeP() {
        return $this->somme;
    }

    public function getResultatP100() {
        return $this->resultat_pour100;
    }

}
?>

 

Pour l'utiliser très facile,

modifier les accès base de donnée avec mot de passe

        $this->bdd = new PDO('mysql:host=localhost;dbname=votre table', 'votre identifiant', 'votre passe');

l'enregistrer dans un dossier accesible,

et le lancer .

Le script analyse à partir de la rentrée septembre 2012

si vous souhaite le modifier c'est ici

 AND L.time > 1346495708

il suffit d'aller sur

http://www.timestamp.fr/

et selectionner la date, il vous donnera ce nombre.

Il n'y a pas beaucoup de résultat, car l'image serais trop grande,

avec l'interface moodle il faut vraiment passer beaucoup trop de temps pour avoir ces résultat

généraux et en même temps

il faudra crée une pagination.