# Compétences DATA/IA
## 1 - Unix Shell
- Savoir ce que fait exactement `apt install`
- Connaitre les redirections `>` et `>>`
- Connaitre les pipes `cmd | cmd`
- Connaitre les variables d’environnement
- Connaitre le fonctionnements de `PATH`
- Comprendre la difference entre `apt install` et `pip install`
- Connaitre la commande `grep`
- Connaitre la commande `find`
- Connaitre la commande `which`
- Savoir se connecter via `SSH` sur un serveur distant
- Connaitre la notion de `port forwarding` en SSH
- Savoir créer une clef SSH et savoir où elle est localiser
## 2 - GIT
- `git status`
- `git add`
- `git log`
- `git commit - m`
- `git push origin`
- `git pull`
- `git reset`
- `git clone`
- `git stash` / `stash pop`
- `git checkout` / `git checkout -b`
- `git branch`
- `git fetch`
## 3 - Python basique
- Les différentes structures de données : `String`, `Integer`, `List`, `Dict`
- Savoir importer un module
- Comprendre ce qui se passe réellement lors d’un import
- Savoir créer son propre module python
- Savoir écrire et utiliser une class
- Savoir utiliser une méthode d’un objet
- Savoir expliquer la difference entre class et objet
- Savoir lire / écrire un fichier (`CSV` par exemple)
## 4 - API
- Savoir utiliser le module requests
- Savoir la différence entre une requête `GET` et `POST`
- Savoir interpreter le format de réponse (`JSON`)
- Connaitre les principaux codes de réponse `HTTP` (200, 202. 404, 502, etc)
- Comprendre la notion d’identification et de coût d’usage d’une API comme Twitter
- Connaitre la notion de `query param` => les `?clef=valeur` dans l’URL
- Savoir créer sa propre API via `Flask`
## 5 - Base de données
- Savoir ce qu’est une base de données concrètement et son usage
- Savoir que le SQL n’est pas le seul type de base de données (`no-SQL`, `GraphDB`, `in-memory DB`, etc)
- Savoir se connecter à un serveur SQL (que ce soit en local ou sur Azure)
- Savoir utiliser les différentes interfaces (SQL workbench par exemple)
- Savoir faire des requêtes simples (`FROM students SELECT *`)
- Comprendre la notion de relationnel entre plusieurs tables (notion de jointure)
- Savoir communiquer avec une base de données depuis python
## 6 - Azure
- Savoir créer une machine virtuelle et savoir évaluer la puissance matériel nécéssaire
- Savoir créer une instance base de donnée et interagir avec (ajouter de la data, etc)
- Connaitre la différence entre `IaaS` / `SaaS` / `PaaS` / `FaaS`
- Savoir lire la documentation et être autonome sur un service de la partie Cognitive Services (`Face API, Speech`, `Language Understanding`, `Custom Vision`, etc)
## 7 - DevOps
- Savoir maitriser docker (`pull`, `run`, etc)
- Savoir créer son propre `Dockerfile`
- Savoir réaliser des tests unitaire de son code
- Connaitre la notion de `CI/CD` (`Jenkins`, `CircleCI`, etc)
## 8 - Python avancé
- Maitriser la notion de concurrence / parallélisme
- Savoir gérer les exceptions
- Savoir bien réaliser des messages de logs
- Expressions régulières (RegEx)
## 9 - Machine Learning
- Savoir afficher des graphs (via `matplotlib` par exemple)
- Savoir analyser la data avec `Pandas`/`Numpy`
- Savoir nettoyer la data non-conforme (données manquantes, données aberrantes)
- Savoir mesurer la qualité du modèle entraîné (overfitting et underfitting)
- Savoir choisir le type de modèle : supervisé, non supervisé, regression, classification
- Savoir réaliser une approche Machine Learning avec `Scikit-learn`
- Savoir établir un dashboard de la data via `PowerBI`
## 10 - Soft skills
- Faire preuve de pragmatisme pour répondre à la problématique donné
- Savoir être autonome dans sa recherche de solutions techniques
- Savoir experimenter (en local par exemple) du plus simple au plus complexe de façon iterative
- Savoir restituer à l’oral en vulgarisant