Listing du fichier pagsd2.php
00001 <?php
00002 error_reporting(E_ALL | E_NOTICE | E_STRICT) ;
00003 include("std7.php") ;
00004 include("pagsd_inc.php") ;
00005 # # (gH) -_- pagsd2.php ; TimeStamp (unix) : 07 Janvier 2019 vers 13:25
00006
00007 #######################################################################################
00008
00009 debutPage("PAGSD 2/5","strict","","pagsd.js") ;
00010
00011 debutSection() ;
00012 h1(s_span("P","gbleu")."roduction ".s_span("A","gbleu")."utomatisée de") ;
00013 h1(s_span("G","gbleu")."raphiques, ".s_span("S","gbleu")."tatistiques et ".s_span("D","gbleu")."ocuments") ;
00014 $gh = s_nbsp(20)." gilles.hunault \"at\" univ-angers.fr" ;
00015 h2($gh,"gvert") ;
00016 pvide() ;
00017 h2(" -- partie 2 sur 5 : statistiques et documents avec le logiciel $r");
00018 finSection() ;
00019
00020 ##############################################################################################
00021
00022 sdl(3) ; echo cmt(' pour afficher toutes les solutions : pagsd1.php?solutions=1') ; sdl(3) ;
00023
00024 ## -------------------------------------------------------------------------------------------
00025
00026 debutSection() ;
00027
00028 $tableauDesRubriques = array() ;
00029 $idr = 0 ;
00030 $idr++; $tableauDesRubriques[$idr] = "Calculs et tracés élémentaires dans une session $r" ;
00031 $idr++; $tableauDesRubriques[$idr] = "Exécution de code $r via $php" ;
00032 $idr++; $tableauDesRubriques[$idr] = "Production de calculs et graphiques à la volée en $r et $php" ;
00033 $idr++; $tableauDesRubriques[$idr] = "Statistiques et graphiques sur des données Excel" ;
00034 $idr++; $tableauDesRubriques[$idr] = "Statistiques et graphiques sur des données issues d'Internet" ;
00035 $idr++; $tableauDesRubriques[$idr] = "Tracé d'un graphe avec $r" ;
00036 $tdmCRLM = new tdm($tableauDesRubriques) ;
00037 $tdmCRLM->titre() ;
00038 $tdmCRLM->menu("oui","oui","nou") ;
00039
00040 pvide() ;
00041
00042 p() ;
00043 echo "Il est possible d'afficher toutes les solutions via " ;
00044 echo href("pagsd2.php?solutions=1","?solutions=1","bouton_fin vert_pastel nou") ;
00045 echo " et de toutes les masquer avec " ;
00046 echo href("pagsd2.php?solutions=0","?solutions=0","bouton_fin jaune_pastel nou").". " ;
00047 finp() ;
00048
00049 finSection() ;
00050
00051 debutSection() ;
00052
00053 $numSerie = 1 ;
00054 $numExo = 0 ;
00055
00056 ## -------------------------------------------------------------------------------------------
00057
00058 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Calculs et tracés élémentaires dans une session R
00059
00060 ## -------------------------------------------------------------------------------------------
00061
00062 blockquote() ;
00063
00064 blockquote() ;
00065
00066 p() ;
00067 echo "On voudrait avec $r tracer en bleu clair l'histogramme des classes d'une série de valeurs quantitatives, " ;
00068 echo " la loi normale sous-jacente en rouge, et la courbe de densité estimée par noyau en bleu foncé, " ;
00069 echo " comme pour le tracé ci-dessous. " ;
00070 finp() ;
00071
00072 p("texte") ;
00073 echo " On fournira aussi au passage les descripteurs usuels (moyenne, écart-type, médiane...) " ;
00074 finp() ;
00075
00076 p() ;
00077 nbsp(15) ;
00078 $img = "http://forge.info.univ-angers.fr/~gh/wstat/Introduction_R/leadblng3.png" ;
00079 echo href($img,img($img,"",600)) ;
00080 finp() ;
00081
00082 p("texte") ;
00083 echo " On pourra par exemple lire les données de longueur, issues du dossier " ;
00084 echo href("http://www.info.univ-angers.fr/pub/gh/Datasets/lea.htm","LEADB","grouge nou") ;
00085 echo " avec les instructions suivantes :" ;
00086 finp() ;
00087
00088 pre_fichier("../wstat/Introduction_R/lngleadb.r","cadre") ;
00089
00090 finblockquote() ;
00091
00092 solution($numExo,$numSerie) ;
00093
00094 p("texte") ;
00095 echo "Il y a visiblement " ;
00096 finp() ;
00097
00098 ol() ;
00099
00100 debutli() ;
00101 p() ;
00102 echo " un histogramme en bleu ciel, tracé via la fonction " ;
00103 echo hrrr("hist","graphics").", " ;
00104 finp() ;
00105 finli() ;
00106
00107 debutli() ;
00108 p() ;
00109 echo " la loi normale en rouge, sans doute tracée via " ;
00110 echo hrrr("curve","graphics").", " ;
00111 finp() ;
00112 finli() ;
00113
00114 debutli() ;
00115 p() ;
00116 echo " la courbe de densité estimée par noyau en bleu foncé via " ;
00117 echo hrrr("lines","graphics").", " ;
00118 #echo hrrr("density","stats").", " ;
00119 finp() ;
00120 finli() ;
00121
00122 debutli() ;
00123 p() ;
00124 echo " une estimation visuelle de la densité via un \"peigne\" sur l'axe x avec " ;
00125 echo hrrr("rug","graphics").", " ;
00126 finp() ;
00127 finli() ;
00128
00129 debutli() ;
00130 p() ;
00131 echo " une légende en haut et à droite obtenue par " ;
00132 echo hrrr("legend","graphics").", " ;
00133 finp() ;
00134 finli() ;
00135
00136 debutli() ;
00137 p() ;
00138 echo " et enfin un titre et les labels pour les axes produits par " ;
00139 echo hrrr("title","graphics").". " ;
00140 finp() ;
00141 finli() ;
00142
00143 finol() ;
00144
00145 p("texte") ;
00146 echo " Il faut donc sans doute six instructions de tracé pour réaliser le graphique. Vérification (tester par copier/coller de chaque " ;
00147 echo "ligne au fur et à mesure) :" ;
00148 finp() ;
00149
00150 entree_R("histqtlng.r") ;
00151
00152 p("texte") ;
00153 echo "Les fonctions " ;
00154 echo hrrr("Normal","stats","dnorm")." " ;
00155 echo " et " ;
00156 echo hrrr("density","stats")." " ;
00157 echo " font partie du package " ;
00158 echo hrrp("stats").", " ;
00159 echo " bien sûr." ;
00160 finp() ;
00161
00162 p("texte") ;
00163 echo "Pour obtenir des résumés statistiques comme la moyenne, la médiane, l'écart-type..., $r dispose de nombreuses " ;
00164 echo " fonctions telles que " ;
00165 echo hrrr("mean","base")." " ;
00166 echo hrrr("median","stats")." " ;
00167 echo hrrr("sd","stats")." et on peut donc écrire des instructions comme " ;
00168 finp() ;
00169
00170 entree_R("decritqtlng.r") ;
00171
00172 p("texte") ;
00173 echo " pour obtenir " ;
00174 finp() ;
00175
00176 sortie_R("decritqtlng.res") ;
00177
00178 p("texte") ;
00179 echo " Mais ce n'est pas bien présenté, et donc pas très lisible. Avec un peu d'effort en programmation, " ;
00180 echo " on peut écrire des fonctions plus évoluées pour réaliser les mêmes traitements. Via les fonctions " ;
00181 echo href("http://forge.info.univ-angers.fr/~gh/wstat/statghfns.php","statgh","grouge") ;
00182 echo ", une seule instruction suffit, qui fournit aussi l'analyse statistique de la variable et trois autres graphiques, " ;
00183 echo " nommée ".href("http://forge.info.univ-angers.fr/~gh/wstat/statghfns.php?lafns=decritQT","decritQT()","gvertf nou")." :" ;
00184 finp() ;
00185
00186 entree_R("statghlng.r") ;
00187 sortie_R("statghlng_sor.txt") ;
00188 graphique_R_png("leadblng2.png") ;
00189
00190
00191 p("texte") ;
00192 echo "S'il semble très facile de tracer des histogrammes, des courbes de densité, les calculs et les choix (nombre de classes, valeur de la densité...) " ;
00193 echo " font appel à des connaissances statistiques avancées. Voir par exemple la page " ;
00194 echo href("http://en.wikipedia.org/wiki/Kernel_density_estimation","density estimation","grouge nou").", sans doute plus intéressante que la page ";
00195 echo href("http://fr.wikipedia.org/wiki/Estimation_par_noyau","estimation par noyau","gvert nou")." dont une ";
00196 echo " application intéressante est en géographie humaine ".href("http://lara.inist.fr/bitstream/handle/2332/879/0949_T1.pdf;jsessionid=48A41A9B660B39BB2D1FE80DFBFD4E02?sequence=4","ici").". " ;
00197 finp() ;
00198
00199 finsolution() ;
00200
00201 finblockquote() ;
00202
00203 ## -------------------------------------------------------------------------------------------
00204
00205 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Exécution de code $r via $php"
00206
00207 ## -------------------------------------------------------------------------------------------
00208
00209 blockquote() ;
00210
00211 blockquote() ;
00212
00213 p("texte") ;
00214 echo "Peut-on faire exécuter du code $r par $php ?" ;
00215 finp() ;
00216
00217 p("texte") ;
00218 echo "Peut-on récupérer dans un fichier le résultat de cette exécution ?" ;
00219 finp() ;
00220
00221 finblockquote() ;
00222
00223 solution($numExo,$numSerie) ;
00224
00225 p("texte") ;
00226 echo "La réponse est oui, bien évidemment, puisque $php peut exécuter des " ;
00227 echo " commandes et lancer des exécutables via l'instruction ".b("system()").". " ;
00228 finp() ;
00229
00230 p("texte") ;
00231 echo "Par exemple, si le fichier ".href("demo.r")." contient le code :" ;
00232 finp() ;
00233
00234 pre_fichier("demo.r","cadre") ;
00235
00236 p("texte") ;
00237 echo "alors le programme $php suivant, nommé " ;
00238 echo href("montresource.php?nomfic=phpetr01.php","phpetr01.php") ;
00239 finp() ;
00240
00241 pre_fichier("phpetr01.php","cadre") ;
00242
00243 p("texte") ;
00244 echo "produit exactement ce que vous pensez. Il suffit de cliquer " ;
00245 echo href("phpetr01.php","ici")." pour le vérifier." ;
00246 echo " L'option ".b("--no-save")." (qui n'est sans doute pas suffisante) " ;
00247 echo " a pour but de ne pas charger l'environnement $r et donc de fournir ";
00248 echo " une exécution ".b("reproductible").". " ;
00249 finp() ;
00250
00251 p("texte") ;
00252 echo "Tout cela n'est pas très paramétré. Rajoutons donc " ;
00253 echo " la redirection des sorties dans un fichier temporaire. " ;
00254 echo " Vérification ".href("phpetr02.php","ici")." à l'aide du programme ";
00255 echo href("montresource.php?nomfic=phpetr02.php","phpetr02.php").". " ;
00256 echo " On notera le passage de l'option ".b("--no-save") ;
00257 echo " à l'option ".b("--vanilla").". " ;
00258 finp() ;
00259
00260 pre_fichier("phpetr02.php","cadre") ;
00261
00262 p("texte") ;
00263 echo "Bien sûr, ceci n'est pas très \"propre\". A l'aide des options " ;
00264 echo " d'exécution de R on peut faire nettement mieux, comme on le voit " ;
00265 echo href("phpetr03.php","ici")." à l'aide du programme ";
00266 echo href("montresource.php?nomfic=phpetr03.php","phpetr03.php") ;
00267 finp() ;
00268
00269 pre_fichier("phpetr03.php","cadre") ;
00270
00271 p("texte") ;
00272 echo "Enfin, pour produire une \"vraie\" page Web, un ".b("include") ;
00273 echo " et quelques fontions ".b("conceptuelles") ;
00274 echo " via le programme ";
00275 echo href("montresource.php?nomfic=phpetr04.php","phpetr04.php") ;
00276 finp() ;
00277
00278 pre_fichier("phpetr04.php","cadre") ;
00279
00280
00281 p("texte") ;
00282 echo "assurent un rendu valide ".b("XHTML Strict")." habillé en CSS " ;
00283 echo "comme le montre la page ".href("phpetr04.php")."." ;
00284 finp() ;
00285
00286 finsolution() ;
00287
00288 finblockquote() ;
00289
00290 ## -------------------------------------------------------------------------------------------
00291
00292 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Production de calculs et graphiques à la volée en R et PHP
00293
00294 ## -------------------------------------------------------------------------------------------
00295
00296 blockquote() ;
00297
00298 blockquote() ;
00299
00300 p("texte") ;
00301 echo "Reprendre l'exercice précédent où les données sont lues dans un formulaire." ;
00302 finp() ;
00303
00304 finblockquote() ;
00305
00306 solution($numExo,$numSerie) ;
00307
00308 p("texte") ;
00309 echo "Elémentaire, mon cher Watson !" ;
00310 echo " Si les données sont dans un formulaire, une stratégie simple peut être de transférer les données " ;
00311 echo " dans un fichier temporaire et de faire exécuter par $php un script $r d'analyse sur ces données." ;
00312 finp() ;
00313
00314
00315 p("texte") ;
00316 echo "Dans la mesure où $r peut éxécuter les instructions en ligne de commande, il suffit de préparer les commandes à " ;
00317 echo " exécuter, de les mettre aussi dans un fichier temporaire et de laisser $r tout traiter. " ;
00318 finp() ;
00319
00320
00321
00322 p("texte") ;
00323 echo "On trouvera à l'URL " ;
00324 echo href("../wstat/aqt_det.php","aqt_det.php")." une implémentation possible des calculs et des graphiques " ;
00325 echo " avec des exemples prêts à l'emploi. Les fichiers utilisés sont " ;
00326 echo href("../wstat/montresource.php?nomfic=calcstat.php",b("calcstat.php"),"orange_stim nou").", " ;
00327 echo href("../wstat/montresource.php?nomfic=progstat.php",b("progstat"),"orange_stim nou")." et " ;
00328 echo " ".href("../montresource.php?nomfic=statuno.php",b("statuno"),"orange_stim nou")."." ;
00329 echo " L'archive ".href("statprog.zip")." contient ces programmes qu'on essaiera d'utiliser, " ;
00330 echo " à défaut de les modifier ou de les réécrire." ;
00331 finp() ;
00332
00333 p("texte") ;
00334 echo "Voici comment cela fonctionne : le formulaire de la page " ;
00335 echo href("../wstat/aqt_det.php","aqt_det.php","gvert nou")." envoie les données et le champ caché " ;
00336 echo b("calc=aqtdet")." à la page web " ;
00337 echo href("../wstat/montresource.php?nomfic=calcstat.php","calcstat.php","gvert nou")." en mode post " ;
00338 echo " Ce fichier ".b("calcstat.php")." se contente d'utiliser la \"bonne\" fonction sur les données :" ;
00339 finp() ;
00340
00341 pre_fichier("../wstat/calcstat.php","cadrebleu") ;
00342
00343
00344 p("texte") ;
00345 echo "Les fonctions utilisées par ".b("calcstat.php")." sont définies dans le fichier inclus " ;
00346 echo href("../wstat/montresource.php?nomfic=progstat.php","progstat","gvert nou").". " ;
00347 echo "La fonction ".b("aqt_det()")." affiche les données dans un élément ".bleu("<textarea>") ;
00348 echo " puis les écrit dans un fichier temporaire dont le nom commence par ".b("aqt_det.data").". " ;
00349 echo " Le reste du nom du fichier est déterminé par la fonction $php nommée " ;
00350 echo href("http://php.net/manual/fr/function.tempnam.php","tempnam()","grougef nou") ;
00351 echo " de façon à éviter un conflit en cas de calculs concurrents. " ;
00352 echo "La fonction ".b("aqt_det()")." prépare aussi les noms des deux fichiers pour les graphiques." ;
00353 echo " Si on met la variable ".b("\$dbg")." à 1 dans cette fonction, on peut alors voir à l'éxécution " ;
00354 echo " un élément ".bleu("<pre>")." qui contient quelque chose comme :" ;
00355 finp() ;
00356
00357 pre_fichier("calcstat1.txt","cadre") ;
00358
00359 p("texte") ;
00360 echo "La fonction ".b("aqt_det()")." vient ensuite mettre dans un tableau $php les instructions $r " ;
00361 echo " à exécuter, soit un contenu similaire à :" ;
00362 finp() ;
00363
00364 pre_fichier("calcstat2.txt","cadre") ;
00365
00366 p("texte") ;
00367 echo " avant d'appeler la fonction ".b("execute_R()")." qui est définie dans le fichier " ;
00368 echo href("../wstat/montresource.php?nomfic=statuno.php","statuno","gvert nou").". " ;
00369 echo " Cette fonction ".b("execute_R()")." transfère les commandes $r dans un fichier " ;
00370 echo " temporaire avant d'appeler le logiciel $r avec une redirection des entrées et des sorties. " ;
00371 echo " Une variable ".b("\$dbg")." mise à 1 dans cette fonction montre aussi une trace de ce qui se passe." ;
00372 finp() ;
00373
00374 pre_fichier("calcstat3.txt","cadre") ;
00375
00376
00377 p("texte") ;
00378 echo "Comme on peut le voir à l'instruction [5], $php demande à $r de mettre les graphiques dans des " ;
00379 echo " fichiers dont le nom a été généré par ".b("tempnam()").". Le répertoire utilisé, soit ".b("tmp")." pour le " ;
00380 echo " est en fait un répertoire local de l'utilisateur, soit ".b("/home/gh/public_html/wtmp")." dont les " ;
00381 echo " droits sont ".vert("777")." afin que le serveur Web puisse y écrire. Pour $php il s'agit donc d'un " ;
00382 echo " répertoire relatif, lié au serveur Web alors que pour $r il s'agit d'un répertoire local, définir par son " ;
00383 echo " chemin absolu. Pour que $php puisse ensuite afficher les images, il faut modifier le chemin d'accès aux " ;
00384 echo " images. " ;
00385 finp() ;
00386
00387
00388 p("texte") ;
00389 echo "La fonction que $r utilise pour traiter les données est nommée " ;
00390 echo href("../wstat/statghfns.php?lafns=dtQT&montrer","dtQt()","gvertf nou")." et fait partie " ;
00391 echo " de ".href("../wstat/statghfns.php","nos fonctions $r","grouge nou")."." ;
00392 finp() ;
00393 # une solution Ajax ?
00394
00395 finsolution() ;
00396
00397 finblockquote() ;
00398
00399 ## -------------------------------------------------------------------------------------------
00400
00401 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Statistiques et graphiques sur des données Excel
00402
00403 ## -------------------------------------------------------------------------------------------
00404
00405 blockquote() ;
00406
00407 blockquote() ;
00408
00409 p("texte") ;
00410 echo " Reprendre les mêmes calculs et graphiques juste avec la colonne ".b("poids") ;
00411 echo " du fichier Excel ".href("her_extrait.xls") ;
00412 echo " puis avec toutes les colonnes. Les unités respectives sont les années, les kilos et les centimètres. " ;
00413 echo " Les données sont un extrait du dossier ".href("../Datasets/her.htm","HER").". " ;
00414 echo " On pourra utiliser les fonctions de ".href("http://forge.info.univ-angers.fr/~gh/wstat/statghfns.php","statgh.r")."." ;
00415 finp() ;
00416
00417 p("texte") ;
00418 echo "Est-ce facilement généralisable à tout fichier Excel ?" ;
00419 finp() ;
00420
00421 finblockquote() ;
00422
00423 solution($numExo,$numSerie) ;
00424
00425 p("texte") ;
00426 echo "Il y a deux stratégies possibles : lire les données avec $php puis effectuer les calculs et graphiques avec $r " ;
00427 echo " ou tout faire avec $r. " ;
00428 echo " Dans la mesure où $r sait bien lire les fichiers Excel, cette dernière solution est sans doute la meilleure. On trouvera ";
00429 echo href("f_aqtExcel.php","ici")." et ci-dessous une interface pour choisir le nom de la ou des colonnes et lancer l'analyse." ;
00430 #echo href("aqtExcel.php","ici")." une interface pour choisir le fichier Excel et le nom de la ou des colonnes." ;
00431 finp() ;
00432
00433 pre_fichier("f_aqtExcel.php","cadre") ;
00434
00435 p("texte") ;
00436 echo "Le traitement en $r est alors assez simple puisqu'on peut préparer toutes les commandes $r à l'avance." ;
00437 echo " On trouvera en bas de la page ".href("aqtExcel.php","aqtExcel")." (ignorer le message d'erreur affiché) " ;
00438 echo " le code-source pour le traitement. Voici par exemple le code $r à exécuter pour la variable ".b("POIDS")." :" ;
00439 finp() ;
00440
00441 pre_fichier("aqtPOIDS.r","cadrejaune") ;
00442
00443 p("texte") ;
00444 echo "Pour exécuter cela via ".b("PHP")." on peut utiliser la fonction ".b("analyse()")." suivante :" ;
00445 finp() ;
00446
00447 pre_fichier("aqtExcel_inc.php","cadrebleu") ;
00448
00449 p("texte") ;
00450 echo "Sur le principe, cet exercice est facilement généralisable : il suffit de choisir un fichier Excel, de trouver le nom des " ;
00451 echo " colonnes et demander quelle colonne on veut traiter. " ;
00452 echo " En pratique, l'analyse est infaisable car toutes les colonnes ne sont pas analysables au sens des variables quantitatives. " ;
00453 echo " Que faire, par exemple de la colonne 1 (IDEN) du fichier ".href("her_extrait.xls")." ?" ;
00454 echo " De plus, il manquerait aussi l'unité sans laquelle l'analyse n'a pas de sens." ;
00455 echo " Supposer que tous les fichiers Excel puissent être formatés avec un codage adapté (ligne 1, nom des colonnes ;" ;
00456 echo " ligne 2, indication quantitative ou non ; ligne 3 unité éventuelle) est irréaliste." ;
00457 finp() ;
00458
00459 finsolution() ;
00460
00461 finblockquote() ;
00462
00463 ## -------------------------------------------------------------------------------------------
00464
00465 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Statistiques et graphiques sur des données issues d'Internet
00466
00467 ## -------------------------------------------------------------------------------------------
00468
00469 blockquote() ;
00470
00471 blockquote() ;
00472
00473 p("texte") ;
00474 echo " Reprendre maintenant avec les données de la page " ;
00475 echo href("http://www.touteleurope.eu/les-pays-de-l-union-europeenne.html","paysUE")." " ;
00476 echo " dont une copie locale avec code source \"aménagé\" est ".href("paysUE.html","ici").". " ;
00477 echo "On fournira un tableau avec le nom des pays, leur superficie et leur population. " ;
00478 echo " Ce tableau sera triable. Afficher ensuite un graphique des superficies et des populations." ;
00479 echo " Vous trouverez à l'adresse ".href("paysUE.php")." un exemple de ce que l'on doit obtenir." ;
00480 finp() ;
00481
00482 finblockquote() ;
00483
00484 solution($numExo,$numSerie) ;
00485
00486 p("texte") ;
00487 #echo "Sans problème." ;
00488 echo "Exerice non corrigé volontairement. L'accès au code-source de page solution " ;
00489 echo " ".href("paysUE.php")." sera expliqué en TP." ;
00490 finp() ;
00491
00492 finsolution() ;
00493
00494 finblockquote() ;
00495
00496 ## -------------------------------------------------------------------------------------------
00497
00498 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Tracé d'un graphe avec R
00499
00500 ## -------------------------------------------------------------------------------------------
00501
00502 blockquote() ;
00503
00504 blockquote() ;
00505
00506 p("texte") ;
00507 echo "Exécuter le code $r suivant et expliquer ce que fait chaque ligne non vide." ;
00508 finp() ;
00509
00510 pre_fichier("gxhtml.r","cadrebleu") ;
00511
00512
00513 p("texte") ;
00514 echo "Ecrire ensuite une fonction $r qui lit un fichier de listes d'adjacence, qui construit l'objet graphe associé puis " ;
00515 echo " qui affiche sa matrice d'adjacence et en donne une représentation graphique. On utilisera le package " ;
00516 echo href("http://finzi.psych.upenn.edu/R/library/igraph/html/00Index.html","igraph","gvertf nou").". " ;
00517 finp() ;
00518
00519 finblockquote() ;
00520
00521 solution($numExo,$numSerie) ;
00522
00523 p("texte") ;
00524 echo "Commençons par numéroter les lignes du script R :" ;
00525 finp() ;
00526
00527 pre_fichier("gxhtml_num.txt","cadrebleu") ;
00528
00529 p("texte") ;
00530 echo "La ligne 1 est un commentaire, ignorée par $r. Elle est mise ici pour rappeler " ;
00531 echo " comment installer le package " ;
00532 echo href("http://finzi.psych.upenn.edu/R/library/igraph/html/00Index.html","igraph","gvertf nou").". " ;
00533 echo " La ligne 3 charge ce package. S'il n'est pas installé, $r ne va plus loin. " ;
00534 echo " La ligne 5 crée un objet de type ".b("igraph")." nommé ".b("gxhtml")." -- ce qu'on peut vérifier avec l'instruction " ;
00535 echo b("class(gxhtml)").". Il s'agira d'un graphe orienté à cause de ".b("directed=TRUE")." et ".b("egdes=...") ;
00536 echo " indique les arcs du graphe. Les valeurs numériques correspondent aux numéros des sommets (ou ".b("vertex")." en anglais). " ;
00537 echo " Par défaut, ceux-ci ont comme label leur numéro. " ;
00538 echo " La ligne 6 permet de changer ces labels pour les valeurs ".b('"html","head","body","title"').". " ;
00539 echo " La ligne 8 affiche la matrice d'adjacence du graphe et la ligne 10 l'affiche graphiquement. " ;
00540 echo " En fait, la fonction ".b("plot")." de la ligne 10 fait appel à la fonction ".b("plot.igraph")." du package." ;
00541 finp() ;
00542
00543 p("texte") ;
00544 echo "Voici le résultat de l'exécution de ces lignes :" ;
00545 finp() ;
00546
00547 pre_fichier("gxhtml.res","cadrejaune") ;
00548
00549 p("texte") ;
00550 echo "Et le graphique produit :" ; # via ghxhtml2.r
00551 finp() ;
00552
00553 pre("cadre") ;
00554 nbsp(15) ;
00555 $img = "rxhtml.png" ;
00556 echo href($img,img($img,"",600)) ;
00557 finpre() ;
00558
00559 p("texte") ;
00560 echo "On peut se servir de la solution $php de la série précédente d'exercices comme trame de la " ;
00561 echo " fonction ".b("showGraph()")." en $r. Voici une implémentation possible :" ;
00562 finp() ;
00563
00564 pre_fichier("showgraph.r","cadrebleu") ;
00565
00566 p("texte") ;
00567 echo "Et des exemples d'utilisation :" ;
00568 finp() ;
00569
00570 pre_fichier("showgraph.res","cadrejaune") ;
00571
00572 p("texte") ;
00573 echo "Avec les graphiques associés :" ; # via showgraph3.r
00574 finp() ;
00575
00576 pre("cadre") ;
00577 sdl() ;
00578 nbsp(15) ;
00579 $img = "rgraph1.png" ;
00580 echo href($img,img($img,"",300)) ;
00581 sdl(3) ;
00582 nbsp(15) ;
00583 $img = "rgraph2.png" ;
00584 echo href($img,img($img,"",300)) ;
00585 sdl() ;
00586 finpre() ;
00587
00588 finsolution() ;
00589
00590 finblockquote() ;
00591
00592 ## -------------------------------------------------------------------------------------------
00593
00594 p() ;
00595 echo href("montresource.php?nomfic=pagsd2.php","Code-source de cette page","orange_stim nou")." ; " ;
00596 echo " fichiers inclus : ".href("montresource.php?nomfic=pagsd_inc.php","pagsd_inc.php","orange_stim nou") ;
00597 echo " et ".href("montresource.php?nomfic=pagsd.js","pagsd.js","orange_stim nou")."." ;
00598 finp() ;
00599
00600 finSection() ;
00601 finPage() ;
00602 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)