Note sur cette page

Cette page regroupe un ensemble de références vers des libraires, des outils, des tutoriels, etc. qui peuvent ou non vous être utile, selon votre projet. Il ne s'agit pas d'une liste exhaustive bien sûr, vous êtes libres d'utiliser n'importe quel autre outil qui vous convienne mieux.


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 des standards C/Java, mais d'être plus flexible (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ées 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 guiderai, 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 !

IDE

Y as-t-il des IDE (comme Eclipse pour Java) 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/ , qui est à mon avis mieux que Spyder, celui inclus dans Anaconda (voir plus bas)
Il est gratuit et a des outils assez proches d’Eclipse.

Pour apprendre à utiliser Python, et les librairies que je propose, je vous conseille d’utiliser l’outil python “jupyter notebook”, si vous ne connaissez pas, demandez-moi, je vous montrerai de quoi il s’agit. En gros, c'est un peu comme un IDE (Eclipe, etc.), mais pour de petits projets, et qui a surtout l'avantage de pouvoir exécuter indépendemment des "portions de code" sans avoir à tout relancer. Particulièrement efficace et important lorsque l'on travaille avec de grosses données ou des processus longs, fréquents en data mining/machine learning.
http://jupyter.org

Vous pouvez le lancer en ligne de commande ("jupyter notebook") où via l'interface d'Anaconda (encore une fois, voir ci-dessous).

Installation - pour commencer

Si vous n'êtes pas familier avec Python, je vous conseille d'installer la distribution de Python appelée Anaconda :
https://www.anaconda.com/download/
Elle a l'avantage de vous installer un Python tout propre ainsi que jupyter notebook dont je vous ai parlé au-dessus, et toutes les librairies de base pour le data mining dont je parle dans la section correspondante. En bonus, il installe une petite application appelée Anaconda-Navigator qui permet de gérer tout ça, installer de nouveaux packages, lancer jupyter notebook, etc.

Attention toutefois, il est courant de faire des erreurs entre le python installé par anaconda et le python "autre" s'il y en a déjà installé sur votre machine. En particulier, si vous faites "pip install...", ça installe sur la distribution non-anaconda, en ligne de commande il faut faire "conda install ..." pour installer une librairie.
Si vous ne savez pa de quoi je parle, installez Anaconda :)

Cartes et plans

Leaflet est une librairie permettant très facilement d'intégrer une carte intéractive à votre site, ainsi que d'y ajouter des marqueurs, lignes, images, etc. :
http://leafletjs.com/examples/quick-start/

https://www.mapbox.com vous permet de créer de beaux fonds de cartes entièrement configurables. Il est bien intégré avec leaflet.
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/

Framework CSS /javascript

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
Mon site perso sur lequel vous êtes en ce moment, par exemple, est fait en utilisant bootstrap, en utilisant juste ses fonctions de base. Vous pouvez faire bien mieux en y passant un peu de temps !

Graphiques, animations, graphes...

Depuis l'arrivée du HTML 5, le nombre d'outils bien pensé pour faire de la visualisation en javasript à explosé.
Ce qui est à ma connaissance encore la bibliothèque de référence, c'est https://d3js.org, ou plus familièrement D3. C'est une librairie très puissante, il vous suffira de regarder les exemples pour vous en convaincre.
Elle obéit à une logique particulière, dite "orientée donnée", qui n'est pas évidente au premier abord, suivez donc bien un tutoriel pour débuter. Elle est un petit peu "bas niveau", c'est à dire que vous pouvez tout faire avec, mais il n'y a pas énormément de choses que vous pouvez faire "en une ligne". Je vous conseille donc de vous y mettre seulement si vous voulez faire une visualisation originale ou personnalisée.

Si vous voulez simplement afficher des choses "standard" (par example des graphiques type courbe ou histogrammes tout bête), ce sera plus simple de chercher une librairie spécialisée, qui vous permettra de faire ce que vous voulez plus simplement. La plupart d'entre elles sont construites au-dessus de D3. Par exemple :

IDE

Je n'ai pas une grosse expertise de la programmation de projets web compliqués, pour ma part j'utilise brackets dès qu'il s'agit de faire du css/HTML, il est très léger, et permet d'avoir une visualisation instantanée de la page telle qu'elle est au fur et à mesure que vous écrivez.
Pour des projets javascript un peu plus complexes, j'ai déjà utilisé webstorm, qui est le frère jumeau de l'IDE pour Python pycharm que je conseille à ceux qui se lancent dans Python. Il y a une version gratuite illimité pour les étudiants, en fouillant un peu sur le site. Une fois de plus, ce n'est qu'un exemple parmi des centaines de possibilités...
Parmi les outils à la mode il y a aussi l'éditeur de texte Atom, si vous êtes déjà familier pourquoi pas.

Librairie de data mining en python

La librairie scikit-learn
est très pratique et très efficace, elle implémente tous les algos classiques. Elle est fréquemment utilisée par des professionnels, chercheurs ou en entreprise.
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.

Visualisation de graphiques, distributions, etc. en Python

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 !
Pour ceux qui connaissent déjà, c'est une surcouche sur matplotlib, donc tout ce qui marche en matplotlib marche aussi sur seabor, ça vous facilite juste toutes les étapes répétitives de base.
Tutoriels : https://seaborn.pydata.org/tutorial.html

Manipualation de données

Pour manipuler vos données, il existe une librairie très utilisée, et qui en plus est intégrée à d'autres comme seaborn, 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. Si vous ne connaissez pas R, ça peut faire penser à un tableur excel. On créer des "tables" avec des colonnes correspondant à des "variables", et chaque ligne correspond à une "observation".

Manipulation/Traitement de très grosses données

Vous avez tous entendu parlé du "big data". Ce mot veut tout et rien dire, mais à mon avis la question du big data se pose lorsque soit:
  • Vos données sont trop grosses pour être chargées dans la mémoire RAM de votre machine
  • Vos calculs prennent trop de temps pour être effectué sur un seul coeur (parralelisation)
Dans les deux cas, ce dont vous avez besoin est d'un outil adapté. Celui que je connais est Apache Spark, qui est initialement en Scala (une variante de Java), mais qui a le bon goût d'exister également avec une interface Python, ça s'appelle dans ce cas pySpark. Selon votre système d'exploitation, ça peut être plus ou moins simple à installer, et la prise en main peut vous demander un peu de temps, je ne vous conseille donc pas de vous y lancer pour faire un petit usage occasionnel. Mais ça n'a rien de sorcier non plus.

Introduction à l'Analyse de réseaux complexes

L'analyse de réseaux complexes est un champ du Data Mining. Dans la plupart des cas, les données traitées par le data mining sont dites "non structurées", c'est à dire qu'elles sont constituées de nombreux éléments qui ne sont pas liés entre eux, qui n'ont pas d'intéractions. Par exemple :

  • Des films, avec leur nom, année, liste d'acteurs, budget, etc.
  • Des produits, avec leur prix, description, notes, etc.
  • Des magasins, avec leur location, leur type, leur chiffre d'affaire, etc.
  • ...


Mais souvent, les données sont dites relationnelles, ou structurées, et les outiles classiques de data mining ne sont pas adaptés.
Dans ce cas, on peut représenter les données sous la forme de graphes (réseaux), les noeuds étant les entitées, et les liens leurs relations. Par exemple :
  • Un réseau social (Qui est ami/collègue/... de qui)
  • Un réseau de télécommunication (Quel appareil envoie des données à quel autre)
  • Un réseau de transport (Quelle point peut être accédé depuis tel autre ?)
  • Un réseau de gènes (Quel gène influence quel autre ?)
  • ...

Lorsques les réseaux ainsi constitués proviennent de grands jeux de données réels, on parle alors de "réseaux complexes". Il existe tout un champ assez nouveau de la science qui étudie ces réseaux, en particulier comment ils sont organisés et les phénomènes de propagation sur ces réseaux (propagation de virus informatiques ou biologiques, propagation d'information/d'innovation...)

Je travaille pas mal sur ce sujet en ce moment, ce qui peut expliquer pourquoi il y en a toujours dans mes sujets ;)
Un cas typique est l'analyse de réseaux sociaux. 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.

Un dernier petit exemple pour la route, moi ce sur quoi je travaille particulièrement, ce sont les réseaux dynamiques. Si vous ne voyez pas à quoi ça ressemble, voilà un tout petit exemple sous forme de vidéo:
Un réseau dynamique

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

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

Une version en béta de la librairie networkx portée en javascript, attention elle est beaucoup moins complète que la version python et semble plus ou moins abandonnée:
http://jsnetworkx.org

Sinon une autre librarie en Java mais peu maintenue:
http://jung.sourceforge.net/doc/index.html

Librairies et outils pour la visualisation de réseaux

Pour la visualisation, les librairies précédentes offrent des solutions, mais rien de parfait. networkx python est particulièrement décevante de ce côté.

Pour la visualisation de graphes dynamiques, je connais une solution en Java:
http://graphstream-project.org

Et je pense que jsnetworkx le permet aussi de manière assez simple
Dans tous les cas en javascript, dès qu'on parle de visualisation, on entend parler de D3 :
https://d3js.org
Cette librairie est relativement complexe à prendre en main, mais si vous voulez faire de belles visualisations pour le web, vous serez obligé de passer par là !

Sinon, si vous avez besoin de visualiser des réseaux que ce n'est pas forcément quelque chose qui doit être inclu dans votre outil, le plus simple est d'utiliser l'un des logiciels spécialement conçu pour ça. En particulier, vous pouvez aller voir du côté de Gephi :

https://gephi.org/
Qui je pense est aujourd'hui le plus simple, permettant de faire de belles visualisation entièrement en cliquant sur des boutons...

Donnees open source

Dans certains projest que je propose, vous pouvez avoir besoin de données. Il existe des tas d'endroits sur le web pour chercher des données, en particulier depuis que l'open source est à la mode. Je donne quelques examples ci-dessous, en vrac:
Données open source du grand lyon : https://data.grandlyon.com
Un fichier particulièrement intéressant sur Lyon : https://data.grandlyon.com/culture/point-dintfrft-touristique/
Le même type de données sur toute la france : data.gouv.fr
L'outil de google pour trouver des bases de données : Le google des données
Des données de produits alimentaires, en gros pour tous les produits alimentaires vendus en France et de nombreux autres pays, contient de nombreuses informations telles que la catégorie de produit, le taux de glucide, la présence de tel ou tel additif, etc.
https://world.openfoodfacts.org
On peut télécharger les données sous forme d’un fichier csv, il fait un petit Go ...

Jeux de données réseaux

Données sur la série game of thrones: https://networkofthrones.wordpress.com
Des données de 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

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