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 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.
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
 © 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.
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.