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