fbpx

Celina Lee : La DataScience Pour le Monde, par les Africains

Celina Lee : La DataScience Pour le Monde, par les Africains

On peut difficilement parler de datascience en Afrique sans évoquer Zindi-Africa. Depuis sa création, la star-up Sud Africaine est devenue une référence pour nombre de data-scientistes du continent. C’est donc tout naturellement que nous publions l’entretien Celina Lee, fondatrice de Zindi avait accordée à notre ancienne collaboratrice Aminata Mbodj. Elle revient sur la création de la plateforme, sa vision et les perspectives qu’offrent la data-science et l’intelligence artificielle en Afrique.

Qu’est-ce qui pousse une personne originaire de San Francisco à choisir de faire la promotion de la science des données en Afrique ?

Mon premier diplôme était en mathématiques et en informatique, donc j’ai toujours été très intéressée par la puissance des données. Très tôt dans ma carrière, je me suis lancée dans le développement international. J’ai travaillé dans le secteur à but non lucratif pendant de nombreuses années : sur des questions allant de la santé publique à l’inclusion financière, en passant par le genre. Mais j’ai toujours eu cette vision de la façon dont nous pourrions mieux utiliser les données pour faire avancer le travail que nous faisions. Et pour prendre de meilleures décisions afin d’accroître notre impact.

Comment pouvons-nous utiliser l’apprentissage automatique et la science des données pour faire progresser et améliorer la vie de chacun ? Je suis arrivée en Afrique du Sud pour un emploi dans une ONG, mais très vite, je suis entrée en contact avec mes cofondateurs, Megan Yates et Ekow Duker. Ils dirigeaient une société de conseil en sciences des données. À l’époque, ils souhaitaient  un  “Kaggle” pour l’Afrique.  Qui est la façon la plus simple de décrire l’origine de Zindi. Mais je pense que Zindi est beaucoup plus que cela !

Celina Lee SEO de Zindi

Celina Lee SEO de Zindi avec une partie du staff © DR

Ce qui compte, avant tout, est sa mission sociale, qui est de développer l’écosystème des sciences des données en Afrique pour faire de l’I.A. quelque chose d’accessible à tous.

Qu’est-ce qui distingue Zindi des autres plateformes ?

Je pense que la première chose qui nous différencie des autres plateformes de compétition est ce que nous essayons vraiment d’accomplir. Ce qui compte, avant tout, est sa mission sociale, qui est de développer l’écosystème des sciences des données en Afrique pour faire de l’I.A. quelque chose d’accessible à tous. Nous voulions donc créer un espace pour que les organisations et les entreprises africaines, qui génèrent des quantités massives de données, et qui n’ont pas les ressources ou peut-être même les compétences internes nécessaires pour tirer parti puissent désormais avoir accès aux ressources et aux solutions dont elles ont besoin.

Et puis aussi, bien sûr, il s’agissait de créer un espace pour les data scientists africains. Pour que ce réservoir de talents puisse continuer à développer leurs compétences sur des problèmes réels et correspondant à leur quotidien. Développer leurs portefeuilles de projets et aussi établir des liens entre eux, ainsi qu’avec des organisations qui ont besoin de personnes comme elles. C’est donc ce que Zindi essaie vraiment de faire. Et je pense que c’est ce qui nous rend différents. Et c’est vraiment au cœur du succès que nous avons connu jusqu’à présent.

Celina Lee SEO de Zindi

David Davis ambassadeur Zindi en Tanzani   © DR

Donc, vous diriez que c’est un changement de mentalité ?

Je pense que ce qui est passionnant avec Zindi, c’est que ce que nous faisons vraiment : mettre en valeur les talents qui sont disponibles sur le marché du travail.Et, vous savez, lorsqu’une entreprise possède des données ; avant qu’elle ne se dise, “oh mon Dieu, je dois protéger mes données, car elles sont très précieuses.” Ça ne leur sert pas grand chose.

Cependant, quand ils viennent à Zindi, ils peuvent se dire, “ok, il y a des milliers de data scientists qui peuvent me développer un modèle de prédiction ou encore de computer vision ainsi qu’une panoplie de systèmes afin de résoudre tous mes différents types de problèmes de manière très concrète. OK, c’est quelque chose que je veux.” Ce n’est donc pas nécessairement un changement de mentalité, mais c’est qu’ils sont capables de voir de manière tangible, que ces compétences leurs sont accessibles.

Donc, vous diriez que c’est un changement de mentalité ?

Je pense que ce qui est passionnant avec Zindi, c’est que ce que nous faisons vraiment : mettre en valeur les talents qui sont disponibles sur le marché du travail.Et, vous savez, lorsqu’une entreprise possède des données ; avant qu’elle ne se dise, “oh mon Dieu, je dois protéger mes données, car elles sont très précieuses.” Ça ne leur sert pas grand chose.

Cependant, quand ils viennent à Zindi, ils peuvent se dire, “ok, il y a des milliers de data scientists qui peuvent me développer un modèle de prédiction ou encore de computer vision ainsi qu’une panoplie de systèmes afin de résoudre tous mes différents types de problèmes de manière très concrète. OK, c’est quelque chose que je veux.” Ce n’est donc pas nécessairement un changement de mentalité, mais c’est qu’ils sont capables de voir de manière tangible, que ces compétences leurs sont accessibles.

La première chose à faire est de se jeter à l’eau : télécharger un ensemble de données et jouer avec

Celina Lee SEO de Zindi

 © DR

Quels conseils donneriez vous aux jeunes data scientists ?

Le plus important est de croire en soi, d’avoir suffisamment confiance en soi, d’essayer simplement de faire quelque chose. Je sais que beaucoup de nouveaux data scientists peuvent se sentir intimidés. Mais je pense que la première chose à faire est de choisir un concours sur un sujet qui est important pour vous, qui peut vous enthousiasmer et vous passionner, de télécharger cet ensemble de données et de commencer tout simplement à explorer les données.

Même si vous n’en arrivez pas au point où vous faites une soumission sur le classement, en jouant simplement avec ces données et en essayant de répondre aux questions par vous-même avec les données, vous franchirez une étape importante. J’ai fait partie d’un autre panel où nous avons un peu parlé du syndrome de l’imposteur. Et je pense que les femmes en particulier, dans cet espace, en souffrent beaucoup.

C’est quelque chose où nous ne devons pas nous laisser prendre. Nous devons nous approprier ce que nous savons et avoir la confiance nécessaire pour continuer à avancer pas à pas et poursuivre notre voyage. Chacun d’entre nous a son propre parcours personnel et nous devons croire suffisamment en nous pour nous permettre de continuer ce voyage pas à pas. Ce processus peut être lent ou rapide ; et ainsi va la vie. Mais je pense que ce qui est important dans ce que fait Zindi, et ce que nous voulions faire, c’est de rendre cette expérience accessible à tous. La première chose à faire est donc de se jeter à l’eau : télécharger un ensemble de données et jouer avec.

Graph de barres animées avec Plotly.Graph

Graph de barres animées avec Plotly.Graph

Dans le lot des data-visualisations à vocation narrative, les graphiques à barres animées sont souvent très recherchés aussi bien pour leur interactivité que pour leur côté ludique et esthétique. De nombreuses librairies ou applications Java Script en ligne du type Flourish les rendent facilement réalisables et intégrables sur site web sans avoir besoin d’écrire la moindre ligne de code. Du côté des librairies  graphiques python, c’est plus compliqué. La plupart sont très performantes pour accompagner l’analyse de données mais en matière de narration et elles sont souvent limitées et pas toujours très attractives.   

 Plotly.py est, à mon sens, la librairie graphique python qui peut se rapprocher le plus de ce qu’il on peut réaliser en java script. Le module plotly.express permet de créer facilement des graphiques courants en une seule fonction. L’ensemble  Plotly Graph_object fournit un important panel de composants pour réaliser des graphiques pointus de façon intuitive. Et le Framework Plotly Dash permet de les intégrer à des applications et de les déployer sur le web. En gros, Plotly peut être le terrain de jeu privilégié pour les adeptes de graphiques et de data-visualisations 100% Python.

Dans cet article nous utiliserons Plotly Graph Objects  pour réaliser le graphique à barres animées ci-dessous  afin de visualiser et de comparer la progression du Top 10 des équipes africaines de football au classement Caf/FIFA depuis sa création en 1992 jusqu’à la dernière actualisation de mars 2022. Nous verrons ensuite comment nous pouvons l’intégrer sur le post en nous servant d’une hébergement sur Github.  

 

 Préparation des données

Nous utilisons deux datasets collectés sur le site de la FIFA et sur Kaggle. Ils sont disponibles ici

Le premier rassemble des données sur l’historique du classement FIFA des équipes de la CAF. Le second est de données des drapeaux de chaque pays sous forme emojis.

 

import pandas as pd

#Caf Dataframe
CafRanking = pd.read_csv('df_afrika_rank.csv')

#Emojis dataFrame

Emoji = pd.read_csv('emojiflags.csv')

#print(CafRanking)
#print(Emoji)

 

 

 

 

#merge datasets 
CafRanking = pd.merge(CafRanking, Emoji[['country', 'flag']], left_on = 'country_team', right_on='country', how = 'inner') 


#drop column 
CafRanking = CafRanking.drop(columns=['country'])

 

Attribution des couleurs

Nous devons assigner une couleur unique à chaque pays. Pour ce faire, nous créons une fonction qui accepte en entrée notre dataframe et la série à laquelle nous attribuons un code couleur “hex” généré de façon aléatoire avec random.randint. La fonction renvoie notre dataframe avec une nouvelle colonne “code_color” contenant les couleurs uniques à chaque pays.

                       

Préparation du Frame

 Pour réaliser une Bar Chart Race nous devons transformer notre dataframe et créer une séquence d’images afin qu’à chaque date corresponde un dataframe. Ici, nous avons 319 occurrences allant du 1992-12-31 au 2022-03-11.   Il y a plusieurs façons de configurer ses frames. Nous avons choisit de créer un dictionnaire “x_frame”  à partir de 2 listes :   

  • “list_dates” : la liste de toutes nos objets dates.
  • “dict_keys” : la liste de nos clés sur la longueur de “list_dates”.
  • On utilise la fonction “zip” pour faire itérer les deux listes.
  • On créé un nouveau dataframe sur la valeur date.
  • Avec la méthode “nlargest()” nous définissons le nombre barres que souhaitons avoir sur la figure.
  • Nous classons les dates par ordre croissant avec la fonction `sort_values()`.
  • Enfin, nous attribuons chaque clé un dataframe ex :{‘0′: dataframe1[1992-12-31],’1’: dataframe2[1993-08-08] } etc.

         

Création de la Figure 

   Si ce n’est pas déjà fait, il faut d’abord installer Plotly et  importer Plotly Graph Objects.    

pip install plotly
import plotly.graph_object as go

 

 Notre visualisation est construite autour de 3 éléments principaux :   

  • nos data  x, y, avec leurs paramètres
  • Le  Layout : la mise en page (titre, axes, buttons, style etc.)
  • Le Frame que nous avons préparé ci-dessus.

 Nous créons un graphique à barres à l’aide de Ploty.graph_objects.Bar.  Nos x reçoivent les valeurs numériques de`”total_points”` du tableau “0” renvoyant  à la  date initiale : “1992-12-31”. Idem pour  y “country_team”. On entre ensuite nos paramètres :   

  • l’orientation des barres,
  • la largeur,
  • les données couleur
  • les données texte
  • les infos de survol etc.

       
On se retrouve avec un graphique à barres basique horizontal et correctement ordonné;   La mise en page Le deuxième élément, le Layout que nous créons est la mise en page à l’aide de la fonction plotly.graph_objects.Layout. On va y définir:   Ainsi que toutes les données que l’on souhaite afficher dans notre template.
A ce stade, nous avons le cadre de la visualisation au complet. Par contre, elle est en “mode start”. Pour qu’elle puisse fonctionner, il nous faut intégrer le Frame. Dans le cas présent, le Frame n’est pas très complexe à créer. Il est composé de nos datas et de notre Layout que l’on va reprendre quasiment à l’identique et inclure ces éléments dans une liste compréhension qui va boucler sur nos valeurs, donc sur tous nos DataFrames. En gros, avons la structure suivante :  frames = [(value[data]), (value[layout] ) for keys, value in x_frame.items() ]

Il est important de garder les mêmes éléments de styles afin de conserver  le même aspect graphique tout le déroulé de l’animation. On peut cependant ajouter des données qui apparaitront une fois qu’elle sera lancée ou à la fin, en fonction de ce que l’on souhaite visualiser. Ici,  nous avons ajouté l’équipe leader et le rang qu’elle occupe à une date donnée.

 Intégration via HTML et Github

Une des difficultés rencontrés avec les graphs Plotly, c’est quand il s’agit de les intégrer dans un site web. Plotly Chart Studio ne prenant pas en charge gratuitement les graphiques de plus de 500 Ko. Parmi les alternatives, on a la plateforme Datapane, très pratique et complétement gratuite, mais qui affiche. également des limites de taille de fichiers (moins de 5000 lignes). A mon sens la meilleure option c’est  d’écrire notre visualisation en HTML et de l’héberger sur des pages GitHub. Pour cela nous devons passer par 2 étapes :

 Créer le HTML
Pour générer le fichier HTML de la visualisation Plotly, utilisez : 

import plotly.io as pio

pio.write_html(fig, file=index.html, auto_open = True)

Ce code ouvre la visualisation dans un fichier HTML local dans votre navigateur avec la visualisation.

Héberger vers des pages GitHub

  • Publier la visualisation vers des pages Github est assez simple.
  • Créez un nouveau repo Github et initialisez-le avec un README.md.
  • Téléchargez le fichier index.html que nous venons de créer et “commitez-le” sur la branche master ou main.
  • Cliquez sur paramètres, et faites défiler jusqu’à la section des pages Github et sous ‘Source’ sélectionnez ‘master branch’ et ‘docs’ pour le chemin

Dans le cas présent on obtient 

 

<iframe id="igraph" scrolling="no" style="border:none;" seamless="seamless" src="https://plot.ly/~elizabethts/9.embed" height="525" width="100%"></iframe>

 

 

4 – Conclusion

Même si le graphique n’est pas officiellement documenté dans les paramètres de Plotly, on peut s’appuyer sur la structure pour en réaliser. Ici nous avons pu en construire une assez basique qui peut largement être améliorée.
Le code peut parfois paraître un peu long mais la stylisation et ses paramètres occupent beaucoup de place.

 

Umojahack 2022 : Rencontre Emmanuel Koupoh data-scientiste, ambassadeur Zindi

Umojahack 2022 : Rencontre Emmanuel Koupoh data-scientiste, ambassadeur Zindi

Les 19 mars et 20 mars derniers a eu lieu la 3ème édition de l’Umojahack-Africa, hackathon inter-universitaire virtuel d’intelligence artificielle ouvert aux étudiants de toute l’Afrique organisé par la plateforme de concours Zindi. Pendant 2 jours, les étudiants d’universités, d’instituts ou d’écoles de formation à la science des données répartis sur tout le continent, se sont affrontés afin de trouver des solutions d’apprentissage automatique (Machine Learning) à des problèmes concrets.

Emmanuel Koupoh, enseignant au DIT (Dakar Institute of Technologies), data-scientiste à Bamtu et ambassadeur Zindi au Sénégal,  qui a déjà participé et remporté des challenges Zindi,  revient sur son expérience de cette compétition, sur ce qu’elle lui a apporté et sur la meilleure façon dont il faut l’aborder.

Cette année les data scientistes ont planché sur la qualité de l’air en Ouganda (débutants);  sur des  prévisions en assurance au Zimbabwe (intermédiaires) et sur  la confection d’anti-venin (avancés). La prime de 10 000 $ a été répartie entre les 3 vainqueurs des 3 catégories.

Emmanuel. Koupoh, datascientiste et ambassadeur Zindi à Dakar © DR

Comment as-tu connu Zindi?

J’ai connu Zindi un peu par hasard. C’était pendant l’année scolaire de 2018- 2019, j’étais à ESATIC à Abijdan, en troisième année de SIGL (Systèmes Informatiques et Génie Logiciel). Un ami m’a envoyé le lien de la plateforme. Nous avons trouvé que ça pouvait nous permettre de progresser. Donc nous nous sommes inscrits et nous avons commencé à participer à  plusieurs challenges. Comme j’avais déjà fait du Deep-Learning, je choisissais des compétitions orientées dans ce domaine. A l’époque,  j’avais peu de pratique des données tabulaires et je galérais beaucoup avec les datasets.

C’est quand je me suis inscrit au DIT (Dakar Institute of Technology), en datascience, que j’ai pu m’attaquer plus facilement à des challenges orientés Machine Learning et basés sur le traitement et sur l’analyse de données.  C’est comme  cela que j’ai remporté le “Umojahack-Africa Expresso” challenge en 2020. Ça consistait à prédire le  nombre d’ abonnés qui allaient quitter le réseau de la compagnie de téléphone.

 

Celina Lee SEO de Zindi

Lors de la remise des prix de l’UmoJahack 2020   © DR

Qu’est ce que tu trouves d’intéressant dans ces concours?

Déjà pour la pratique ça permet de se comparer aux autres. Quand tu passes deux semaines à travailler sur un modèle et que tu vois que tu n’es que 100ème au classement, tu te poses des questions. Tu vas chercher des solutions pour améliorer ton score.  Tu te rends compte rapidement que pour être dans le haut du classement,  il faut plus qu’un simple Random Forest  et qu’il faudra travailler sur plusieurs algorithmes pour entraîner ton modèle.  On apprend également à travailler avec les notebooks des autres, à comparer les modèles, à les combiner. En fait, tu cherches tout le temps à améliorer ton classement et quand tu tombes sur une compétition qui t’intéresse, tu n’arrêtes plus.

Donc participer à ces challenges t’ont permis d’engranger de l’expérience.

Oui, là encore une expérience pratique. Car les données utilisées pour les compétitions proviennent de véritables compagnies, la plupart du temps africaines, et  qui sont confrontées à des problèmes concrets. De plus, d’un point de vue personnel, on peut réutiliser les données. Par exemple pour écrire un  mémoire,  dans le cadre d’un travail universitaire. Moi j’ en ai utilisé  pour faire le pre-training d’un model en attendant d’avoir les données réelles. Et c’est très important car nous n’avons pas beaucoup de données à notre disposition. Collecter des données,  les traiter,  les labéliser ça prend du temps et de l’argent.  Et Zindi prend le temps de nettoyer et de classifier les données mises à notre disposition.

Tu cherches tout le temps à monter au classement et quand tu tombes sur une compétition qui t’intéresse, tu n’arrêtes plus.

En dehors de l’aspect compétition, est-ce que participer à un challenge peut offrir des opportunités ?

Déjà, ça permet d’être en relation avec d’autres datascientistes. Et oui,  Zindi met de plus en plus l’accent sur l’accompagnement des  datascientistes dans la recherche d’emploi. Depuis plus d’un an,  il y a une section jobs avec des annonces.  Tout récemment, Zindi a lancé une compétition Trail-Blazzers. En gros, les compétiteurs qui arrivaient à dépasser un score de référence pouvaient bénéficier d’une formation afin d’améliorer leur CV et étaient prioritaires pour  les offres d’emplois proposées par Zindi.

Et puis il y a le système des ambassadeurs. On peut gérer une communauté, échanger avec le staff des ambassadeurs. On vous propose de faire des présentations ou de produire du contenu sur le blog de la plateforme etc. En gros, tant de  choses qui te permettent d’apprendre ton métier.

As tu des conseils donner à ceux qui. vont s’attaquer pour la 1ère fois à l’Umojahack de samedi?

Avant tout il faut garder la tête froide. C’est à dire ne pas partir dans tous les sens. Prendre le temps de bien comprendre les jeux de données qui sont proposés et commencer à partir d’un plan solide. De plus je consieillerai aux candidats de faire les challenges de training que Zindi a mis à disposition Ils   correspondent aux différents niveaux et servent de simulation. Moi en tant qu’ambassadeur j’essaie d’aider  à se préparer ceux qui veulent se lancer.  Je partage des starters notebook ou j’organise des présentation pour expliquer ce à quoi ils auront à faire.

Mais au départ l’essentiel c’est de lancer sans appréhension car, de toutes façons, on  a rien à. perdre. Au contraire.