Valid XHTML     Valid CSS2    

Listing du fichier tp3.php

 

00001     <?php
00002     
# # (gH) -_- tp3.php ; TimeStamp (unix) : 14 Novembre 2019 vers 18:17
00003     
error_reporting(E_ALL | E_NOTICE | E_STRICT ) ;
00004     
header
('Content-Type "text/html; charset=iso-8859-1"') ;
00005     
ini_set
( 'default_charset', 'ISO-8859-1' );
00006     include(
"decra-inc.php") ;
00007     
00008     
$numSerie
= 3 ;
00009     
debutTP
($numSerie,"Programmation en R") ;
00010     
ghAtAngers() ;
00011     
00012     
$R
= ghRouge("R") ;
00013     
$XML
= ghRouge("XML") ;
00014     
$Awk
= ghRouge("AWK") ;
00015     
$Php
= ghVert("PHP") ;
00016     
00017     
## -------------------------------------------------------------------------------------------
00018     
00019     
sdl
(3) ; echo cmt(' pour afficher toutes les solutions : tp1.php?solutions=1') ; sdl(3) ;
00020     
00021     
## -------------------------------------------------------------------------------------------
00022     
00023     
p
("texte") ;
00024     echo
"" ;
00025     
finp() ;
00026     
debutSection() ;
00027     
00028     
$tableauDesRubriques = array() ;
00029     
$idr
= 0 ;
00030     
$idr
++; $tableauDesRubriques[$idr] = "Tuteur $R, Rstudio et Jupyter notebook" ;
00031     
$idr
++; $tableauDesRubriques[$idr] = "Exercices simples d'entrainement pour \"snobber\" Excel" ;
00032     
$idr
++; $tableauDesRubriques[$idr] = "Calcul de co-occurrences en ligne de commandes" ;
00033     
$idr
++; $tableauDesRubriques[$idr] = "Programmation et développement en $R" ;
00034     
00035     
$tdmCRLM
= new tdm($tableauDesRubriques) ;
00036     
$tdmCRLM
->titre() ;
00037     
$tdmCRLM
->menu("oui","oui","nou") ;
00038     
00039     
direAfficherSolutionsTP
($numSerie) ;
00040     
00041     
finSection() ;
00042     
00043     
$numExo
= 0 ;
00044     
00045     
## -------------------------------------------------------------------------------------------
00046     
00047     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Tuteur R et Jupyter notebook
00048     
00049     ## -------------------------------------------------------------------------------------------
00050     
00051     
blockquote
() ; # tp
00052     
00053     
blockquote
() ; # énoncé
00054     
00055     
$sous
= 0 ;
00056     
00057     
$sous
++ ; h3("Partie 1.".$sous) ;
00058     
00059     
p
("texte") ;
00060     
$tutr
= "../wstat/Programmation_R/Programmation_introduction/tutrprog.php" ;
00061     echo
" Commencer par relire le "
.href($tutr,"tuteur de programmation $R").". " ;
00062     
finp() ;
00063     
00064     
p
("texte") ;
00065     
$rwarm
= "../wstat/R-warmup/" ;
00066     echo
" Pour les plus courageuses et les plus courageux, essayer de répondre aux dix exercices de la section " ;
00067     echo
b
("1. I don't know $R")." ";
00068     echo
" de la "
.href($rwarm,"$R &laquo;warm-up session&raquo;").". " ;
00069     echo
" Où sont les solutions&nbsp;?" ;
00070     
finp() ;
00071     
00072     
$sous
++ ; h3("Partie 1.".$sous) ;
00073     
00074     
p
("texte") ;
00075     echo
" Reproduire ensuite le tableau des puissances inférieures ou égales à 1 million. On nommera "
.b("boucle.r") ;
00076     echo
" le fichier correspondant qu'on exécutera d'abord dans Rstudio. Comment exporter le résultat pour obtenir le fichier " ;
00077     echo
href
("boucle.txt")." suivant&nbsp;:" ;
00078     
finp() ;
00079     
00080     
pre_fichier
("boucle.txt","cadre") ;
00081     
00082     
p
("texte") ;
00083     echo
" Serait-ce plus simple à exécuter et à exporter dans un terminal&nbsp;?" ;
00084     
finp() ;
00085     
00086     
p
("texte") ;
00087     echo
" Serait-ce plus simple à exécuter et à exporter via un Jupyter Notebook&nbsp;?" ;
00088     echo
" Pour mémoire, dans les salles du département informatique, " ;
00089     echo
" il faut, dans un terminal lancer la commande "
.b("_jupyter_notebook")." c'est-à-dire ".ghBleu("jupyter_notebook")." précédé du souligné ".ghBleu("_") ;
00090     echo
" pour pouvoir utiliser un serveur local de notebooks. Le disque "
.b("D")." et le répertoire ".b("Mes_notebooks")." permettent alors " ;
00091     echo
" d'enregistrer les fichiers." ;
00092     
finp() ;
00093     
00094     
$sous
++ ; h3("Partie 1.".$sous) ;
00095     
00096     
p
("texte") ;
00097     echo
" Reproduire ensuite les calculs liés à "
.b("microbenchmark( a &lt;- runif(n), b &lt;- rnorm(n) )")." puis ceux " ;
00098     echo
" liés à l'optimisation de "
.b("sum(v==maxv)")." et de ".b("which(v==maxv)").". " ;
00099     echo
" Est-ce normal d'avoir des résultats différents du tuteur&nbsp;?" ;
00100     
finp() ;
00101     
00102     
$sous
++ ; h3("Partie 1.".$sous) ;
00103     
00104     
p
("texte") ;
00105     echo
"Télécharger puis compléter le Jupyter Notebook nommé "
.href("../Notebooks/introduction-a-R.ipynb","introduction-a-R")."." ;
00106     
finp() ;
00107     
00108     
pre_fichier
("jupyter_R.txt","cadrebleu") ;
00109     
00110     
finblockquote
() ; # énoncé
00111     
00112     
solutionTP
($numExo,$numSerie) ;
00113     
00114     
p
("texte") ;
00115     echo
"Il n'y a aucune question pour "
.ghvert("la partie 1.1")."." ;
00116     
finp() ;
00117     
00118     
$rwarm
= "../wstat/R-warmup/" ;
00119     echo
" Les solutions de la "
.href($rwarm,"$R &laquo;warm-up session&raquo;")." " ;
00120     echo
" sont cachées sous le bouton bleu nommé "
.href("../wstat/R-warmup/answers.txt","play","gbleu")." tout en bas de la page, ce qui " ;
00121     echo
" correspond au fichier "
.href("../wstat/R-warmup/answers.txt","answers.txt").". " ;
00122     echo
" On peut alors exécuter chacune des instructions données en solution." ;
00123     
00124     
p
("texte") ;
00125     echo
"Au niveau de "
.ghvert("la partie 1.2").", il faut commencer par écrire le code $R nommé ".href("boucle.r")." suivant " ;
00126     
finp() ;
00127     
00128     
pre_fichier
("boucle.r","cadrebleu") ;
00129     
00130     
p
("texte") ;
00131     echo
" Sous Rstudio, on peut copier/coller ou exporter les lignes affichées, mais ce n'est pas très professionnel. " ;
00132     echo
" Il est préférable de passer par le couple " ;
00133     echo
href
("http://finzi.psych.upenn.edu/R/library/base/html/sink.html","sink") ;
00134     echo
"/" ;
00135     echo
href
("http://finzi.psych.upenn.edu/R/library/base/html/sink.html","source") ;
00136     echo
" comme suit&nbsp;:" ;
00137     
finp() ;
00138     
00139     
pre_fichier
("boucle2.r","cadrebleu") ;
00140     
00141     
p
("texte") ;
00142     echo
" Par contre en ligne de commandes, une simple redirection de la sortie suffit&nbsp;" ;
00143     
finp() ;
00144     
00145     
pre_fichier
("boucle3.txt","cadrejaune") ;
00146     
00147     
p
("texte") ;
00148     echo
" Il n'est pas plus simple d'utiliser un Jupyter notebook ici." ;
00149     
finp() ;
00150     
00151     
p
("texte") ;
00152     echo
"Si, pour la partie "
.ghvert("la partie 1.3").", on écrit le code $R nommé ".href("performance.r")." suivant " ;
00153     
finp() ;
00154     
00155     
pre_fichier
("performance.r","cadrebleu") ;
00156     
00157     
p
("texte") ;
00158     echo
" il y a de fortes chances pour qu'il ne fonctionne pas, parce qu'il faut d'abord installer le package " ;
00159     echo
href
("https://cran.r-project.org/web/packages/microbenchmark/index.html","microbenchmark").". " ;
00160     echo
" Là, le plus simple est certainement de passer par Rstudio, via l'onglet "
.b("Package")." du panneau en bas et à droite&nbsp;: " ;
00161     echo
" on clique sur le sous-onglet "
.b("Install").", on met le mot ".b("microbenchmark")." dans la zone de saisie texte et " ;
00162     echo
" il suffit de cliquer sur le bouton "
.b("Install")." pour disposer du package. Notre script s'exécute alors correctement. " ;
00163     
finp() ;
00164     
00165     
p
("texte") ;
00166     echo
"Voici le résultat de son exécution (au bout d'environ 10 secondes en moyenne sur nos ordinateurs)&nbsp;:" ;
00167     
finp() ;
00168     
00169     
pre_fichier
("performance.txt","cadrejaune") ;
00170     
00171     
p
("texte") ;
00172     echo
" Il est normal qu'on n'ait pas exactement les m&ecirc;mes résultats que dans le tuteur parce qu'on utilise des valeurs aléatoires " ;
00173     echo
" et parce que l'exécution du code dépend de l'état de la machine..." ;
00174     
finp() ;
00175     
00176     
p
("texte") ;
00177     echo
ghvert
("Partie 1.4")."&nbsp;: le code complet associé au " ;
00178     echo
" Jupyter notebook nommé "
.href("../Notebooks/introduction-a-R.ipynb","introduction-a-R")." se nomme " ;
00179     echo
" "
.href("../Notebooks/introduction-a-R-solution.ipynb","introduction-a-R-solution").". " ;
00180     echo
" A lire sans modération&nbsp;!" ;
00181     
finp() ;
00182     
00183     
finsolution
() ; # contient un blockquote
00184     
00185     
finblockquote
() ; # tp
00186     
00187     ## -------------------------------------------------------------------------------------------
00188     
00189     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Exercices simples d'entrainement
00190     
00191     ## -------------------------------------------------------------------------------------------
00192     
00193     
blockquote
() ; # tp
00194     
00195     
blockquote
() ; # énoncé
00196     
00197     
$sous
= 0 ;
00198     
00199     
$sous
++ ; h3("Partie 2.".$sous) ;
00200     
00201     
p
("texte") ;
00202     echo
" Ecrire un script R nommé "
.b("extraitFichierExcel.r")." qui affiche les cinq premières lignes et les cinq dernières lignes " ;
00203     echo
" d'un fichier Excel dont le nom est passé en paramètre, par exemple le fichier " ;
00204     echo
href
("iris.xlsx").". " ;
00205     echo
" Exemple de fonctionnement&nbsp;:" ;
00206     
finp() ;
00207     
00208     
pre_fichier
("extraitiris.txt","cadre") ;
00209     
00210     
$sous
++ ; h3("Partie 2.".$sous) ;
00211     
00212     
p
("texte") ;
00213     echo
" Ecrire un script bash et une fonction R nommés tous deux "
.b("decritFichierExcel")." qui utilisent un paramètre nommé ".b("fichierExcel") ;
00214     echo
" avec le comportement suivant&nbsp;:" ;
00215     
finp() ;
00216     
00217     
ul() ;
00218     
00219     
debutli
() ; p() ;
00220      echo
"s'il n'y a pas de paramètre, on fournit un rappel de la syntaxe et un exemple puis on s'arr&ecirc;te." ;
00221     
finp
() ; finli() ;
00222     
00223     
debutli
() ; p() ;
00224      echo
"si le fichier Excel désigné par le paramètre n'est pas présent, on l'indique et on s'arr&ecirc;te." ;
00225     
finp
() ; finli() ;
00226     
00227     
debutli
() ; p() ;
00228      echo
"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...)." ;
00229     
finp
() ; finli() ;
00230     
00231     
debutli
() ; p() ;
00232      echo
" on utlisera un "
.b("try/catch")." pour garantir que la lecture des données s'est bien passée." ;
00233     
finp
() ; finli() ;
00234     
00235     
finul() ;
00236     
00237     
p
("texte") ;
00238     echo
"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," ;
00239     echo
" comme ci-dessous, pour le fichier "
.href("iris.xlsx")."&nbsp;:" ;
00240     
finp() ;
00241     
00242     
pre_fichier
("decritiris.txt","cadre") ;
00243     
00244     
$sous
++ ; h3("Partie 2.".$sous) ;
00245     
00246     
p
("texte") ;
00247     echo
" Dès qu'on dépasse plusieurs centaines de lignes dans un fichier Excel, il est difficile d'écrire et de recopier des formules. " ;
00248     echo
" Par exemple, pour le fichier "
.href("iris.xlsx").", il est un peu fastidieux de " ;
00249     echo
" créer une colonne "
.b("grandesPetales")." avec la valeur 0 si ".b("largpet")." est strictement inférieure à 2 et égale à 1 ailleurs. " ;
00250     echo
" Avec
$R, c'est un jeu d'enfants. La preuve ? Ecrivez le script correspondant... On nommera ".b("irisG.xlsx") ;
00251     echo
" le fichier Excel résultat." ;
00252     
finp() ;
00253     
00254     
p
("texte") ;
00255     echo
" Voici ce qu'on devrait obtenir&nbsp;:" ;
00256     
finp() ;
00257     
00258     
pre_fichier
("irisg.txt","cadre") ;
00259     
00260     
finblockquote
() ; # énoncé
00261     
00262     
solutionTP
($numExo,$numSerie) ; # contient un blockquote
00263     
00264     
p
("texte") ;
00265     echo
" Facile, c'est du
$R&nbsp;!" ;
00266     
finp() ;
00267     
00268     
p
("texte") ;
00269     echo
"Pour "
.ghvert("la partie 2.1").", sans aucune vérification du paramètre, on peut se contenter du code ".href("extraitFichierExcel.r")." suivant&nbsp;:" ;
00270     
finp() ;
00271     
00272     
pre_fichier
("extraitFichierExcel.r","cadrebleu") ;
00273     
00274     
p
("texte") ;
00275     echo
" Pour "
.ghVert("la partie 2.2").", il faut écrire un fichier script et un fichier $R. " ;
00276     echo
" Nous choisissons ici d'utiliser une syntaxe "
.b("longue")." d'appel de $R. C'est $R qui gère le paramètre..." ;
00277     
finp() ;
00278     
00279     
00280     
p
("texte") ;
00281     echo
"Code du fichier "
.href("decritFichierExcel")." rendu exécutable sous Linux via ".b("chmod +x")."&nbsp;:" ;
00282     
finp() ;
00283     
00284     
pre_fichier
("decritFichierExcel","cadrejaune") ;
00285     
00286     
p
("texte") ;
00287     echo
"Code du fichier
$R nommé ".href("decritFichierExcel.r")."&nbsp;:" ;
00288     
finp() ;
00289     
00290     
pre_fichier
("decritFichierExcel.r","cadrebleu") ;
00291     
00292     
p
("texte") ;
00293     echo
"Vérification du fonctionnement&nbsp;:" ;
00294     
finp() ;
00295     
00296     
pre_fichier
("decritFichierExcel.txt","cadre") ;
00297     
00298     
p
("texte") ;
00299     echo
" Le code du fichier inclus
$R nommé ".href("decritFichierExcel-inc.r")." est listé ci-dessous&nbsp;:" ;
00300     
finp() ;
00301     
00302     
pre_fichier
("decritFichierExcel-inc.r","cadrebleu") ;
00303     
00304     
p
("texte") ;
00305     echo
"Pour "
.ghVert("la partie 2.3")." on peut se contenter du fichier ".href("irisg.r")." suivant&nbsp;:" ;
00306     
finp() ;
00307     
00308     
pre_fichier
("irisg.r","cadrebleu") ;
00309     
00310     
finsolution
() ; # contient un blockquote
00311     
00312     
finblockquote
() ; # tp
00313     
00314     ## -------------------------------------------------------------------------------------------
00315     
00316     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Calcul de co-occurrences en ligne de commandes
00317     
00318     ## -------------------------------------------------------------------------------------------
00319     
00320     
blockquote
() ; # tp
00321     
00322     
blockquote
() ; # énoncé
00323     
00324     
p
("texte") ;
00325     echo
"On s'intéresse ici à la production d'un tableau dit \"tri croisé amélioré\" qui comptabilise les croisements de deux variables qualitatives " ;
00326     echo
" avec des marges correspondant aux pourcentages globaux. " ;
00327     
finp() ;
00328     
00329     
p
("texte") ;
00330     echo
" Justifier rapidement que
$R est un langage adapté à ce problème." ;
00331     
finp() ;
00332     
00333     
p
("texte") ;
00334     echo
"Voici un exemple de fichier de données nommé "
.href("elf1.txt")."&nbsp;:" ;
00335     
finp() ;
00336     
00337     
p() ;
00338     
textarea_fichier
("elf1","cadrebleu",8,45,"elf1","elf1.txt") ;
00339     
finp() ;
00340     
00341     
p
("texte") ;
00342     echo
"Et le fichier de résultats recherché "
.href("elf2.txt")." sachant qu'on s'intéresse aux champs SEXE et ETUD&nbsp;:" ;
00343     
finp() ;
00344     
00345     
pre_fichier
("elf2.txt","cadrejaune") ;
00346     
00347     
p
("texte") ;
00348     echo
"On trouvera la description des données à l'adresse "
.href("../Datasets/elf.htm","ELF")."." ;
00349     
finp() ;
00350     
00351     
p
("texte") ;
00352     echo
"On essaiera de produire une solution qui fonctionne quelque soit le tableau de données en entrée. " ;
00353     echo
" Pour les plus fort(e)s, on produira aussi les histogrammes de fréquences associés, à savoir&nbsp;:" ;
00354     
finp() ;
00355     
00356     
p() ;
00357     
nbsp
(15) ;
00358     
$img
= "sexeEtudes.png" ;
00359     echo
href
($img,img($img,"",400)) ;
00360     
finp() ;
00361     
00362     
p
("texte") ;
00363     echo
" On réfléchira aux extensions et généralisations possibles. Nous fournissons à ce titre, deux fichiers de configuration possibles, " ;
00364     echo
" nommés "
.href("elf2Data.xml")." et ".href("autreCfg.xml").". " ;
00365     
finp() ;
00366     
00367     
p() ;
00368     echo
b
("Fichier ".href("elf2Data.xml")) ;
00369     
finp() ;
00370     
00371     
pre_fichier
("elf2Data.xml","cadrebleu") ;
00372     
00373     
p() ;
00374     echo
b
("Fichier ".href("autreCfg.xml")) ;
00375     
finp() ;
00376     
00377     
pre_fichier
("autreCfg.xml","cadrebleu") ;
00378     
00379     
p
("texte") ;
00380     echo
ghRouge
("Remarque&nbsp;:") ;
00381     echo
" Pour éviter de perdre du temps, on rapatriera en local les fichiers-texte des noms et prénoms via "
.b("wget").". " ;
00382     
finp() ;
00383     
00384     
p
("texte") ;
00385     echo
" Pour utiliser
$R dans une \"bonne configuration\" dans les locaux du département informatique, " ;
00386     echo
" vous pouvez utiliser les commandes "
.b("R").", ".b("Rscript")." et ".b("rstudio&nbsp;&amp;").". " ;
00387     echo
" Le package "
.ghBleu("XML")." est le plus adapté pour traiter les fichiers $XML. Le plus simple est de l'installer " ;
00388     echo
em
("via")." ".ghBleu("Rstudio").". Il est alors aussi disponible pour une utilisation de $R en ligne de commandes." ;
00389     
finp() ;
00390     
00391     
finblockquote
() ; # énoncé
00392     
00393     
solutionTP
($numExo,$numSerie) ; # contient un blockquote
00394     
00395     
p
("texte") ;
00396     echo
"Il n'est sans doute pas difficile de comprendre ce qu'il faut calculer et tracer. " ;
00397     echo
" Par contre, savoir quel langage utiliser pour résoudre simplement et rapidement ce problème " ;
00398     echo
" (il s'agit d'une petite application) n'est pas si simple car calculer des sommes et des pourcentages " ;
00399     echo
" est à la portée de tout langage de scripts. " ;
00400     echo
"&Agrave; nos yeux, un choix raisonnable semble &ecirc;tre " ;
00401     echo
" celui du langage
$R car il comporte pour chaque action à exécuter dans ces calculs et mises en forme une fonction " ;
00402     echo
" pr&ecirc;te à l'emploi. Comme ce n'est pas simple, il faut penser à écrire un plan de développement, comme par exemple " ;
00403     echo
" celui défini dans "
.href("tp3exo3.php")."." ;
00404     
finp() ;
00405     
00406     
p
("texte") ;
00407     echo
"Voici donc une version minimale nommée "
.href("co-occur1.r")." qui traite uniquement l'exemple proposé&nbsp;:" ;
00408     
finp() ;
00409     
00410     
pre_fichier
("co-occur1.r","cadrejaune") ;
00411     
00412     
p
("texte") ;
00413     echo
"Quelques commentaires s'imposent, pour une bonne compréhension du script&nbsp;:" ;
00414     
finp() ;
00415     
00416     
ul() ;
00417     
00418     
debutli
() ; p("texte") ;
00419      echo
"La lecture des données est assurée par " ;
00420      echo
" la fonction "
.hrrr("read.table","utils","","gvert nou")." du package ".hrrp("utils") ;
00421      echo
"&nbsp;;" ;
00422      echo
" le paramètre "
.b("header")." indique que la ligne 1 du fichier ne contient pas des données, mais le nom des colonnes." ;
00423     
finp
() ; finli() ;
00424     
00425     
debutli
() ; p("texte") ;
00426      echo
" La fonction "
.hrrr("factor","base","","gvert nou")." du package ".hrrp("base") ;
00427      echo
" permet de convertir une colonne de données numériques (qui sont des numéros de modalités) en une &laquo;vraie&raquo; " ;
00428      echo
" "
.href("https://fr.wikipedia.org/wiki/Variable_cat%C3%A9gorielle","variable qualitative")." ou ".b("facteur") ;
00429      echo
" dans la terminologie de
$R." ;
00430     
finp
() ; finli() ;
00431     
00432     
debutli
() ; p("texte") ;
00433      echo
" La fonction "
.hrrr("table","base","","gvert nou")." du package ".hrrp("base") ;
00434      echo
" permet de compter le nombre d'occurrences de chaque modalité " ;
00435      echo
" (&laquo;"
.href("../wstat/Introduction_R/intror4.php?solutions=0#tdm4","tri à plat")."&raquo;) " ;
00436      echo
" pour un seul paramètre et le nombre d'occurrences de chaque couple de modalités " ;
00437      echo
" (&laquo;"
.href("http://www.statsoft.fr/concepts-statistiques/statistiques-elementaires/tris-croises.php","tri croisé")."&raquo;) " ;
00438      echo
" pour deux paramètres. " ;
00439     
finp
() ; finli() ;
00440     
00441     
debutli
() ; p("texte") ;
00442      echo
" Pour calculer les pourcentages associés, on passe par " ;
00443      echo
" la fonction "
.hrrr("prop.table","base","","gvert nou").", toujours dans le package ".hrrp("base").". " ;
00444     
finp
() ; finli() ;
00445     
00446     
debutli
() ; p("texte") ;
00447      echo
" Gr&acirc;ce à la fonction "
.hrrr("paste","base","","gvert nou")." on adjoint le symbole ".ghVert("%")." à ces pourcentages " ;
00448      echo
" et on les ajoute respectivement en ligne et en colonne via " ;
00449      echo
" les fonctions "
.hrrr("cbind","base","rbind()","gvert nou") ;
00450      echo
" et " ;
00451      echo
" "
.hrrr("cbind","base","","gvert nou").". " ;
00452     
finp
() ; finli() ;
00453     
00454     
debutli
() ; p("texte") ;
00455      echo
" Il ne reste plus qu'à mettre les bons noms de lignes et de colonnes respectivement via " ;
00456      echo
" les fonctions "
.hrrr("row.names","base","","gvert nou") ;
00457      echo
" et " ;
00458      echo
" "
.hrrr("colnames","base","","gvert nou")." avant " ;
00459      echo
" d'afficher via la fonction générique " ;
00460      echo
" "
.hrrr("print","base","","gvert nou")." " ;
00461      echo
" sans montrer les guillemets à l'aide du paramètre "
.b("quote") ;
00462      echo
" car
$R a converti au passage tout le tableau en chaines de caractères." ;
00463     
finp
() ; finli() ;
00464     
00465     
finul() ;
00466     
00467     
p
("texte") ;
00468     echo
"Si l'on veut généraliser ce script, la partie facile consiste à rajouter un paramètre correspondant " ;
00469     echo
" au nom du fichier à traiter. Une partie plus délicate concerne le nom des deux variables, les valeurs numériques " ;
00470     echo
" et les labels de leurs modalités. Comme cela peut faire beaucoup d'informations à gérer, le mieux est sans doute de " ;
00471     echo
" mettre ces informations dans un fichiers structuré, disons au format
$XML ou ".ghBleu("JSON").". " ;
00472     
finp() ;
00473     
00474     
p
("texte") ;
00475     echo
"Comme la partie
$XML est la plus délicate, nous allons commencer par simuler cette partie $XML et généraliser tout le reste, " ;
00476     echo
" en testant tout ce qui doit l'&ecirc;tre, comme l'existence des fichiers, des variables. " ;
00477     echo
" Voici ce que cela donne dans le fichier "
.href("co-occur2.r")." qui utilise un autre fichier de données nommé ".href("elf2Data.txt")."&nbsp;:" ;
00478     
finp() ;
00479     
00480     
p
("texte") ;
00481     echo
b
("Fichier ").href("elf2Data.txt")."&nbsp;:" ;
00482     
finp() ;
00483     
00484     
pre_fichier
("elf2Data.txt","cadre") ;
00485     
00486     
p
("texte") ;
00487     echo
"On passe donc à une deuxième version, où les instructions précédentes deviennent une fonction " ;
00488     echo
" et où des tests garantissent un code "
.b("robuste").". " ;
00489     
finp() ;
00490     
00491     
p
("texte") ;
00492     echo
b
("Fichier ").href("co-occur2.r")."&nbsp;:" ;
00493     
finp() ;
00494     
00495     
pre_fichier
("co-occur2.r","cadrejaune") ;
00496     
00497     
p
("texte") ;
00498     echo
"Pour parachever le script, il reste à traiter le fichier
$XML de configuration." ;
00499     echo
" Voici tout d'abord un exemple de fichier
$XML à traiter, nommé ".href("autreCfg.xml")."&nbsp;:" ;
00500     
finp() ;
00501     
00502     
pre_fichier
("autreCfg.xml","cadrebleu") ;
00503     
00504     
p
("texte") ;
00505     echo
"Le détail des actions à effectuer sur le fichier
$XML de configuration est détaillé ci-dessous&nbsp;:" ;
00506     
finp() ;
00507     
00508     
ul() ;
00509     
00510     
debutli
() ; p("texte") ;
00511      echo
" il faut charger le fichier
$XML de configuration en mémoire, " ;
00512      echo
" ce qui se fait via la fonction "
.hrrr("xmlTreeParse","XML","xmlParse()","gvert nou")." qui est dans le package ".hrrp("XML")."." ;
00513     
finp
() ; finli() ;
00514     
00515     
debutli
() ; p("texte") ;
00516      echo
" on récupère les informations recherchées (nom de variable, numéros et labels de modalités) " ;
00517      echo
" à l'aide de la fonction "
.hrrr("getNodeSet","XML","","gvert nou")." du package ".hrrp("XML")." " ;
00518      echo
" en utilisant de simples expressions "
.ghRouge("XPATH")."&nbsp;; " ;
00519      echo
" le troisième paramètre indique ce qu'on veut faire de la donnée&nbsp;: pour les numéros de modalité, on " ;
00520      echo
" veut convertir en nombre entier." ;
00521     
finp
() ; finli() ;
00522     
00523     
debutli
() ; p("texte") ;
00524      echo
" comme
$R renvoie des listes, on convertit en vecteur " ;
00525      echo
" gr&acirc;ce à la fonction "
.hrrr("unlist","base","","gvert nou")." du package ".hrrp("base")." " ;
00526     
finp
() ; finli() ;
00527     
00528     
finul() ;
00529     
00530     
p
("texte") ;
00531     echo
"Voici un script plus complet avec prise en compte de
$XML dans le fichier ".href("co-occur3.r")."&nbsp;:" ;
00532     
finp() ;
00533     
00534     
pre_fichier
("co-occur3.r","cadrejaune") ;
00535     
00536     
p
("texte") ;
00537     echo
"On finit par faire un script complet avec test des paramètres, le code est dans le fichier "
.href("co-occur4.r") ;
00538     echo
" sachant que la fonction est définie dans le fichier "
.href("co-occur.r")."&nbsp;:" ;
00539     
finp() ;
00540     
00541     
pre_fichier
("co-occur4.r","cadrejaune") ;
00542     
00543     
p
("texte") ;
00544     echo
"Il est assez simple de tester les cinq cas d'erreur possibles prévus et un bon cas d'exécution&nbsp;:" ;
00545     
finp() ;
00546     
00547     
pre_fichier
("co-occur4_err.txt","cadre") ;
00548     
00549     
p
("texte") ;
00550     echo
" Pour les graphiques à produire, à savoir des histogrammes de fréquences (et non pas des histogrammes de classes), " ;
00551     echo
" on pourra s'inspirer de notre " ;
00552     echo
href
("http://forge.info.univ-angers.fr/~gh/wstat/Introduction_R/","introduction à $R").", " ;
00553     echo
href
("http://forge.info.univ-angers.fr/~gh/wstat/Introduction_R/intror3.php?solutions=0","séance 3").", " ;
00554     echo
href
("http://forge.info.univ-angers.fr/~gh/wstat/Introduction_R/intror3.php?solutions=1#tdm5","exercice 5",". ") ;
00555     
finp() ;
00556     
00557     
finsolution
() ; # contient un blockquote
00558     
00559     
finblockquote
() ; # tp
00560     
00561     ## -------------------------------------------------------------------------------------------
00562     
00563     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # programmation et développement
00564     
00565     ## -------------------------------------------------------------------------------------------
00566     
00567     
blockquote
() ; # tp
00568     
00569     
blockquote
() ; # énoncé
00570     
00571     
p
("texte") ;
00572     echo
" Comment fait-on du profilage, du déboggage en
$R&nbsp;? " ;
00573     echo
" Comment écrire des tests, des packages en
$R&nbsp;? " ;
00574     echo
" Faut-il passer au tidyverse&nbsp;? " ;
00575     
finp() ;
00576     
00577     
p
("texte") ;
00578     echo
" Pour répondre à ces questions, vous essaierez de " ;
00579     echo
" réaliser la page d'exercices nommée " ;
00580     echo
href
("../wstat/Programmation_R/Programmation_introduction/progie9.php","progie9").". " ;
00581     
finp() ;
00582     
00583     
finblockquote
() ; # énoncé
00584     
00585     
solutionTP
($numExo,$numSerie) ; # contient un blockquote
00586     
00587     
p
("texte") ;
00588     echo
" La page " ;
00589     echo
href
("../wstat/Programmation_R/Programmation_introduction/progie9.php","progie9")." " ;
00590     echo
" contient les solutions, on peut y accéder directement via l'URL " ;
00591     echo
href
("../wstat/Programmation_R/Programmation_introduction/progie9.php?solutions=1","progie9 solutions")." " ;
00592     
finp() ;
00593     
00594     
finsolution
() ; # contient un blockquote
00595     
00596     
finblockquote
() ; # tp
00597     
00598     #############################################################################
00599     
00600     
finTP
($numSerie) ;
00601     
?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)