IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Statistique et calcul de pourcentage


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut Statistique et calcul de pourcentage
    Bonjour

    Je développe actuellement un script permettant d'afficher des statistiques de mon site personnel sur une page web avec CGI.

    Pour illustrer mon post, je vais choisir la partie navigateur.

    Code qui permet de récupérer le nom du navigateur et le nombre total de visites:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    open my ($in), $logstats;
        my %browser_report;
        while (<$in>)
        {
        	my $browser=(split)[3];
        	$browser_report{$browser}++;
        }
    close ($in);
    Code qui génère un tableau HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    print $cgi->h2('Most populars browsers');
        print $cgi->table({},
          Tr({}, [
            th({-class=>"tdheadslow",-colspan=>3},['Browser / visits totals']),
            th({-class=>"tdhead"},['Browser', 'Visits', '%']),
            map { td({-class=>"tdfield"},[ $_, $browser_report{$_} ]) } keys %browser_report
         ]));
    et enfin le code css pour l'apparence du tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    table {
         font-size:small;
         border:thin solid #CCCCCC;
         width:15%;
         padding:1px;
    }
    .tdhead, .tdfield, .tdheadslow {
         width:15%;
         padding:2px;
         text-align:left;
    }
    .tdheadslow {
         text-align:center;
         color:#FFFFFF;
         background-color:#777777;
    }
    .tdhead {
         background-color:#CCCCCC;
    }
    .tdfield {
         background-color:#FFFFFF;
    }
    Il me reste à calculer le pourcentage par navigateurs. Quelle est la meilleure solution pour réaliser ce type de calcul ? J'ai pensé à une fonction qui pourrait être utilisée pour chaque partie, navigateurs, os, etc.

    Qu'en pensez-vous ?

    Merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    pour les stats de ton site, utilise awstat : bienfait, et en plus c'est du perl

  3. #3
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Citation Envoyé par djibril Voir le message
    pour les stats de ton site, utilise awstat : bienfait, et en plus c'est du perl
    Oui, je viens de voir quelques screenshots et en effet c'est super bien fait

    Merci djibril

    PS: je recherche toujours le moyen le plus simple pour le calcul du pourcentage / navigateurs

  4. #4
    Membre chevronné
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Par défaut
    Rien de bien compliqué, en fait. Lors du remplissage de %browser_report, tu ajoutes un compteur général.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    open my ($in), $logstats;
        my %browser_report;
        my $total_conn;
        while (<$in>)
        {
        	my $browser=(split)[3];
        	$browser_report{$browser}++;
            $total_conn++;
        }
    close ($in);
    À partir de là, plusieurs possibilités, mais principalement deux : calculer les pourcentages à la volée lors de l'affichage, ou les stocker dans un nouveau hachage. Je pense que cette dernière méthode est plus propre et plus claire. Reste à savoir si tu veux stocker les résultats directement sous forme de chaîne de caractère avec le symbole %, ou si tu laisses la mise en forme pour le dernier moment. Je vais appliquer le premier cas, avec deux chiffres après la virgule, grâce à ce bon vieux sprintf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my %browser_percent;
    foreach $browser (keys %browser_report)
    {
    # ce bon vieux sprintf : aimez-le, car lui vous aime
        $browser_percent{$browser}=sprintf "%.2f %%", $browser_report{$browser}/$total_conn*100;
    }
    À noter que sprintf arrondit de façon classique.
    EDIT: utiliser map serait peut-être plus élégant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my %browser_percent = map {$_ => sprintf ("%.2f %%", $browser_report{$_}/$total_conn*100)} keys %browser_report;
    Ou pas.

  5. #5
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Merci Schmorgluck pour ces explications

    Je n'avais pas pensé à l'utilisation d'un compteur

    Merci, je vais tester tout ça

  6. #6
    Membre chevronné
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Par défaut
    Je viens de réaliser qu'il y a une autre possibilité que le compteur global. Enfin, une autre façon de lui donner sa valeur : la variable "$.", qui contient le numéro de la dernière ligne lue dans un fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    open my ($in), $logstats;
        my %browser_report;
        while (<$in>)
        {
        	my $browser=(split)[3];
        	$browser_report{$browser}++;
        }
        my $total_conn=$.;
    close ($in);
    Bon, c'est peut-être moins souple.

Discussions similaires

  1. Reqête avec un calcul de pourcentage
    Par jean-pierre96 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2006, 14h00
  2. Réponses: 4
    Dernier message: 22/03/2006, 18h00
  3. Réponses: 1
    Dernier message: 10/01/2006, 21h35
  4. calcul de pourcentage
    Par PAUL87 dans le forum Access
    Réponses: 12
    Dernier message: 20/09/2005, 20h50
  5. Calcul de pourcentage
    Par megazen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/11/2003, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo