XD blog

blog page

python


2014-03-15 Data pipeline in Python

I started to use Hadoop in 2008 at Yahoo. At that time, I liked it because the language introduced new constraints (there is no index, you can dispatch a huge amount of data among many machines but you have a limited amount of memory to process it on each machine) and it was fun playing with them. However, after a while, I accumulated many jobs, and I had to remember which one to run and in which order to get the final results. It is fine when you do research but not very convenient when you need to explain the full workflow to somebody else and even less convenient when you need to productionize the workflow.


more...

2014-03-12 Convert a PDF into an image

Today, I just wanted to convert a PDF into a PNG image. I knew I already did it but I forgot to remember how (I only need it once every six months). I hope you don't mind if I use my own blog to avoid looking again for it. First, it requires ImageMagick. The following script will do the trick:

from PythonMagick import Image

os.environ["MAGICK_HOME"] = r"path_to_ImageMagick"

file = "my.pdf"
to = file.replace(".pdf",".png")

p = PythonMagick.Image()    
p.density('300')
p.read(os.path.abspath(file))
p.write(os.path.abspath(to))

# the ImageMacgick command line to do it
# cmd = "convert -density 300 -depth 8 -quality 85 {0} {1}".format(file, to)

more...

2014-02-26 Installer Python pour faire des statistiques

L'environnement que je suggère est celui que j'utilise pour préparer mes cours. Il permet d'utiliser les outils que je propose et d'obtenir un espace de travail équivalent à celui que propose R. Plusieurs options sont possibles :

Je poursuivrai par l'installation de pyensae, et je terminerai par la configuration de l'éditeur SCite qui est, de mon point de vue, le plus simple éditeur qui soit mais il fait bien ce pour quoi il est fait.

2014/10/25

Si je devais choisir une distribution, ce serait Anaconda. C'est la plus à jour et la plus complète. Une fois installée, elle devient la distribution par défaut sous Linux. Cela évite les confusions entre les différentes versions de Python (Python 2.7 est installée par défaut). Sous Windows, elle est plus complète que WinPython. Elle inclut notamment le package paramiko dont je me sers pour ouvrir une connexion SSH avec un serveur Linux et utiliser PIG.

Préliminaire

Il existe deux numéros de versions important à retenir :

Une fois choisis ces deux numéros de versions pour l'installation de Python, si ces versions sont précisées pour un module, alors il faudra choisir exactement ces deux mêmes versions.

WinPython


more...

2014-02-24 Travailler avec IPython notebook

Si l'environnement que R proposait était il y a encore quelques temps le meilleur compromis pour quiconque voulait faire des statistiques ou du machine learning, de mon point de vue, IPython a changé la donne. On peut toujours travailler avec un éditeur texte classique, ou avec une ligne de commande similaire à celle de R ou encore utiliser les notebook. Un notebook, c'est un peu comme une page blanche ou on mélange à la fois du texte, du code, des graphiques, des équations et même du javascript. C'est très pratique lorsqu'on cherche sa partition. Entendez par là que vous avez un problème à résoudre mais pas encore la solution. Il faut donc expérimenter. Cette page blanche vous permet facilement de garder une trace de tous vos essais et de les annoter puis de rédiger le document final. Pour vous en convaincre, il suffit d'aller voir la gallerie suivante (également A gallery of interesting IPython Notebooks), et on peut faire des choses assez marrantes (XKCDify) voire même utiliser R depuis IPython (Using R Within the IPython Notebook).

Pour essayer, l'option la plus rapide et de télécharger la distribution WinPython qui contient tous les packages intéressants pour un statisticien (ou data scientist). Il ne vous faudra pas très longtemps pour lancer le notebook et de là, découvrir par vous-même comment cela fonctionne. Il n'y a pas trente six mille boutons et tout est plutôt intuitif.


more...

2014-02-23 Python and C# in the same program

I pretty much use Python for everything, I link many of my tools with Python, having the same place to run them. However, C# is very convenient if you want to automate some processes on Windows. Since I discovered pythonnet, I do not look anymore for a way to do things in Python, I do it in C#, I make an assembly and I link it to Python.


more...

2014-02-12 Travailler à plusieurs sur le même projet informatique

La principale difficulté lorsqu'on travaille à plusieurs sur le même programme survient lorsqu'on doit agréger les modifications de plusieurs personnes. On part d'un même programme, on le modifie chacun de son côté et on essaye quelques jours plus tard de réconcilier les deux versions. C'est souvent laborieux et ça peut introduire quelques erreurs.

Une solution peut déjà être d'avoir un emplacement qui détient toujours la bonne version. Par exemple, hubiC vous propose d'avoir un répertoire distant (donc pas chez soi) synchronisé avec un répertoire local de son ordinateur. Ce même répertoire peut être synchronisé avec un autre répertoire local sur un autre ordinateur. De cette façon, dès que quelqu'un modifie un fichier, les autres contributeurs récupèrent les modifications (à condition d'être connecté).

Même si c'est pratique, ce genre de solution ne permet pas de revenir en arrière ni même de visualiser les modifications de chacun. Pour cela, on peut utiliser un système de suivi de source tel que GitHub, ce que j'ai fait pour pyensae, qui permet de voir les différences. Ce service n'est pas totalement gratuit (voir GitHub Pricing, BitBucket Pricing). Avant d'essayer, il est préférable de lire cette page : Fork A Repo. Si vous n'aimez pas trop les lignes de commande, il est possible de coupler cela avec TortoiseGit.


more...

2014-02-07 Nettoyer son code

Après quelques années passées à enseigner, j'ai plein de bouts de code qui traînent partout, écrits sur des versions de Python différentes. Il y a des print avec ou sans parenthèses, des codes indépendants, d'autres liés à d'autres bouts. Parfois, j'ai envie de les réutiliser bien qu'ils soient vieux, qu'ils ne compilent plus avec la dernière version de Python. Alors, on s'y attaque, on l'exécute, on bute sur une erreur qu'on corrige avant d'essayer à nouveau. Est-ce le début d'un cycle fastidieux ou d'un cycle sans fin ? Avec un peu d'obstination - voire beaucoup - et on y arrive. Mais bien souvent, on s'arrête là, avec ce petit exemple qui fonctionne. C'est l'essentiel pour un exemple. Pour un programme, c'est souvent un peu juste. Les exécutions à répétitions n'ont ébranlé que la moitié du code. L'autre est restée intacte. La dernière version de Python la comprend, de là à dire qu'elle puisse l'exécuter...

Il existe un module qui effectue quelques vérifications : pylint. Il vérifie la syntaxe, les variables non utilisées, les modules importées inutilement, ou encore si une exception est correctement orthographiée. La plupart du temps, on se rarement rend compte qu'on a écrit raise Exeption("....") sauf quand l'erreur survient. On pourra rétorquer que cela devrait être couvert par les tests unitaires mais couvrir 100% du code est un travail laborieux. Et si vous êtes parfois paresseux comme moi, vous utiliserez parfois WinPython qui vous signale chaque endroit que la bonne syntaxe réprouve. Y jeter un coup d'oeil de temps en temps permet de repérer quelques erreurs avant la première exécution.

2014-02-02 Détecter des visages avec opencv

Après avoir lu un blog sur la détection de visages, je me suis dit que c'est facile d'écrire un petit programme pour vérifier que cela marche. Et c'est vrai ou pas si loin. Voici la recette sur Windows.


more...

2014-02-01 Sphinx themes and presentation

A year ago, I was looking for tools to generate automated help for a Python module. However, I was looking a tool able to use the javadoc style because most of my old code uses it. Doxygen is nice but the unavoidable tool is now Sphinx (+ autodoc). I will not explain what I did because I did it quick (and wrong). The right way to do it is to use the following Sphinx extension: Breathe. Anyway, I do not remember all the issues I had when trying Sphinx but I found the documentation more usable. So I played a little with some theme I was able to find:

Another thing I did wrong is the way I made the design of this blog. I implemented many thing (keywords generation, month aggregation...). But today, I would try first to look at Pelican or even directly use Sphinx which already does many things about indexes. If you look on the internet about sphinx blog theme, you would find some examples like the following one: Tinkerer. You can even find theme to do presentation (instead of PowerPoint I suppose):


more...

2014-01-29 Convert an equation into a PNG image

I recently faced an issue while converting an equation into an image using the method I developped in this post. I do not know why but the following expression \frac{X_t}{Y_t} did not work. So I had to use miktex and more specifically htlatex through the following command line:

htlatex eq.tex html "" "" "--interaction=nonstopmode"

The last parameter avoids the programm to check the input stream if an error was detected. I wrapped this into a quick and dirty python program you can find below. It will also describe what eq.tex should contain.


more...

2014-01-22 Automatically saving emails on a local folder

When my student have their exams, I receive many emails with their solution attached to them. I avoid downloading them all because it is manual. However, a couple of days ago, I thought it might be useful if I write the tool which does it for me (I'm still refusing to do it manually). I ended up writing a Python module called pymmails. To get the email from my students, I just had to execute the following script:

from pyquickhelper import fLOG
from pymmails import MailBoxImap
fLOG(OutputPrint=True)
user = "your.email"
pwd = "password"
server = "imap.your_provider.ext"
box = MailBoxImap(user, pwd, server)
box.login()
box.dump_html(folder="students_exam", pattern='FROM "ensae" SINCE 1-Dec-2013')
box.logout()

All the attachments were in a single folder. I hope I'll remember my own trick next year or maybe I'll use jinja2 or even pelican to make it better.


more...

2014-01-21 What editor with Python

I usually use SciTE when programming Python. It is simple and fast. Plus, I usually do not use a debugger. I sometimes use Notepad++ but the shortcuts are different and I never really tried to change them. I once tried PyScripter but the project seems to be intermittently maintained.

I recently tried the free version of PyCharm and it is very to use. Create a project is not difficult, adding existing files too. And it was possible to change the shorcuts as I wanted. One feature I liked was the easy installation of setuptools and pip. The professional version offers support for django.

I tried The Eric Python IDE a long time ago but it seemed too complex for my needs. Python Tools for Visual Studio is a also nice integration, interesting for big projects. I'm surprised to see features such as creating a file setup.py, creating a sphinx project, using cx_Freeze. I'm wondering if I'm not going to switch from an editor to another one depending on what features I will need for the current project. To conclude, if you want to use a tablet, you can use Python Anywhere. You can check other alternative on Wikipedia. Don't forget to check the date of the latest release first. Older than a year is not a good sign.

If you do machine learning a lot, it might be interested to use an environment designed for that purpose such as WinPython. It includes Spyder which has been updated to Python 3.3 last year. It also includes IPython with the notebook which makes it easier to test some of the steps I went through in this previous blog More about interactive graphs using Python, IPython, ...

2014-01-16 La nuit des temps n'est pas si loin

Je l'ai lu il y a quelque temps mais j'ai dévoré La nuit des temps de Barjavel. Au dela de l'histoire, c'est aussi cet ordinateur capable de traduire toute langue en une autre qui m'a fasciné. Je ne sais pas ce que Barjavel aurait dit si on lui avait demandé quand ce serait effectivement possible. On n'en est probablement pas très loin... mais parlons d'abord de ce qui est accessible facilement aujourd'hui.

J'écoutais France Inter il y a deux jours Xavier Bertrand. A vrai dire, j'ai oublié ce qu'il a dit, j'ai juste retenu qu'il raisonnait non pas par rapport au contenu d'un propos mais par rapport à celui qui le prononçait. Peu importe, je voulais voir s'il était possible de décrypter des vieux podcasts du même bonhomme pour voir ce qu'il disait du président... Je n'en ai pas trouvé, probablement trop vieux et effacés. Je n'ai trouvé que Jean-François Coppé. Sur la page de France Inter, on peut lire deux extraits dont on ne sait pas quand dans l'émission ils ont été extraits. Qu'à cela ne tienne, Barjavel n'est pas si loin...


more...

2014-01-15 Copie d'écran automatique avec Selenium ou Splinter

On a parfois besoin de faire des copies d'écran, régulièrement, et cela devient toujours la même routine : aller sur un site internet, faire une copie d'écran et la copier dans un fichier. Et si on a le courage, limiter la zone à celle désirée. Lorsqu'il s'agit de faire une copie d'écran d'un site web, il est possible d'automatiser.

Le module selenium a été développé dans le but de tester un site internet. Il permet de reproduire une séquence d'événements (clic, clavier, ...) et d'observer le résultat. Entre autre chose, il permet de faire une copie d'écran de ce site. Le module selenium a une déclinaison en Python. Et à l'aide d'un petit script, il est possible de faire une copie d'écran de n'importe quel site web :


more...

2014-01-12 R or Python

Should you use R or Python? I won't give a precise answer except a reference to this blog post: Python Displacing R As The Programming Language For Data Science. To summarize, if you are a statistician, you are already using R. However, if you are not a statistician but you need statistics, you are probably wondering if you should use R and another language or just another language. R is not very well designed as a programming language and is not very suitable to manipulate files, create a web server or games... Using Python for everything avoids switching to another language. It avoids converting the data into various formats between the two languages.

With pandas, numpy, scipy, scikit-learn, matplotlib, IPython, many common statistics routines are available in Python. In the last two years, it became a really strong alternative to R. In the next years, SAS should less and less used (see Forecast Update: Will 2014 be the Beginning of the End for SAS and SPSS?). Computers speed and memory are not an issue anymore with others alternatives. Plus, it is expensive. I would also look at Julia (+ Julia Studio) which seems to be a promising language. I discovered at MCMSki IV. But maybe the future will be dedicated languages such as BUGS for bayesian models.

Finally, some articles about R and Python:

2014/06/30: I recommend reading Numeric matrix manipulation, The cheat sheet for MATLAB, Python NumPy, R, and Julia


<-- -->

Xavier Dupré