4 KiB
Cours de O.Bonneton
Intro
Cours initialement prévu pour les master finance (MPIF).
On va bosser avec Python, anaconda et 3 librairies : panda, numpy et scipy. Python est le 2e langage au monde, juste derrière Java. Le prof aime bien R aussi mais pour pas trop en rajouter on va pas en faire. À l'occase on peut installer et tester R (mais sans le dire au père Noël), c'est vraiment chouette.
Le Machine Learning, on est pas précurseurs en la matière : on aurait pu il y a 5/6 ans. Mais à l'époque on avait pas les mêmes capacités techniques et on galérait bien notre maman pour charger des set de data de 1Go
3 grands axes dans le ML : apprentissage non supervisé (clustering, réduction), supervisé (classification/régression) et de renforcement.
L'IA n'est pas vraiment intelligente, si on regade de près, tout est une affaire de quelques lignes de codes... Un système de recommandation, par exemple, c'est très puissant mais ça fait 10 lignes. Ça se fait même assez rapidement : les entreprises se mettent à exploiter leurs données (genre Darty ou MAIF). Obtenir les données : pas si difficile aujourd'hui, bcp en open-source.
Le plan est exposé sur la présentation du cours. On va faire la première page ensemble, le contenu de la deuxième devrait être vu avec l'autre prof (F.Baradel).
Environnement technique :
- Python 3.7
- Enthought Canopy // Anaconda
- Apache Spark
- Tensor Flow
- Keras
Affichage d'un plan type plan de métro plutôt riche : le champ est vaste. On ne va faire qu'un cours d'introduction qui va nous donner une vision d'ensemble, à nous d'aller ensuite où on veut.
Installation d'Anaconda. Revue rapide de R.
Python
En guerre avec R. Ceux de la finance préfèrent ce dernier. Les deux sont intéressants, mais on ne fera pas de réseau de neurones avec R. Explorer R à l'occasion !
Types
- int
- float
- str
- bool
Affichage / Saisie
afficher
print("foutre")
saisir :
v = int(input("insérer une valeur"))
Conditions
if:
|
if:
|
else:
|
if:
|
elif:
|
else:
|
Boucles
for i in range(0, 10):
for i in range(10):
if(x is 1):
continue
else:
break
for i in range(0, 10, 2):
while ... :
Listes
list = [1, 2, 3]
tuple = (1, 2, 3)
dict = { "one" : 1, "two": 2, "three": 3}
# permet de tout sélectionner avec un offset correspondant au chiffre
list[:2]
list[2:]
list[-1:]
# fonctions
list.append(4) # une seule valeur ou un tableau
list. extend(5, 6) # plusieurs valeur
list.sort()
list.sort(reverse=True)
(x, y) = "56,34".split(',') # x = 56 et y = 34
dict.get("key") # revient à dict["key"]
Importation de modules
import numpy as np
from math import random as rd
Ne pas fabriquer ses jeux de données : c'est chiant. Il y en a partout, se servir !
Fonctions
def DoSomething(f, x)
return f(x)
print(SquareIt, 3)
# on utilise lambda pour faire une fonction inline
print(DoSomething)(lambda x: x * x * x, 3)
Biblio
Voir PDF, du plus simple au plus dur.
Sinon en ligne on a toute la doc de Scipy.
Pandas
Lancer Anaconda > Jupyter lab
Sur des jeux de data à partir de 2/3 Go, il vaut mieux utiliser Sparks.
De base, describe()
ne retourne que sur les colonnes calculables (int), mais en faisant un include='all'
il nous retourne des trucs intéressants aussi, genre "top" et "freq" qui indiquent l'entrée qui revient le plus souvent et le nombre d'occurences.
Les notebook sont exportables ! Genre en HTML, LaTeX...
Une grosse partie du travail est dans le traitement des données et la normalisation du tableau.
Nettoyage de données
NaN : la question qui se pose est : qu'en faire ?
Une solution intéressante est par exemple de calculer la moyenne (sans les NaN), et remplacer les NaN par cette moyenne. On peut aussi faire un tirage au hasard. Il y a vraiment beaucoup de possibilités. Il faut s'adapter au type de colonne auquel on à faire. Supprimer la ligne est pas vraiment la meilleure solution, on vire souvent trop de trucs.