XD blog

blog page

python


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-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-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-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-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.

2014-04-13 Latex formulas with Sphinx

Is it worth writing about something which took me 15 minutes to find out and others 15 to try? And it will be another 10 to write it down... I wonder! Anyway, I was looking for a way to add formulas in my python documentation.


more...

2014-04-12 Quelques astuces pour accélérer un programme

Python n'est pas un langage rapide mais cela n'empêche pas que certaines façons d'écrire du code son plus lentes que d'autres. On peut accélérer un code de différentes manières. En voici quelques-unes. L'article se conclut par l'utilisation d'un profiler.

Optimisation du code

L'exemple suivant trie des éléments. Mais comme ceux-ci sont soit des chiffres sous formes de lettres, soit des entiers, il faut d'abord tous les convertir en entiers.

rangs = ['6', 7, '5', 9, 8, '3']
rangs = sorted([int(r) for r in rangs])

Il est plus simple de définir que ces nombres seront des entiers une bonne fois pour toutes et ne jamais faire de conversions. Il faut toujours avoir des listes d'objets de même type. Dans le cas contraire, c'est l'assurance de faire des erreurs. Dans le même genre d'idées, il faut éviter les fonctions qui retournent des résultats de types différents.


more...

2014-04-10 La programmation pour les enfants

Comment initier les enfants à la programmation ? Je commence à croire que les langages de programmation ne s'appellent pas langages par hasard et que leur apprentissage doit démarrer tôt si on veut avoir une chance d'être bilingue ou trilingue français/anglais/python. Même si passer d'un langage à l'autre est plus facile que d'une langue à l'autre, on aurait tort de penser qu'il n'existe pas de figure de style. Le site codecrap recense les plus beaux contresens programmatiques et permet même de voter pour les plus esthétiques.

Je reviens au sujet principal qui est l'initiation des enfants à la programmation. Il est plus facile de faire rêver un enfant devant un train électrique. Je n'en disconviens pas mais cela n'empêche pas d'essayer de rendre cette abstraction accessible de plein de façons possibles.

Si vous savez programmer, vous pouvez considérer l'ordinateur comme votre esclave personnel. Il ne comprend que les ordres simples (très simples) ce qui en fait un esclave parfois récalcitrant (allez lire Trolls dans la brume pour comprendre ce qu'est un esclave récalcitrant). Mais... si vous ne savez pas programmer, il n'est pas trop tard pour apprendre. Vous avez tout d'abord la programmation ludique : le décor est un jeu et programmer est la seule façon de s'en sortir: erase all kittens, robozzle.

Vous avez aussi des jeux toujours au décor imposé dans lequel la programmation vous sert à définir le jeu. codecombat, rubywarrior.

D'autres se sont dit qu'il fallait apprendre à programmer avec un outil qui peut presque tout faire mais de manière graphique, donc quasiment sans clavier. Dans ce domaine, le plus abouti est Scratch (voir aussi snap). Il y a aussi blocky. Les deux se ressemblent beaucoup, la différence vient sans doute des extensions. Par exemple, avec Scratch et Enchanting, vous pouvez piloter le robot Lego Mindstorm.

Moins ludique, moins graphique mais forcément plus compliqué, on a des langages très simples permettant de dessiner : livecodelab, code-monster, kojo.

Certains ont aussi pensé qu'en français, ce serait plus facile : linotte. D'autres ont ajouté kids devant un langage connu : kidsruby, python for kids.

Et si vous avez aimé, vous pouvez passer au niveau supérieur avec des applications qui permettent de faire des jeux gamesalad, de concevoir des objets 3D openscad ou d'avoir une vision un peu plus mathématique de la chose : Loria PLM.

Et pour finir, allez voir Hello Processing ou comment programmer une oeuvre d'art. Ne me dites que ce prof ne vous fait pas envie. Si vous avez toujours perçu l'informatique comme quelque chose d'austère, allez lui rendre visite. Il s'éclate complet ! La science est l'aventure de demain : Théorème vivant.

2014-05-13

Faut-il introduire la programmation à l'école ? Quand ? Ce blog regroupe de nombreux articles et réflexion autour du sujet : Coder à l’école… vous n’arrivez pas à suivre les débats ?. L'un d'eux précise que la notion de variable n'est vraiment assimilable qu'à partir de dix ans et qu'elle est essentielle. Le fait de désigner un objet inconnu par une lettre et de le manipuler sans savoir ce qu'il est intervient en mathématiques en sixième-cinquième avec la résolution des équations.

2014-12-27

Un article paru en décembre 2014 sur différents outils La programmation pour les non-programmeurs.

2014-04-05 Quelques précisions sur les projets informatiques (finance)

Lorsqu'on récupère les données depuis le site Yahoo Finance !, la dernière colonne est intitulé Adj Close.

cours de la BNP

La série Close fait apparaître un saut le 20 février 2002. A cette date, la BNP a divisé le cours de ses actions par deux et multiplié le nombre de titre par deux. La colonne Adj Close corrige ces effets. Vous en saurez un peu plus en lisant cette page About historical prices.

J'ai également mis à jour le module pyensae et cette page d'exemples. Il faut donc le réinstaller à nouveau pour bénéficier des améliorations. Il est maintenant possible de tracer plusieurs courbes à la fois sur le même graphique, de récupérer un sous-ensemble de la série. Enfin, je remets ici le lien vers le document Petit exposé sur les algorithmes de trading.

2014-04-02 References for Statistics with R

Python does not offer all the functionalities in one module, you need to look for them sometimes. In my case, I was looking for a statistical test on coefficients obtained with a linear regression. The module I was looking for is statmodels. While looking for that, I found this interesting blog Glowing Python. But I finally decided to switch to R where I know for sure I would find what I need. And because I'm not fluent in R, I need something like that : StatMethods.

2014-03-28 Quelques astuces pour faire du machine learning

On a parfois l'impression qu'il suffit de choisir un modèle (réseau de neurones, SVM, random forests, ou autres scikit-learn), de l'entraîner puis de l'appliquer pour obtenir un prédicteur de bonne qualité. Mais ça ne marche pas toujours... Voici quelques raisons qui pourraient l'expliquer.


more...

2014-03-22 Faire des gammes en programmation

Publier des articles sur son blog, mettre en ligne des corrections d'examens, synchroniser un répertoire de son disque avec un un disque USB, j'ai une forte tendance à automatiser toutes les tâches que je répète fréquemment afin qu'elles ne m'encombrent plus. J'avoue pourtant que ce n'est pas ce genre d'applications qui m'a fait apprécier l'exercice. Il arrive qu'automatiser ces corvées se mue en une corvée encore plus fastidieuse. J'ai d'abord aimé résoudre des petits problèmes tels que ceux énoncé sur Pydéfis puis d'autres plus compliqués comme L'énigme d'Einstein. Le site Google Jam est une bonne source de problèmes pour s'entraîner. On admet généralement qu'on ne peut pas devenir excellent musicien sans faire beaucoup de gammes. Je pense qu'on ne peut pas devenir excellent programmeur sans pratiquer ces exercices de temps à autre.


more...

2014-03-18 Python 3.4, no need to install pip anymore

The new version Python 3.4 was just released. One interesting change is that modules pip and setuptools are now part of the distribution. That's a relief. Every module which does not requires C++ compilation can now be installed using pip install [module] without any extra step. On Windows, the others modules can still be installed from this page: Unofficial Windows Binaries for Python Extension Packages unless you want to use Visual Studio to compile them. In this case, I recommend reading this page: Module Madness: installing Python modules on Windows.

Among the unexpected changes, the instruction #coding:latin-1 is not allowed anymore. The C++ API changed a little bit. It made me make a change to pythonnet to compile it with Python 3.4: pythonnet migration to Python 3.4. Hopefully, the installation of executables (sometimes after looking for them) could become easier with Python Wheels. Maybe WinPython will follow soon.

However, I recommend to wait a little bit before switching. I had some weird behaviour with matplotlib: no failure with Python 3.3 but a failure while drawing a second graph with Python 3.4.

2014-03-16 Laisser l'utilisateur définir ses propres paramètres

Chaque année, à la fin de l'année scolaire, je dois exécuter les projets de mes étudiants. Assez souvent, je me retrouve à répondre à des questions simples et parfois nombreuses : nom du premier joueur, nom du second joueur, niveau de jeu... Bien souvent, la première exécution ne fonctionne pas, la plupart du temps à cause d'un nom absolu de fichier qui ne trouve pas à l'endroit attendu. Une fois corrigé, je relance le programme et je dois de nouveau répondre à tous les questions.

Je pourrais leur imposer une façon de faire, mais lorsqu'un projet s'étire sur plusieurs mois, n'importe quel directive insérée dans un mail finit aux oubliettes. Je pourrais leur demander de modifier leur programme mais lorsque je suis face au problème à une heure très matinale, quelques heures avant leur soutenance, j'ai quelques doutes sur la réussite de l'entrerprise. Reste peut-être la possibilité de coder une fonction qui peut peut-être devenir aussi utile pour eux que pour moi.


more...
<-- -->

Xavier Dupré