XD blog

blog page

2013-03


2013-03-30 Python, R, MOOC, Big Data, quelques références

A chaque fois qu'on change de distribution Python, il faut réinstaller les modules dont on se sert et aussi ceux dont on se sert parfois et dont on découvre qu'ils ne sont pas toujours maintenus à jour. Le module Rpy2 permet de lancer des scripts R depuis l'interpréteur Python. Il permet également d'accéder à certains objets puisque l'espace de travail reste ouvert et garde la mémoire de ce qui a été fait. J'essaye de l'installer, ce que je n'ai pas encore réussi à faire avec la version 3 de Python, et ce faisant, je suis tombé sur le module RPython qui permet de faire exactement l'inverse, c'est-à-dire d'exécuter du code Python depuis R.

Je suis beaucoup plus à l'aise avec Python dès qu'il s'agit de faire les choses les plus ennuyeuses (charger des données, réarranger des colonnes, filtrer, appliquer des modifications textuelles...), je vais probablement l'essayer. Mais cela montre que le langage Python est plutôt populaire. La même chose existe avec Excel : le module pyxll permet d'écrire des macros en Python de façon plutôt simple. L'idée est plutôt séduisante, il est plus facile de maintenir un code Python plutôt que de VBA.

L'apprentissage de l'informatique se démocratique en ce sens qu'il devient de plus en plus facile de trouver des cours gratuits et de très bonne qualité. Le site du zéro propose également de nombreux tutoriels sur la plupart des langages informatiques courants. En langue anglaise, il y a code school ou Khan Academy qui dispose de nombreuses vidéos à propos de sujets allant de la programmation à computer science même si dans ce domaine le must est Coursera. L'école Polytechnique a décidé d'y participer : EP. edX est une autre plateforme choisie par Harvard, le MIT. Ces plateformes sont appelées MOOC, le blog suivant un MOOC c'est quoi au juste sera plus disert que moi sur le sujet. Le dernier cité est Udacity. Le premier (Coursera) est probablement le plus riche, on y trouve également des cours d'improvisation musicale.

Chose amusante, peu de cours apparaissent lorsqu'on en cherche un à propos de Big Data. Sans doute cette présentation Big Data, Sorry What Does a Data Scientist Do en donnera quelques raisons (j'ai trouvé cela depuis le blog Freakonometrics).

2013-03-26 L'informatique, une matière moins noble

Quand j'ai soutenu ma thèse, j'ai découvert que mon doctorat m'offrirait moins de portes académiques tout simplement parce celui-ci me désignait comme docteur en informatique et non en mathématiques. Je ne sais pas si c'est toujours le cas mais l'informatique a toujours eu en France un côté moins noble parce que très appliqué. Aujourd'hui, des phénomènes comme Big Data, Data Scientist prennent de l'ampleur et avec eux l'utilisation de l'informatique. Il est pratiquement impossible de se passer des ordinateurs, dès qu'on aborde un sujet un tant soit peu appliqué, il faut savoir coder, ce que j'ai très peu fait dans un cadre scolaire, ce que j'ai beaucoup fait en dehors de l'école et surtout au travail. On peut prétendre que cela s'apprend facilement, que comprendre les maths est plus difficile, et qu'avec un peu de pratique, on saura faire. Il me serait difficile de réfuter ça, c'est comme ça que j'ai appris. Toutefois, c'est un peu comme les gammes au piano, plus on en fait, plus on est à l'aise.

Cette division math/info est beaucoup moins présente dans les pays anglosaxons où les mathématiques appliquées et l'informatique s'appellent computer science. Lors des entretiens d'embauche, il est rare de passer au travers d'exercices de codes. C'est parfois même le premier filtre écrit préalable au premier entretien. Entre quelqu'un que cela ne rebute pas et quelqu'un qui prend la chose de haut, les sociétés n'hésitent pas longtemps. Même s'il est prétendument facile de devenir programmeur, de nombreuses compagnies ont tendance à rejeter des candidats qui n'ont jamais beaucoup programmé si c'est un élément important du poste à pourvoir.

Les smartphones sont aussi de petits ordinateurs programmables. Il est probable que d'autres objets du quotidien gagneront en complexité et deviendront à leur tour pilotables à l'aide un langage de programmation. Je pense que c'est un outil dont il faudrait commencer l'apprentissage plus tôt. Il en serait moins rébarbatif et, accessoirement, n'en limiterait plus l'usage aux seuls geeks. C'est d'ailleurs le cas dans certains pays de l'est comme la Roumanie. Maîtriser la programmation pourrait faire gagner beaucoup de temps à quiconque se sert d'Excel au quotidien.

Lorsqu'on doit pondre un algorithme qui doit tourner en production 24h sur 24, savoir coder est très important. Il peut y avoir des facteurs 10 ou 100 sur le même algorithme programmé de façon plus ou moins efficace. Savoir programmer n'est pas tout, il est utile d'apprendre les tournures de phrases les plus fréquentes, d'acquérir une sorte de culture générale du domaine, savoir ce que sont des tableaux, des arbres, savoir quand il est préférable d'utiliser l'un plutôt que l'autre, savoir pourquoi quand on divise un problème en deux, on passe d'un coût en O(n) à un coût en O(ln(n)), comprendre pourquoi il vaut mieux utiliser un index lorsqu'on fait une jointure sur deux tables SQL...

En ce qui concerne l'informatique, j'ai quasiment tout appris en pratiquant, parce que terminer un programme signifie aussi l'avoir compris. La pratique permet aussi de comprendre qu'il existe rarement un programme optimal en toute circonstance et qu'on choisira une façon de coder plutôt qu'une autre en fonction du volume, de la nature des données qu'on manipule. De ce fait, beaucoup de programmes sont une compilation complexe de recettes simples. On s'aperçoit aussi parfois qu'on retrouve le même algorithme sous différents visages, plus court chemin dans un graphe de Djikstra, distance d'édition de Levenstein, séquence la plus probable de Viterbi.

Je manipule tellement de données qu'en regarder quelques-unes ne suffit plus à donner une vue d'ensemble. Il faut sans cesse agrégrer, classifier, régresser. Ce travail est quasiment impossible si on ne sait pas programmer. Cette culture algorithmique me permet bien souvent d'aller plus vite, d'obtenir les mêmes résultats en un temps moindre avec, parfois, une certaine élégance.

Pour finir, je conseille l'écoute d'une émission de radio que j'ai découverte après avoir écrit ceci : L'éloge du savoir, Algorithmes, machines et langages (entretien avec Gérard Berry) L'informatique est train de changer la façon d'organiser nos vies et il est mal enseigné aujourd'hui et surtout trop tard. Que sera notre monde dans les prochaines années (et non les prochaines décennies) ? Nos dirigeants ne prennent la mesure des changements que l'informatique n'a pas fini d'apporter comme le dit Michelle Volle dans cet article : Pour comprendre l'iconomie.

2013-03-21 Palindromes

Aujourd'hui, je suis tombé sur cette vidéo sur le site du Monde qui parlait des palindromes (nombres ou mots qui ont la même signification qu'on les lise de gauche à droite ou de droite à gauche). A la fin de la question, Cédric Villani pose deux questions :

Les deux questions ne sont pas très difficiles mais pour la seconde, la réponse est presque toujours 11. Voici le résultat de la première si n est le nombre de chiffres :

 9 * 10^{\left[\frac{n}{2}\right]-1} * 10^{(n \mod 2)}

La partie entre crochets désigne la partie entière de la division de n par 2. Le 11 est surprenant. Au début, je me suis dit qu'il suffisait de changer les deux chiffres les plus proches du milieu et de fil en aiguille, on pense au fait que 1 et 0,999999999999, c'est quasiment la même chose et qu'il devrait y moyen d'appliquer ça ici. Rapide calcul de tête : 11. Facile de démontrer que ce n'est pas plus grand quand on comprend quels palidromes choisir (voir plus bas). Pour démontrer que ce n'est pas plus petit, il suffit de démontrer que cela ne peut être ni 1, ni 2, ni 3, ..., ni 10 excepté pour les palindromes à trois chiffres.

2  - py  9  theo  9  - ecart (11, '**', 11, '-->', 22)
3  - py  90  theo  90  - ecart (10, '**', 101, '-->', 111)
4  - py  90  theo  90  - ecart (11, '**', 1991, '-->', 2002)
5  - py  900  theo  900  - ecart (11, '**', 19991, '-->', 20002)
6  - py  900  theo  900  - ecart (11, '**', 199991, '-->', 200002)
7  - py  9000  theo  9000  - ecart (11, '**', 1999991, '-->', 2000002)

J'ai écrit un rapide programme en Python palindrome.py pour produire la liste ci-dessus qui m'a permis de me souvenir que Python 3 fait des divisions réelles par défaut au lieu de division entière pour Python 2. Vous pourrez voir la réponse filmée du mathématicien ici.

En cherchant un peu sur le net, on découvre qu'on s'est intéressé à beaucoup de problèmes autour des palindromes. Travaillant pour un moteur de recherche, ce qui m'intrigue, c'est de savoir si on peut relier la difficulté de l'exercice au nombre de réponses reçues par le journal.

2013-03-16 Create Anime Gif in Python

Creating an animated gif does not seem to be an easy task. Some people recommend to use the library PIL which is not maintained anymore and does not work on Python 3 according to the website. Some others prefer to use PyGame to animate the gif themselves (see this post, it contains some simple examples on how to do it). Some others recommend to use ImageMagick (see this post or this one).

I tried the solution using ImageMagick. It should be working as it is. You will need too files (you just have to copy paste them in a folder, keep the same name)

The second one calls the first to make the example works. It downloads ImageMagick and process your files following the instructions introduced in the blogs post linked above.

2013-03-15 Décaféiné à l'eau ou au détergent

Ce matin j'écoutais une émission de France Inter à propos du café. Outre le fait que le café en capsule est loin d'être le meilleur, l'émission détaillait les processus de suppression de la caféine, Ces procédés sont loin d'être anecdotiques. Selon les cas, il utilise de l'eau ou du détergent. Wikipédia détaille trois moyens d'enlever la caféine. L'article suivant How is coffee decaffeinated? est plus précis. Une des citations est beaucoup plus explicite : Coffee Decaffeination Process and Cancer dans la revue CancerFacts mais le lien est cassé. Le dernier article The best decaf coffee: which is safe, which is dangerous, and which has caffeine? mentionne des plants de cafés génétiquement modifiés sans caféine. Reprendrez-vous un déca ?

2013-03-14 Migration to Python 3, only for geeks!

I tried to migrate some of the script I wrote and to use Python 3. I just cut half of what I wrote. Too painful at the end, The print change, ok, iteritems into items, ok, not unicode object anymore, I do like, no cmp parameter for sort, just key, ok again, the integer division, definitively not ok. 1/2 is 0 in many languages except Python. No script can fix because Python is interpreted and discovered types during the execution. The following loop is just longer than expected and hard to catch using unit testing if you do not specifically look for it.

i = 10
while i > 0 :
    i /= 10
The rule to import files changed too, not too bad except it is really difficult to migrate every file or to keep everything working for two versions of Python (2.7 and 3.x). After finishing all the replacements, I had many failing unit tests, I started to fix them one by one but at the end, I gave up. Having an empty list instead of a list with one element, more than one thousand lines of code involved, I gave up, too many side effect I cannot easily guess, easier to rewrite. On the other hand, the C library went easy (using boost really helped).

I wonder how a company could impose such a change to its customers by introducing big breaks without having difficulties to keep them. The language is probably in a better shape now but I think it was too sudden. I wish there could be a tool allowing a program to run at the same on both versions and throwing exception whenever a variable contains a different results (not very easy to write if you generate random variables or if you have dependencies on others libraries which changed their behavior).

2013-03-13 L'ordinateur et le cloud

Je viens de changer d'ordinateur, j'ai remplacé mon vieux Windows par un tout neuf. Non pas que je préfère Windows à MacIntosh mais c'est une juste une question d'habitude. Tous mes cours, mes programmes mes images sont sous Windows et je n'imagine pas le temps qu'il me faudrait pour tout savoir refaire avec un autre système. Déjà là, je m'attendais à passer une paire d'heure pour tout remettre en place et je vais y passer une journée à télécharger, installer, changer quelques chemins... Une plaie. Il fut une époque où passer ce temps était envisageable car on devait vivre avec la même machine pendant quelques années. Aujourd'hui, si ça pète, on remplace, si ça bug, on remplace, si c'est trop vieux, on remplace. On ne répare plus. Et passer une journée à télécharger, installer (rassurez-vous, je ne fais pas que ça mais il faut quand même regarder l'écran de temps en temps)...

J'aimerais bien appuyer sur un bouton et tout retrouver en l'état car je dois installer pas mal de trucs pour tout faire marcher. Je me suis aperçu que j'ai besoin de plein de trucs pour mes enseignements, des modules Python, des logiciels comme 7zip, Acrobat Reader, Antivir, Chrome, doxygen, Filezilla, Firefox, Ghosscript, Ghostview, Graphviz, ImageMagick, InnoSetup, Itunes, Mailbird, Microsoft Office 365, Miktex, R Studio, Scite, SongBird, SQLiteSpy, TexnicCenter, TortoiseSvn, Visual Studio, VLC, ou des modules pour Python cvxopt, Matplotlib, Mingw, networkx, Numpy, PyGame, Pysvn, python coverage, Python3, Pywin32, rpy2, pour Python avancé, BeautifulSoup, flask, Sphinx, feedparser PyPi, Goose Python Git, des outils pour travailler à plusieurs github, et pour les plus geeks Bandizip (décompression du format egg), Cygwin, dependencywalker, GNUWin32, linqpad, NUnit, pyxll NLTK Python, ). Je me suis demandé s'il y avait un moyen de télécharger et d'installer chaque logiciel. Je pense que cela serait possible pour la plupart des logiciels libres mais je me suis arrêté à l'écriture d'un script permettant de récupérer les URLs affichés ci-dessus (find_url_for_software.py).

Le modèle est des applications sur téléphone arrive sur les ordinateurs : la même interface partout et aussi une multitude d'applications simples qui font des tâches plus petites et bien identifiés. Je n'aimerais pas toutes les installer à nouveau sur le prochain ordinateur. Tout est question d'habitudes, on passe du temps à les mettre en place, à choisir soigneusement les applications pour son téléphone. On s'apprête à faire de même pour son ordinateur. On peut maintenant converser son bureau, ses contacts quelque part dans le cloud (on devrait plus se soucier de ce quelque part car selon les législations, on peut faire plus ou moins de choses avec les données personnelles). Mes applications, leur emplacement sur mon écran, sur mon téléphone, mes contacts, mes données avec les SkyDrive, Google Drive ou DopBox... Je ne perdrai plus rien. J'appuierai sur un bouton et, après quelques heures, je retrouverai tout à l'identique.

Bientôt, on posera des revêtements lumineux sur tous les murs des appartements. On choisira d'afficher ici ou là un poster, de remplacer le poster par un film aussi facilement qu'en appuyant sur un bouton. On fera de grands gestes avec les mains pour dire à des capteurs de mouvements qu'on souhaite une ambiance tamisée de rouge. On pourra en un instant retrouver son décor préféré, son chez soi dans la plupart des chambres d'hôtels, l'ordinateur proposera un ré-arrangement des murs en fonction de la luminosité. On pourra retrouver son décor après un déménagement. Il n'y aura plus de différence d'un pays à l'autre, des logiciels traduiront les langues étrangères. Ca vaut peut être le coup que j'optimise le bureau de mon ordinateur. Je passe aux murs bientôt.

On verra ça demain. En attendant, la plupart des grandes compagnies vous incitent à vous identifier parfois de manière anodine. Pour avoir accès à des listes de lecture aléatoires, Itunes vous propose d'activer la fonctionalité Genius après avoir créé un compte... J'ai essayé SongBird qui me permet également de récupérer les pochettes.

D'aures suggestions d'outils ici.

2013-03-12 Convert a Python script into a HTML file

This blog shows many Python script in HTML files with colors. I use the following module to do that: py2html. Well, I downloaded a few years ago and it does not seem to be available anymore. I modified to make it work on Python 3. I also created a second file on the top of it to add other stuff (footer, ...). You can find them here:

Plus, copy/pasting does preserve indentation which I do appreciate.

2013-03-11 Big Data, Data Scientist, quelques repères

En rejoignant Yahoo il y a déjà cinq ans, j'ai découvert le langage PIG. Ce n'était pour moi qu'un nouveau langage très proche de SQL dont le seul attrait était de pouvoir accéder aux logs de recherches puis de les aggréger de différentes manières avant de pouvoir enfin les poser sur une machine isolée où je pouvais travailler simplement et rapidement. Aujourd'hui, cette technique est étiqueté Big Data et s'est considérablement étoffée. En passant chez Microsoft, j'ai découvert son équivalent chez Microsoft avec Scope. Google a developpé un langage Sawzall dont la syntaxe est plus proche d'un langage fonctionnel. Aujourd'hui, au fur et à mesure de mes discussions sur le Big Data, je garde quelques références sur le sujet, des idées. Cela n'a rien d'exhaustif mais je suis étonné qu'autant de projets fleurissent étant donné l'investissement que chacun d'entre eux nécessite. Ce billet rassemble quelques idées, termes, liens.

Quelques remarques sur l'utilité de ces techniques

Hadoop/PIG et ses extensions open sources


more...

2013-03-10 Les restaurants dont j'aimerais me souvenir

Lorsqu'on travaille dans une boîte américaine, qu'on vit à Paris, qu'on a des collègues qui viennent de partout dans le monde, une des questions qui revient le plus fréquemment, c'est : "tu connaîtrais pas un bon resto ?" Je traduis la question car elle me parvient le plus souvent en anglais. Mais il est étonnant de remarquer que le simple fait d'être un français esseulé au milieu de non français implique sans contestation possible que vous êtes expert en la matière. Il faut savoir aussi qu'une fois arrivés au restaurant, le choix du vin vous revient sans que vous ne puissiez surseoir. Mon domaine d'expertise se limitant le plus souvent à quelques endroits dans Paris où il est possible de manger un steak tartare (je ne pourrais pas en dire autant concernant les frites fraîches et je fais confiance au paternel pour le vin), je finis par choisir le Brouilly qui semble être le vin le plus répandu et le moins risqué (fatiguant d'être un scientifique parfois). Bref, c'est le vin que je prends pour éviter les mauvaises surprises (ou le Morgon si le Brouilly n'y est pas). Cela dit, je ne sais pas pourquoi je m'inquiète, il m'est arrivé de repérer un vin bouchonné devant mes collègues qui se rangèrent finalement à mon avis devant ma quasi certitude à moins que ce ne soit à mon injonction à le goûter dans mon verre. La serveuse hésitait entre une bouteille bouchonnée et un client culpabilisant après avoir renouvelé les cadavres sans l'approbation du patron, elle a vite été convaincue après l'avoir goûté.

Bref, ce petit billet n'avait rien à voir avec toute cette histoire, c'est juste que je ne me souviens jamais des adresses et que je les note toujours mais jamais au même endroit ce qui revient au même et dans les deux sens. Aussi me suis-je dit qu'en écrivant sur ce blog, j'aurais peut-être la chance de taper mon nom suivi de restaurant sur un moteur de recherche pour retrouver la mémoire. Pourquoi pas ? C'est souvent quand on commence ce genre d'initiative qu'on n'a plus besoin. On verra bien. Je note.

Le premier est Semilla (54, rue de Seine, Paris) que j'ai découvert grâce à une émission de France Culture le dimanche matin. Excellent. Il faut prévoir 60 euros par personne mais tout y est travaillé et on n'est pas servi en cinq minutes ce que j'apprécie. J'en garde un excellent souvenir. Il vaut mieux réserver.

Le second est encore meilleur que le premier Le Frenchie (5-6 rue du Nil, Paris). On me l'a fait découvrir. Il faut réserver des semaines à l'avance et arriver à l'heure mais ces petites concessions sont récomponsées. Le vin était extraordinaire. Et le pain... je n'ai jamais mangé du pain aussi bon. Bref, assez cher (70 euros par personnes) mais je n'arrive pas à l'oublier.

Le prochain que j'ai envie d'essayer dans la même gamme c'est La Régalade (49, avenue Jean-Moulin, Paris). Toujours France Culture, je le note pour ne pas l'oublier.

Après, il y a les resto, bistrot, simples, plats ou steak tartare, verre de vin, style brasseries, une quinzaine d'euros, et plus avec le vin et le dessert. Je dois en oublier quelques-uns mais les mettre tous ce soir dans ce blog gâcherait un peu le plaisir. Le Buron (119 avenue Félix Faure, Paris), la carte ne change jamais mais tout y est bon. Les frites sont fraîches. L'étoile de Montmartre (26 rue Duhesme, Paris), même style excepté les nems au chocolat. On essaye de prendre autre chose mais il y en toujours un des deux qui craque. La popote du 18 (184, rue Marcadet), simple. La pulcinella (17 rue Damrémont, Paris), c'est tout petit mais les pizza sont bonnes. Chez Anne (41 rue du Ruisseau, Paris), toujours pas essayé, je me plante toujours sur les horaires et il me faut six mois pour y repenser à nouveau, un jour je l'aurai. J'en ai encore un autre en tête, je sais y aller mais je suis incapable d'indiquer le chemin. Il faut que j'y retourne.

J'ai aussi essayé celui-ci Brunello, les vins sont en majorité italiens et celui que j'ai goûté était bon. Les pâtes très bien cuites. On m'a récemment conseillé L'Hédoniste. Il faudra que j'y fasse un tour. Au suivant aussi : Les enfants perdus. Tout est à Paris.

Je ne me souviens plus des émissions de cuisine lorsque j'avais dix ans et Maïté m'a longtemps éloigné de ce genre que je considérais à l'époque comme un divertissement. Et puis, j'ai lu cet article Petits restaurants, grands chefs. On y découvre trois restaurants dont la cuisine tire parti des contraintes imposées par le lieu et l'époque. On sait d'avance qu'on ne sait pas ce qu'on y mangera, on sait juste qu'on y découvrira l'imagination d'un chef face à son époque comme si un dialogue s'installait entre le chef et moi, genre d'animal cosmopolitain. Les trois restaurants présentés dans l'article, Le Chatomat, Le Rino, Le Roseval expriment cette mutation. Le discours y est épuré. Ca me fait penser aux calligrammes d'Apollinaire, un poème culinaire épousant la forme des murs.

2013-03-05 Importer des modules directement depuis ce site

Lorsqu'on prépare une séance de travaux pratiques, on prévoit parfois de travailler sur des données non disponibles à l'école. Pour éviter de perdre du temps sur des choses déjà et rébarbatives telles que lire un fichier de données et construire une matrice, je prépare un fichier qui permet de lire ces données directement. Un fichier zip nécessite qu'on décompresse le fichier quelque part, qu'on vérifie que tout marche bien. Finalement, j'ai opté pour le programme que voici : importme.py. Il me permet à l'aide d'une instruction de télécharger les fichiers dont les élèves ont besoin. Il me suffit alors de leur donner quelques unes des lignes suivantes pour qu'ils puissent commencer à travailler.

import importme
use_graphviz = importme.import_module("use_graphviz")
tableformula = importme.import_module("tableformula")
tableformulagraph = importme.import_module("tableformulagraph")
file = importme.import_module("donnes_banque_mondiale.txt")
files = importme.import_module("equipements_sportif_2011.zip")
Si un fichier téléchargé est un fichier zip, il décompresse tous les fichiers au même endroit.

2013-03-04 Easy Pivot

I realize that wherever I go, I always do the same operation with figures. Before using any machine learning, the most basic task consists in aggregate figures using a pivot. Excel is already providing a visual tool. No matter what I do, I always find some limitations or I feel stuck because I do not know this function or this other one. Translating a matrix in Excel is still a pain. Plus, depending on the machine, I'm using, I need to switch from English function to French function which is really annoying. 10 years ago, I used to work with Lotus Improve. Basically, it was a cube in n dimension and you could write formulas quite easily. The sheet displayed on the screen was a pivot by itself and we could move a dimension from one axis to the others or choose a value and bring another dimension for the view. The concept was interesting. I never met anything similar except a programming language.

Any scripting language now allows to implement its own cube quite easily. The initial format is a big table containing the extended cube. Each row follows the same format: n coordinates, value or list of values. When I need to create a view of this cube, I need to aggregate using a kind of SQL logic. It is fine to write a GROUP BY query when the number of variable is small but when it is high, I would appreciate to have a tool which would do that for me. The convention I chose is to have meaningful name. Like many convention, the name of a column should indicate the numeric type and the aggregation type you want (sum, avg, len, key, none, max, min).

key_name	sum_a	len_b	avg_c
A	1.0	2.0	3.0
A	1.1	2.1	3.1
B	3.0	4.0	5.0
To aggregate on name, I just write this:
gr = table.groupby_implicit ( lambda v : v ["key_name"] )
I do not have to specify the rest. Usually, I use sum most of the time. I'll probably add others aggregator later such as argmax. I added a module computing some basics statistics, the code is still here: Maybe one day, somebody will find something easy.


Xavier Dupré