Attention, la semaine du 18 Septembre, exceptionnellement, je serai absent jusqu'à Vendredi. Je viendrai donc au créneau du Vendredi 22 Septembre, et pas le Jeudi 21 . Le reste de l'année, je viendrai le Jeudi matin

Notes communes à tous les projets

Je serai présent pour vous encadrer toutes les semaines, à l'horaire du Jeudi matin. Si vous avez un besoin particulier, je peux venir à l'horaire du vendredi également. Si vous avez des questions, que ce soit directement sur le projet, ou sur le "data science" en général, n'hésitez pas à me contacter par mail, de préférence à l'adresse : remy.cazabet AT univ-lyon1.fr. J'ai 2 bureaux, un à l'INSA et l'autre à Nautibus, donc si vous voulez me voir, envoyez un mail avant et je vous donnerez un lieu de rendez-vous.

Notes par rapport à Python

Python est un langage qui est rapidement devenu très populaire, autant dans l'entreprise que dans la recherche. Il a comme avantage d'être proche aux standards C/Java, mais d'être plus flexibles (utilisation comme simple script ou en orienté objet). Il a surtout l'avantage de posséder énormément de librairies, faciles à installer, pour faire beaucoup de choses. Il a aussi des inconvénients, deux en particulier:

  • Python est beaucoup plus lent que C/C++ ou même Java. Ce n'est pas forcément vrai pour les librairies, qui elles sont parfois codé en C++ et interfacées avec Python.
  • Parce que Python n'est pas typé (on n'est pas obligé de définir à l'avance le type des variables), le débugage est parfois compliqué.
Je vous guiderez, mais vous pouvez commencer par un petit tutoriel. Choisissez votre préféré parmi ceux-là ou un autre qui vous convient mieux: https://python.developpez.com/cours/.

Pas besoin de faire les tutoriels en entier évidemment ! Une fois que vous connaissez les bases, vous reviendrez chercher ce qui vous manque. Et surtout n’hésitez pas à me demander comment faire telle ou telle chose, je suis là pour ça !
Certains ont commencé à me demander s’il y avait un IDE (comme éclipse mais pour Python). Oui il y en a des dizaines... Vous êtes libres d’utiliser celui que vous voulez, y compris même emacs pour les adeptes… Moi personnellement, j’utilise pyCharm https://www.jetbrains.com/pycharm/
Il est gratuit et a des outils assez proches d’Eclipse.

RC1 (Projet visualisation)

Données : Il est important de bien choisir vos données. Passez un peu de temps à regarder ce qui est disponibles sur les sites que j’ai déjà donné, notamment celui de Lyon : https://data.grandlyon.com
Vous êtes très libre d’en trouver d’autres, du moment qu’elles sont suffisamment “riches” pour faire quelque chose d’intéressant.
Un fichier qui me semble particulièrement intéressant sur Lyon :
https://data.grandlyon.com/culture/point-dintfrft-touristique/
Variantes :
Si 2/3 groupes souhaitent travailler sur ce sujet, c’est possible, mais je souhaite qu’ils prennent des orientations bien différentes. Par exemple,

  • un groupe va faire une visualisation à partir de données statiques (récupérées dans un fichier), mais assez étoffée, avec plusieurs fonctionnalités
  • Un autre va inclure moins de fonctionnalité mais va faire de la visualisation de données temps réel (horaires de transports en commun, disponibilités vélo’v, …).
  • Ou sinon vous pouvez proposer des visualisations non-cartographiques si vous trouvez des données open-data qui s’y prêtent bien…
Librairies :
Celles que je propose sont en javascript, car je souhaite des résultats à mettre en ligne sur le web ("pour de vrai” si ils sont réussis…). Si vous connaissez une autre techno, n’hésitez pas. Je suis pas un expert en techno web, je n’ai appris que ce dont j’avais besoin pour mes propres visualisation “sur le tas”. Je peux donc vous guider pour faire ce que je demande, mais si ça vous intéresse personnellement, c’est rapidement vous qui pourrez m’apprendre des choses...

https://www.mapbox.com vous permet de créer de beaux fonds de cartes entièrement configurables Le site à pas mal de guides, par exemple une introduction pour faire son fond de carte:
https://www.mapbox.com/help/create-a-custom-style/

Une librairie peut-être plus simple pour débuter (les 2 sont compatibles) :
http://leafletjs.com/examples/quick-start/

Pour faire des interface web agréables sans vous casser la tête, il y a des “toolkits”, par exemple celui-là :
https://getbootstrap.com

Exemples :
Le site datafrance Peut vous donner une bonne idée ce que l’on cherche à avoir. Évidemment, le but n’est pas de refaire ce site, donc je vous propose de trouver des données un peu originales et de les représenter de manière un peu plus personnalisées ! D’où l’intérêt de se concentrer sur Lyon, où il peut y avoir des données plus personnalisées. (Carte des traboules, restaurants avec leurs horaires d’ouverture et tarifs…)

RC2 (data mining dans base de données)

L’objectif général de ce projet est de prendre une base de donnée contenant beaucoup d’information, et d’appliquer des algorithmes de l’état de l’art en datamining/machine learning pour en tirer quelque chose d’intéressant. J’ai proposé de prendre une base d’alimentation, et d’appliquer du clustering et de l’analyse en composante principale dessus pour visualiser des produits qui se ressemblent et pour aider à choisir un produit plutôt qu’un autre. Un groupe m’a proposé de prendre une base de données de résultats sportifs, et de programmer un “prédicteur de résultats”, par exemple qui donnerait une probabilité de victoire ou même une probabilité d’obtenir tel ou tel score. C’est une bonne idée aussi !

Les outils
Librairie de data mining en python
scikit-learn
Cette librairie est très pratique et très efficace, elle implémente tous les algos classiques.
Vous voyez les 6 grandes familles d’algos sur la première page (Classification, Regression…) et si vous cliquez dessus vous avez même un espèce de mini-cours qui vous explique ce que font les fonctions. Je vous guiderai évidemment sur le choix des outils.

Pour la visualisation, je vous conseille l’excellente librairie
https://seaborn.pydata.org
Qui non seulement permet de faire la plupart des graphiques classiques (histogramme, nuage de points, etc.) en une ligne de code, mais en plus ils sont beau !
Tutoriels : https://seaborn.pydata.org/tutorial.html

Pour manipuler vos données, il existe une librairie très utilisée, et qui en plus est parfaitement intégrée aux deux précédents, qui s’appelle pandas
https://pandas.pydata.org
Pour ceux qui connaissent R, l’idée est d’avoir le même genre d’outils de manipulation de “tables” que dans R. Ce n’est pas obligatoire de l’utiliser, mais à mon avis c’est pratique.

Pour apprendre à utiliser tout ça, si vous connaissez le système des “notebook”, je vous conseille d’utiliser l’outil python “jupyter notebook”, si vous ne connaissez pas je vous montrerez de quoi il s’agit.
http://jupyter.org

Les données
La base que je propose proviens de ce site :
https://world.openfoodfacts.org
On peut télécharger les données sous forme d’un fichier csv, elle fait un petit Go ...

RC3 (Projet réseaux dynamiques)

Je pense qu’on peut aller jusqu’à 3 équipes qui choisissent ce sujet, mais dans ce cas il faut se répartir des objectifs différents:

  • Une équipe va faire un “site web”, pas tellement un site, mais plutôt un page web, un peu dans le genre de la page networkofthornes ci-dessous, qui permettra d’explorer les données des 3 séries TV que je fournis. Objectif : quelque chose de joli et qui plaît aux fans des séries
  • Une équipe qui travaille sur l’analyse des métriques. Visualisation du réseau n’est pas primordiale, ce que l’on veut c’est avoir une interface pratique (peut-être offline c’est mieux, pur python ou Java/C++) pour voir l’évolution des indicateurs sur les nœuds et sur le réseau dans son ensemble (en gros, dessiner des courbes quand on demande telle info sur tel nœud du réseau
  • Une équipe qui travaille sur le problème particulier de la visualisation de la détection de communautés et ses évolution. En gros, dessiner des diagrammes comme ça : http://www.mapequation.org/assets/img/neuroAlluvial2001-2007.svg qui montrent quand des groupes fusionnent ou se divisent (pas mal d’exemples dans Games of thrones je pense…)

Ces orientations sont négociables ! Ce sont des exemples. Mais il me semble important de clairement définir des directions différentes
Pour comprendre en quelques images de quoi on parle, le site web qui m’a inspiré pour ce sujet :
https://networkofthrones.wordpress.com
Et un exemple très basique de réseau dynamique, vous ferez bien mieux ! :
https://www.youtube.com/watch?v=Ju98tADvA_0

Introduction à l’analyse de réseaux
Pour une introduction à l’analyse de réseaux en prenant le trône de fer comme example:
https://networkofthrones.wordpress.com/a-science-of-networks/
Il y a aussi tout simplement une page Wikipedia en français (et une meilleur en anglais, comme souvent)
https://fr.wikipedia.org/wiki/Analyse_des_réseaux_sociaux

Si vous êtes intéressés pour en savoir plus, il existe des milliers de ressources sur le sujet, je pourrais vous en donner. Librairies pour l’analyse de réseaux
La page de la librairie networkX, meilleure librairie à mon goût à ce jour pour l’analyse de réseaux (en Python) https://networkx.github.io

Un tutorial tout bête : https://networkx.github.io/documentation/networkx-1.10/tutorial/index.html

La page avec toutes les fonctions disponibles dans la librairie
https://networkx.github.io/documentation/networkx-1.10/reference/index.html

La même en javascript:
http://jsnetworkx.org

Le concurrent igraph, qui support aussi C/C++ et R
http://igraph.org

Sinon en Java mais moins maintenu:
http://jung.sourceforge.net/doc/index.html

Pour la visualisation, les librairies précédentes offrent des outils, mais si nécessaire vous pouvez aller regarder du côté de Java:
http://graphstream-project.org

Ou en langage web de d3.js, qui permet de visualiser beaucoup de choses y compris des graphes (je crois que la librairie jsnetworkx au-dessus utilise déjà d3)
https://d3js.org

Données
Les données que je propose d’utiliser (Séries TV). Il s’agit des données intitulées ts10 ou ts40, qui correspondent à des agrégations toutes les 10 scènes ou 40 scènes
https://figshare.com/articles/TV_Series_Networks_of_characters/2199646/11

Mais il y a d’autres possibilités, par exemple ces jeux de données de relations entre étudiants ou membres d’un service d’hôpital:
http://www.sociopatterns.org/datasets/

D’autre sources de réseaux, dont certains sont dynamiques, avec des emails, wikipedia, citations scientifiques, etc. (Plus gros en général)
http://konect.uni-koblenz.de
https://snap.stanford.edu/data/#temporal
http://networkrepository.com/dynamic.php

De toute façon, si votre projet est bien fait, charger un nouveau jeu de données devrait être facile 😉