iNZight : le tapis volant néo-zélandais de la statistique

Cet étonnant outil libre de l’Université d’Auckland répondra à nombre de vos besoins de manipulation de fichiers CSV et, bien au-delà, d’analyse statistique exploratoire – que vous soyez expert ou novice. Programme autonome, il s’installe sous Windows, sur Mac ou en environnement Linux. iNZight mobilise toute la puissance du langage R, mais de façon assistée, visuelle et progressive. 

Je l’ai découvert grâce à Alberto Cairo, un des grands auteurs du champ de la datavisualisation, qui le mentionne dans sa boîte à outils favoris.

Pour un européen, le premier choc émotionnel positif se produit à l’ouverture d’un CSV ordinaire : le délimiteur ; ne pose aucun problème et les colonnes sont proprement typées par défaut, même les codes communes Insee ! Vous pouvez si besoin ajuster le type avant de confirmer le chargement.

INZight fait bien mieux : il agrège, transpose dans les deux sens, gère les jointures entre fichiers différents, permet de créer de nouvelles colonnes ou de ne conserver que les lignes et colonnes dont on a besoin. Chaque nouveau traitement crée une table distincte de l’original, il est donc aisé de revenir en arrière et choisir une nouvelle trajectoire.

Last but not least, iNZight facilite l’analyse exploratoire de vos données par toute une gamme de graphiques automatiquement construits en fonction du type de vos colonnes. Il va même jusqu’à désaisonnaliser des séries temporelles, construire une analyse factorielle visuelle en quelques clics, produire des cartes thématiques et réaliser des tests statistiques.

Ses concepteurs, soutenus par le ministère de l’Éducation néo-zélandais, en ont promu l’usage dans les lycées du pays, comme outil de familiarisation avec les concepts de la statistique.

Chris Wild : "I have a dream"

Responsable du département de statistique à l’Université d’Auckland, Chris Wild, à l’origine d’iNZight, a conçu ce rêve un peu fou : « I have a dream » écrit-il dans un article pour l’International Conference on Teaching Statistics. « Je fais ce rêve d’une multitude d’étudiants fascinés par les nouveaux horizons de la donnée. Je les imagine sur leurs tapis magiques survolant sans effort ces paysages, en explorant les coins et recoins à la recherche de trésors cachés. »

Chris Wild serait-il inspiré par Baudelaire, qui dans Élévation envie celui « qui plane sur la vie et comprend sans effort le langage des fleurs et des choses muettes » ?

Il a en tout cas une longue pratique de la recherche et de l’enseignement de la statistique, et il connait bien R, où s’illustrent deux de ses compatriotes (Ross Ihaka, co-créateur du langage, Hadley Wickham, créateur de tidyverse). Parce qu’il mesure ce que le passage obligé par le codage et la rédaction de longs scripts peut avoir de dissuasif, notamment pour ceux qui ne deviendront pas statisticiens à plein temps, il a imaginé un outil simple, intuitif (point-and-click), vous amenant sans en avoir l’air à manier des concepts statistiques puissants. 

Voyons concrètement, au travers de deux exemples, ce qu’iNZight peut faire pour vous.

Comparer deux territoires
à partir de données très détaillées

Mon objectif dans cette première démonstration est de comparer les populations des aires d’attraction de Toulouse et Bordeaux sur longue période. Ma source est la base Insee historique des populations communales de 1876 à 2019. Je l’ouvre dans iNZight par lecture d’un fichier CSV. Il est délimité à la française (avec le ;), iNZight a bien reconnu les codes commune ou département, sans les altérer. Je précise simplement que le code REG est de type caractère, car il ne pouvait pas le deviner :

Ce jeu comprend une trentaine de colonnes additives (population par année), dont le type numérique est correctement identifié.

Il est possible d’afficher la structure de la table et quelques informations de synthèse sur chaque colonne. Avec un typage précis, iNZight est à même de proposer les opérations statistiques adaptées.

Bénéficiant de données communales, enrichies d’un code région (REG), je suis tenté de demander la synthèse de tout cela par région, ce qu’on appelle aussi une agrégation. Le panneau correspondant est rapide à renseigner :

Et en un clin d’œil, je récupère ces totaux régionaux :

Gardant à l’esprit mon objectif de créer une courbe d’évolution temporelle, comparant deux territoires (Toulouse et Bordeaux), je comprends vite que cette structure “large” ne sera pas pratique, avec toutes ces colonnes numériques. Elles mentionnent le millésime mais de façon peu maniable. J’ai donc envie de transposer ma table d’origine en dégageant une nouvelle colonne, porteuse du millésime, et concentrant toute l’information de population dans une autre colonne dédiée. 

Il s’agit de réaliser la transformation classique d’un format large vers un format long. En anglais, cela s’exprime par toute une variété de verbes : pivot_longer, unpivot, wide to long, gather… iNZight retient stack (empiler). Je reviens à la table communale de départ, qui est restée en mémoire, et précise toute l’étendue des colonnes numériques à transposer : 

Ce qui m’amène à cette nouvelle table de six colonnes et plus d’un million de lignes. Je pourrais renommer les deux dernières variables à ma guise. Il me faut surtout constituer une nouvelle colonne avec une année proprement constituée, information à extraire et à consolider à partir de stack.variable :

Cette colonne présente un contenu hétérogène. Différents préfixes s’y retrouvent : PMUN, PSDC, PTOT. Je vois même un PTOT36 voisiner avec un PTOT1931 ! iNZight me permettrait de procéder pas à pas en “séparant” ce contenu en morceaux. 

Mais comme il est assis sur le langage R, je peux directement créer une nouvelle colonne YEAR avec la formule de remplacement suivante :

str_replace_all(stack.variable, c("PMUN" = "20", "PSDC" = "19", "PTOT36" = "1936", 
"PTOT54" = "1954", "PTOT" = "")) 

Allez, c’est la seule fois où j’entre une instruction, juste pour gagner du temps, pallier l’hétérogénéité des règles de nommage de mon fichier d’origine, et vous montrer la complémentarité de cet outil assisté et R :

Après renommage, suppression de colonne inutile, un petit tri (tout cela réalisé par menus), j’obtiens cette jolie structure :

Toujours par quelques clics dans des menus, je filtre les seules communes de Bordeaux et Toulouse : 

Pour en faire un graphique d’évolution temporelle avec Datawrapper (ou Flourish), je dois dégager deux colonnes de population, l’une pour Toulouse, l’autre pour Bordeaux. Il s’agit d’une transposition de long en large (pivot_wider), l’inverse de la précédente, un tableau croisé en définitive. iNZight sait transposer dans les deux sens :

À partir de là, je passe dans mon outil graphique par un export/import CSV (ou bientôt sans doute via un simple copier/coller si j’arrive à convaincre nos amis néo-zélandais), et j’obtiens un visuel de qualité professionnelle :

Alors, j’entends d’ici les pros de la datascience, les spécialistes de R : “ok, c’est simple, c’est à la portée d’un lycéen, mais ce n’est pas très reproductible tout cela, si maintenant je veux comparer Marseille et Lyon, hein ?”  

A cela, nos brillants concepteurs néo-zélandais répondraient : en effet, c’est à la portée d’un lycéen, et c’est déjà un énorme pari réussi. Mais vous pouvez aussi avec iNZight récupérer tout le code R généré en coulisses, y transformer quelques constantes en variables, et vous voilà avec un script optimisable et reproductible :

Ce n’est pas tout, il me reste à vous montrer une autre fonctionnalité super-pratique, la jointure ! Rappelez-vous, ce ne sont pas les seules communes de Bordeaux et Toulouse que je veux comparer, mais leur aire d’attraction en 2020. J’ouvre pour récupérer ce zonage une table de passage entre communes et “Aires d’attraction des villes (AAV2020)” :

Je vais joindre mes données communales en format long et cette table de passage, il suffit de préciser les colonnes de jointure, CODGEO à gauche, com2020 à droite :

Il ne reste plus qu’à agréger tout cela par année et aire d’attraction (YEAR et aav2020) :

Puis filtrer sur les AAV de Toulouse et Bordeaux (codes 005 et 006), et l’on arrive très vite à ce dernier graphique, un peu moins vexant pour les Bordelais – nous-autres Toulousains, on aime bien les taquiner :

Un bref aperçu des capacités exploratoires d'iNZight

Bien plus qu’un utilitaire de travail et de mise en forme de jeux de données, iNZight se veut un outil d’analyse exploratoire. Il visualise la distribution de chaque variable (histogrammes, densités), les compare deux à deux (pair plots). Il permet d’élaborer des plans de sondage, il modélise (régressions), il teste des hypothèses de différences significatives d’un groupe à l’autre, il synthétise (analyses factorielles, réduction dimensionnelle…) La cartographie thématique n’est pas oubliée, et tout fonds de carte de format GeoJSON peut être mobilisé.

Les séries temporelles font l’objet d’un module dédié, que j’ai mis en œuvre sur une série longue, mensuelle, celle des mariages en France depuis 1946. De multiples procédures de désaisonnalisation sont proposées. 

Ce graphique par défaut montre déjà plutôt bien comment la tradition évitant le “mois de Marie” (peu de mariages en mai, anticipation en mars et avril) s’est effacée dans les années 1970, et converge vers une forme plus simple, privilégiant les mois d’été.

En conclusion

iNZight a été imaginé (en 2010) et développé par des statisticiens de haut niveau, chercheurs et aussi enseignants, conscients des défis pédagogiques que représente l’enseignement des méthodes statistiques, et aussi leur imprégnation à long terme, bien après les années d’études. 

La pratique d’iNZight ne s’oppose pas à celle de langages comme R : l’outil en facilite l’apprentissage, pour ceux qui souhaitent faire cet investissement, il soulage même la charge cognitive de praticiens réguliers de R comme moi. À même de toucher un plus large public, il contribuera certainement à ouvrir les nouveaux horizons d’exploration de la donnée dont rêve Chris Wild.

Riche de projets et d’extensions à venir, iNZight est un projet vivant, soutenu par les instituts australien et néo-zélandais de statistique. N’hésitez pas à le tester, le faire connaitre et discuter avec ses concepteurs (Chris, Tom Elliott, Andrew Sporle et quelques autres), dont j’ai beaucoup apprécié l’écoute et l’ouverture en préparant cet article.

Pour aller plus loin

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.