13 décembre 2008

Xkcd en français

xkcd est une mine d'illustrations pour les enseignants en informatique, et j'ai décidé cette année d'illustrer chaque séance des TP de système/réseau que j'assure en L2 avec un dessin traduit pour l'occasion.

Les difficultés sont multiples : choisir le dessin tout d'abord. Car parmi les quelques centaines de l'auteur, Randall Munroe, il faut en trouver qui ont un rapport plus ou moins direct avec la séance du jour, et je remercie Arnaud de m'avoir fait profiter de sa mémoire et de sa connaissance pointue de xkcd pour m'éviter d'être bloqué sur la fin.

Autre problème, la traduction. Ces courtes vignettes faisant appel à un vocabulaire spécialisé sont assez difficiles à traduire en restant aussi concis. Quand il faut en plus gérer des problèmes de culture geek dont l'équivalent français n'existe pas, ça devient mission impossible. Quant au texte alternatif, c'est souvent difficile même d'y comprendre la blague.

Encore un obstacle, la réalisation. Retrouver une police de caractères qui ressemble à l'écriture - en majuscules - de Randall Munroe n'est pas évident. On trouve quelques essais ici ou . La police International Playboy, qui contient même la plupart des majuscules accentuées, donne un résultat convenable.

Enfin, dernier problème : la publication et les droits d'auteurs. Eh bien ce n'en est pas un, puisque xkcd est publié sous licence Creative Commons autorisant justement les modifications !

Alors, qu'attendent tous les geeks de France pour lancer une vraie interface collaborative de traduction d'xkcd ?

Il y a eu quelques essais, mais la plupart n'ont pas survécu à quelques dizaines de dessins. Le total, recensé ci-dessous, permet tout de même d'arriver à 11% de la BD. Mais attention, la qualité de traduction n'est pas toujours au rendez-vous :
21 45 77 86 86' 123 129 132 148 156 163 169 171 185 191 195 198 202 208 208' 218 221 224 227 231 232 233 242 244 247 275 275' 287 290 302 302' 303 307 323 327 327' 329 341 342 343 344 345 349 350 353 374 377 378 378' 385 385' 386 397 399 400 405 411 411' 414 425 425' 426 427 428 429 432 433 434 435 436 441 444 445 447 448 451 453 456 456' 469 479 488 488' 530

Si l'on veut lancer une traduction massive, l'idée serait de permettre une collaboration. Difficile si l'on travaille directement sur les images. J'ai donc préparé une interface de traduction d'xkcd en français qui fonctionne seulement en ajoutant le texte sous l'image. Ceux qui le voudront pourront ensuite créer les images, en y insérant ces textes. Pour arriver à une bonne qualité, je propose le système suivant :

  • n'importe qui peut envoyer une traduction
  • des modérateurs (moi pour l'instant, mais si je peux vous faire confiance, j'accepterai certainement de vous ajouter à la liste) se chargent de la valider pour qu'elle apparaisse sur le site, et de choisir la meilleure (et donc bye bye les robots spammeurs !).
Le système est réalisé en PHP/MySql, sur une structure très proche de celle utilisée pour le guide de Pessoa sur Lisbonne. L'adaptation à d'autres langues sera donc très facile (contactez-moi si vous êtes intéressé par les sources). Et bien sûr, je compte sur vous pour proposer des traductions ! Il suffit de cliquer sur l'image voulue, puis compléter le formulaire, en utilisant éventuellement le lien vers l'image originale pour l'avoir sous les yeux pendant la traduction. Et surtout n'oubliez pas l'infobulle, qui apparaît quand on laisse traîner la souris sur l'image !


Alors bien sûr, vous allez me dire que la traduction des xkcd est un peu inutile, vu que la connaissance de l'anglais fait partie de la culture geek. Ce n'est pas complètement faux. Un sondage a été organisé cette année pour évaluer la familiarité avec l'outil informatique de tous les entrants en licence de la Faculté des Sciences de l'Université Montpellier 2, dans le cadre d'une UE préparant à l'examen du C2I (Certificat Informatique et Internet). Un millier d'étudiants a répondu, et voici les résultats des deux questions suivantes :

Si, sur internet, vous arrivez sur une page écrite en anglais :
  • vous n'y comprenez rien
  • vous y déchiffrez quelques mots
  • vous pourriez la comprendre en cherchant le sens de quelques expressions
  • vous la lisez en comprenant la plupart des phrases
À propos du contenu de cette unité FLIN102, vous pensez :
  • que vous aurez du mal, qu'il y aura beaucoup (trop ?) de choses à découvrir,
  • que ça ira en suivant les TP, et en les travaillant en plus chez vous,
  • que suivre les TP vous suffira pour apprendre des choses et les retenir,
  • que vous connaissez déjà une bonne partie des choses enseignées en TP, mais que vous en découvrez quelques unes,
  • que suivre les TP est pour vous complètement inutile, vous savez déjà tout ou presque.

Comme vous pouvez le constater, la maîtrise de l'anglais augmente en même temps que la maîtrise de l'outil informatique. Alors peut-être que les fous d'ordinateurs continueront à se précipiter sur la version originale de la BD, et que la traduction leur servira seulement en cas de problème. Peut-être qu'ils profiteront de leur maîtrise de la langue pour faire profiter d'xkcd aux allergiques à l'informatique pour lesquels quelques planches sont tout à fait accessibles.


Episodes suivants : traduction d'xkcd et loi de Pareto (31 mars 2009), sous-titrage xkcd : 100% ! (20 avril 2010)

8 décembre 2008

Les sections d'un article scientifique (1/2)

J'utilise fréquemment le nombre de réponses Google : le plus souvent pour l'orthographe, mais aussi pour diverses expérimentations en soumettant un nombre massif de requêtes, comme dans mon billet précédent (ou tous ceux tagués par mon utilitaire qui permet de le faire, FuryPopularity). Même s'ils ne sont pas toujours fiables - j'y reviendrai au prochain billet de la série - ils sont le plus souvent assez parlants, comme peuvent l'illustrer ces dessins de XKCD.

Aujourd'hui, ils vont nous servir à visualiser le découpage traditionnel d'un article scientifique en sections. Le point clé est que l'on y annonce généralement son plan en introduction, en utilisant, de façon parfois un peu pesante, la formulation "In Section [X], we [VERB]", comme dans ce fameux article qui promettait : "In Section 7, we discuss how to draw a rooted split network" (comment ça j'ai pas le droit de faire ma pub sur mon blog ?).

Alors que fait-on quand on a une liste d'un peu plus de 3000 verbes anglais depuis cette expérience, et un Fury Popularity fonctionnel ? Eh bien on profite de ses nuits pour envoyer tout ça automatiquement à Google, en faisant varier le numéro de section X de 1 à 10... Par manque de temps, je repousse au prochain billet sur le sujet mes arguments sur le fait que ça a du sens, bien que tous les articles n'utilisent pas cette formulation en introduction, et je passe directement à la méthodologie. Tout d'abord, récupération des nombres Google :

  • pour 3656 verbes anglais (cette liste de verbes était donnée à la fin de ce billet) pour X variant de 1 à 3.
  • pour "seulement" les 940 verbes qui ont eu des résultats à cette étape précédente, pour X variant de 4 à 10.
Les données sont alors stockées dans ce fichier tableur, et normalisées :
  • en colonne tout d'abord, divisées par le nombre total de résultats à X fixé, ce qui fournit pour chaque verbe un pourcentage d'apparition,
  • en ligne ensuite : pour chaque verbe, soustraction de la moyenne de ses pourcentages d'apparition, puis division par l'écart type.
Avec les données ainsi obtenues, en gardant uniquement les verbes donnant plus de 5000 résultats au total, et en retirant les auxiliaires are, have et will, on obtient ce résultat :

Héhé, surpris, hein ? Pas de diagramme, pas d'arbre, pas du nuage ! Eh oui, après un module de biostats qui m'a initié à R, et avant de plonger dans les subtilités de l'utilisation de l'analyse factorielle en lexicométrie, cet essai de visualisation de données par analyse en composantes principales donne un résultat tout à fait convenable. Il permet en effet de représenter les données en deux dimensions, au lieu des 6 initiales (1 par section), de la meilleure façon possible.

Le code R (le logiciel est téléchargeable gratuitement ici) est le suivant :
donneesSections <- read.csv ("http://philippe.gambette.free.fr/Blog/200812Publis/ResultsR.csv", dec=",", sep=";",row.names=1)
mesures<-donneesSections[, c("Section1","Section2","Section3","Section4","Section5","Section6")]
acp<-princomp(mesures)
biplot(acp,cex=0.5)
acp<-princomp(mesures,cor=TRUE)
biplot(acp,cex=0.5)


Alors n'étant encore pas très familier avec la technique, j'ai quelques questions théoriques et pratiques, que j'espère bien résoudre bientôt (avec l'aide de mes lecteurs ?) :
  • quelles sont les différences, fondamentales et pratiques, entre l'ACP qui fonctionne sur la matrice de corrélation (qui correspond à l'option cor=TRUE) et la matrice de covariance ?
  • existe-t-il des options dans R pour choisir les dimensions du dessin ?
  • existe-t-il des logiciels ou applications web qui fournissent les résultats d'une ACP dans un format plus pratique, permettant de choisir la taille des étiquettes, ou bien de visualiser deux étiquettes superposées
En ce qui concerne l'analyse de cette image, je détaillerai certainement plus les conclusions au prochain billet (en vérifiant notamment si les règles théoriques de rédaction d'un article scientifique trouvables ici ou semblent vérifiées), mais voici quelques premières remarques :
  • les sections 5 et 6, et surtout 1 et 2 semblent avoir des rôles très proches. Ceci peut s'expliquer pour 1 et 2 par le fait que le plan peut se trouver soit dans le résumé, hors section, soit dans la section 1 : ainsi, la partie introductive, à laquelle les verbes begin, introduce, start, recall, formulate sont associés, se trouve en section 1 ou 2, tout comme la partie d'état de l'art : review, survey, collect.
  • Pour les sections 5 et 6, c'est la longueur variable des articles qui fait que les verbes indiquant la validation finale avec compare, evaluate, perform, explore, ou le bilan, summarize, conclude, ont des profils différenciant peu les sections 5 et 6.
  • Les sections 3 et 4 sont visiblement dédiées aux gros morceaux : assume, investigate, describe, construct, calculate, determine, demonstrate ; discuss, analyze et extend, apparaissent alors qu'on se rapproche des sections finales.
A bientôt pour la fin de cette discussion, et le retour de quelques nuages ! Il y aura certainement un billet spécial XKCD entre les deux pour patienter.

23 novembre 2008

Bruits d'Aubry sur Google

Depuis juillet, je prends régulièrement la température Google des présidentiables pour 2012 en recherchant l'expression "X en 2012" ou "X candidat(e) en 2012" pour divers X. Les chiffres obtenus ne sont pas toujours très parlants si l'on regarde précisément pour chacun, mais sont globalement pertinents pour visualiser le bruit du web autour des candidatures potentielles. Depuis juillet, pas trop d'évolution pour les candidats de gauche (justement, le reflet qu'aucun champion n'est sorti du lot ?), mais ça s'est réveillé avant-hier pour Martine Aubry :
A droite, rien de nouveau (Chirac ou Villepin ont eu des bonds qui viennent d'erreurs d'évaluation du nombre de résultats par Google). En revanche pour 2017, malgré les petits chiffres, c'est plus intéressant, avec un trio de tête Copé, Sarkozy, Dati :

18 novembre 2008

Claviers espions : usure et fréquence de lettres

Dur dur de poster après une période silencieuse sur son blog... Reprendre un billet vaguement réveillé par un autre d'un blog influent ? Ficeler un rapport peu concluant sur l'influence de la plateforme sur le classement d'un blog ? Non, il faut un nouveau résultat fort, mêlant une idée théoriquement ingénieuse et calculable en pratique, un vrai projet de longue haleine qui montre qu'on n'a pas chômé...

Tout est parti de deux touches de clavier défaillantes. Delphine, déjà à l'origine de quelques posts sur ce blog, notait que les deux touches qui s'étaient détachées de son clavier faisaient partie du mot-clé principal de sa thèse. Il n'en fallait pas plus pour me faire envisager une forte corrélation entre l'usure des touches et leur fréquence d'utilisation (aussi remarquée ici par exemple), et rechercher les moyens de mesurer tout ça... et d'en déduire des choses.


Par chance, mon clavier Dell reflète assez bien son utilisation (ceux de certains Mac aussi apparemment, voire les claviers NMB Technologies), au bout d'un an. Mon "S" est par exemple presque complètement effacé. Mais surtout, si on regarde de plus près, les touches fréquemment utilisées sont vraiment usées, le plastique y est plus lisse, et elles réfléchissent beaucoup mieux la lumière. Je ne sais pas ce que ce polissage implique sur l'absorption de matières toxiques du bout des doigts, mais en tout cas il permet de faire des mesures : en éclairant le clavier par dessus et en prenant la photo de travers, les zones très réfléchissantes apparaissent plus sombres que le reste.

Il faut alors quantifier l'usure à partir de la photo. Si l'on veut des résultats très précis, on peut s'amuser à faire du traitement d'image et mesurer l'intensité sur les portions de photo qui correspondent aux touches. Ca demande un gros travail, surtout de normalisation de l'image... alors qu'on peut procéder plus simplement : construire un quadrillage 5x5, le coller sur chaque touche, et compter les carreaux, parmi ces 25, qui sont sombres. En fait, pour les premières lettres, on compte les carreaux pour préparer quelques étalons, après, on compare avec les lettres dont l'usure a déjà été évaluée.

Une fois ces quantités d'usure obtenues, on peut les comparer avec les fréquences de lettres en français. Pour cela, on me l'a confirmé dans mon cours de biostats cette année, rien ne vaut un joli diagramme XY :

La corrélation est nette (coefficient 0,89), toutefois la relation entre les deux variables semble n'être pas exactement linéaire. Essayons d'élever l'usure au carré, ça semble mieux fonctionner (coefficient de corrélation 0,92), même si ce n'est pas parfait :

Qu'est-ce qui pourrait expliquer ces variations par rapport à la distribution moyenne des lettres en français ? Les gros joueurs de jeux vidéos ont apparemment leurs touches fétiches, je pense que ma forte usure de C et V vient de mon abus de raccourcis pour le copier coller, pour W c'est sûrement les adresses web. De plus, j'utilise mon ordinateur pour écrire à la fois en français et en anglais. Tiens tiens, et si j'utilisais l'usure des touches pour évaluer à quelle fréquence je tape en anglais ou en français ?

L'idée est donc que la distribution de l'usure n'est pas semblable à celle du français, mais à une combinaison linéaire de celle du français et de l'anglais. J'appelle U(l) ma fréquence d'utilisation de la lettre l, F(l) (respectivement A(l)) sa fréquence d'utilisation en français (resp. en anglais), et j'appelle x le ratio de ce que je tape en français par rapport à tout ce que j'écris avec mon ordinateur. U est donc une loi mélange de F et A : U(l) = x F(l) + (1-x) A(l). J'essaie de trouver x en connaissant une approximation de U, de F et de A pour toute lettre. Pour cela, je vais calculer le membre de droite pour toutes les valeurs de x entre 0 et 1, et évaluer la corrélation avec U. Tout peut se faire avec un tableur, ça se passe ici.

J'en profite pour une petite digression sur le coefficient de corrélation de Pearson, implémenté par COEFFICIENT.CORRELATION dans tout tableur digne de ce nom, que j'avais utilisé dans certains posts précédents sans comprendre sa formule magique. En fait, la formule est tout à fait naturelle une fois qu'on a compris que pour normaliser des distributions, classiquement, on divise les valeurs par l'écart type, avant de soustraire la moyenne (merci encore au cours de biostats, décidément ces modules doctoraux ont du bon quand on les choisit soi-même...).

Bref, passons aux résultats. J'utilise trois distributions de fréquences de lettres en français trouvées sur internet pour F, deux pour l'anglais et la distribution A. A chaque fois je calcule la valeur optimale de x. Je termine par une moyenne de ces valeurs de x : 0.81 (avec selon la distribution une variation inférieure à 10%). Bref, environ 1/5 de ce que je tape est en anglais.

A quel point la méthode présentée ici est fiable ? D'une part, il est connu que les fréquences de lettres varient selon le corpus utilisé. D'autre part, le coefficient de corrélation que je tente de maximiser afin de trouver le ratio x est peut-être trop sensible à de petites variations sur les fréquences de lettres. Pour tester ça, j'ai collé un bout de texte anglais à un bout de texte français (en connaissant le ratio x, donc) et j'ai essayé de le retrouver par la méthode de maximisation du coefficient de corrélation. Pour une étude plus sérieuse, j'aurais peut-être essayé un corpus de textes variés, là au vu des résultats je me suis contenté de mon premier essai.

J'ai utilisé cet outil en ligne de calcul de fréquence de lettres, qui fournit des pourcentages de fréquences arrondis à l'entier près (pas très précis, donc, à peu près autant que mes mesures sur le clavier). J'ai copié le premier article du Monde que j'ai eu sous les yeux dans mon flux RSS, concaténé au texte de la page d'accueil de l'outil, en anglais donc (remarquez que ces deux textes sont très courts). Puis appliqué la méthode, avec les deux distributions de fréquences pour l'anglais et les trois pour le français. En faisant la moyenne des coefficients trouvés, j'obtiens 0,79 alors que la valeur réelle était 0,81 (8327 octets pour le texte français, 1904 pour l'anglais), soit à peine 3% d'erreur (et pour chaque couple de distributions de fréquences anglais/français, moins de 10% d'erreur).

Bref, je suis assez confiant pour placer une marge d'erreur de 10%, et affirmer qu'il est possible de deviner par cette technique la langue d'un utilisateur d'ordinateur Dell qui use raisonnablement son clavier. Pas mal sans utiliser de vrai clavier espion !

6 août 2008

L'agence de presse des spammeurs

"Google accusé d'espionnage par l'Union Européenne",
"La Wii Fit utilisée pour entraîner les troupes américaines",
"Bush évite un soulèvement albanais en envahissant l'Alabama",
"Al Pacino soupçonné de financer la mafia"...
Vous en avez loupé des choses cet été, vous dites-vous en consultant votre boîte mail au retour des vacances !

En fait, ce que vous avez surtout loupé, c'est un mois de juillet marqué par des spammeurs farceurs et originaux dans leur choix de sujet de mail constitué d'un faux-titre d'article de journal. Dommage, ça n'allait pas plus loin que le titre, et ces courriels contenaient généralement seulement une autre phrase du même tabac suivie d'un lien vers un site douteux. Le phénomène s'est apparemment arrêté depuis quelques jours. Je n'ai pas résisté au plaisir de compiler tout ça, puisque la période du 6 juillet au 3 août a été très productive pour le Monsieur Titres à l'origine de ces trouvailles, qui pourrait sans problème envoyer son CV à France Dimanche ou trouver des titres encore plus racoleurs aux articles du Post.

Quelques détails techniques sur la cueillette de ces titres : récupération manuelle sur quatre adresses mails, puis recherche Google de certains d'entre eux, pour tomber sur un splog qui a doublé ma récolte (titres récupérés par mail, sur le splog, listes concaténées en éliminant les doublons). Le fichier obtenu m'a permis de tester ma dernière version (0.5) de TreeCloud (ça y est, elle est utilisable sans devoir installer SplitsTree, on en reparlera, informations et téléchargement ici). Bref, voici un petit nuage arboré qui permet de voir quelques thèmes forts qui doivent éveiller la curiosité de l'anglophone moyen :

Et comme l'arbre ne semble finalement pas si louche (à part peut-être le sous-arbre des sex-tapes d'Obama et MacCain), un petit best-of - que je n'oserai pas traduire - pour voir à quel point les nouvelles annoncées étaient bidon :
Statue of liberty to return to France
Ex-Google engineers debut 'Cuil' way to search
(décidément, cette non-information est partout !)
Angry man shoots lawnmower
Prada gives fake bags to charity
Release Of The Nancy Pelosi Sex Dvd Causes Mass Mass Erectile Dysfunction In US
Tupac Shakur Speaks Out From Beyond The Grave: "Stop Releasing My Stanky Old Songs"
Bush And Mccain Dance Ballet
Jesus Christ To Star In Next Series Of Batman
Madonnas Former Home Destroyed By Jesus
Jesus Christ To Star In Next Series Of Big Brother
The truth about ghosts revealed
Mermaid discovered off NZ coast
Yahoo search shuts down for good
Swedish princess slaps town florist
Danish princess slaps town grocer
Black Panthers Sue White Guys For Stealing Copyrighted Gesture
Bush 'Troubled' by Gay Marriages. Declares San Francisco Part of 'Axis of Evil'
Beijing Olympics cancelled, moved to Atlanta
Living proof that the earth is flat available
Angelina Jolie gives birth to triplets

Et que s'est-il passé le 3 août ? Ces spams ont été remplacés par un nouveau format : de faux mails d'alerte de CNN. Certes, on a une vingtaine de titres pour le prix d'un, mais ça sent le recyclage : pas mal d'entre eux sont déjà présents dans la liste que j'ai compilée. Et surtout il faut cliquer une première fois pour accéder au corps du message, contrairement au titre dans le champ Sujet du mail qui sautait tout de suite aux yeux. Bah, en attendant qu'ils reviennent à la version précédente, je me contenterai du RSS du Monde.

13 juillet 2008

Les présidentiables en 2012 selon Google

Le côté "femme politique" d'Íngrid Bétancourt a été un peu passé sous silence par la presse après sa libération, traitée plutôt sous l'angle de l'émotion, ou de la récupération politique extérieure. Seuls quelques rares articles (ici, ou ) évoquent les projets d'Íngrid qui depuis 1990 suivait une carrière politique en Colombie. Et en France ? Cette idée a déjà fait surface sur la toile en divers endroits (rien vu sur la blogosphère en tout cas).
A quel point ces rumeurs sont-elles significatives ? Regardons ce que donnent les requêtes "X candidat(e) en 2012" et "X en 2012" sur Google :

Possibles candidats aux présidentielles de 2012 selon GoogleAttention, comme toujours avec les "Google numbers", les résultats sont à prendre avec des pincettes. Toutefois, le premier souci qui est celui de la polysémie des expressions recherchées est plutôt bien réglé par le "en 2012". Il précise le contexte des élections présidentielles est correct, et permet par exemple d'assurer que "Royal" signifie bien "Ségolène Royal" (ce qui est rarement garanti dans les recherches Google de ce genre). Je ne vous assure pas de la pertinence de rechercher cette expression en décembre 2011, mais pour l'instant, les résultats trouvés concernent presque tous le sujet. Petit problème aussi, différencier père et fille chez les Le Pen : la variation entre "candidate" et "candidat" permet de donner des indications sur les scores des deux.

Comme souvent je vous laisse analyser le graphique et sa pertinence. A propos de l'échelle verticale, il était impossible pour des questions de lisibilité de garder les chiffres bruts (sinon ça aurait été Nicolas Sarkozy contre le reste du monde), j'ai donc "passé les chiffres au log". Pour n1 réponses à "X candidat en 2012" et n2 réponses à "X en 2012", X obtient donc un score de log(n1+n2+1), le "+1" étant destiné à ce Marie-George Buffet présente dans cette liste pour sa candidature aux précédentes présidentielles n'ait pas un score infiniment négatif.

N'hésitez pas à me suggérer d'autres noms de possibles candidats aux présidentielles 2012, voire d'autres expressions à rechercher pour tous. Pour lancer l'ensemble des recherches sur Google automatiquement, vous pouvez bien sûr utiliser FuryPopularity avec ce fichier d'expressions. Le fichier tableur qui en résulte et le graphique ci-dessus seront probablement mis à jour au cours des prochains mois (tant que les deux expressions sembleront pertinentes) pour constituer un baromètre des présidentiables.

11 juillet 2008

Livre interactif : Lisbonne, par Fernando Pessoa


Le lien traîne depuis quelque temps dans la liste à gauche, le projet a enfin atteint un degré d'avancement justifiant que j'en parle. Le poète portugais Fernando Pessoa a écrit en 1925 un guide touristique sur la ville qu'il n'a presque jamais quittée : Lisbonne. Un texte sans aspiration poétique, rédigé directement en anglais (d'où le titre Lisbon, what the tourist should see), et destiné à faire connaître à l'étranger les merveilles de sa ville chérie. Celles-ci ont été bien préservées au XXe siècle, et modulo quelques renommages, la plupart des monuments cités et leur description sont inchangés aujourd'hui. Le guide a donc été traduit dans plusieurs langues après sa découverte à la fin des années 90, dans la malle de manuscrits de l'auteur.

En France il a été publié par les éditions 10/18. Malheureusement le texte fourni dans l'édition est une traduction brute de celui de Pessoa, sans notes, avec une carte de la ville datant de 1929 plutôt illisible, sans index. Il ne peut donc pas vraiment être utilisé tel quel pour rechercher des informations pendant la visite. Pareil pour la première édition, chez Livros Horizonte, en bilingue anglais/portugais. L'ouvrage vient toutefois d'être republié en anglais par un éditeur britannique, Shearsman, qui a mis à jour les noms de lieux cités, et ajouté quelques photos tirées de cartes postales des années 20.

Bref, pour rendre ce guide utilisable directement sur place, j'ai concocté une version interactive de Lisbonne par Pessoa, avec carte Google associée, et quelques photos qui proviennent d'une semaine délicieuse passée sur place, complétées par quelques unes trouvées sur la Wikipedia ou Flickr - qui ont le bon goût d'inciter leurs utilisateurs à préciser les conditions de réutilisation des images.

J'ai donc numérisé la partie anglaise du livre des éditions Livros Horizonte fraîchement acquis à Lisbonne, qui est maintenant disponible librement (Pessoa est décédé depuis plus de 70 ans) sur le site :

L'étape de reconnaissance de caractères a été réalisée avec le logiciel gratuit (pour la reconnaissance de caractères dactylographiés) SimpleOcr, qui n'est pas extrêmement fiable (et qui, surtout, n'apprend rien de ses erreurs...) mais plutôt ergonomique pour effectuer les corrections. Bref, il est possible qu'il reste des coquilles, n'hésitez pas à me les signaler. Je dois tout de même mentionner que certaines erreurs sont présentes dans le texte original. Peut-être laissées par l'éditeur par souci d'authenticité...

Les lieux et rues cités ont alors été localisés sur une carte de Lisbonne, ce qui permet d'obtenir une visualisation géographique du livre, où Pessoa propose en fait trois balades - la première assez longue, en bleu, les deux autres vertes et rouges destinées au touriste qui "pourrait rester un jour de plus". Il termine par une description des journaux portugais de l'époque, puis des détails sur quelques villages des environs. L'itinéraire principal, qui débute par une arrivée par la mer, en bleu sur la carte, nécessite d'avoir une voiture. En réalité, comme il est impossible de faire en une seule journée toutes les visites indiquées, il pourra être morcelé par quartier pour se contenter de transports pédestres ou en commun. Attention dans ce cas, l'optimisation se fait en suivant la carte plutôt que l'ordre linéaire des visites du bouquin, puisque le cheminement de la visite est loin d'être hamiltonien ! Le choix de l'ordre par le poète n'est en tout cas pas tout à fait innocent, puisqu'il répartit assez bien les visites indispensables (le quartier Baixa, l'Alfama, le château Saint -George, le monastère des Jeronimos, la tour de Belém, etc) au milieu d'autres plus anecdotiques.

Alors une carte Google, c'est bien joli, mais pas super utile quand on voyage déconnecté d'internet (à propos, si vous cherchez un webcafé, tentez la Rua da Madalena) ! La carte est donc disponible aussi dans une version facilitant l'impression, avec de petits numéros pour chaque lieu (en moyenne chez moi le chargement de la page met plus de 10 secondes, c'est normal ;)). Et pour avoir la légende de tous ces numéros, classés selon l'ordre d'apparition dans le livre, c'est en bas de cette version imprimable du texte.

Si vous avez la version interactive toutefois, vous aurez accès à bien plus d'informations sur le lieu. Pour de nombreux lieux mentionnés vous avez un lien vers la page Wikipédia, voire son site officiel (avec horaires d'ouverture par exemple pour les musées).

Ces informations supplémentaires qui transforment l'ouvrage en vrai livre interactif n'ont pas été insérées directement dans le texte original. En fait j'ai mis en place un système pour ajouter automatiquement au texte ces informations stockées à un autre endroit, dans des sortes de tableaux, des bases de données. Voilà enfin le passage technique qui sera sauté allègrement par la plupart des lecteurs, malgré une image alléchante, ci-dessous, qui essaie d'expliquer le principe. En plus du texte, il y a donc trois bases de données : la bleue, celle des occurences des lieux dans le texte, l'orange, celle des lieux, et la violette, celle des coordonnées. Expliquons alors les flèches dans l'exemple ci-dessous. Pour un endroit donné de la carte, stocké dans la base violette, il peut se trouver un ou plusieurs objets d'intérêt (par exemple sur la Place du Commerce se trouve une statue équestre du roi José I). Chaque objet d'intérêt a alors un emplacement dans la base orange, qui détaille son nom et le décrit (en anglais), en ajoutant éventuellement une photo. Notez que si vous voulez adapter le système pour fournir des informations en français sur les lieux, c'est juste cette base de données orange qu'il faudra traduire (et pas tout le site). Enfin, pour savoir où se trouvent tous ces points d'intérêt dans le texte de Pessoa, on stocke la position des caractères où ils apparaissent, dans la base bleue. Il est possible que l'un d'eux apparaisse plusieurs fois dans le texte, comme la Place du Commerce ci-dessous. Si vous modifiez le texte original (par exemple pour le traduire dans une autre langue), c'est donc cette base bleue qu'il faudra modifier.


Pour terminer le projet, c'est la base orange que je dois finir de compléter (actuellement j'en suis à un peu plus du tiers). Toutefois, vous avez déjà accès à toutes les informations déjà entrées, en particulier, tout le texte illustré avec photos ici. Et bien sûr la carte Google Maps qui est l'élément fondamental de ce mashup (MySQL, PHP, Javascript, contactez-moi pour récupérer les sources si vous avez un projet similaire de livre interactif) sur un thème de Pessoa.

Vous pouvez donc partir tranquille pour une semaine, ou plus, de découvertes à Lisbonne en charmante compagnie : celle - au moins - de quelques éléments, imprimés ou enregistrés, extraits du site...

30 juin 2008

Quand Google joue les Ravaillac

H4 sur Google MapsVous avez déjà essayé d'aller au fameux lycée Henri IV en utilisant Google Maps ? Eh bien ne vous fiez surtout pas à la carte fournie, l'adresse est fausse ! Eh oui, une nouvelle erreur des algos d'extraction d'informations de Google, qui en plus nous donne un petit aperçu de leur processus de localisation...

Pour cela, essayons de retracer la provenance de l'erreur. La carte indique que le lycée se trouve rue Hugues Clovis. Tiens tiens, je ne savais pas que Clovis avait un prénom ! En effet, il s'agit en fait de Clovis Hugues (vous ne connaissez pas ? l'article Wikipedia est passionnant), voilà déjà une erreur dans la base de données des noms de rues de Google, où le prénom précède habituellement le nom. Le lycée se trouve bien sûr dans la rue Clovis (que vous pouvez voir, ainsi que les alentours du Panthéon, entièrement vidés de passants dans un plan de Seuls Two). Et voilà la seconde erreur de Google : l'algorithme semble avoir procédé en deux temps, une première étape pour récupérer l'adresse de l'établissement, bien réalisée ; une autre pour faire correspondre cette adresse avec celle de la base, et c'est celle-là qui a échoué. D'ailleurs ce serait intéressant de savoir si des villes contiennent deux rues ayant le même nom (mais éventuellement pas le même prénom), histoire de créer un vrai casse-tête pour Google... et les pauvres postiers de la ville ! Je cherche depuis des mois une base de données des noms de rues en France...

Autre possibilité, il s'agit juste d'un complot des magnoludoviciens employés chez Google. Malheureusement, LinkedIn (inscription nécessaire), qui nous informe de leur connaissance des employeurs antérieurs des salariés de Google ne fournit pas de statistiques sur les lycées et classes prépa d'origine pour accréditer cette thèse...

A très bientôt pour un nouveau billet sur Google Maps, ou plutôt une utilisation dans un mashup que les petits curieux auront déjà trouvé parmi les liens disposés à gauche...

28 mars 2008

Cuisine : polyèdre des ingrédients et enveloppe convexe

Ma cuisine a récemment rejoint ma liste de lieux de découverte et d'émerveillement montpelliérains (après mon labo, ma médiathèque, mon ordinateur, ma salle de concerts et mes cinémas). Pas besoin de tenter d'audacieuses expériences de gastronomie moléculaire pour être fasciné par de simples changements de forme, de couleur et de texture. Que d'émotions à expérimenter la cuisson mutationnelle des choux au Comté, le durcissement de mes fameuses meringues-radiateur, ou une simple montée de blancs en neige au fouet ! Alors rassurez-vous, ce blog ne va pas s'aventurer sur la paillasse d'un chimiste, je ne parlerai ni du pourquoi ni comment ça marche, mais seulement du jusqu'à quel point ça marche ?Rien de plus affirmatif qu'une recette de cuisine : on vous fournit une liste d'ingrédients avec des quantités bien précises, et leur mode d'emploi. Si vous déviez à peine des instructions, aucune garantie, et avec une précision des ingrédients au centigramme, prenez garde que moelleux fondant "merde-j'ai-pu-qu'-deux-oeufs" Marmiton au chocolat ne se transforme en galette compacte.
Heureusement, ce blog va apporter une contribution révolutionnaire pour tous les auteurs de recettes de cuisine : le polyèdre des ingrédients ! Et en bonus une méthode pour le calculer artisanalement à partir d'un corpus de plusieurs recettes du plat que vous voulez, trouvées sur le net par exemple. Illustration du jour : les crêpes ! (oui, je sais, j'aurais dû écrire ce billet il y a 54 jours mais j'ai totalement renoncé à publier à temps mes billets d'actualité...)

Ce qu'il y a de bien dans les crêpes, c'est que ça se fait avec en gros trois ingrédients (plus un pour la poële, qui ne compte pas), ça va donc nous permettre d'obtenir une jolie image en 3D. Des oeufs, de la farine, et du lait, voilà le dénominateur commun aux 19 recettes que j'ai réunies (dans ce fichier tableur) grâce aux sites lejus.com, 1001delices.net, recette-crepe.net, goosto.fr, supertoinette.com, recettes.qc.ca et Marmiton (désolé pour mes amis végétaliens). Mais peut-être va-t-on commencer avec seulement deux ingrédients pour bien comprendre. Disons que l'on a déjà décidé du nombre d'oeufs à utiliser, un seul par exemple. On calcule alors selon toutes les recettes, par une règle de trois, la quantité x de lait et y de farine qu'on doit ajouter (j'ai tout codé en grammes pour simplifier). On peut alors placer sur un graphique cette vingtaine de points de coordonnées (x,y) obtenus :

En bas à gauche se trouvent les recettes avec beaucoup d'oeufs (puisqu'il y a peu de farine et de lait), en haut à droite avec peu d'oeufs. En haut à gauche, plus de farine, en bas à droite, plus de lait. Qu'est-ce donc que cette sorte d'élastique orange qui se resserre autour des points ainsi dessinés ? C'est une sorte de zone de sécurité : tout point de cette zone correspond à un choix d'ingrédients qui devraient fonctionner, puisqu'il se situe "entre" des choix de quantités d'ingrédients qui fonctionnent. En mathématiques, on appelle ça l'enveloppe convexe de l'ensemble de ces points, et il existe des algorithmes variés pour la calculer automatiquement. Alors évidemment, pour ne prendre aucun risque il vaudra mieux cibler bien au milieu de cette enveloppe, vous pouvez d'ailleurs remarquer que 3 recettes présentent les mêmes quantités des trois ingrédients principaux, cela correspond à un point assez central (1/2 litre de lait et 250 grammes de farine pour 3 oeufs).

Autre enseignement de cette enveloppe convexe, on peut en déduire des informations sur la précaution à mesurer chaque ingrédient (la robustesse de la recette en fonction de chaque paramètre en gros). Remarquez combien l'enveloppe convexe est allongée et étroite (elle le serait encore plus si j'avais choisi une échelle verticale et horizontale identiques). Cela signifie que selon les recettes la quantité d'oeufs varie pas mal, mais la proportion lait/farine beaucoup moins. On peut d'ailleurs comparer pour chaque recette ses proportions par rapport aux proportions moyennes :

Et si l'on fait la moyenne de ces pourcentages de variation en valeur absolue, on obtient : 16% pour le rapport lait/farine, 28% pour le rapport farine/oeufs, 31% pour le rapport lait/oeufs. Ainsi le rapport lait/farine varie beaucoup moins que les autres parmi les recettes, il faudra donc être plus méticuleux dans ces proportions que pour le nombre d'oeufs, par rapport à la variation duquel la recette des crêpes est donc plutôt robuste (désolé pour cette structure de phrase alambiquée, mais ça me donne l'occasion de faire un joli accord de pronom relatif).

Vous pouvez aussi vous amuser à représenter sur un même graphique plusieurs desserts ayant les mêmes ingrédients principaux, ici les crêpes, les gaufres et le flan :
Attention tout de même avant de verser votre pâte à crêpes dans le gaufrier ou les ramequins au four, il y a aussi un peu d'huile et de levure dans la préparation à gaufres, et de sucre dans celle du flan.

Pour finir, passons au polyèdre 3D des ingrédients grâce à la très jolie applet Java de Tim Lambert (dont il distribue en plus de code source que j'ai modifié pour y mettre mes points de crêpes), vous pouvez agir avec la souris pour contrôler le polyèdre et le faire bouger :


Sorry, but you need Java to see the animation.

Là encore c'est une enveloppe convexe qui est calculée, en 3 dimensions, sur des points de coordonnées (x,y,z) avec cette fois le nombre d'oeufs en x, la quantité de lait en y, et de farine en z. Je place les points en fixant le nombre d'oeufs à une limite minimum et une limite maximum pour obtenir ce joli tronc de cône, tel que toute coupe perpendiculaire à l'axe x (à nombre d'oeufs constant) me donne bien le polygone d'enveloppe convexe de même forme que ci-dessus. Et pour le rendre vraiment utilisable il faudrait pouvoir laisser entrer à l'utilisateur les valeurs de quantités d'ingrédients qu'il a lui-même utilisées : si le point arrive à l'intérieur du polyèdre, tout va bien, sinon... gare à la recette loupée !

Eh bien il me reste maintenant à attendre le prochain livre de cuisine ou pâtisserie (ou site web) qui accompagnera ses recettes de polygones ou polyèdres d'ingrédients, bizarrement je crois que je devrai faire preuve d'un peu de patience. Encore que... Il y a bien des geeks qui ont programmé un moteur de recherche de recettes de cuisine à partir des ingrédients sur cuistot.org !


Mise à jour en soirée : il me semble naturel que si deux points correspondant à des quantités d'ingrédients fonctionnent pour une recette, alors tout le segment entre ces deux points fait aussi fonctionner la recette, mais certains lecteurs que je ne nommerai pas n'en sont pas convaincus. Tout contrexemple, ou toute théorie alternative quant à la structure, dans l'ensemble à multidimensionnel des ingrédients, des ensembles de points permettant de préparer avec succès un certain plat, sera le bienvenu ! Ce défi du contrexemple est doté d'un prix : une invitation à le déguster (ou bien, si je suis de bonne humeur, à déguster plutôt une des deux extrémités, qui fonctionnent, du segment).

14 mars 2008

Rétroingéniérie de Google Trends (2) : marge d'erreur

J'avais prévenu dans mon dernier billet, aujourd'hui on parle de choses techniques : la marge d'erreur de mon calcul. Rien de terrible non plus, hein, les calculs sont de niveau lycée... Et en fin de billet, quand même quelques éléments de méthodologie pour minimiser l'erreur. Résumé de l'épisode précédent : j'ai choisi une hiérarchie de termes qui apparaissent de plus en plus haut dans Google Trends, pour évaluer par règles de trois successives le niveau du terme le plus recherché par rapport au moins recherché.

Pour mon calcul je m'étais initialement arrangé instinctivement pour que dans chaque paire de termes consécutifs, le premier ait un maximum environ 2 fois plus haut que le précédent. En effet, la marge d'erreur absolue de lecture de la valeur des courbes est d'environ 1 pixel. Sauf que cette erreur absolue ne correspond pas à la même erreur relative pour la courbe du dessus et celle du dessous. Celle du dessus culmine toujours à 113 pixels : 1 pixel d'erreur c'est donc moins de 1%. Mais pour celle du dessous, si elle culmine à 50 pixels, ça fera 2% d'erreur. Si elle ne dépasse jamais 3 pixels, c'est plus de 30% d'erreur ! Alors dans ce cas, doit-on choisir une hiérarchie de courbes qui sont très proches les unes des autres ? Pas nécessairement, puisque dans ce cas effectivement on réduit l'erreur à chaque étape du calcul, pour deux termes consécutifs, mais on augmente le nombre de termes (et donc d'erreurs successives) entre le moins recherché sur Google, et le plus recherché.

Evidemment, ce délicat compromis que je viens d'exprimer avec des mots, je n'ai pas pu m'empêcher de le modéliser mathématiquement. Je vais appeler a le rapport entre la hauteur max de la courbe la plus haute et celle de la plus basse parmi deux consécutives (et donc a>1). Pour simplifier le problème je considère que dans toute mon échelle de termes, ce rapport est constant. Ainsi, idéalement, j'aimerais trouver un mot 1 cherché x fois par jour sur Google, un mot 2 cherché ax fois par jour, un mot 3 cherché a2x fois par jour... un mot n+1 cherché anx fois par jour.

Maintenant, exprimons cette histoire d'erreur à chaque étape entre deux mots consécutifs : au lieu de lire une hauteur de k pour un mot et ak=113 pour le mot suivant, disons que je me trompe d'un pixel, à chaque fois trop haut (c'est une hypothèse pessimiste, en réalité, l'erreur alterne probablement, une fois on lit trop haut, une fois trop bas, et ça compense...). Pour mon calcul, s'il n'y avait pas d'erreur, par la règle de 3 je devrais trouver comme valeur du nombre de recherches du terme le plus haut :

x.113/k = x.ak/k = xa

Problème, je fais 1 pixel d'erreur, et donc quand j'applique la règle de 3 j'obtiens :
x.113/(k+1) = x.113/(113/a+1) = x.113a/(113+a)

Ainsi à chaque étape je multiplie par 113a/(113+a) au lieu de multiplier par a, donc pour le terme le plus recherché, je trouve x(113a/(113+a))n au lieu de xan. Je sous-estime donc la valeur réelle : ainsi pour minimiser l'erreur, je dois maximiser ma valeur calculée, donc trouver la valeur de a>1 qui maximise x(113a/(113+a))n.

Deuxième partie du raisonnement maintenant : le nombre d'étapes, c'est à dire n+1 termes, certes... mais ce n dépend de a. En effet, considérons qu'on s'est fixés le terme le moins recherché (x fois) et le terme le plus recherché (x'=xan fois). Alors x'=xen ln a, d'où ln(x'/x)=n ln a et donc n=ln(x'/x)/ln a.

Injectons ça dans la formule du haut, on a sous-estimé tous les termes de la hiérarchie, et le plus haut a été évalué à :
x(113a/(113+a))ln(x'/x)/ln a

expression qu'on doit donc maximiser par rapport à a. Commençons par une analyse de cette fonction aux limites (mmmmh, les bons souvenirs de première !). En 1+, l'intérieur de la parenthèse est inférieur à 1, et l'exposant tend vers +∞, donc l'expression tend vers 0. En +∞, l'exposant tend vers 0, et l'intérieur de la parenthèse vers 113, le tout tend donc vers 1. Ca tombe bien, c'est assez intuitif, ça exprime mathématiquement le dilemme que j'exprimais au second paragraphe... Bon bref, tout ceci ne nous dit pas où se situe son maximum. Et là ni Ahmed le Physicien, ni Julian le Mathématicien, armés respectivement de Mathematica et Maple, ne me fournissent une belle formule, il reste quelques méchants RacineDe(...) dans l'expression.

Pas grave, on va se contenter d'en trouver une approximation à l'aide d'un tableur. Le fichier est ici, et voici la courbe obtenue pour un rapport de 20 000 entre le mot le moins cherché et le plus cherché (c'est de l'ordre de grandeur de celui que j'ai dans ma hiérarchie de termes) :
Ainsi l'erreur minimale est atteinte pour une valeur de a d'environ 2,75 (soit une hauteur maximale de 41 pixels pour la courbe du bas). Elle est alors d'un peu moins de 25%. C'est certes conséquent, mais rappelez-vous qu'on a choisi le scénario où les erreurs se cumulaient par sous-estimation systématique. Alors il me reste cette question théorique intéressante : peut-on calculer l'espérance de l'erreur sur la valeur calculée du terme le plus fréquemment cherché, si à chaque étape l'erreur oscille aléatoirement à chaque mesure entre -1 et +1 pixel ?

On remarque aussi que la courbe croît plus vite à gauche qu'à droite : comme suggéré en vert sur le graphique, il semble qu'il vaudrait mieux choisir une hiérarchie telle que les nombres de recherches des mots de référence consécutifs ont un rapport de 4, plutôt qu'un rapport de 2.

Maintenant, voici quelques autres moyens d'améliorer la précision du calcul. Tout d'abord la précision de la mesure : au lieu de simplement mesurer le maximum où on sait qu'il y a une erreur inévitable, on peut tenter de le calculer à partir de mesures qui contiennent moins d'erreur. Je reprends l'exemple du billet précédent avec cat, dog, et phone:
Comparaison cat ~ dog (courbe 1) : 65 px ~ 113 px
Comparaison dog ~ phone (courbe 2) : 69 px ~ 113 px

Sauf qu'au lieu de mesurer le maximum de dog, on peut l'évaluer de la façon suivante faire la moyenne des valeurs sur la courbe 1 de dog, et la moyenne des valeurs sur la courbe 2 de dog. On en déduit alors un changement d'échelle tout à fait précis. On sait alors que le maximum de dog sur la courbe 1 est atteint à 113 pixels exactement, puisque ça semble être la valeur de référence dans les dessins Google Trends. On multiplie donc cette valeur par le changement d'échelle, et le tour est joué !

Alors maintenant autre problème : comment obtenir la moyenne des valeurs d'une courbe Google Trends ? Avec le CaptuCourbe, évidemment ! Alors là aussi, attention : il arrive que certaines valeurs ne soient pas récupérées par le CaptuCourbe (problème de couleur, par exemple la courbe est coupée par une ligne verticale noire accrochée à une bulle de légende Google News). Il s'agit donc de prendre garde à effectuer la moyenne des deux courbes sur des valeurs bien récupérées !

Autre chose, le CaptuCourbe, par sa méthode de capture, n'est pas très précis puisqu'il récupère tous les pixels de la couleur de la courbe, et en fait la moyenne. J'ai donc développé une nouvelle version, bientôt en ligne, qui permet de récupérer non pas la moyenne mais le max des hauteurs des pixels d'une certaine couleur. C'est cette fonction que j'utilise dans ma méthode pour calculer le max, en revanche c'est toujours celle de la moyenne que j'utilise pour calculer les moyennes des courbes. Ce petit détail n'en est pas un, comme le prouve par exemple la courbe Google Trends de Britney Spears, que j'ai capturée par la méthode du max, et de la moyenne :
Une erreur de 20% dans la mesure de plusieurs pics en utilisant la moyenne des pixels de même couleur, vraiment pas négligeable !

Pour terminer cette série de billets sur l'échelle verticale de Google Trends, il me reste encore quelques questions. Tout d'abord préciser la "valeur du foo". Grâce à des commentaires pertinents sur mon premier billet, je n'en suis pas loin. Je pourrai alors tenter d'automatiser toute la chaîne de récupération de courbes, mesures, et calculs, décrite dans le premier billet, pour fournir un programme qui précise sur une courbe Google Trends à combien de visiteurs correspondent les pics. Ceci dit je ne promets rien, ça vaudrait peut-être le coup d'attendre si l'API que Google prépare fournira ces données.

L'estimation du nombre de recherches pour un mot clé est en tout cas un défi intéressant, j'ai découvert le logiciel gratuit GTrends Made Easy qui propose de telles estimations par une méthode similaire à celle que j'ai présentée ici (en fait il ne fait qu'une seule règle de trois, en comparant le terme cherché avec un mot dont il connaît le nombre de recherches Google par un bon placement Google sur ce mot, et donc se limite aux mots qui apparaissent entre 5 et 50000 fois par jour, c'est à dire inférieurs à 100 foo), qui avait été décrite sur cette vidéo YouTube. Dommage que leurs auteurs n'aient pas poussé leur idée plus loin en enchaînant les changements d'échelle au lieu de se limiter à un.

10 mars 2008

Rétroingéniérie de Google Trends (1)

En janvier, j'avais proposé un utilitaire, le CaptuCourbe, pour extraire les valeurs d'une courbe, avec application possible à Google Trends. Depuis, l'outil s'est enrichi des couleurs par défaut des courbes Google, mais il manque toujours une donnée importante : quelle échelle verticale choisir ? Google prend en effet la précaution de cacher aux utilisateurs l'échelle utilisée. De plus comme les zooms ne sont pas permis, il n'est pas possible d'effectuer directement des comparaisons de courbes à différents ordres de grandeur. La hauteur maximum de courbe est en effet de 113 pixels, donc vous ne pouvez pas distinguer si un terme a été cherché 1000 fois, ou 10 000 fois moins qu'un autre.

Voici donc une hiérarchie de mots anglais, dans un ordre décroissant de recherches Google d'après Google Trends : of, free, sex, car, dog, gun, muscle, knife, torn, filming, separating, fooling.

On peut les utiliser pour créer une échelle pour Google Trends. Attention, elle ne sera pas précise (j'y reviendrai), mais permettra tout de même d'obtenir des valeurs quantitatives. Pour l'établir, j'ai procédé en recherchant conjointement dans Google Trends deux termes successifs dans la liste ci-dessus. Cela me permet d'évaluer le changement d'échelle pour chaque paire de successifs, en comptant la hauteur en pixel du maximum de chaque courbe. Une image est plus parlante que mes explications :

Comme je fais ça pour chaque paire de mots successifs, j'obtiens des valeurs de ce genre :
Comparaison cat ~ dog : 65 px ~ 113 px
Comparaison dog ~ phone : 69 px ~ 113 px
ce qui me permet de déduire en utilisant habilement des règles de trois que :
cat ~ dog ~ phone : 65 ~ 113 ~ 113*113/69=185,06
si l'on se base sur l'échelle de la première ligne ou bien :
cat ~ dog ~ phone : 69*65/113=39,69 ~ 69 ~ 113
si l'on se base sur l'échelle de la seconde.

Bref, j'ai reproduit ce raisonnement sur mes 11 mots pour obtenir les valeurs de maximum suivantes, en fixant la référence à fooling, et en appelant donc cette nouvelle unité le foo :

Attention, ce qui est à retenir, ce n'est pas seulement ces diverses valeurs, mais aussi la position du maximum qui atteint chaque valeur, c'est pourquoi en cliquant sur chaque mot ci-dessus vous accédez à une capture de la courbe vous permettant de localiser le max. En effet si vous voulez déterminer la valeur d'un pic pour un nouveau mot, soit vous avez compris le principe de la règle de 3 et vous amusez à calculer vous-même le max, soit vous indiquez simplement au CaptuCourbe l'échelle verticale en choisissant le max de la courbe de référence juste au-dessus du pic :
Par exemple ici environ 800 foo pour Manaudou en décembre 2007, à comparer avec les 240 foo du pic Bruni, ou les 470 foo atteints par Obama, les 1000 foo de Britney et les 3200 foo du tsunami de 2004 ou les 5700 foo de... Janet Jackson après le Superbowl 2004 !

Après l'annonce un peu commerciale de cette jolie petite échelle, l'honnêteté du scientifique m'oblige à quelques remarques :
- la marge d'erreur lors du calcul par enchaînement de règles de 3 successives : c'est le sujet de mon prochain billet et ce sera un peu technique (yaura même une jolie équation que ni Maple ni Mathematica n'arrivent à simplifier)... retenez que les nombres proposés ici doivent être valides à 10% près. Je me suis retenu de préciser plus de décimales, me souvenant de la sage annotation d'une prof de physique de lycée (au nom écorché par les sauvages utilisateurs de Note2Be) sur une de mes copies : "précision illusoire".
- non content de ne pas fournir l'échelle verticale de ses courbes, Google se permet aussi de les modifier fortement d'un jour à l'autre (c'est peut-être simplement un problème de discrétisation de la courbe réalisée "à la hache" sans se poser de question, mais dans ce cas étrange que les courbes de news en dessous soient identiques), comme le montre ce gif animé (créé avec le simplissime UnFreez) :
Attention donc si vous réutilisez un des mots ci-dessus comme référence, ne vous contentez pas de retenir la valeur du pic, ni même son positionnement, mais vérifiez en tentant de superposer la courbe de référence fournie sur ce billet, que la courbe de référence de l'image que vous voulez utiliser est bien à la même échelle, et tentez de corriger si ce n'est pas le cas.
- l'échelle reste relative, et pour en obtenir une absolue il faudrait savoir à combien de recherches Google exactement correspond 1 foo ? Toute idée de méthodologie pour connaître cette valeur est la bienvenue, pour l'instant la seule solution que j'aurais serait de créer un buzz artificiel de recherches Google, par un programme qui, un certain jour, à une certaine heure, irait rechercher un terme sur Google, et visiter une "page compteur" qui recenserait ainsi le nombre total de recherches Google sur ce terme. Encore faudrait-il avoir assez de volontaires qui accepteraient d'installer le programme, et je ne suis pas Vijay Pande... En attendant je peux remarquer que la courbe pour M6 direct a atteint 0,5 foo en février, alors que mon blog recevait environ 500 visites hebdomadaires pour ces mots-clé (pour lesquels je suis bien positionné). Bref, pour qu'un pic soit mentionné par Google Trends il faudrait cibler sur plus d'un millier de participants...


Ajout du 10/03 : je me rends compte que j'aurais peut-être dû mentionner, à propos de cette unité "foo", que le nombre de recherches auquel elle correspond est variable avec le temps. En effet les courbes Google Trends représentent une proportion des recherches sur certains termes par rapport à toutes les recherches Google. Ceci explique d'ailleurs la valeur impressionnante en foo de "Jackson". Par rapport au nombre total d'utilisateurs de Google en 2004 effectivement le buzz a été énorme, mais difficile de comparer de façon absolue en nombre de recherches 5700 foo de 2004 avec 800 foo de 2008... à moins que là aussi on puisse bricoler quelque chose ? Récupérer l'évolution du nombre de visiteurs ou de recherches Google depuis 2004, utiliser les courbes Alexa... à voir.


This post is translated to English: Reverse engineering Google Trends (1).

Fichiers source : les courbes Google Trends de chaque mot sont liées ci-dessus, voilà le fichier tableur qui a servi au calcul des valeurs en foo (attention c'est un fouillis monstre, plus de détails dans le prochain billet).

2 mars 2008

Suivi en direct de la naissance d'un buzz

Je rêve depuis quelques articles de pouvoir suivre en direct la naissance d'un buzz sur internet, et évaluer la performance des divers outils dédiés à leur analyse et détection. J'aurais préféré un sujet plus léger, mais c'est la tragédie de la Northern Illinois University qui m'en a donné l'occasion il y a deux semaines.

L'identité du tireur n'était pas été dévoilée le soir du drame. Mais dans la nuit (10 heures après), le Chicago Tribune fournissait sur son site internet assez d'éléments pour lever l'anonymat, tout en précisant de façon plutôt hypocrite :

The Tribune is not naming the gunman because police have not officially completed the identification of his body.
Une simple recherche d'articles co-signés par Jim Thomas et avec les mots clés "self-injury" et "prison" permettait d'identifier le suspect : Steve Kazmierczak. A 8h10, un visiteur de la Wikipedia modifie l'article concernant la fusillade pour y indiquer ce nom. Une trentaine de minutes plus tard, premier article de blog qui le cite, son auteur le met à jour plusieurs fois pour y ajouter d'autres informations trouvées sur internet. Le nom apparaît alors sur un blog et un forum, et à 10h33, est cité par le Daily Mail (l'article a été mis à jour depuis). Les internautes commencent alors à le soumettre aux moteurs de recherche, et il se retrouve en tête de la liste des "hot trends" de Google. Il est donc immédiatement repris par quelques splogs, qui semblent faire leur beurre en citant les tendances du moment éventuellement accompagnées de quelques extraits de pages web les concernant, récupérées automatiquement. A 14h42, l'agence Associated Press annonce que la police a rendu public le nom de Steven Kazmierczak. Mon suivi du buzz s'est arrêté là, puisque les articles ou pages web sur le sujet ont alors utilisé les prénoms "Steve", "Steven" ou "Stephen".

Quoi qu'il en soit, suivre les premières heures m'a permis de noter la réactivité des divers moteurs de recherche et outils de suivi de la blogosphère ou plus généralement du web. Comme je l'ai mentionné ci-dessus, c'est la Wikipedia qui a dévoilé l'identité en premier. Une occasion de plus d'en noter les possibles dérives, mais aussi de s'incliner devant la puissance de cette formidable machine à scoops. C'est dans l'encyclopédie que j'avais trouvé le premier compte-rendu clair de l'affaire Kerviel, après plusieurs jours d'évocation de "fraude" sans plus de détails dans les articles de presse que j'avais parcourus. On peut aussi s'y informer sur les décès de personnalités, en utilisant l'outil Wikirage qui par exemple montrait en tête le 13 février : Henri Salvador, Imad Mougniyah, et Badri Patarkatsishvili.

A propos des outils de suivi de la blogosphère, on peut noter que BlogPulse n'est pas très réactif. Evidemment Google Blogsearch est le premier à détecter le premier billet de blog sur le sujet, hébergé par... Blogspot. Dans l'ensemble il paraît toutefois faire jeu égal avec Technorati, dont la courbe un peu plus élevée à partir de 14h s'explique par quelques splogs non répertoriés (de façon volontaire ou non ?) par Google.

La réaction des moteurs de recherche sur la requête "Steve Kazmierczak" est aussi assez intéressante. Le buzz leur échappe complètement pendant ces premières heures... à part Google. Pour ce dernier, même si ça n'est pas clair sur le graphique, le nombre de résultats pertinents augmente bien, passant de 61 à 10h30 à 68 à 16h (les nouvelles pages proposées en résultat sont effectivement liées à l'affaire). L'explosion du nombre de résultats sans filtre de pertinence est en revanche tout à fait étonnant, et renforce le mystère sur les "nombres Google" : le nombre de pages pour cette requête a-t-il réellement doublé en 5h, ou bien n'est-ce qu'une approximation douteuse ?

Mais le plus important, c'est peut-être les courbes de Google Trends qui nous l'apprennent. Avant que la presse ose dévoiler le nom du tireur, avant que Wikipedia l'apprenne, Google était déjà au courant, avec les premières recherches sur ce nom moins de 3h après les faits. Leur domination sur le marché des moteurs de recherche leur donne aussi un accès direct à l'information, et leurs outils sont apparemment prêts pour l'exploiter au maximum. Avec la géolocalisation notamment, qui permet de cibler la provenance des requêtes et donc d'un éventuel buzz local. Alors à quand une agence de presse ou un tabloid Google, qui dévoilera ses scoops et rumeurs des heures avant le DailyMail ? Et qui a aujourd'hui accès aux données brutes de Google Trends en direct ? Sur le site, actuellement, les courbes sont actualisées au moins après 48h, ne sont pas fournies pour les termes pas assez recherchés, l'échelle horizontale n'est pas tout à fait précisée (j'interprète, peut-être à tort, que le point au-dessus de 4AM représente le nombre de recherches de 3AM à 4AM), sans parler de l'échelle verticale inexistante ! Bientôt une API Google Trends permettra peut-être d'accéder à ces données, et de rendre aux internautes la "connaissance" acquise grâce à eux...


This post is translated to English: The birth of a buzz, live.
Données brutes ayant servi à la réalisation des graphiques (fichier tableur OpenOffice)