XD blog

blog page

python


2014-10-16 Coding in a train without internet

I'm in a train unable to access internet and I thought I could do something without it. But what I do is not an algorithm, it is a simple functionality which requires a function I use from time to time. It is Python, so I type help (function). I understand what it says but I'm unable to guess what value I need and there is no example. I know I could easily get that by using a search engine python function example. But I can't so I prefer to give up just because I know I could spend a lot of time guessing this particular value I don't know. I don't know how to program without internet anymore.

2014-10-11 Machine learning et algorithme

Il existe plein d'outils pour manipuler les données, pandas, R, Excel, ... Ces outils font la plupart des choses pour nous et pourtant parfois, on a besoin de calculer un indicateur imprévu. C'est la cas du drawdown qui est un indicateur financier qu'on calcule parfois sur la performance d'un produit financier. Naïvement, on implémente une solution qui n'est pas toujours optimale et pourtant son calcul est identique à celui de la sous-séquence de plus grande somme qui est un algorithme classique.

2014-09-27 Comment récupérer un notebook ?

Il existe de nombreux notebooks disponibles sur internet comme A gallery of interesting IPython Notebooks. Pour récupérer un notebook comme ceux de mon cours, le plus simple est de les télécharger pour les enregistrer dans le répertoire courant de Python une fois que les notebook sont lancés. Pour obtenir cette information, le plus simple est de créer un nouveau notebook et d'exécuter le code suivant :


more...

2014-09-21 How to compare two text files?

Many tools can be used to compare the differences between two files: Comparison of file comparison tools, Top 5 diff tools. Python has a module fsdifflib but this is not very visual. Another option is to use javascript and a tool such as jsdifflib.


more...

2014-09-20 Magic command %%CS for IPython Notebook

The notebooks IPython offer a couple of magic command to run others language such %%R, %%octave or %%julia. I found one option for F# but nothing on something like %%CS. However, magic commands are quite easy to handle. It is not that difficult to add one which allows me to do that:

%%CS mypower System.dll
public static double mypower(double x, double y)
{
    if (y == 0) return 1.0 ;
    return System.Math.Pow(x,y) ;
}

To be able to call it that way:

mypower(3.0,3.0)

more...

2014-09-17 An issue or something to know with pythonnet

pythonnet is a module which can access .net assemblies (written in C# for example).

from clr import AddReference
AddReference("something.dll or .exe")

It only works if the DLL can be found in one path in sys.path and also if all dependencies are located in the same folder. If it is not the case, dependencies must be loaded first.

from clr import AddReference
import sys
sys.path.append("path to dependencies.dll")
AddReference("dependencies.dll")
sys.path.append("path to something.dll")
AddReference("something.dll or .exe")

2014-09-14 Ajouter des commandes magiques en IPython

IPython a beaucoup de magic commands. Et on peut même ajouter les siennes. Comme je suis sûr d'oublier la syntaxe, je l'ai mise ici : custom_magics.py.

2014-09-09 How to get version and license for installed modules

I run into the package license-info. It did not work as it is but after a couple of modifications, it gives:

sphinxjp.themes.revealjs==0.2.0 #MIT
tessera-client==0.4.1 #Apache
antlr4-python3-runtime==4.4.1 #BSD
basemap==1.0.8 #OSI Approved
cvxopt==1.1.6 #GNU GPL version 3
Cython==0.20.2 #Apache Software License
Flask==0.10.1 #BSD
numpy==1.8.1 #BSD
openpyxl==1.6.2 #MIT/Expat
pymc==2.3.3 #Academic Free License
pywin32==219 #PSA
pyzmq==14.3.0 #LGPL+BSD
selenium==2.42.1 #Apache Software License
Sphinx==1.2.2 #BSD
sphinxcontrib-fancybox==0.3.4 #BSD
spyder==2.3.0 #MIT
statsmodels==0.5.0 #BSD License
tables==3.1.1 #http://www.opensource.org/licenses/bsd-license.php
tornado==3.2.1 #http://www.apache.org/licenses/LICENSE-2.0

The code follows.


more...

2014-09-07 Four issues I had when using IPython, R and rmagic

I wanted to use R through IPython notebook to mix Python and R. I did it on Windows and I guess it requires to be more careful. I went through four issues.


more...

2014-09-05 Rentrée scolaire

C'est reparti pour une année et je m'aperçois que beaucoup de choses ont changé en un an. Mes cours ont quitté Latex pour Sphinx et ont trouvé place sur GitHub. Toujours aussi peu désireux de répéter toujours les mêmes tâches, je n'ai que deux scripts à lancer pour compiler les cours et les mettre à jour sur mon site. J'ai testé pas mal de template (intraduisible en français) sphinx pour finalement un choisir un facile à lire sur ordinateur, tablette et téléphone portable : ENSAE - Programmation - Xavier Dupré. J'ai ajouté une présentation au format revealjs : ENSAE 1A - PROGRAMMATION qui passe tout aussi bien sur presque tous les téléphones. L'éditeur SciTE, tellement simple que je n'ai pas encore réussi à m'en passer, a pourtant laissé une grande place aux Notebook. J'ai commencé un module python pyensae afin d'y mettre les bouts de code que je transmets aux élèves. Il inclut une fonction download_data qui télécharge des données directement depuis mon site.

Je me souviens encore d'une discussion voici presque 10 ans avec un ami qui me disait : Il faut arrêter le C++, c'est trop compliqué pour une première découverte de la programmation. Il s'occupait des cours d'informatique à l'ENSAE. Un peu au même moment, un élève m'annonçait fièrement après les examens qu'il avait grandement contribué à sept projets. Mais pourquoi Python, lui demandais-je ? C'est le langage avec la plus petite spec, me répondit-il. Et il n'y a pas de point virgule, c'est l'indentation qui détermine les blocs. C'est vrai qu'un langage à point virgule mène souvent à des poèmes à la Prévert. J'ai acheté un livre et j'ai appris le Python trois semaines avant la rentrée et j'ai préparé mes cours dans le même temps. Plus de C++, voilà Python. Le nom du langage a également disparu de l'intitulé du cours. Il y a dix ans, Python, ça ne faisait pas assez sérieux.

Et aujourd'hui ? Python ne cache plus son nom. Le premier résultat de recherche fait référence au langage et non au serpent. Les chercheurs s'y mettent aussi. En deux ans, le langage s'est beaucoup étoffé. Et l'écart entre ce que j'enseigne et l'usage que j'ai du langage s'est considérablement réduit. Au quotidien, je notebooke beaucoup.

Mais si j'écris aujourd'hui, c'est ce que je suis stressé. C'est la rentrée.

2014-08-27 Manipulate Data Cubes in Python

I used to work on Lotus Improv to compute predictions based on retirement systems. The mortality table was modelled as a data cube. The software was quite intuitive and easy to use. It was just a cube, a way to visualize data aggregations and formulas to populate cells beyond the current date (= the prediction). When I looked for a replacement for this software, I was surprised to discover many dead initiatives included Improv itself. I guess not so many people need that kind of functionalities even though some people find it very useful. One possible replacement (and still alive) is Quantrix. But to avoid the same end of many other softwares, the tool provides many more functionalities other than just being able to visualize the data. I was curious to see if somebody started something with Python. I found cubes and cubesviewer. I did not try yet but I'll keep that in mind.

2014-08-26 string.format

It is just a trick about reducing the number of parameters to send to function format. Let's assume we have a class like the following:

class Entity:
    def __init__(self, name, city):
        self.name = name
        self.city = city
school = Entity("ENSAE", "Paris")

And we want to build a string like the following:

message = "school:{0} city:{1}".format(school.name, school.city)
# two parameters

But it could be rewritten as:

# one parameter
message = "school:{0.name} city:{0.city}".format(school)

2014-08-24 Graphiques avec Python, R

R reste la référence en matière de statistiques mais pour tout un tas de raisons, je choisis Python dès que je peux. Je travaille beaucoup avec les notebooks que je trouve très agréables, plutôt robustes et simples à partager. Je me suis penché sur les graphiques en Python, matplotlib, des cartes et des graphiques interactifs qui s'intègrent particulièrement bien avec les notebooks : visualisation des données. Et si Python ne suffit pas, il est facile de revenir à R dans les notebooks avec rmagic que je trouve plus faciles à utiliser que shiny ou knitr - les notebooks sous R. Voici un notebook mêlant R et Python : Rmagic Functions Extension.

2014-08-20 Python, Annotation, Type Checking, mypy

Python is interpreted at runtime. Variables types are discovered during the execution. That is also why it is so slow. It is difficult to anticipate what the type of variable will be even though projects such as pypy or nuitka aims at compiling a python script by doing so. They must do type infering. Python 3 has introduced a nice feature which helps doing that: function annotations. It specifies a static type to the parameters and/or the returned result. By doing this, it is easier to check types at runtime (with module typecheck-decorator):


more...

2014-08-09 L'informatique et Wikipedia

Je référence souvent Wikipedia dans mes cours, le plus souvent possible la page française quand elle existe mais force est de constater qu'elle n'existe pas toujours. C'est le cas de celui-ci Longest increasing subsequence qui est un problème classique mais pas si évident que cela (voir plus grande séquence croissante). Il faudrait que je regarde de façon statistique quels sont les domaines les mieux représentés selon les différentes langues. De mémoire, il existe toujours une version anglaise, sans doute parce que cette langue est devenue la langue scientifique. En ce qui concerne les algorithmes, les pages françaises sont souvent moins fournies, et on voit plus souvent des versions russes ou polonaises : Reservoir Sampling, Johnson's algorithm. Travaillant pour une multinationale, je constate que les ingénieurs des pays de l'Est découvrent beaucoup plus tôt l'informatique et sont plus cultivés dans ce domaine. Les deux faits sont-ils liés ?


<-- -->

Xavier Dupré