Introduction à la data-science et à ses outils


Master, Paris Est MLV

@comeetie

Data Science ?


“The next sexy job”


“The ability to take data to be able to understand it, to process it, to extract value from it, to visualize it, to communicate it, that’s going to be a hugely important skill.”

-- Hal Varian, Google

Data Science ?


“Data science, as it's practiced, is a blend of Red-Bull-fueled hacking and espresso-inspired statistics.”


“Data science is the civil engineering of data. Its acolytes possess a practical knowledge of tools & materials, coupled with a theoretical understanding of what's possible.”

-- Mike Driscoll, CEO of metamarkets:

Drew Conway’s Data Science Venn Diagram

Data Science ?


“A data scientist is someone who can obtain, scrub, explore, model and interpret data, blending hacking, statistics and machine learning. Data scientists not only are adept at working with data, but appreciate data itself as a first-class product.”

-- Hilary Mason, chief scientist at bit.ly

Parler de la donnée, c'est aussi évoquer le datascientist, ce mouton à 5 pattes de la data disposant de compétences statistiques, informatiques, comprenant parfaitement les enjeux métier de l'entreprise... Est-il aussi un fantasme du discours ambiant sur le big data ?

L-DB : S'il peut exister des profils qui s'approchent de cette description, la réalité démontre le plus souvent que la datascience, comme la science en générale, ne se produit pas seule mais en groupe. La bonne question à se poser est donc plutôt celle de la synchronisation des différentes compétences au sein de l'organisation. Nous plaidons davantage pour un datascientism que pour des datascientists. SC : Une autre réalité méconnue sur le datascientist est qu'il s'agit avant tout d'un métier d'artisan. Chaque problème et chaque jeu de données demande toujours une démarche spécifique qui n'est pas industrialisable, ce que beaucoup de gens ne comprennent pas encore.

Un domaine en construction

"Data science: how is it different to statistics ?" http://t.co/ULAGIeZDdR / by @hadleywickham

— Arthur Charpentier (@freakonometrics) 5 Septembre 2014

Un domaine en construction

@freakonometrics @hadleywickham Statisticians not cleaning reshaping data? What have I been doing the last 10 years?

— Ralph Winters (@RDub2) 5 Septembre 2014

@RDub2 they are, but they're not teaching/research it (by and large)

— Hadley Wickham (@hadleywickham) 5 Septembre 2014

Un domaine en construction

@hadleywickham I think the collection analysis, insight generation, cleaning, communication is multidisciplinary not just #ds

— Ralph Winters (@RDub2) 5 Septembre 2014

.@freakonometrics @hadleywickham, please find my view on #BigData, #DataScience + #Statistics at http://t.co/VXXIDWdTNi @Rdub2

— Dr. Diego Kuonen (@DiegoKuonen) 6 Septembre 2014

Une mode anglo-saxone qui s'exporte

Une mode anglo-saxone qui s'exporte

avec des origines anciennes

Johann Kepler

avec des origines anciennes

Johann Kepler, mbostock blo.cks // NYT

avec des origines anciennes

Charles-Joseph Minard

avec des origines anciennes

William Sealy Gosset (Student)

avec des origines anciennes

William Sealy Gosset (Student)

Des compétences clés

1. Préparer les données (DB)

Récupérer, mélanger, enrichir, filtrer, nettoyer, vérifier, formater, transformer des données...

2. Mettre en œuvre une méthode un modèle (ML/Stats)

Arbre de décision, régression, clustering, Modèle graphique, SVM...

3. Interpréter les résultats (Vis)

Graphiques, Data visualisation, Cartes...

Des compétences clés

1. Préparer les données (DB) -- 80% du boulot

Récupérer, mélanger, enrichir, filtrer, nettoyer, vérifier, formater, transformer des données...

2. Mettre en œuvre une méthode un model (ML/Stats)

Arbre de décision, régression, clustering, Modèle graphique, SVM...

3. Interpréter les résultats (Vis) -- 80% du boulot

Graphiques, Data visualisation, Cartes...

Des compétences clés

Data Munging, ETL (Extract / Load / Transform)

Récupérer, mélanger, enrichir, filtrer, nettoyer, vérifier, formater, transformer des données

Fouille de données, Statistiques, DAD (Discover / Access / Distill)

Analyse de données traditionnelle

Visualisation, DAD (Discover / Access / Distill)

Graphiques, Data visualisation, Cartes...

2 profiles types

Plan du cours

Data-munging (1 séances)

Fouille de données, apprentissage statistiques (3 séances)

Visualisation (2 séances)

Data-munging (1 séances)

  1. les fichiers textes csv, json, xml, ... et la ligne de commande
  2. enrichir un jeu de données, trouver des données, et les manipuler en python avec pandas
  3. api, web et scraping, ...

Fouille de données, apprentissage statistiques (3 séances)

  1. trouver des groupes homogènes; le clustering: k-means, cah, modèle de mélange et dbscan (avec scikit-learn)
  2. apprendre à partir d'exemples labellisés; la classification : svm, arbre de décision, arbre de décision boosté (avec scikit-learn)
  3. réseau de neuronnes (avec keras)

Visualisation (2 séances)

  1. introduction à la visualisation, bonnes pratiques & erreurs communes
  2. le web html, css, js, svg et d3
  3. d3 suite
  4. carte web leaflet

Quelques exemples de projets

http://www.comeetie.fr/map_lbc.php

Quelques exemples de projets

http://www.comeetie.fr/galerie/francepixels/

Quelques exemples de projets

http://vlsstats.ifsttar.fr/

Quelques exemples de projets

http://vlsstats.ifsttar.fr/atNight/

Quelques exemples de projets

http://www.comeetie.fr/galerie/velib/

Organisation du cours

Cours orienté pratique et mise en œuvre

Séances de 2x2 heures autour d'un cours-TP

Outils principaux : linux, python et Chrome

Présentation de notions et d'outils

Exercices de mise en oeuvre pratique

+ projet

+ contrôle continu

Les projets

Le projet doit vous permettre de mobiliser les différentes compétences et connaissances acquises pendant le cours et de mettre en avant votre créativité.
Pour ce faire vous vous diviserez en groupes de 3 ou 4, travaillerez sur l'un des deux jeux de données proposés. Vous les mettrez en forme et les visualiserez. Lorsque vos données seront suffisamment propres vous pourrez utiliser une méthode de stats/ML : régression, classification, clustering et présenterez les résultats obtenus.

Tout au long du projet vous tiendrez à jour un journal de bord au sein d'un notebook python listant vos problèmes et vos avancés.

La soumission consistera en ce journal de bord, ainsi qu'une présentation de 10mn

Les projets

Calendrier

Le contrôle continu

Interro de type cours durée de 1h

Calendrier

Convention des slides

Quelques pointeurs

Questions ?

Séance 1

Reprise en douceur avec des fondamentaux

fichiers textes et ligne de commande

Fichiers textes

Formats très simples et pérenne pour stocker des données et les échanger
Exemples :

CSV : Comma Separated Value

XML : Extensible Markup Language

JSON : JavaScript Object Notation

Les fichiers type csv

Fichier texte simple pour stocker des données tabulaire.
Les différentes variables sont séparées grâce à une

',' ou autre ';', '|', '#' et '\t'

Possible de mettre une ligne pour le header

Exemple

"id" "mbikestands"
16104 30.5303867403315
15063 5.19337016574586
17010 16.2651933701657
13045 8.48066298342541
10025 9.31491712707182
...

Compétence :
Savoir importer un fichier malgré des problèmes d'encodage et/ou de formatage

La ligne de commande

obtenir de l'aide

man

rediriger les sorties

<, >, >>, ...

enchainer des commandes

| et script bash

afficher un fichier

head, tail, cat et more

La ligne de commande

analyser le fichier

grep : global regular expression
Filtrer toute les lignes contenant 'tot'
grep tot fichier.txt
Filtrer toute les lignes contenant un chiffre de 0 à 4 suivi d'un nombre quelconque de caractères et d'un chiffre de 5 à 9
grep '[01234].*[56789]' fichier.txt
Filtrer toute les lignes commençant par un tirer
grep '^-' fichier.txt
options -i, -n et -c,...

La ligne de commande

éditer le fichier

nano et gedit

modifier, analyser le fichier

sed : stream editor (lecture ligne/ligne)
remplacer toutes les occurrences de "ficheir" par "fichier" :
sed -e 's/ficheir/fichier/g' fichier.txt > fichier.corrected.txt
supprimer toutes les lignes vides :
sed -e '/^ *$/d' fichier.txt
supprimer les lignes 7 à 9 :
sed '7,9d' fichier.txt

La ligne de commande

modifier, analyser le fichier

perl : practical extraction and reporting language
substitution multiples et mise en mémoire des pattern matchés:
 perl -pe 's/last_update":([0-9]*)}/last_update":0000$1}/g'

La ligne de commande

problème d'encodage

file : informations sur un fichier
file -i fichier.txt -o fichier.utf8
iconv : changement d'encodage
iso-8859 → utf8
iconv -f ISO-8859-1 -t UTF-8 fichier.txt -o fichier.utf8

Packages python de bases

numpy

librarie de calcul numérique (doc, intro)

pandas

librairie de manipulation de données tabulaire (doc, intro )

Import de fichiers type csv avec panda

import pandas as pd
data = pd.read_csv("",...)

Exercice (10 mn) :
Importer proprement avec pandas le fichier exo1.csv. Vous vérifierez que les colonnes numériques sont bien lues en tant que telles.

Les fichiers JSON

Fichier texte simple pour stocker des données semi-structurées
2 éléments imbriqués à l'envie :

Exemple

[{"_id" : "1/1/2014",
  "value" : {"bikes" : 53972,"max_bikes" : 189}},
 {"_id" : "1/10/2013",
  "value" : {"bikes" : 48375,"max_bikes" : 175}}]

Compétence :
Savoir lire et remettre en forme un fichier JSON

Exercice (10mn):

Créer la data.frame suivante :
"id" "mbikestands"
"1" 16104 30.5303867403315
"2" 15063 5.19337016574586
"3" 17010 16.2651933701657
"4" 13045 8.48066298342541
...
qui contient les id des stations velib et la moyenne du nombre de bornes disponibles sur la période enregistrée.
Pour cela vous utiliserez le fichier exo2.json qui à la forme suivante :
tableau de stations ayant chacune une id (id) et trois tableaux associés; nombre de vélos (available_bikes), nombre de bornes (available_bike_stands), date de la mesures (download_date)

Les fichiers type XML


Parser un fichiers

2 méthodes :

Exemple

<?xml version='1.0' encoding='UTF-8'?>
<stations lastUpdate="1409819465886" version="2.0">
<station>
	<id>2</id>
	<name>Dézery/Ste-Catherine</name>
	<terminalName>6002</terminalName>
	...
</station>
<station>
	<id>3</id>
	<name>St-Maurice/ St-Henri</name>
	<terminalName>6003</terminalName>
	...
</station>
</stations>

Package xml.etree.ElementTree


Exemple d'utilisation

import xml.etree.ElementTree as et
data   = et.parse("exo3.xml") # parser le fichier
xmltop    = data.getroot() # recupérer la racine
stations  = xmltop.iter("station") # itérateur sur les tag "station"
for s in stations:
	print s.find("id").text 

Exercice (20mn)

Construire à partir du fichier exo3.xml une dataframe contenant les variables suivantes :

'id','lat','long','nbBikes','nbEmptyDocks'

TP Analyse du jeude données des prénoms / années / départment 1946- 2006

données et correction