Programmation orientée statistique ================================== L'idée de ce cours est d'apprendre à travailler avec différents outils informatiques "libres" pour traiter des données et construire des applications scientifiques. Par applications scientifiques, on entendra de petits utilitaires, le plus souvent exécutables à partir de la ligne de commande, destinés à transformer, traiter et représenter graphiquement des données, à partir de modèles statistiques. L'idée générale est qu'il existe de nombreux petits outils disponibles sur n'importe quelle machine un*x, et qui lorsqu'ils sont combinés efficacement permettent d'effectuer très rapidement des traitements autrement impensables. Notre éditeur de choix sera Emacs (www.gnu.org/software/emacs/) qui se distingue des autres éditeurs par la puissance de ses modes spécifiques aux outils informatiques présentés dans ce cours. Même si sa prise en main peut s'avérer délicate au premier abord, avec un peu de patience on arrive très vite à optimiser son travail d'édition de fichiers, de compilation de programme et de debugging. Pour les traitements "lourds" et couteux en temps de calcul, on utilisera le langage C, la librarie scientifique GNU GSL et la bibliothèque apophenia (apophenia.sourceforge.net/) qui offre les structures de données appropriées pour manipuler des données (fichiers plats ou base de données). Les sorties graphiques se feront à l'aide de gnuplot. On utilisera gdb pour le deboggage et la compilation reposera sur l'utilitaire make. L'interface avec les bases de données reposera essentiellement sur sqlite, qui est beaucoup plus facile à gérer depuis des programmes C. En revanche, on parlera égaleemnt de postgresql puisqu'il existe de nombreuses librairies R et Python permettant l'accès à des bases de données de ce type. Pour les shell scripts, on utilisera Perl et Bash, ainsi que les utilitaires standard disponibles sur les machine un*x-like : cat, cut, sed, awk... La librairie plotutils (www.gnu.org/software/plotutils/) permet en outre de produire rapidement de petits graphiques à partir de données "pipées" en ligne de commande ou à partir de shell scripts. Python pourra être utilisé en mode interactif ou pour construire de petites chaînes de traitement de calcul numérique. La bibliothèque NumPY (numpy.scipy.org/) fournit un ensemble de structures de données et de procédures de calcul matriciel qui permettront de nous passer des environnements plus complexes comme Matlab. Enfin, pour les traitement statistiques plus élaborés, et pour générer des graphiques prêts à être insérés dans un rapport Latex, on utilisera le langage R (www.cran.r-project.org). Ses possibilités graphiques dépassent en effet de loin n'importe quel logiciel disponible sur le marché, et l'essentiel des modèles statistiques sont immédiatement disponibles dans les packages de base. On installera toutefois certains packages additionnels. La production d'un rapport automatique ou statique sera effectué avec Latex et Sweave (www.stat.uni-muenchen.de/~leisch/Sweave/). Les présentations interactives pourront être réalisées en Beamer (latex-beamer.sourceforge.net/). On n'abordera pas la conception d'interface graphique évoluées, mais le mieux serait dans ce cas de se tourner vers Java (avec JNI). De même, on ne traitera pas de la programmation orientée objet, même si en présentant Python et R on aura inévitablement quelques approches de la question. Finalement, on ne parlera pas non plus de compilation croisée, ni de l'articulation entre différents langages de programmation, avec swig (www.swig.org/) par exemple, même si cela apparaît une option indispensable pour optimiser certains bouts de code. Plan provisoire : + Familiarisation avec la ligne de commande et Bash + Introduction à Emacs + Sed, awk, tcl/tk, et outils GNU + Perl + Base de données : sqlite, mysql, postgresql + Introduction à C + Traitements avancés avec C et apophenia + Calcul numérique avec Python/NumPY + Programmation R + Production de rapport automatique avec Latex et Sweave + Exemple de projets à réaliser