Valid XHTML     Valid CSS2    

DECRA, T.P. 3 :

     Programmation en R

Décomposition, Conception et Réalisation d'Applications

                    gilles.hunault "at" univ-angers.fr

Table des matières cliquable

  1. Tuteur R, Rstudio et Jupyter notebook

  2. Exercices simples d'entrainement pour "snobber" Excel

  3. Calcul de co-occurrences en ligne de commandes

  4. Programmation et développement en R

Il est possible d'afficher toutes les solutions via ?solutions=1 et de les masquer via ?solutions=0.

 

1. Tuteur R, Rstudio et Jupyter notebook

Partie 1.1

Commencer par relire le tuteur de programmation R.

Pour les plus courageuses et les plus courageux, essayer de répondre aux dix exercices de la section 1. I don't know R de la R «warm-up session». Où sont les solutions ?

Partie 1.2

Reproduire ensuite le tableau des puissances inférieures ou égales à 1 million. On nommera boucle.r le fichier correspondant qu'on exécutera d'abord dans Rstudio. Comment exporter le résultat pour obtenir le fichier boucle.txt suivant :


     table des puissances inférieures ou égales à 1 million
     
             1        1        1        1        1        1        1        1        1        1
             2        4        8       16       32       64      128      256      512     1024
             3        9       27       81      243      729     2187     6561    19683    59049
             4       16       64      256     1024     4096    16384    65536   262144
             5       25      125      625     3125    15625    78125   390625
             6       36      216     1296     7776    46656   279936
             7       49      343     2401    16807   117649   823543
             8       64      512     4096    32768   262144
             9       81      729     6561    59049   531441
            10      100     1000    10000   100000  1000000
     

Serait-ce plus simple à exécuter et à exporter dans un terminal ?

Serait-ce plus simple à exécuter et à exporter via un Jupyter Notebook ? Pour mémoire, dans les salles du département informatique, il faut, dans un terminal lancer la commande _jupyter_notebook c'est-à-dire jupyter_notebook précédé du souligné _ pour pouvoir utiliser un serveur local de notebooks. Le disque D et le répertoire Mes_notebooks permettent alors d'enregistrer les fichiers.

Partie 1.3

Reproduire ensuite les calculs liés à microbenchmark( a <- runif(n), b <- rnorm(n) ) puis ceux liés à l'optimisation de sum(v==maxv) et de which(v==maxv). Est-ce normal d'avoir des résultats différents du tuteur ?

Partie 1.4

Télécharger puis compléter le Jupyter Notebook nommé introduction-a-R.


     gilles.hunault@g105-0:~$ cd /media/D/Mes_notebooks/
     
     gilles.hunault@g105-0:~$ wget http://forge.info.univ-angers.fr/~gh/Notebooks/introduction-a-R.ipynb
     
     gilles.hunault@g105-0:~$ _jupyter_notebook
     
     

Solution :  

 

2. Exercices simples d'entrainement pour "snobber" Excel

Partie 2.1

Ecrire un script R nommé extraitFichierExcel.r qui affiche les cinq premières lignes et les cinq dernières lignes d'un fichier Excel dont le nom est passé en paramètre, par exemple le fichier iris.xlsx. Exemple de fonctionnement :


     $gh> Rscript --encoding=latin1 --vanilla extraitFichierExcel.r iris.xlsx
     
     Extrait des  150 lignes et des 6 colonnes du fichier Excel iris.xlsx
     --------------------------------------------------------------------
     
       iden espece longsep largsep longpet largpet
     1 I001      1     5.1     3.5     1.4     0.2
     2 I002      1     4.9     3.0     1.4     0.2
     3 I003      1     4.7     3.2     1.3     0.2
     4 I004      1     4.6     3.1     1.5     0.2
     5 I005      1     5.0     3.6     1.4     0.2
     [...]
         iden espece longsep largsep longpet largpet
     146 I146      3     6.7     3.0     5.2     2.3
     147 I147      3     6.3     2.5     5.0     1.9
     148 I148      3     6.5     3.0     5.2     2.0
     149 I149      3     6.2     3.4     5.4     2.3
     150 I150      3     5.9     3.0     5.1     1.8
     

Partie 2.2

Ecrire un script bash et une fonction R nommés tous deux decritFichierExcel qui utilisent un paramètre nommé fichierExcel avec le comportement suivant :

  • s'il n'y a pas de paramètre, on fournit un rappel de la syntaxe et un exemple puis on s'arrête.

  • si le fichier Excel désigné par le paramètre n'est pas présent, on l'indique et on s'arrête.

  • si le fichier est présent, on liste les colonnes présentes avec leur numéro et leur nom sous Excel (A pour 1, B pour 2...).

  • on utlisera un try/catch pour garantir que la lecture des données s'est bien passée.

Pour les expert(e)s, on pourra de plus fournir le type des colonnes, la valeur minimale, la valeur maximale et le nombre de valeurs manquantes, comme ci-dessous, pour le fichier iris.xlsx :


     $gh> decritFichierExcel iris.xls
     
     Description du fichier iris.xls
     ===============================
     
     150 lignes et 6 colonnes lues dans ce fichier.
     
     
             Numéro Colonne Excel NbVal   Min   Max Distinct Manquantes      Type
     iden         1             A   150  I001  I150      150          0 character
     espece       2             B   150 1.000 3.000        3          0   numeric
     longsep      3             C   150 4.300 7.900       35          0   numeric
     largsep      4             D   150 2.000 4.400       23          0   numeric
     longpet      5             E   150 1.000 6.900       43          0   numeric
     largpet      6             F   150 0.100 2.500       22          0   numeric
     

Partie 2.3

Dès qu'on dépasse plusieurs centaines de lignes dans un fichier Excel, il est difficile d'écrire et de recopier des formules. Par exemple, pour le fichier iris.xlsx, il est un peu fastidieux de créer une colonne grandesPetales avec la valeur 0 si largpet est strictement inférieure à 2 et égale à 1 ailleurs. Avec R, c'est un jeu d'enfants. La preuve ? Ecrivez le script correspondant... On nommera irisG.xlsx le fichier Excel résultat.

Voici ce qu'on devrait obtenir :


     $gh> R --vanilla --quiet --slave --encoding=latin1 --file=irisg.r
     
     Ajout de la colonne grandesPetales
     
     Distribution de cette colonne :
     
       0   1
     121  29
     
     Vous pouvez utiliser le fichier irisG.xlsx qui contient
     
       iden espece longsep largsep longpet largpet grandesPetales
     1 I001      1     5.1     3.5     1.4     0.2              0
     2 I002      1     4.9     3.0     1.4     0.2              0
     3 I003      1     4.7     3.2     1.3     0.2              0
     4 I004      1     4.6     3.1     1.5     0.2              0
     5 I005      1     5.0     3.6     1.4     0.2              0
     6 I006      1     5.4     3.9     1.7     0.4              0
     [...]
     
     -rw-rw-r-- 1 gh gh 10980 oct.  10 17:29 irisG.xlsx
     
     

Solution :  

 

3. Calcul de co-occurrences en ligne de commandes

On s'intéresse ici à la production d'un tableau dit "tri croisé amélioré" qui comptabilise les croisements de deux variables qualitatives avec des marges correspondant aux pourcentages globaux.

Justifier rapidement que R est un langage adapté à ce problème.

Voici un exemple de fichier de données nommé elf1.txt :

Et le fichier de résultats recherché elf2.txt sachant qu'on s'intéresse aux champs SEXE et ETUD :


                Homme   Femme   pct Etudes
     NR          2       1        6.1 %
     Primaire    1       5       12.2 %
     Secondaire  3      13       32.7 %
     Bac         5       4       18.4 %
     Supérieur   6       9       30.6 %
     pct Sexe   34.7 %  65.3 %
     

On trouvera la description des données à l'adresse ELF.

On essaiera de produire une solution qui fonctionne quelque soit le tableau de données en entrée. Pour les plus fort(e)s, on produira aussi les histogrammes de fréquences associés, à savoir :

               non su

On réfléchira aux extensions et généralisations possibles. Nous fournissons à ce titre, deux fichiers de configuration possibles, nommés elf2Data.xml et autreCfg.xml.

Fichier elf2Data.xml


     <TRICROISE>
      <variable1>
        <nom>SEXE</nom>
        <modalites>
          <modalite valeur="1">Homme</modalite>
          <modalite valeur="2">Femme</modalite>
        </modalites>
      </variable1>
      <variable2>
        <nom>EtMarital</nom>
        <modalites>
          <modalite valeur="0">Seul</modalite>
          <modalite valeur="1">En couple</modalite>
        </modalites>
      </variable2>
     </TRICROISE>
     

Fichier autreCfg.xml


     <TRICROISE>
      <variable1>
        <nom>nivEtudes</nom>
        <modalites>
          <modalite valeur="0">Sans</modalite>
          <modalite valeur="1">Primaire</modalite>
          <modalite valeur="2">Secondaire</modalite>
          <modalite valeur="3">Bac</modalite>
          <modalite valeur="4">Sup</modalite>
        </modalites>
      </variable1>
      <variable2>
        <nom>clAGE</nom>
        <modalites>
          <modalite valeur="0">Enfant</modalite>
          <modalite valeur="1">Adulte</modalite>
        </modalites>
      </variable2>
     </TRICROISE>
     

Remarque : Pour éviter de perdre du temps, on rapatriera en local les fichiers-texte des noms et prénoms via wget.

Pour utiliser R dans une "bonne configuration" dans les locaux du département informatique, vous pouvez utiliser les commandes R, Rscript et rstudio &. Le package XML est le plus adapté pour traiter les fichiers XML. Le plus simple est de l'installer via Rstudio. Il est alors aussi disponible pour une utilisation de R en ligne de commandes.

Solution :  

 

4. Programmation et développement en R

Comment fait-on du profilage, du déboggage en R ? Comment écrire des tests, des packages en R ? Faut-il passer au tidyverse ?

Pour répondre à ces questions, vous essaierez de réaliser la page d'exercices nommée progie9.

Solution :  

 

       retour au plan de cours  

 

Code-source PHP de cette page ; code Javascript associé.

 

retour gH    Retour à la page principale de   (gH)