XD blog

blog page

python


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

2013-02-24 Références, modules

Pour ceux qui ont l'habitude d'utiliser Visual Studio pour développer, il existe un plugin qui permet de développer en Python avec Visual Studio : Python Tools for Visual Studio. L'outil inclut un débuggeur. Il propose également de créer des projets django pour développer des applications Web.

Lorsqu'on développe avec Python, on fait régulièrement appel à des modules externes qui nécessite une installation supplémentaire (numpy, matplotlib, ...) Il exite des solutions qui regroupent en une seule installation la plupart des modules couramment utilisés. C'est le cas de Python XY qui propose un environnement de travail qui ressemble à celui que R propose. Une autre solution est IPython. Il fait plus appel au travail collaboratif. Il inclut une ligne de commande un peu plus travaillée. La première release officielle est prévue pour juillet 2013.

2013-02-23 Dessin avec MatPlotLib en Python

J'ai créé une classe qui permet de faire des opérations assez simples des données. J'ai ajouté quelques fonctions pour créer des graphiques rapidement :

Aujourd'hui, je me sers de cette classe avant de passer les données sous Excel. Les données viennent d'expériences, d'estimations de modèles. Refaire sans arrêt les mêmes manipulations sous Excel devenait trop rébarbatif.

2013-02-21 Références, modules

J'ai écrit un blog il y a presqu'un mois à propos d'une classe permettant d'effectuer rapidement des opérations sur une table, de faire des jointures, de regrouper les données un peu à la manière du langage SQL. Je pensais ajouter à la classe quelques notions de statistiques et des graphes mais je me suis aperçu qu'il existe des modules qui ont l'air de faire ça très bien :

2013-02-19 Petits scripts du quotidien en Python

Depuis qu'on m'a fait découvrir Python, je m'aperçois que j'écris un script dès que cela m'ennuie de répéter plusieurs fois la même opération. La plupart du temps, le script a une durée de vie de six mois. Mais parfois il résiste à l'usure du temps. J'ai commencé avec des scripts pour mes enseignements car je ne m'en sortais plus avec ces histoires d'index et le nettoyage des répertoires. D'autres tâches ont suivi :

J'en oublie certainement. Ca représente quelques jours de codes et j'aimerais bien un jour réduire mon ordinateur à des boutons pour les tâches répétitives. Au mieux, je produis des scripts que j'oublie et que j'abandonne ou que je recommence parfois quand je m'aperçois qu'ils commencent à débloquer que je n'ai plus aucun souvenir de leur logique. Ca me rappelle quand ma mère faisait ses comptes le dimanche. Elle alignait les reçus de sa carte bleues et ses relevés bancaires. Je ne l'ai pas fait souvent. Les banques ont des ordinateurs qui sont peu sensibles aux erreurs. Reste les vols, les achats sur internet qu'on a jamais fait. Il serait possible de construire un script permettant de lire les nombres depuis des images de reçus scannés puis de les comparer avec les relevés bancaires. Il y aurait forcément des ratés mais il y aurait à la clé un gain de temps considérable si jamais je me décidais à le faire un jour. Mais j'en aurais pour deux, trois semaines de codes, probablement moins que ce que ma mère a passé à vérifier ses comptes.

J'ai capitulé mais j'aimerais tant avoir ces boutons sur mon ordinateur que je pourrais même relier à mon téléphone. Je suis épaté aussi du temps qu'on perd à refaire les mêmes tâches au bureau. Copier/coller, faire un rapport, qu'on recommence même s'il ressemble beaucoup à celui qu'on a fait il y a six mois mais dont on a perdu la trace et puis l'en-tête officiel a changé de toute façon. Ou les vacances qu'on coordonne facilement quand on est cinq et qui devient un casse-tête lorsqu'on est plus nombreux. Un jour peut-être, j'aurais un bouton dès que ça me fera chier. Il existe une tradition qui veuille que ce bouton s'appelle un stagiaire mais uniquement l'été.

2013-02-18 Références, livres, articles, modules

Quelques livres qu'on m'a conseillé récemment de lire sur tel ou tel sujet ou quelques modules Python qui ont croisé ma route récemment.

Modules Python

Livres

2013-02-17 Harry Potter and the Einstein's enigma

When I read the first book of Harry Potter, my brain stopped when I faced the enigma solved by Hermione about finding the right potion. I want to solve it! I first realize that it would take me longer than reading the book but I'm still curious about how the author came up with this story. Maybe she read about Einstein's enigma which looks the same and can be solved using the same reasoning. Anyway, here is the Potter's enigma:

And Einstein's one:

I won't probably Hermione's confidence while facing this kind of enigma but if cellphones continue to evolve in a machine you can command by implementing program, maybe I could do something about it.


more...

2013-02-16 Parser du XML

Traiter du XML peut s'avérer un cauchemar parfois. D'abord pour des problèmes d'encodings, je suis toujours ébahi devant la résistance que ces problèmes m'opposent. Je suis tout simplement incapable de comprendre dans quel sens opérer mes conversions, encoder, décoder, j'essaye tout et souvent sans succès comme cela est généralement le cas lorsqu'on essaye de réparer une erreur à l'aveugle. Bref, mon problème du jour revenait à ajouter un champ à une palanquée de fichiers HTML. J'ai donc choisi de coder le "truc".

J'ai choisi de parser le fichier en XML plutôt qu'en HTML parce qu'il est plus facile ensuite d'accéder aux noeuds du documents. J'ajoute mon noeud et je sauve le document. Manque de bol, tous les guillements de mon code javascript ont disparu et été remplacé par un code abominable. Je vais sur le net, je trouve que le module xml.dom.minidom que j'utilise ne permet pas de conserver les accents. J'adore. Je finis par écrire un code vraiment sale :


more...

2013-02-10 Edit distance and sequence alignment

Some algorithms, you cannot avoid implementing them a couple of times every year. When you work for a search company, you always deal with text. You use regular expressions almost every week. The edit distance is one of these algorithms you never find in the company's wiki or not in the programming language you expect. The code references some weird assembly you don't need and don't want. Or simply, this time, you don't need the distance but the path between the two sequences. You expect to find this algorithm to be somewhere present, accessible, somewhere you don't have to look for, somewhere on the company's wiki. But surprisingly, everybody did his own, not documented, including unexpected paramters. I wish I could even keep myself some versions I made but I often implemented the edit distance in a way that it was faster for my specific needs at that time. Even for this blog (How to normalize an edit distance ?), I did it again. I remember one time doing it to prove my students the edit distance was another versions of the shortest path in a graph. I did it again today: edit_distance_alignment.py. Maybe it will be the last time?

2013-02-09 Program to convert latex into gif picture in a html document

A couple of days ago, I wrote a blog (Insérer des formules en code Latex dans un blog) on how to insert Latex formulas in a blog post. Unfortunately, this way does not seem to work all the time. The browser will try to convert formulas using another site each somebody tries to read the post. And sometimes, the latex formula shows up instead of the picture. So, I decided to write a Python program to call http://latex.codecogs.com/latexit.js before publishing the blog post. I only push GIF images and let the latex code as comments. You will find this code latex_svg_gif.py. Basically, it looks for latex formulas, extract them, call the site mentioned below, stores the images, put the former latex code in a comments section and adds a link to the created image.

<div lang="latex_help">
N \frac{c^k-1}{c-1} \sim N \frac{\frac{S}{N}-1}{c-1} \sim \frac{S-N}{c-1}
</div>
Becomes:
<!--
<div lang="latex_help">
N \frac{c^k-1}{c-1} \sim N \frac{\frac{S}{N}-1}{c-1} \sim \frac{S-N}{c-1}
</div>
-->
<p class="latexcenter">
<img src="giflatex/blog_2013_2013-02-07.html__Nfracck1c1simNfracfracSN1c1simfracSNc1.gif"
alt=" N \frac{c^k-1}{c-1} \sim N \frac{\frac{S}{N}-1}{c-1} \sim \frac{S-N}{c-1} " />
</p>
The picture name is the concatenation of all symbols in [a-zA-Z0-9].

However, recently, I found another framework which seems to work better than this one. I did not try but it is available with wordpress for example: MathJax.

2013-02-03 Quelques précisions sur les projets informatiques

Données textuelles, nuages de mots

Certains sujets traitent du traitement de texte et dans ce domaine, il est parfois important d'obtenir des données en grande quantité. La source la plus accessible et une des plus propres est Wikipedia dont il est possible de télécharger une copie dans n'importe quelle langue à partir de l'adresse suivante : wikipedia backups. Il faut chercher sur cette page un lien xxwiki ou xx sont les deux premières lettres d'une langue (frwiki par exemple). Il est possible de télécharger tout ou partie du site (cela peut prendre quelques heures).

Lire les informations présentes dans ces fichiers de plusieurs Go requiert quelques connaissances en XML, puis de comprendre la structure plutôt intuitive du document. Pour vous aider, vous pourrez lire l'article sur le parser XML en espérant que cela vous fasse gagner du temps.

La liste des sujets fournit quelques références concernant la construction des nuages de mots. Pour l'affichage, le language HTML est sans doute le plus simple. Il permet de composer des blocs de texte de différentes tailles et se charge de les disposer. Le code HTML suivant permet de modifier la taille du texte affiché par un navigateur (Firefox par exemple) :

<font size="6">This is some text!</font>

Taille 6Taille 16

Ce texte pourrait être la sorti d'un programme Python.

Données financières


more...

2013-02-02 Parser du XML

Parser du XML est toujours laborieux pour moi parce que je ne retiens jamais les librairies qu'il faut utiliser, le modèle SAX ou DOM. J'avais besoin de lire les fichiers issus du site Wikipedia qui sont organisés comme suit :

<root>
    <page>
        contenu d'une page
    </page>
    <page>
        contenu d'une autre page
    </page/>
...
</root>
Le fichier de Wikipedia fait malhreusement plusieurs gigaoctets, il est juste impossible de tout charger en mémoire (sur la plupart des ordinateurs) sauf si on dispose d'au moins 20Go de mémoire et qu'on ne veut pas s'occuper de Wikipedia en langue anglaise. En procédant de la sorte, on est obligé de découper les fichiers.

Le programme suivant permet d'explorer les premiers objets d'un fichier Wikipedia ou de n'importe quel fichier XML pour peu qu'il contienne une collection d'objets.

from hal_xml_tree import *

file = r"c:\temp\ptwiki-20130125-pages-articles.xml"
f = open (file, "r")

parser  = XMLIterParser ()
handler = XMLHandlerDict ()
parser.setContentHandler (handler)
nb = 0
for o in parser.parse(f) :
    for a,b in o.iterfields() :
        if len(b) > 0 :print [a,b]
    print "---------------------"
    nb += 1
    if nb > 10: break

more...
<-- -->

Xavier Dupré