XD blog

blog page


2014-06-04 Commencez avec Python

Quelques pointeurs pour ceux qui veulent commencer avec Python.

Et pour les plus jeunes :

2014-06-03 pandas and openpyxl are not compatible anymore

I use a lot openpyxl with pandas. But the new version of openpyxl is not compatible anymore with pandas. So be careful to install an older version until this compatibility issue is fixed:

pip install openpyxl==1.8.6

2014-06-02 Débugger en Python

Je n'ai jamais vraiment débugger en Python. J'ai commencé à coder avec ce langage il y a plusieurs années et j'avoue que le débugger C++ de Visual Studio est inégalé. Il n'y avait pas d'équivalent en Python. Après plusieurs essais au cours des années, je reste toujours un peu sceptique. Débugger en Python prend du temps, l'exécution est très ralentie et il m'est arrivé souvent que mon pointeur d'arrêt soit ignoré. Ou encore, j'ai peiné à configurer l'outil (trop de paramètres). Bref, je débugge rarement, j'insère plus souvent des print. Toutefois, débugger sans utiliser de ligne de commande est possible :

Si vous êtes moins dans le visuel (ce qui n'est pas mon cas), il y a d'autres alternatives comme pudb et le débuggeur de base Debugger en Python: les bases de pdb.

En ce qui me concerne, je vais faire le shadock, si on ne peut pas débugger correctement en python, c'est que ça ne sert à rien.

2014-05-24 Graphs and Map / Reduce

Implementing graph algorithm on map/reduce is still a challenge. But maybe because it is a challenge, people keep thinking about it. It is the purpose of GraphX which reduces the processing time for the Page Rank algorithm on a Spark environment. It is not as fast as PowerGraph which is not based on Map/Reduce but it is must faster than Mahout (see paper GraphX: A Resilient Distributed Graph System on Spark). One fact, the language Scala appears more and more. A sign: Mahout recently took the decision to stop implementing machine learning algorithm against Map/Reduce to switch to Spark.

2014-05-22 Données Vélib

En cherchant à récupérer des données Vélib pour d'autres villes que Paris, je suis tombé sur ce site : bikes.oobrien qui recense toutes les stations de vélo de toutes les villes du monde.

J'ai fini par implémenté une classe au module pyensae qui récupère les données pour les villes équipées par la société JC Decaux. Peut-être ajouterais-je d'autres sociétés comme Keolis qui gère Rennes avec vélo STAR. Un exemple de code est disponible ici.

2014-05-21 Droite poreuse

De récents articles évoque le désamour des jeunes les sciences (La recherche ne fait pas rêver les étudiants en sciences, De la "désaffection" pour les études scientifiques). Les études se placent du point de vue statistique ou économique. On manque de chercheurs et de scientifiques.

C'est aussi souvent une matière qu'on présente comme une torture. Les cancres à l'école sont la plupart du temps mauvais maths d'abord. On oublie qu'il faut être aussi créatif en mathématiques que dans les autres matières. Certes on évolue dans un monde fait d'hypothèses et de théorèmes comme un paysage est fait de vallées et de montagnes. Il arrive de remettre en cause des vérités pour découvrir que notre notion de droite était poreuse . Les devinettes mathématiques s'insèrent dans les séries télévisées (Sherlock Holmes, on en trouve dans les magazines à la même page que les mots croisés (Infinimath).

Une démonstration de mathématiques ne devrait être rien d'autre qu'une histoire. Et on découvre qu'il y a plein de manières de la raconter (Raisonnements divins).

2014-05-14 Deux ou trois choses à vérifier avant de rendre un projet informatique

Avant de remettre un programme informatique à un relecteur, il est deux ou trois petites choses qui facilitent le travail de relecture :

Lorsqu'un programme ne marche pas et qu'on a passé beaucoup de temps à chercher l'erreur, quoi de plus naturel que d'envoyer un mail à son professeur : "Monsieur, je ne comprends pas, ça ne marche pas et ça devrait marcher". Une fois sur deux, je réponds qu'il me serait utile d'en savoir un peu plus :

Bien souvent, le message d'erreur que je peux lire après avoir reproduit l'erreur est une bonne indication pour savoir où chercher. Dans le cas contraire, voici ce par quoi je commence en général : Je conçois qu'un bug récalcitrant titille un peu et suscite l'envoi d'un mail simple et concis traduisant un certain état d'agacement : ça ne marche pas et ça devrait marcher ! En pareil cas, j'ai aussi tendance à réagir de la sorte. Toutefois, étant la source de l'erreur, le programmeur est celui qui dispose des informations les plus détaillées. J'essaye de lui demander tout ce qu'il sait avant de me lancer en conjectures.

Un cas concret : un programme est censé minimiser la longueur du chemin passant par tous les noeuds d'un graphe (problème du voyageur de commerce). L'algorithme implémenté était tout-à-fait correct à ceci près que l'arc liant le dernier noeud au premier était oublié dans le calcul de la longueur du chemin (il ne bouclait pas). Je vous laisse imaginer ce que l'algorithme produisait comme solution et pourquoi ce que j'ai vu au fil des itérations m'a incité à aller inspecter le calcul de cette longueur.

2014-05-11 Evolutions Informatiques

J'écoutais l'émission On n'arrête pas l'éco du 10 mai. L'invité évoquait la formation des informaticiens dans différents pays. Je ne me souviens plus exactement en quels termes il s'est exprimé mais il mettait en avant la formation généraliste et mathématique des ingénieurs français qui leur permettrait d'apprendre plus rapidement de nouvelles techniques. Je me suis rendu compte que je m'appuyais implicitement sur ce bagage le jour où on me demanda d'expliquer ce qu'était le machine learning. Mon premier réflexe fut de partir d'un problème simple tel qu'une régression linéaire et son expression mathémtique. Comprendre voulait dire pour moi s'approprier les concepts mathématiques, passer du linéaire au continu, réduire un problème complexe à un ensemble de problèmes simples qu'on sait résoudre. Lorsqu'il s'agit de maitrîser une nouvelle technique, il me semble plus facile de s'approprier l'idée que d'apprendre à se servir des outils qui la mettent en pratique. Un nouveau langage informatique se résume souvent à une nouvelle syntaxe, un bouquin et quelques exercices.

Il est difficile de dire ce que sera le paysage informatique dans cinq ans. Il faut un à deux ans pour imaginer un nouveau concept et plusieurs années pour le faire mûrir. La page Wikipedia List of Programming Language recense un nombre impressionnant de langages informatiques parmi lesquels on trouve le LSE (syntaxe). C'est un langage informatique à syntaxe française avec lequel l'éducation national a tenté de m'apprendre à programmer. Certains langages sont très aboutis et cherchent à simplifier l'usage qu'on peut en avoir dans un contexte d'expérimentation (Social Network Analysis), d'autres comme Erlang ont été conçus dès le départ pour concevoir des programmes robustes dans un environnement de production. Ils sont en anglais.

Depuis l'avènement du Big Data, les langages fonctionnels sont en vogue. Scala, Clojure, F#, ces langages forcent le développeur à écrire différemment de telle sorte que le programme est plus facilement transposable dans un environnement Map Reduce. Un nouveau langage cherche à exprimer une idée encore plus simplement.

2014-05-04 Données financières

Chaque année, je propose des sujets financiers aux étudiants de l'ENSAE et la question qui revient systématique est celle des données. Jusqu'à présent, j'utilisais Yahoo Finance!. L'inconvénient est qu'on ne peut récupérer que les cours daily des actions. Un ami m'a suggéré le site Quandl. Les historiques ne sont parfois pas aussi conséquent mais ce site aggrège différentes sources de données et les rend disponibles selon la même interface depuis de nombreux langages (Python, R, Julia, Clojure...).

L'interface est vraiment épurée, très réactive et très agréable à utiliser. Outre la multitude de séries financières qui est accessible, le site met à disposition des séries économiques comme le PIB pour de nombreux pays ou encore le cours du Bitcoin.

Le site stipule que l'accès est gratuit. Il faut s'authentifier si on dépasse un quota de 50 requêtes par jour. Le business model n'est pas encore bien défini (coming soon) contrairement à leur concurrent Datamarket. Ma préférence va pour Quandl, simple, accessible, gratuit et des objectifs ambitieux. Si une source de données ne fait pas partie du catalogue, il est même possible de leur demander de l'intégrer.

Quelques articles :

2014-05-02 Map / Reduce

I wish sometimes bugs could let me go. I'm working on an map/reduce algorithm. The problem would be smaller I would not hesitate to avoid map/reduce but it is not. Any fast it can be, I find it very slow and impossible to run. So I polish. I wake up in the morning and a detail strikes me up. Shit, shit, shit, I should have written it that way. It works on a small sample but this sample is resistant to many mistakes. I see this algorithm working in my head from the beginning. But I missed this case, as if a train would hide another one and get me killed when I cross. That kind of stuff always happens with big data. Pruning, scaling...

Most of the time, the issue comes from skewed data. Skewness is a way to say that the data is not uniformly distributed. Precisely, when reducing a table or joining two tables, we group data sharing the same key (as we do a GROUP BY or a JOIN on SQL). People research about it: A Study of Skew in MapReduce Applications. But let's see on a example what it means: notebook on Reduce skew data.

2014-04-27 Tests A/B à la FNAC

Je ne vais plus très souvent à la FNAC sur les Champs-Elysées. Ce n'est pas la mieux achalandée mais, quand on sort trop tard, c'est un des rares endroits où on peut acheter un livre très tard. A vrai dire, je n'achète pas souvent de livres là-bas, s'il fallait choisir une librairie qui ouvre la nuit, j'irais plutôt à la Hune ou l'Ecumes des Pages où je sais que je serai un peu plus surpris. Néanmoins, j'étais étonné de voir la place qu'a prise le livre dans cette FNAC qui n'en vendait pas lorsqu'elle a ouvert. Les DVD sont réduits à la portion congrue, les séries télévisées ont pris de l'importance. Le rayon cuisine est aussi grand qu'ailleurs. Et puis le livre qu'on croyait en sursis a rempli l'espace.

C'est bien le seul élément stable. Le reste évolue trop vite. Il n'a pas ce caractère intemporel de l'écrit. D'ailleurs le livre désigne à la fois le contenu et le support. Pour un film, il existe le DVD, le Blueray. Pour la musique, le CD, MP3, pono... Pour les livres, il existe des kindles, des tablettes mais curieusement ce n'est pas là dessus qu'ils sont exposés à la FNAC. Le livre est un des seuls supports qui n'impose pas son rythme contrairement à un film qui se termine toujours à l'heure dite.

J'ai été aussi surpris de trouver un rayon jouets pour enfants. Cela ressemble aux rayons d'électroménager que j'ai vu un jour à la Fnac des halles. Cette façon de faire ressemble un peu un internet. On dispose un petit rayon quelque part et on regarde si ça prend. Une sorte de test A/B : on n'est à peu près sûr que vous n'êtes pas venu pour ça et on veut savoir si vous allez repartir avec.

Le livre survit, c'est peut-être de bonne augure pour la FNAC qui survivra aussi face à Amazon entre autres. Lorsqu'on cherche un livre sur internet, on a vite fait de faire le tour des alternatives qui vous entraînent sur un chemin circulaire (voir par exemple Systèmes de recommandations) Le libraire saura vous en faire sortir.

2014-04-20 Les algorithmes sur les graphes ne sont pas aussi simples en Map/Reduce

Je ne suis plus d'où cette histoire est partie ni si elle est vraie mais on dit souvent que si on relie deux personnes quelconques dans le monde par une chaîne d'amis, cette chaîne ne sera pas plus longue que 7. Sans doute Facebook pourrait y trouver à redire. Ce qui m'intéresse ce soir est de savoir la longueur de la chaîne qui me relie au Président de la République.

Je serais bien incapable de vous donner la réponse mais je pourrais vous dire comment la trouver. Si un de vos amis connaît la réponse à cette question, si cette réponse est l, alors dans votre cas, la réponse sera l+1 et vos amis pourront dire que la réponse dans leur cas est l+2. Pour que toute personne dans Paris ait la réponse à cette question, il suffit qu'une vague parte du président et se propage à chacun d'entre nous.

L'algorithme est en lui-même assez simple à implémenter à condition que le graphe soit petit. Lorsqu'il est grand (plusieurs dizaines de millions de noeuds), cela prend du temps, beaucoup de temps même si cela ne peut plus se faire sur le même ordinateur. On pense alors au concept Map/Reduce qui permet d'effectuer des calculs distribués sur plusieurs machines. Mais dans ce cas-ci, ce n'est pas si évident. Et pour comprendre pourquoi, la lecture continue ici : Graphe et Map Reduce.

J'ajoute ici quelques commentaires qui me sont parvenus cette semaine.

Le nombre de connexions qui relient deux individus est un vieux problème : Small-world experiment, Le nombre d'Erdős. Les algorithmes sur des grands graphes ne sont jamais évidents, ne serait-ce que pour calculer (en un temps raisonnable) le plus court chemin entre deux pages Wikipedia comme sur Wikidistrict, décrite ici Wikidistrict, une exploration ludique de Wikipédia. Le premier réflexe lorsqu'on traite un grand nombre de données est de réduire la taille du problème ou de regardeer sur des examples. Cependant, s'il est facile de concevoir ce qu'est un échantillon au sein d'une population, qu'est-ce qu'un échantillon au sein d'un graphe, un échantillon qui respecte les propriétés du graphe. Vous trouverez quelques réponses ici : Statistical Analysis of Network Data (Eric D. Kolaczyk).

2014-04-19 Les médecins et les médicaments génériques

Une ordonnance à la main, je vais chez le pharmacien. Celui-ci m'explique qu'il a remplacé un médicament par son générique. Je regarde le nom. Il très ressemblant comme si Assurancetourix passait chez les Visigoths. Je lui demande pourquoi les médecins n'écrivent pas directement le nom du générique ou même de la molécule. La réponse est immédiate : ils utilisent les noms commerciaux à la faculté. Mais c'est par là qu'il fallait commencer : faire cours de médecine avec le nom des molécules ! Mon pharmacien n'avait pas l'air convaincu : difficile d'imposer à un vieux prof de changer car ce seraient de vieux médecins en fin de carrière qui enseignent.

La conversation continue et il m'apprend que beaucoup de pays n'utilisent pas les noms commerciaux. Dans une précédente pharmacie, des patients venaient avec les ordonnances d'un médecin brésilien qui utilisait directement le nom de la molécule, même pas le nom du générique. Un autre écrivait ses ordonnances avec un logiciel qui ajoutait automatiquement le nom du générique. Discrètement, le pharmacien ajoute que les clients contestaient moins.

Une dernière chose m'intrigue. Je doute qu'un médecin prescrive les mêmes médicaments pendant 40 ans. La recherche évolue. Un nouveau remède sera être désigné par son nom commercial ou par sa molécule, le générique n'existant pas encore. Le médecin français retient le nom commercial. C'est sans doute une vieille habitude apprise à l'école. Que fait le médecin brésilien ? C'est peut-être lui que j'irai voir la prochaine fois.

Bref, pour imposer les génériques, il faudrait commencer par imposer les noms de molécules à l'école de médecine. Et puis on pourrait aussi imaginer que les noms des nouveaux médicaments soient plus explicites : molécule + nom du laboratoire.

2014-04-16 Désactiver les logs de cvxopt

Des élèves m'ont posé cette question aujourd'hui : comment désactiver les logs que génère le module cvxopt. J'ai trouvé la réponse en cherchant cvxopt disable log sur un moteur de recherche cvxopt, algorithm parameters ou encore CVXOPT output suppression with MOSEK.

from cvxopt import solvers
solvers.options['show_progress'] = False

2014-04-15 Systèmes de recommandations

C'est un des thèmes de recherche en vogue en ce moment. Les systèmes de recommandations. Une méthode courante est la factorisation de matrice. Une autre sont les Random Walks with Restart. A noter dans un coin pour de futurs sujets de projets informatiques.


<-- -->

Xavier Dupré