XD blog

blog page

2014-12


2014-12-31 Précisions statistiques

On entend partout que la Terre se réchauffe et pour appuyer cette affirmation, les journalistes emploient souvent la phrase : il y aura de plus en plus d'événements dit extrêmes (canicule, pluie, tempêtes, ...) Cette phrase en soi est assez difficile à interpréter. On peut facilement affirmer que la température va dépasser 40 degrés plus souvent qu'auparavant. Mais disant cela, on dit aussi que cet événement, autrefois rare, ne le sera plus. Autrement dit, cet événement extrême au sens statistique ne le sera plus non plus bien que cette températeur soit difficile à supporter, et qu'elle soit sans doute extrême dans un sens biologique ou physique. On peut néanmoins affirmer qu'il y aura de plus en plus d'événements extrêmes au sens statistique mais cela voudrait dire un changement de distribution de ces événements (voir queues épaisses)). ce que n'indique pas la simple hausse de la température moyenne.

Après les derniers crashs aériens, on rappelle que l'avion est le moyen de transport le plus sûr. Mais comment peut on mesurer cela ? Certes, le nombre de morts par accidents de la route en France est supérieur au nombre de morts causés par les accidents d'avions. Mais le nombre de morts est-il un bon moyen de comparer les moyens de transports ? Tout le monde n'a pas pris l'avion mais presque tout le monde est monté dans une voiture. Il serait plus juste de calculer le nombre de morts pour une certaine distance parcourue : Accidentologie des transports, INFOGRAPHIE. Train, avion, voiture : quel est le transport le plus sûr ?. D'après ces chiffres, on aurait 20 fois plus de chance de mourir en voiture pour la même distance par rapport à l'avion. Toutefois, on peut considérer que la probabilité d'avoir un accident en avion est indépendante de l'âge, de l'état d'ébriété du passager (à supposer que le pilote ne boit pas). Dans une voiture, ces variables ont beaucoup plus d'importance : Les bilans annuels de la sécurité routière en France). 20% des morts en voiture sont dues à l'alcool et on peut supposer que la grande majorité des trajets sont effectués par des personnes sobres. Par quel facteur cela diminue-t-il la probabilité de mourir en voiture ? Est-ce comparable avec l'avion ?

2014-12-29 Coding goûter sans ordinateur

A partir de 7 ans :

2014-12-28 Garder un peu d'anonymat

Big Data est devenu un terme plutôt populaire ces temps-ci. Il est évoqué dans la dernière émission de Soft Power du 28 décembre. Un des thèmes abordés est l'incroyable masses de données accumulées pour une seule personne. Tout est numérisé ou en passe d'être numérisé, les passages sur les sites internet, des données de santé avec des gadgets du type jawbone, la conduite, ... On y évoque les bienfaits et les dangers que cela représente. On peut faire beaucoup de choses avec les données et certaines sont à la frontière de l'éthique. Un des moyens de prévenir les excès serait d'Ouvrir les algorithmes pour comprendre et améliorer les traitements dont nous sommes l'objet. On y découre un nouveau terme : l'obfuscation qui consiste à noyer ses vraies données dans une masse de fausses.

2014-12-21 Unit test a Flask application

It is usually quite annoying to develop a web application and to test the code by just running it and checking it produces what you expect for a given request. It would be more simple to write a function which launches the web application on a local machine and retrieves the content of a given page. That describes what a unit test could be used for.

I used Flask to do it. I hesitated to choose bottle but I needed to be able to shutdown the application by some means. I found a way for Flask faster than for Bottle. That's why I used the first one.


more...

2014-12-20 Fréquentation d'un site internet...

Google Analytics est un service qui permet d'avoir rapidement des chiffres sur la fréquentation d'un site internet. On détecte sa présence par un petit code javascript inséré à la fin du code source d'une page. J'avoue que je l'ajoute à la plupart des pages. Ca me permet de dire que l'article le plus lu de ce blog est celui qui permet de compter les couleurs d'une cellule Excel. Lu n'est probablement pas le bon terme puisque beaucoup de gens atterrissent sur cette page et repartent. Combien... difficile à dire. Et puis, le site est aspiré par des robots... Que fait Google de ces données ? Difficile à dire. Même le site de l'Elysee l'utilise.

2014-12-19 Example in C# and unions of enumerables

I often how to compute the concatenation of several lists in C# using Linq.

var iterator = new List<List<string>> () ... ;
var union = iterator.Aggregate( (a,b) => a.Concat(b) ) ;  // enumerate on strings

And if you are looking to a page easy which gives you many examples, that should be this one: 101 LINQ Samples.

2014-12-15 Convert a notebook into HTML from a notebook and others tricks

The notebook Convert a notebook into a document explains how to convert a notebook into a HTML page from the notebook itself. It also gives two others tricks: how to get the notebook filename and how to create a link to a local file. The second trick is quite interesting for those who use a remote notebook. It is easy to write code to download data from the notebook. The data will be placed on the remote machine. Once you've played with it, you usually get results or others data. But if the only access to this machine is through a notebook, you can add a link to this local data instead of upload this data somewhere on the cloud or a website. See also FileLink.

Some others unrelated tricks. I tried in the following notebook the new version of matplotlib which allows zoomable graphs in a notebook: Graphe zoomable avec Matplotlib (French). I still prefer mpl3d.

2014-12-13 On fait la même chose pour des sciences abstraites ?

Méfiez-vous, quand on commence, on ne s'arrête plus : ExperimentBoy. Un peu moins drôle mais tout aussi prenant : La malédiction de la tartine beurrée. Et en math : Aux sources du zéro.

2014-12-07 A few tricks with matplotlib

On Windows, matplotlib crashes sometimes. I found this explanation and it worked for me. matplotlib crashing Python

plt.close('all')

The latest version 1.4.2 enables zooming in notebook: The nbagg backend. See also ipython notebook on linux VM running matplotlib interactive with nbagg.

Last trick: ggplot style with matplotlib.

import matplotlib.pyplot as plt
plt.style.use('ggplot')

2014-12-06 Build automation with Jenkins

For the past two months, I updated many times my website. I automated many things but it still takes a while. And my laptop needs to remain opens until it completes. I finally took the decision to spend some time on Jenkins. I use it to compile the documentation of my python modules, to run the unit tests, and maybe publish it to my website. Basically, you can run a command line batch by just clicking and receive an email when it is over or if it has failed. One interesting feature is the possibility to chain the commands. If the commands n succeeds, go to command n+1. You can connect it to GitHub or any source repository. It will update your clone just before building.

It takes less than an hour to install Jenkins, install the necessary plugins and creates the first job. I had difficulties because I was running my python script from a batch command file. The script was not stopping even after Python raised an exception. To do that, the following line must be inserted:

%pythonexe% -u setup.py unittests
if %errorlevel% neq 0 exit /b %errorlevel%

Jenkins is more than a scheduler, it handles security, it can run a script on a different machine.

2014-12-05 Les légos de demain

De mon temps, on jouait au scrabble le dimanche. Aujourd'hui, c'est pareil à ceci près que chacun implémentera son algorithme pour placer les mots, pour les trouver aussi. Je ne sais pas si je serai encore enseignant lorsque la génération qui participe à des événements tels que les Coding goûter à Dunkerque aura 20 ans. Ca change vite. Ca change en ce moment.

2014-12-02 Petites subtilités avec les expressions régulières en Python

Je me souviens rarement de la syntaxe des expressions régulières. J'utilise beaucoup la fonction findall. A tort je crois.

text = """ a ab ab ab ab c a ab ab ab"""
exp = re.compile("a( ((ab)|(c)))+")
found = exp.findall(text)
for el in found:
    print(el)
(' c', 'c', 'ab', 'c')
(' ab', 'ab', 'ab', '')

Le premier élément de chaque ligne correspond au groupe inclus dans les premières parenthèses qui matche plusieurs sous-parties de la chaîne de caractères mais seule la dernière est conservée.

text = """ a ab ab ab ab c a ab ab ab"""
exp = re.compile("a(( ((ab)|(c)))+)")
found = exp.findall(text)
for el in found:
    print(el)
(' ab ab ab ab c', ' c', 'c', 'ab', 'c')
(' ab ab ab', ' ab', 'ab', 'ab', '')

Si on ajoute des parenthèses autour de l'expression répétées (donc incluant le signe +), on récupère toutes les sous-parties matchant le motif répété par +. Naïvement, j'ai pensé que je les aurais toutes dans des éléments séparés. Mais si l'expression régulières contient n groupes de parenthèses, on récupère des tuples de n éléments. Un autre code permet de récupèrer les positions.

exp = re.compile("a(( ((ab)|(c)))+)")
for m in exp.finditer(text):
    print('%02d-%02d: %s' % (m.start(), m.end(), m.groups()))
01-16: (' c', 'c', 'ab', 'c')
17-27: (' ab', 'ab', 'ab', None)

On se rend compte plus rapidement que quelque chose ne va pas.


Xavier Dupré