--- tags: Enseignement, MPI, Info 114, Introduction à la Science des données --- # Info 114: Introduction à la Science des Données ## Enseignants Cours: Isabelle Guyon <guyon@clopinet.com> TP: Nicolas M. Thiéry <Nicolas.Thiery@u-psud.fr> ## [Notes de cours](https://www.dropbox.com/sh/qun4oyd12sn5utr/AABXp2ok6YtiOVAl_4UoC_N0a) - [Introduction](https://www.dropbox.com/sh/qun4oyd12sn5utr/AABXp2ok6YtiOVAl_4UoC_N0a?preview=Introduction.pptx) - [Chapter 1: How to become a Data Scientist in ONE hour :-)](https://www.dropbox.com/sh/qun4oyd12sn5utr/AABXp2ok6YtiOVAl_4UoC_N0a?preview=Chapter1.pptx) - [Chapter 2: Exploratory analysis](https://www.dropbox.com/sh/qun4oyd12sn5utr/AABXp2ok6YtiOVAl_4UoC_N0a?preview=Chapter2.pptx) - [Chapter 3: First POM explorations and project selection](https://www.dropbox.com/s/1l95tlgvxjk2mxr/Chapter3.pptx) - [Chapter 4: POM tricks of the trade](https://www.dropbox.com/s/ui3u14fv32qjas9/Chapter4.pptx?dl=0) - [Chapter 5: Neural networks and deep learning](https://www.dropbox.com/s/if6g2padjs3b6nw/Chapter5.pptx?dl=0) - [Chapter 6: From LMS to back-prop](https://www.dropbox.com/s/m5mftr97sktddzb/Chapter6.pptx?dl=0) - [Chapter 7: Big data versus Good data](https://www.dropbox.com/s/3n480qa7doaxmfr/Chapter7.pptx?dl=0) ## Références Hands-On Machine Learning with Scikit-Learn and TensorFlow, O'Reilly (Aurélien Géron); nouvelle édition 11 octobre ## Glossaire | Anglais | Français | Presque synonymes | | ------- | -------- | -------------- | | feature | variable | caractéristique, colonne, attribut | | sample | exemple | ligne, échantillon, pattern | | table | tableau | matrice | | target | objectif | label, vérité terrain, ground truth, output,... | ## Instructions pour le TP 1 (HW1) Comme en Info 111, nous utiliserons l'environnement interactif Jupyter, mais cette fois avec le langage de programmation Python. ### 1. Ouvrez un terminal `Applications -> Terminal` ### 2. Récupérez les sujets et travaillez sur les fiches Jupyter dans `Info114/HW1` 1. Préparez votre dossier avec les commandes suivantes: mkdir ~/Info114 cd ~/Info114 2. Récupérez le sujet de TP: info-114 fetch HW1 Si jamais il y a une erreur `command info-114 not found`, utiliser à la place (ici et plus loin): /public/info-114/bin/info-114 3. Ouvrez Jupyter info-114 jupyter notebook Note: en salle de TP, vous pouvez comme la semaine dernière récupérer les sujets depuis Jupyter avec: Assignment -> cours Info114 -> fetch sur HW1 ### Errata pour la version originale 00-tableau.ipynb: - T[1,2]: c'est pour la deuxieme ligne et troisieme colonne - C'est de T3D qu'il faut extraire les trois premieres colones 01-images.ipynb: - Pour extraire le canal des rouges, faire R = M[:,:,0] * 1. Pour que les valeurs soient stockées en nombre flottants. Sinon elles sont stockées sur es entiers courts (entre 0 et 255), et les calculs arithmétiques vont déborder. Par exemple, on aurait: $255+1 = 0$ . Vous ne pouvez pas modifier l'exemple donné, mais vous pouvez insérer une nouvelle cellule (Insérer -> Cellule -> après) - avant G+R, le texte devrait être: «Il est maintenant facile de faire de l'arithmétique sur tous les pixels. Par exemple la somme des intensités en vert et rouge s'écrit:» ## Instructions pour le TP 2 (HW2) 1. Ouvrez les notes du cours (voir ci-dessus) 2. Récupérez le sujet comme pour le TP 1 (remplacer `HW1` par `HW2`) 3. Ouvrez la feuille de travail `data_analysis` et suivez les instructions qui s'y trouvent. ### Errata pour le TP 2 Les liens vers les feuilles foreground-extractiono et feature-extraction sont cassés (`_` au lieu de `-`); ouvrir les feuilles depuis le navigateur de fichier. couleurs de fond, ... ## Instructions pour le TP 3 (HW3) 1. Ouvrez les notes du cours (voir ci-dessus) 2. Récupérez le sujet comme pour le TP 1 (remplacer `HW1` par `HW3`) 3. Ouvrez la feuille de travail `data_analysis` puis `project_selection` et suivez les instructions qui s'y trouvent. ## Errata pour le TP 3 - Hint: utiliser `ls` plutôt que `glob.glob`. Ou alors importer `glob.glob` - `RL_data.csv` -> `RE_data.csv` - Hint to load csv with panda: use `pd.read_csv` - On ne veut pas travailler sur le fichier des métadatas, mais il est lui aussi en `.csv`. Il faut donc importer seulement les fichiers se terminant par `_data.csv` - 2.3 systematic_data_experiment(data_name, all_scaled_data_df, sklearn_model, sklearn_metric) à remplacer par systematic_data_experiment(data_name, all_data_df, sklearn_model, sklearn_metric) - 2.3-4 assigner le résultat de systematic_data_experiment à result_noscaling et result_scaling - 2.6 utiliser .plot.bar() plutôt que .hist pour créer un histogamme. Notes pour l'année prochaine: - enlever les raccourcis np, pd, ls, importer les vrais modules - donner un exemple de read_csv ## Projet Téléchargez le dossier commun pour le projet: cd ~/Info114 curl -s http://Nicolas.Thiery.name/Project.tgz -o - | tar zxvf - Pour chaque sujet de projet il y a un sous répertoire (par exemple `Project/2.segmentation`, avec du code et éventuellement un jeu de donnée spécifique. En sus, il y a du code commun dans `Project/utilities`. ### Jeu de données Le jeu de données principal du projet est trop gros pour que chacun d'entre vous en fasse une copie. Au lieu de cela, il est installé une fois pour toute sur le système, comme les logiciels du cours (il est en cours d'installation sur JupyterHub). Pour y accéder depuis Python, vous utiliserez la commande suivante qui vous indiquera dans quel dossier le jeu de donnée est installé: import os.path data_dir = os.path.join(os.path.split(os.path.split(sys.executable)[0])[0], 'share', 'info-114-data', 'Project') En salle de TP, `data_dir` vaudra: /public/info-114/miniconda3/envs/info-114/share/info-114-data/Project/ Ensuite vous pourrez, par exemple, remplacer: meta_data_dir = '../mini-dataset/meta-data' par: meta_data_dir = os.path.join(data_dir,'/meta-data') Si vous souhaitez vraiment télécharger le jeu de données (par exemple pour travailler sur colab), vous pouvez faire: git clone https://gitlab.u-psud.fr/Info114/Data.git ### Espaces collaboratifs - [Projet dataset](/P2eRdPTfSeSXfGEX9fsuIw) - [Projet segmentation](/Y8S49ShPQmGckI_t_zmcxA) - [Projet classifieurs](/J5cOBtokRvmINMg4DbCg9A) - [Projet représentation](/Q4xlxt_6QbSJDMkmFCdyYg) - [Projet biais](/6GewVo7vTX2h1LLGSplZrg) - [Projet apprentissage profond](/LR3YEo9SS9WsOBNIvOMiiQ) ## Serveur JupyterHub Comme pour Info 111, vous pourrez travailler sur vos fiches de TP et projet à distance en utilisant le serveur JupyterHub de Paris Sud. Voir les [instructions pour Info 111](http://nicolas.thiery.name/Enseignement/Info111/logiciels/jupyter.html#jupyterhub), en ajustant 111 par 114. ## Installer les logiciels sur votre propre machine (pour les expérimentés) Suivre les [instructions similaires pour le cours Info111](http://nicolas.thiery.name/Enseignement/Info111/logiciels/jupyter-installation), en utilisant le dépot git suivant à la place d'`Info111-notebooks`: https://gitlab.u-psud.fr/Info114/sujets ## De C++ à Python Vous trouverez ci-dessous quelques notes à propos du langage de programmation Python - pas besoin de déclarer les variables - pas de `;` entre les instructions - les instructions sont séparées par des sauts de ligne - les blocs sont déterminés par l'indentation (et non les {}) Affectations: x = 42 s = "Bonjour!" f = 3.14159 Un `if` en C++: if ( x < 10 ) { ...; ...; } else { ...; } Le même `if` en Python: if x < 10: ... ... else: ... Une boucle for en C++: for (int i = 0; i < 10 ; i++) { cout << i << endl; } La même boucle `for` en Python: for i in range(0, 10): print(i) Les *compréhensions* en Python: comment construire des listes avec une syntaxe proche des mathématiques. Essayez les commandes suivantes: range(5, 10) range(5, 95, 10) [ 2*i for i in range(0, 10) ] [ i**2 for i in range(0, 10) ] ## Utiliser une compréhension pour fabriquer une image; essayer les commandes suivantes: | Coluhgvmn 1 | Column 2 | Column 3 | | -------- | -------- | -------- | | Text | Text | Text | def cercle(x,y,r): return Point([x,y]).buffer(r).boundary cercle(0,0,1) cascaded_union([cercle(0,0,1), cercle(0,0,2), cercle(0,0,3)]) cascaded_union( [ cercle(0,0,r) for r in range(10) ]) ## Fonctions mathématiques usuelles from math import sin, cos sin(3.14) ## Définir une fonction En C++: int f(int x, int y, int r) { return x + y - r } En Python: def f(x, y, r): return x + y - r