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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 80
    Par défaut Moyenne et autres analyses descriptives par colonne et fabrication d'un nouveau fichier avec ces analyses
    Bonjour,

    Voici un exemple pour montrer ce que j’essaie de faire (je suis débutante et votre aide me sera précieuse).
    A B C
    02.03.2017 4.5 9.5
    04.05.026 2 NA
    08.06.2018 NA 6
    NA 8 5


    Mon fichier comporte plusieurs colonnes avec entêtes (température, dates, humidité, etc..) que des chiffres ou dates et il y a aussi des « NA ».

    J’aimerais, afin de faire mes stats descriptives, réaliser la moyenne, le min, le max, l’écart-type et avoir le nombre de données et tout cela pour chacune des colonnes du fichier.

    J’aimerais que ces informations viennent s’ajouter en fin de chaque colonne (je suppose que je dois donc créer des nouvelles lignes nommées « moyennes », « ecart-type » etc, mais je ne sais pas comment faire).

    Pour l’instant, j’ai simplement réussi à calculer la moyenne par colonne (script ci-dessous), mais je n’arrive pas à sortir un nouveau fichier avec le fichier de base et mes moyennes en bas de chaque colonne et pareil pour les autres paramètres. Pouvez-vous m’aider s’il vous plait ?

    Un grand merci par avance.

    fichier_test_apply5<-read.csv("test_apply.csv", sep=";", header=TRUE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    test5<-function(dat){
      out<-c(rep(0,length(dat)))
      for (i in c(1:length(dat)))
        out[i]=mean(as.numeric(dat[,i]), na.rm=T)
      return(out)
    }
     
    pro<-test5(fichier_test_apply5)

  2. #2
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Statistiques par colonne
    Bonjour,

    Une proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > df <- data.frame(A=c(2,4,8,NA), B=c(4.5,2,NA,8), C=c(9.5,NA,6,5))
    > df
       A   B   C
    1  2 4.5 9.5
    2  4 2.0  NA
    3  8  NA 6.0
    4 NA 8.0 5.0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > library(prettyR)
    > stat <- describe(df)
    Description of df 
    > stat
     
     Numeric 
      mean median  var   sd valid.n
    A 4.67    4.0 9.33 3.06       3
    B 4.83    4.5 9.08 3.01       3
    C 6.83    6.0 5.58 2.36       3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    > str(stat)
    List of 3
     $ Numeric:List of 3
      ..$ A: Named num [1:5] 4.67 4 9.33 3.06 3
      .. ..- attr(*, "names")= chr [1:5] "mean" "median" "var" "sd" ...
      ..$ B: Named num [1:5] 4.83 4.5 9.08 3.01 3
      .. ..- attr(*, "names")= chr [1:5] "mean" "median" "var" "sd" ...
      ..$ C: Named num [1:5] 6.83 6 5.58 2.36 3
      .. ..- attr(*, "names")= chr [1:5] "mean" "median" "var" "sd" ...
     $ Factor : list()
     $ Logical: list()
     - attr(*, "class")= chr "desc"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > dfstat <- data.frame(stat$Numeric)
    > dfstat
                   A        B        C
    mean    4.666667 4.833333 6.833333
    median  4.000000 4.500000 6.000000
    var     9.333333 9.083333 5.583333
    sd      3.055050 3.013857 2.362908
    valid.n 3.000000 3.000000 3.000000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    > dftot <- rbind(df, dfstat)
    > dftot
                   A        B        C
    1       2.000000 4.500000 9.500000
    2       4.000000 2.000000       NA
    3       8.000000       NA 6.000000
    4             NA 8.000000 5.000000
    mean    4.666667 4.833333 6.833333
    median  4.000000 4.500000 6.000000
    var     9.333333 9.083333 5.583333
    sd      3.055050 3.013857 2.362908
    valid.n 3.000000 3.000000 3.000000
    Cordialement,

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 80
    Par défaut presque résolu mais problème pour réunir les informations dans un fichier et besoin des min et max par colonne
    Bonjour mgdondon,

    merci pour la proposition, cela fonctionne.

    J'ai juste un problème au moment de "binder" les deux fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error in rbind(deparse.level, ...) : 
      numbers of columns of arguments do not match
    Cela est dû à ma première colonne qui contient des dates et qu'il me considère comme un facteur lors de l'utilisation de la fonction "stat":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    > stat
     
     Numeric 
      mean median  var   sd valid.n
    B 4.83    4.5 9.08 3.01       3
    C 6.83    6.0 5.58 2.36       3
     
     Factor 
     
    A         02.03.2017 04.05.026 08.06.2018 <NA>
      Count            1         1          1    1
      Percent         25        25         25   25
    Mode >1 mode
    J'ai regardé le message "Conversion d'un format HH:MM:SS en secondes " mais cela ne fonctionne que si le format initial est HH/MM/SS, je n'arrive pas à le faire fonctionner avec JOURS/MOIS/ANNEE. Y a t il un moyen d'ignorer le fait que mes colonnes "dates" soient des facteurs afin de pouvoir "binder" mon fichier final?

    Et comment puis-je ajouter les "min" et "max" de mes colonnes et que ces informations s'ajoutent aussi à la fin du fichier en bas des colonnes?

    Merci pour tout et bonne journée.

  4. #4
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Statistiques par colonne
    Bonjour,

    Vous pouvez spécifier les statistiques à afficher dans la fonction describe() :

    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
    > df <- data.frame(A=c(2,4,8,NA), B=c(4.5,2,NA,8), C=c(9.5,NA,6,5))
    > library(prettyR)
    > stat <- describe(df,c("mean","median","var","sd","valid.n","min","max"))
    Description of df 
    > dfstat <- data.frame(stat$Numeric)
    > dftot <- rbind(df, dfstat)
    > dftot
                   A        B        C
    1       2.000000 4.500000 9.500000
    2       4.000000 2.000000       NA
    3       8.000000       NA 6.000000
    4             NA 8.000000 5.000000
    mean    4.666667 4.833333 6.833333
    median  4.000000 4.500000 6.000000
    var     9.333333 9.083333 5.583333
    sd      3.055050 3.013857 2.362908
    valid.n 3.000000 3.000000 3.000000
    min     2.000000 2.000000 5.000000
    max     8.000000 8.000000 9.500000
    Pouvez-vous fournir un fichier csv à importer ou une étape de création de dataframe pour essayer avec vos dates ?

    Cordialement,

    PS : Vous pouvez utiliser la balise CODE pour encadrer votre code :

    Nom : Sans titre.jpg
Affichages : 171
Taille : 19,0 Ko

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 80
    Par défaut fichier csv et script
    Bonjour,

    voici en pièce jointe mon fichier csv avec les dates en première colonne.

    Dans ce script (ci-dessous) j'ai testé votre proposition (première partie du script) et cela fonctionne pour l'exemple, j'ai même pu ajouter les min et max dans l'exemple. J'ai voulu exporté le fichier exemple avec les moyennes, min, max ajoutés mais j'ai un petit décalage (explications et questions lignes en rouge dans script ci dessous).

    Dans la deuxième partie du script je teste sur mon vrai fichier "meteo_CH.csv". Je suis bloqué car mes données sont apparement des facteurs lors de la commande "str" (j'ai mis des explications et questions lignes en vert ci dessous).

    Merci pour tout.



    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
                    ############### première partie script ##############
    df <- data.frame(A=c(2,4,8,NA), B=c(4.5,2,NA,8), C=c(9.5,NA,6,5))
    df
    library(prettyR)
    stat <- describe(df)
    # Description of df 
    stat
    str(stat)
    dfstat <- data.frame(stat$Numeric)
    dfstat
    dftot <- rbind(df, dfstat)
    dftot
     
    #MIN PAR COLONNE
    min<-apply(df, 2, min, na.rm=TRUE)
    min
    max<-apply(df, 2,max, na.rm=TRUE)
    max
    dftot <- rbind(df, dfstat, min,max)
    dftot                                ##ici on voit bien ligne 10 et 11 les min et max par colonne##
     
    write.table(dftot, "test_stats_par_col.csv", sep=";")
    #Probleme lors de l'ecriture, les noms des colonnes sont décalés ver la droite)
    ## + j'aimerais aussi renommer mes lignes 10 et 11 "min" et "max"


    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
                                           #########Deuxième partie du script: meme exerice mais avec mon fichier contenant des dates######
    # lieu de travail
    setwd ("D:\\R\\Margot\\Data")
    # Lecture du fichier de donnees meteo
    fichier_meteo_CH<-read.csv2("meteo_CH.csv", na.strings = "NA",header = TRUE)
    dimension<-dim(fichier_meteo_CH)
    nligne<-dimension[1]
    ncolonne<-dimension[2]
    fichier_meteo_CH<-as.matrix(fichier_meteo_CH) ###
    head(fichier_meteo_CH)
    
    ##remplacer les "?" par des NA##
    fichier_meteo_CH_NA=fichier_meteo_CH
    fichier_meteo_CH_NA[fichier_meteo_CH=="?"]="NA"
    write.table(fichier_meteo_CH_NA, "fichier_meteo_CH_NA.csv", sep=";", row.names=FALSE)
    head(fichier_meteo_CH_NA)
    dim(fichier_meteo_CH_NA)
    
    #subset du fichier meteo pour eviter les dates qui empêchent de faire les stats descriptives
    fichier_stat<-fichier_meteo_CH_NA[ ,2:22]
    dim(fichier_stat)
    
    library(prettyR)
    stat <- describe(fichier_stat)
    # Description of df 
    stat
    str(stat)            ######ICI PROBLEME CAR TOUT EST EN FACTEUR ##
    dfstat <- data.frame(stat$Numeric)
    dfstat                          ########ici cela indique "data frame with 0 columns and 0 rows"#
    dftot <- rbind(df, dfstat)
    dftot
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Statistiques par colonne
    Bonjour,

    Problème lors de l'écriture, les noms des colonnes sont décalés ver la droite
    Utilisez la fonction write.csv2() plutôt que write.table() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write.csv2(dftot, "test_stats_par_col.csv")


    j'aimerais aussi renommer mes lignes 10 et 11 "min" et "max"
    C'est fait automatiquement avec le code que je vous ai proposé. Vous pouvez spécifier les statistiques à afficher dans la fonction describe().

    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
    > df <- data.frame(A=c(2,4,8,NA), B=c(4.5,2,NA,8), C=c(9.5,NA,6,5))
    > library(prettyR)
    > stat <- describe(df,c("mean","median","var","sd","valid.n","min","max"))
    Description of df 
    > dfstat <- data.frame(stat$Numeric)
    > dftot <- rbind(df, dfstat)
    > dftot
                   A        B        C
    1       2.000000 4.500000 9.500000
    2       4.000000 2.000000       NA
    3       8.000000       NA 6.000000
    4             NA 8.000000 5.000000
    mean    4.666667 4.833333 6.833333
    median  4.000000 4.500000 6.000000
    var     9.333333 9.083333 5.583333
    sd      3.055050 3.013857 2.362908
    valid.n 3.000000 3.000000 3.000000
    min     2.000000 2.000000 5.000000
    max     8.000000 8.000000 9.500000


    Ici problème car tout est en facteur
    Lorsque vous importez un fichier, commencez par vérifier l'import :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > fichier_meteo_CH<-read.csv("meteo_CH.csv", na.strings = "NA",header = TRUE)
    > str(fichier_meteo_CH)
    'data.frame':   10651 obs. of  22 variables:
     $ date     : Factor w/ 10651 levels "01/01/1988","01/01/1989",..: 1 351 701 1051 1401 1751 2101 2451 2801 3151 ...
     $ date_1900: int  32143 32144 32145 32146 32147 32148 32149 32150 32151 32152 ...
     $ tmoy_CH  : Factor w/ 352 levels "-0.1","-0.2",..: 312 342 325 308 336 327 289 93 85 285 ...
    ...
    Tout est en facteur à cause des points d'interrogation. Vous pouvez soit supprimer les points d'interrogation dans le fichier csv avant l'import, soit convertir les variables après l'import :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > fichier_meteo_CH$tmoy_CH <- as.numeric(as.character(fichier_meteo_CH$tmoy_CH))
    Warning message:
    NAs introduits lors de la conversion automatique 
    > str(fichier_meteo_CH)
    'data.frame':   10651 obs. of  22 variables:
     $ date     : Factor w/ 10651 levels "01/01/1988","01/01/1989",..: 1 351 701 1051 1401 1751 2101 2451 2801 3151 ...
     $ date_1900: int  32143 32144 32145 32146 32147 32148 32149 32150 32151 32152 ...
     $ tmoy_CH  : num  5.9 8.9 7.2 5.5 8.3 7.4 3.6 1.6 0.8 3.2 ....


    dfstat <- data.frame(stat$Numeric)
    dfstat ########ici cela indique "data frame with 0 columns and 0 rows"#
    Tout est en facteur donc il n'y a pas de partie numérique à récupérer...

    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2016, 16h51
  2. [XL-2007] remplir une liste automatiquement par colonnes d'autres sheet
    Par ouzal dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/12/2010, 21h41
  3. Tri par colonne de n'importe quel StringGrid
    Par Dionyzos dans le forum Composants VCL
    Réponses: 3
    Dernier message: 02/07/2008, 16h47
  4. [HTML] Construire un tableau colonne par colonne ?
    Par Cthulhu 22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/05/2005, 15h31
  5. [VB.NET] Écriture par colonne streamwriter...?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/04/2005, 15h32

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