XD blog

blog page


2015-03-14 Ingénieur citoyen

C'est une petite histoire pas encore assez citoyenne mais qui a envie de le devenir et que je prendrais par un bout différent de celui par lequel je l'ai découverte. Le début que j'ai choisis est le récit développé par cet article : Innovation : "L'Etat a besoin de nos mains, pas seulement de nos voix" qui retranscrit et résume un peu les propos de la fondatrice de CodeForAmerica, tenus au sein d'une conférence organisée par Google. Je le précise car ce point est intéressant compte tenu de son discours.

Je passerai sur la première histoire qu'elle developpe - l'amélioration du site internet de Honolulu - même si elle exprime que la société n'est pas aussi individuelle qu'on pourrait le penser et que travailler pour une cause collective est source de motivation au même titre que de s'investir au sein d'une association.

C'est sans doute une Lapalissade que de dire que les données sont partout. Lorsqu'on parle de réseau, Facebook est le premier mot qu'on associe. Liker fait déjà partie des mots courants et le flot de petit like donne une bonne indication de la popularité de telle ou telle chose. Facebook est une société privée qui propose un service dont nous nous passions il y a quelques années. Pourtant notre quotidien n'a pas évolué avec la même célérité. La récolte des poubelles est toujours manuelle et votre médecin n'utilise pas encore votre smartphone pour prendre votre pouls à distance ou observer l'intérieur de vos oreilles. Le site internet de votre mairie évolue doucement à votre grand regret et vous vous demandez s'il n'y aurait pas un meilleur usage de vos impôts. Avant de vous confondre en plainte, je cite un chiffre extrait de la présentation de Jennifer Pahlka : entre 2003 et 2012, 3555 projets techniques ont été menés par le gouvernement américain, 6.4% seulement ont été des succès. Cela ne veut pas pas dire que tous les autres ont été des échecs, plus de la moitié ont tout de même été abandonnés, mais pour les autres, le budget et le calendrier initialement prévus ont été revus à la hausse. Ce chiffre concerne les Etats-Unis mais je serai curieux de connaître ce chiffre pour la France : Echec informatique d'une réforme.

Je cite un extrait de sa présentation : Vous ne pouvez pas gouverner un pays si les élites de ce pays ne comprennent pas la technologie aussi bien qu'ils comprennent l'économie. Une des conséquences, certaines réformes échouent parce que le gouvernement n'arrivent pas à les mettre en place. Le site internet ne fonctionnent pas


more...

2015-03-10 Impossible n'est pas français

Cultiver des tomates sans pesticides et dans un lieu hostile, c'est possible : Tomates sans eau ni pesticide : cette méthode fascine les biologistes. Si c'est impossible, c'est sans doute qu'on n'a pas cherché assez longtemps. Plutôt que de renoncer à cultiver des tomates sur une parcelle assez hostile pour les tomates, un agriculteurs a insisté. Si la première année a été très peu productive, les tomates se sont adaptées et les générations suivantes se sont adaptées.

2015-03-08 Kartable, les programmes depuis la sixième à la terminale

J'ai découvert le site très réussi Kartable à partir duquel on peut aisément découvrir les programmes scolaires de la sixième à la terminale. Je n'y vois pas encore l'informatique ou une quelconque allusion au numérique. C'est peut-être pour bientôt.

2015-03-07 Work on the features or the model

Sometimes, a machine learned model does not get it. It does not find any way to properly classify the data. Sometimes, you know it could work better with another model but it cannot be trained on such an amount of data. So what...

Another direction consists in looking for non linear combinations of existing features which could explain better the border between two classes. Let's consider this known difficult example:

It cannot be linearly separated but it can with others kinds of models (k-NN, SVC). However, by adding simple multiplications between existing features, the problem becomes linear:

The point is: if you know that a complex features would really help your model, it is worth spending time implementing it rather that trying to approximating it by using a more complex model. (corresponding notebook).

2015-03-01 Automated build of pipelines on Jenkins

Jenkins is an interesting tools. You can schedule jobs, manage dependencies between or even display pipelines. Below follows the one I use for my teachings which consists in many helpers to generate documentation, proposes various magic commands for ipython, test all notebooks are working fine.

2015-02-28 Automated build on Travis for a python module

Many python modules display a small logo which indicates the build status: . I set up the same for the module pyquickhelper which is held on github/pyquickhelper. Travis installs packages before building the modules. The first step is to gather all the dependencies:

pip freeze > requirements.txt

I replaced == by >= and removed some of them, I got:

Cython>=0.20.2
Flask>=0.10.1
Flask-SQLAlchemy>=2.0
Jinja2>=2.7.3
Markdown>=2.4.1
...

more...

2015-02-26 Use scikit-learn with your own model

scikit-learn has a very simple API and it is quite simple to use its features with your own model. It just needs to be embbeded into a class which implements the methods fit, predict, decision_function, score. I wrote a simple model (kNN) which follows those guidelines: SkCustomKnn. A last method is needed for the cross validation scenario. This one needs to clone the machine learned model. It just calls the constructor with proper parameters. To do so, it needs to get a copy of those. That is the purpose of method get_params. You are all set.

2015-02-21 Distribution pour Python sous Windows

La distribution WinPython propose maintenant Python 3.4 mais aussi des versions customisées (ou flavors). L'une d'entre elles utilise Kivy. Une autre est particulièrement intéressante pour un datascientist puisqu'elle inclue R. On peut alors passer facilement de Python à R depuis le même notebooks sans étape d'installation supplémentaire ce qu'on teste aisément avec un notebook préinstallé. Comme le compilateur MinGW fait partie de la distribution, cython ne pose plus aucun problème.

Avec cette dernière version, le choix entre WinPython et Anaconda devient difficile sous Windows. Un seul bémol, l'installation du module paramiko est très simple avec Anaconda (avec conda install) mais se révèle compliquée avec WinPython. Donc, si vous avez besoin d'accéder à des ressources web de façon cryptée, Anaconda reste sans doute le plus sûr.

2015-02-16 Delay evaluation

The following class is meant to be a kind of repository of many tables. Its main issue it is loads everything first. It takes time and might not be necessary if not all the tables are required.

import pandas

class DataContainer:
    def __init__( self, big_tables ):
        self.big_tables = big_tables
        
    def __getitem__(self, i):
        return self.big_tables[i]
        
filenames = [ "file1.txt", "files2.txt" ]
          
def load(filename):
    return pandas.read_csv(filename, sep="\t")
    
container = DataContainer ( [ load(f) for f in filenames ] )

So the goal is to load the data only when it is required. But I would like to avoid tweaking the interface of class. And the logic loading the data is held outside the container. However I would an access to the container to activate the loading of the data. Si instead of giving the class DataContainer the data itself, I give it a function able to load the data.

def memoize(f):
    memo = {}
    def helper(self, x):
        if x not in memo:            
            memo[x] = f(self, x)
        return memo[x]
    return helper        
        
class DataContainerDelayed:
    def __init__( self, big_tables ):
        self.big_tables = big_tables
        
    @memoize
    def __getitem__(self, i):
        return self.big_tables[i]()
        
container = DataContainerDelayed ( [ lambda t=f : load(t) for f in filenames ] )        
for i in range(0,2): print(container[i])

But I would like to avoid loading the data only one time. So I used a memoize mechanism.

2015-02-09 Jouer à Space Invaders à coup de ligne de code

Si vous ne me croyez pas, aller voir ici : codingame. Ce n'est pas vraiment un jeu d'arcade mais il s'agit d'implémenter une stratégie qui vous permette de résoudre un jeu sans joystick. Allez voir le blog.

2015-02-06 Quelques trucs à propos de PIG

PIG a besoin de connaître le nombre exact de colonnes. Supposons que vous ayez quatre colonnes :

c1  c2  c3  c3
1   2   3   4
6   7   8   9
...

PIG ne dira rien si on écrit ceci :

A = LOAD '$CONTAINER/$PSEUDO/fichiers/ExportHDInsightutf8_noheader.txt'
          USING PigStorage('\t') 
           AS (c1:chararray,c2:chararray,c3:chararray) ;

La dernière colonne sera forcément incluse avec une autre, ce entraînera une erreur plus tard dans l'exécution du script. Une autre erreur causée par inadvertance :

2015-02-05 23:40:54,964 [main] ERROR org.apache.pig.tools.pigstats.SimplePigStats - 
ERROR 0: Exception while executing [POUserFunc 
(Name: POUserFunc(org.apache.pig.builtin.YearsBetween)[long] - 
scope-380 Operator Key: scope-380) children: null at []]: 
java.lang.IllegalArgumentException: ReadableInstant objects must not be null

Cette erreur apparaît par exemple lors de la conversion d'une chaîne de caractères au format Date. Par ailleurs, on sait que les valeurs de cette colonne ne sont jamais nulles. Alors pourquoi ? Le fichier importé sur Hadoop provient en fait d'un fichier texte enregistré à l'aide de pandas. La première ligne contient le nom des colonnes. Or, sous Hadoop, le nom des colonnes n'est jamais précisé dans un fichier. Il n'y a pas de concept de première ligne sous Hadoop. Un gros fichier est stocké sur plusieurs machines et en plusieurs blocs. Chaque blocs a une première ligne mais l'ensemble des blocs n'en a pas vraiment. Ces blocs ne sont d'ailleurs pas ordonnés. On n'insère donc jamais le nom des colonnes dans un fichier sur Hadoop car il n'y a pas de première ligne.

2015-02-05 Run a IPython notebook offline

I intensively use notebooks for my teachings and I recently noticed that some of them fail because of I updated a module or I did some changes to my python installation. So I thought I looked for a way to run my notebooks in batch mode. I found runipy which runs a notebook and catches exception it raises. After a couple of tries, I decided to modify the code to get more infos when it fails. It ended up with a function run_notebook:

from pyquickhelper.ipythonhelper.notebook_helper import run_notebook
output = run_notebook(notebook_filename, 
             working_dir=folder, 
             outfilename=outfile)

I think it is going to save some time from one year to the next one.

2015-01-27 Mesurer l'intensité de votre Wifi

J'ai depuis quelques temps des maux de têtes très persistents. Il paraît que le cerveau est l'organe le plus mystérieux. Je me fie donc aux habitudes. Qu'ai-je donc changé qui puisse expliquer ces céphalées ? Je ne sais pas encore si je trouverais une réponse autre qu'une prise régulière de paracétamol mais à force de chercher sur internet une raison à tous mes symptômes, je suis tombé sur la sensibilité électromagnétique. Le wifi n'est pas tout à fait inoffensif à en croire l'expérience menée par des lycéennes : Des étudiantes danoises tentent de démontrer la nocivité des ondes WiFi. Le résultat est sans appel : le cresson ne pousse pas à côté d'une borne wifi. Je ne sais toujours pas ce qu'il en est pour mon cerveau. Pourtant, le wifi est suffisamment perturbant pour que des chercheurs se penche sur la création d'une peinture anti wifi. L'aluminium semble être une protection efficace contre l'extérieur à condition de ne pas s'enfermer dans une boîte en aluminium avec son propre wifi.

On peut lire également les recommandations de l'ANSES à propos des Radiofréquences, téléphonie mobile et technologies sans fils. Le rapport est assez long et rédigé dans une langue très factuel et précautionneuse. Il a pourtant débouché sur une loi en début d'année 2014. Mais on en trouve quelques résumés plus explicites dans des journaux étrangers : WiFi banned from pre-school childcare facilities in a bold move by French government qui m'a permis de retrouver une source française : L'Assemblée adopte un texte de compromis sur les ondes électromagnétiques. Pas de wifi dans les crèches, pas de publicité pour les tablettes pour les moins de 14 ans.

Les parents australiens ne sont pas convaincus par la non-nocivité du wifi même si on leur dit le contraire : Australian parents demand school Wi-Fi ban despite ARPANSA saying it's safe. Un maire a jugé le sujet suffisamment important pour bannir le wifi de toutes les écoles de sa ville dès 2009 : Hérouville-Saint-Clair coupe le wifi à l'école. Les enfants y sont a priori plus sensibles : Cell phones: 50 percent increase in frontal and temporal lobe tumors in children.

Bref, et mes maux de tête ? Je suis tombé sur ce logiciel Vistumbler. En quelques clics, on découvre tous les wifis qui traversent son salon. Tout s'exprime en DBm qu'on peut convertir en watts ou volts par mètre. J'ai découvert que le wifi du voisin m'inondait à une intensité plus forte que mon propre wifi. Free semble être l'un des plus puissants sur le marché et la freebox émet trois signaux wifi contre un seul pour ma livebox. J'ai d'ailleurs désactivé la mienne et je me connecte avec un câble. Selon les box, la désactivation du wifi est plus ou moins facile Comment désactiver le wifi ?. Celle de free a l'air d'être la plus compliquée avec la Freebox V6. Depuis 2003, les assureurs n'assureraient plus les dommages liées aux champs magnétiques. Je n'ai pas vérifié ce qu'il en était à propos de mes contrats d'assurances mais le fait que je n'en sache rien m'incite à penser que je ne savais pas ce que c'était au moment où je les ai signés.

Une chose me surprend : je peux désactiver le wifi mais je ne peux pas régler son intensité. Je sais pourtant que le signal traverse quatre étages. J'ai essayé avec une voisine. C'est quand même incompréhensible qu'on ne puisse pas ajuster la puissance du signal.

Je vais continuer mes petites expériences. En utilisant Vistumbler, on s'aperçoit que la puissance du signal n'est pas la même partout dans l'appartement. On reçoit très bien avec une puissance de -50dbm. Il n'est pas utile d'aller au delà. A deux mètres de ma box, le signal est aux alentours de -30dbm. J'essaye de voir si mes maux de têtes sont corrélés à ce niveau d'intensité.

Bref, si j'en crois ce que j'ai lu, il n'est pas inconcevable d'avoir mal à la tête à cause d'un signal wifi trop fort et il vaut mieux désactiver le wifi si vous êtes assurés et si vous avez des enfants en bas âge.

Le Monde 30 janvier 2015 Une loi pour encadrer l'exposition aux ondes. Le wifi est interdit dans les crèches. Les opérateurs de télécommunication ont l'obligation de remédier aux points atypiques ou pics d'exposition. On pourrait décrire cela comme le confluents de plusieurs sources d'émissions. Si on pouvait entendre les ondes, on percevrait ces endroits comme ayant un niveau sonore nettement supérieur au bruit de fond ambiant. Pour une image plus visuelle, cette vidéo remplacera avantageusement les mots : Réflexion au foyer d'une ellipse.

Quelques articles du futur...

22/10/2018 : Les ondes du compteur Linky sont-elles dangereuses ?

2015-01-24 La donnée isolée et la moyenne

Les données sont légions et n'attendent que d'être intégrées à une histoire qui selon les personnes prend le nom d'interprétation, de modèle, d'analyse, de synthèse. Mais bien mystérieuse est la gestation de cette histoire. Mon premier témoignage d'une avalanche de chiffres remonte sans doute à Matrix où un programmateur fascinant interprétait un déluge de bits en temps réel sans aucune lampe stroboscopique dont tout humain normal aurait eu besoin pour espérer y voir quelque chose.

Nous ne sommes pas vraiment capables de donner un sens à une telle diarrhée numérique. Le plus souvent, on en fait la moyenne ou la médiane et on en garde que ce seul chiffre qui devient la seule chose à raconter. Personne n'aime affronter une tonne de chiffres mais savoir que celle-ci a accouché d'un seul nombre qui résume le tout, ça rassure et c'est simple à retenir. Le salaire médiane, le salaire moyen des ministres du gouvernement, le nombre d'élèves moyens par classe, le taux de chômages (moyen), le QI moyen, on fait une somme, on divise, on est content. On se sent même un peu savant dès qu'on parle d'écart type, un peu plus encore si on évoque les corrélations.

Et puis tout de suite, comme ces moyennes ont un poids certain, on se compare à elle. On est au dessus. On est heureux. On est en dessous, on se sent lésé. Tout à coup, on sait où on se trouve. On se sait rien du voisin mais on sait tout des français. Moi (donnée isolée) contre les autres (données agrégées), un grand classique. Lorsqu'on est du bon côté, on se repose, du mauvais, on a enfin trouvé l'objectif : la moyenne ou mieux encore, le premier quartile.

Et puis patatras, j'ai calculé le taux moyen de guérison de deux hôpitaux pour choisir le meilleur. Et je n'aurais pas pris toutes les données en considération, j'aurais raté un morceau de l'histoire ? C'est Le paradoxe de Simpson. J'hésite entre deux hôpitaux, le premier a un taux de succès de 98%, le second 90%. - Ah bon, tu hésites ? - Allez, on y va.

Un peu plus tard.

Tu lis quoi sur le fronton ? Euh... Chirurgie esthétique. - Tu n'aurais pas pu le dire avant ! - Mais tu m'as dit de prendre le meilleur. - Le meilleur pour ton type d'opération ! - J'ai oublié de regarder cette donnée.

2015-01-22 C'est quoi les données, c'est quoi le Big Data ?

Dans le film Bienvenue à Gattaca, le héros joué par Ethan Hawke doit non seulement faire disparaître ses traces mais aussi laisser celles de celui dont il usurpe l'identité. La moindre inattention peut jeter le doute voire dévoiler le stratagème. Une empreinte digitale inattendue interpelle immédiatement. Comme c'est inattendu, il faut lui trouver une explication.

La donnée : c'est une information juste avant qu'elle ne devienne partie intégrante d'une histoire, juste avant qu'on l'interprète. Et comme le suggère ce film, on en laisse partout et tout le temps. On en génère tellement qu'on est forcé de ne pas y prêter trop attention. La moindre connexion internet, la poussière sur le plancher, la température de l'eau, la fuite d'air à la fenêtre. C'est une donnée dès qu'on la décrit. Il y en a tellement qu'on les oublie rapidement. C'est juste un fait divers.

Mais pourquoi sont-elles si populaires maintenant ?

Une des raisons est qu'elles restent plus longtemps. La poussière sur mon plancher disparaît avec l'aspirateur. La connexion à un site internet restent plusieurs mois dans plusieurs fichiers de plusieurs machines différentes. Ces données numériques ont la vie dure. Ca n'explique pas pourquoi elles sont populaires. Seulement, du fait qu'elles restent plus longtemps, on a plus de temps pour les observer et leur donner du sens.

Comment donne-t-on du sens aux données ?

Les statistiques y sont pour beaucoup même si ce terme n'est pas une explication en soi. David Hume dans Enquête sur l'entendement humain nous apporte quelques éléments de réponses. Nous sommes tous très amnésiques mais une des façons qui nous permet de retenir est la répétition. Une observation, une donnée, commence à prendre du sens dès qu'elle se répète. Pour citer Hume :

De causes qui paraissent semblables, nous attendons des effets semblables. Telle est la somme de toutes nos conclusions expérimentales.

Les marins utilisaient les étoiles pour se repérer. Ils ont su associer la position d'une étoile dans le ciel (une donnée) de la même étoile à la même position une année plus tard (la donnée est répétée). C'est le début de la connaissance : chaque année, la même étoile est à la même position dans le ciel. On peut l'utiliser pour se repérer.

Et Big Data ?

La somme des données qui se rapporte à la même personne est quasiment infini. Seulement, aujourd'hui, elle persiste. Qu'en faire ? C'est tellement énorme que ce serait comme découvrir toute la voie lactée le même jour. Il faudrait une vie pour l'étudier... Sauf que... on a maintenant des ordinateurs qui font plein de calculs très rapidement. Alors on reprend notre cher Hume : on se répète beaucoup ! On fait presque tous les jours la même chose, et si ce n'est pas tous les jours, c'est toutes les semaines. Nous avons une vie rythmée - au sens musical -. Alors en comparant toutes les journées entre elles, et avec un bon ordinateur, on arrive à déterminer les habitudes et les goûts de chacun.

Et alors ?

Et bien c'est d'abord très drôle. On porte un bracelet au poignet qui enregistre les déplacements. On peut compter ses pas, enregistrer son poids tous les jours. C'est un peu comme si découvrait qu'on n'était plus intéressant que le voisin parce qu'on découvre plein de choses sur soi-même. Et le voisin, il n'est plus aussi intéressant ? Si si toujours, mais c'est lui qui nous montre sa courbe de poids, alors ce n'est plus aussi drôle. Et puis, quand on mange un carré de chocolat, on peut le mesurer tout de suite. Et ça c'est fun.

Autrefois si éphémères, les données sont quasi éternelles, et elles disent beaucoup de choses. Votre enfant sera peut-être dans 25 ans archéologue numérique. Les listes des relevés de cartes bleues pourraient permettre tout à la fois d'ajuster un régime alimentaire mal équilibré qu'à prédire la probabilité d'avoir un cancer (sauf si vous achetez toujours tout y compris votre whisky préféré en liquide).

Tu as vu le Monde aujourd'hui ? Les français prennent du poids à Noël ! - Incroyable, ils ont piraté ma balance numérique ! - Euh... tu es sûr ?

Les données, d'accord... et le bruit alors ?

C'est Agatha Christie qui nous apporte la réponse. Hercule Poirot avait coutume de dire que le meurtrier est un homme parfaitement normal qui cherche justement à l'être le seul jour où il ne l'est pas. Il pense à chaque instant à gommer tout ce qui pourrait éveiller les soupçons. S'il avait envie de manger une petite gâterie, il y renoncera car d'hatitude, il prend un jambon beurre à midi. Le meurtrier évacuera pour une journée toute fantaisie. Et pourtant, ce sont tous ces petits aléas qui font qu'une journée est parfaitement normale, tous ces petits détails qu'on n'est incapable de retenir, tous ces petits détails qui, parfois, sont remarqués par votre collègue car justement ils sortent de l'ordinaire. Mais si toute la journée, un meutrier pense à son crime, il n'y a plus de relâchement possible et il va chercher à gommer ces petits aléas qui attirent l'attention. En fin de compte, il aura paru tout à fait normal, bien trop normal pour être vrai, d'après Hercule Poirot. Le bruit, ce sont les fausses notes de la journée par rapport à une journée parfaitement normale, fausses notes délicieuses pour toute personne sensée, fausses notes malheureuses pour tout statisticien sensé.


<-- -->

Xavier Dupré