python en data science

Les étapes pour utiliser Python en data science

Emmanuel Jakobowicz Mis à jour le : 12 février 2016 méthode 3 Comments

Depuis quelques années, le langage python prend une ampleur tout à fait inattendue avec une utilisation de plus en plus large. En science des données, python est devenu le langage de prédilection pour le traitement et l’analyse des données. Python en data science est devenu une référence.

Grâce à un écosystème d’API extrêmement riche il permet de traiter des données de types très variées (entre autres SQL mais aussi noSQL) et de piloter des outils de traitement avancé (notamment Spark avec PySpark pour le traitement massivement parallèle de données dites big data).

Dans cet article, mon objectif est de vous présenter un processus assez standard de développement d’outil pour le traitement des données avec le langage python en introduisant les bibliothèques adaptées.

python en data science

L’utilisation de python en data science

Python a pris le dessus sur de nombreux autres langages grâce à 3 facteurs :

  1. La simplicité du langage : pour un langage de programmation orienté objet, python possède une courbe d’apprentissage ultra-rapide. Vous êtes très rapidement opérationnel en python. Quelques jours suffisent à l’acquisition des bases du langage et à vous rendre opérationnel.
  2. La multitude de bibliothèques (librairies ou packages suivant la terminologie) : mettre en place une bibliothèque en python est extrêmement simple et ceci a permis la publication de bibliothèques spécialisées par des équipes de recherche.
  3. Le nombre impressionnant d’API vers d’autres programmes ou d’autres environnements. Il est extrêmement simple de se connecter à d’autres environnement avec python.

Ces trois points font de python le langage de prédilection de nombreux projets et tout particulièrement dans le cadre du traitement des données et de la data science.

La mise en place d’un projet python en data science

Quelque soit votre projet, big data, IoT (internet des objets), traitements « classiques » des données, un certain nombre de questionnements s’impose lors de la mise en place de votre projet.

1- Les i/o (input / output)

Il s’agit de définir les entrées et les sorties au sens large dans un premier temps. Les informations en entrée et les objectifs. Dans le cadre d’un projet IoT, par exemple, on aura en entrée les relevés effectués par l’objet et en sortie, on pourra soit vouloir afficher ces relevés, soit afficher des décisions à prendre, soit prendre directement une décision. Une fois que ces entrées et sorties sont définies au niveau global, il faut les identifier au niveau local.

Il s’agit du format des données en entrée et en sortie. S’agit-il de données récupérées en temps réel, de données stockées dans des bases de données, de données stockées dans des fichiers… ? Pour les sorties, de la même façon, on devra s’interroger sur le format des données à restituer. Doit-on stocker les résultats dans des bases de données, doit-on les transmettre aux objets sous forme de commandes… ?

La réponse à ces questions vous permettra de définir les outils à utiliser dans votre programme python en data science.

2- La volumétrie

Aujourd’hui, on parle beaucoup de big data et pour beaucoup d’entre vous, il s’agit encore de concepts flous. La question qui se pose pour chaque projet est : dois-je utiliser des technologies dites « big data » ou puis-je garder les technologies que j’utilise actuellement ?

Bien évidemment, la réponse dépend du contexte. On différencie généralement 4 cas :

  • Mes données sont déjà structurées dans des bases de données (type SQL) et je ne prévois pas d’évolutions rapides de la volumétrie. Dans ce cas, l’utilisation de technologies classiques du type MySQL, SQLite… est adaptée et induira une importation de bibliothèques python permettant de faire des requêtes en SQL et avec des traitements en utilisant les outils de python.
  • Mes données sont structurées, peu volumineuses et je n’ai pas de contraintes de temps importantes (relevé quotidien, hebdomadaire…, pas de temps réel). Dans ce cas, on privilégiera l’importation des données avec les outils de python depuis des bases de données ou des fichiers plats.
  • La masse de données récupérées est très importante et je dois effectuer des traitements lourds en terme d’analytics avec notamment des algorithmes de machine learning. Dans ce cas, vous allez devoir mettre en place des calculs massivement parallèles en utilisant des outils dits « big data ». On privilégiera Apache Spark basé sur des clusters Hadoop permettant de stocker vos données. Python vous permettra de gérer l’ensemble du processus notamment avec l’utilisation de l’API PySpark. Je ne rentrerai pas dans le détail de ce genre de cas dans cet article, je publierai prochainement un article sur Apache Spark et toutes ses spécificités.
  • La masse de données est importante mais les traitements sont légers. Dans ce cas, on pourra privilégier des clusters Hadoop pour le stockage et des traitements du type MapReduce pour les analyses. On pourra aussi utiliser python avec une API pour faire du MapReduce.

Python vous servira pour ces 4 cas, je me concentre sur les 2 premiers dans cet article avec l’utilisation d’algorithmes de machine learning.

Cas pratique

Supposons que l’on récupère des données stockées dans une base MySQL (et oui, il reste beaucoup d’utilisateur qui en sont encore là et n’ont pas plongé dans le monde des big data) et que l’on veuille appliquer des méthodes de machine learning avant d’exporter les résultats sous forme de fichiers csv pour être utilisés dans une application web (nous nous concentrons sur la partie données, vous trouverez de nombreux tutos pour créer vos applications web en python).

pandas python
SQLalchemy python

1- L’importation des données et le prétraitement

Il ne s’agit pas ici de présenter toutes les API de python pour récupérer des données.
Je vais utiliser pour cela deux bibliothèques très complètes :

  • pandas : pour l’importation et le prétraitement des données. Il s’agit d’une bibliothèque qui vous permet de mettre en oeuvre des DataFrame.
  • SQLalchemy est un outil extrêmement puissant pour gérer les données stockées sous différents types de bases de données en SQL.

La première étape consiste en l’importation des bibliothèques :

import pandas as pd
from sqlalchemy import create_engine

On va donc récupérer les données et les stocker dans un DataFrame afin de les transformer. Pour cela, on fait une requête directement dans la base SQL (on ne récupère pas toute la base) et on remplit un DataFrame avec le résultat.

engine = create_engine("mysql+mysqldb://root:"+'PASSWORD' +"@localhost/ma_bdd")

frame = pd.read_sql_query('SELECT * FROM mytable', engine)

SQLalchemy est extrêmement puissant, vous pouvez voir tous les détails ici : http://www.sqlalchemy.org/
Les outils d’importation SQL de pandas sont détaillés ici : http://pandas.pydata.org/pandas-docs/stable/io.html#io-sql

Le DataFrame créé comporte toutes les données importées, on peut ensuite le nettoyer en utilisant tous les outils de pandas pour faire en sorte d’avoir des données les plus propres possibles.

Le « cookbook » de pandas vous permettra de voir tout ceci en détail.

2- Les analyses en utilisant le machine learning

Une fois les données nettoyées, stockées dans un DataFrame et prêtes à être analysées, vous pouvez maintenant appliquer des outils de machine learning (apprentissage automatique) et représenter les résultats par des visualisations.

Les deux bibliothèques de référence pour cela sont scikit-learn et matplotlib. Elles sont toutes les deux extrêmement complètes et possèdent de nombreuses fonctionnalités pour python en data science.

Continuons notre exemple d’IoT, notre objet connecté est un objet permettant de payer des achats dans des points de vente, dès qu’un achat est effectué, il envoie dans une base de données une trentaine de paramètres liés à cet achat (position, montant, …). La base SQL est déjà composée de 10’000 transactions. L’intérêt est ici de travailler sur certaines variables d’intérêt pour pouvoir obtenir 6 classes de transactions.

Nous avons donc récupéré les données associées aux 10’000 transactions et nous nous concentrons sur 12 variables quantitatives.

Nous utilisons scikit-learn et la méthode des k-means.

Nous avons donc stocké les données dans un frame nommé frameTransac de taille 10’000×12. Nous allons dans un premier temps utiliser la méthodes des k-means pour obtenir les 6 classes.

from sklearn.cluster import KMeans
model = KMeans(6) 

class = model.fit_predict(FrameTransac[nom_des_variables])
class_center = DataFrame(model.cluster_centers_, labels="Element central")

On a donc récupéré les indicateurs de classe et le centre de chaque classe. Il suffit maintenant de stocker ces éléments dans des DataFrame afin de les restituer dans des fichiers.

Dans un cadre opérationnel, il serait possible dans un second temps d’appliquer la méthode des k-plus proches voisins avec scikit-learn afin de prédire la classe d’appartenance d’une nouvelle transaction. Pour faire cela, il suffit d’utiliser nos 10’000 transactions comme échantillon d’apprentissage en utilisant la fonction KNeighborsClassifier avec comme classes, les 6 classes obtenues avec les k-means. On pourra ensuite utiliser ce modèle pour prédire les nouvelles valeurs. Ceci sort du cadre de cet article et est abordé dans nos formations python appliqué à la data science.

scikit learn python
matplotlib python

3- L’exportation des données

Les informations importantes pour l’affichage en sortie sont les catégories de clients, on va donc uniquement exporter les centres des classes dans un fichier csv grâce aux outils de pandas.

class_center.to_csv("centers.csv")

On obtient donc un fichier csv pouvant être utilisé, il est exporté dans le répertoire de travail, on peut très bien adapter le chemin. On pourrait aussi changer les séparateurs afin d’utiliser d’autres formats. Ainsi si vous voulez un csv « à la française » (séparé par des points virgules et utilisant des virgules à la place des points), vous pourrez utiliser la commande suivante :

class_center.to_csv("centers.csv",sep=";",decimal=",")

Le processus complet peut être automatisé afin d’évoluer en fonction des modifications de la base de données initiale. On pourrait aussi afficher des graphiques avec la représentations des classes de transactions.

Conclusions

Python est le langage de prédilection pour le traitement et l’analyse des données, il constitue un sérieux concurrent pour R et permet d’intégrer des traitement d’analyse de données dans des applications du type IoT. N’hésitez pas à me faire part de vos expériences en commentant cet article.

Inscrivez-vous à notre prochaine formation python en data science
STAT4DECISION organise des formations au langage python pour des applications en traitement des données. Que ce soit en inter-entreprise ou directement sur mesure dans votre structure, contactez-nous ! En savoir plus.

Partager cet article

Comments 3

  1. Salut le cours sur les données statistique est très enrichissante, j’aimerais en apprendre encore plus. Je suis débutante en programmation , je suis présentement une formation de Master en Data Science – Big Data.

    1. Bonjour,
      Il vous faut soit suivre une formation sur python ou R. Vous en trouverez en ligne ou en présentiel assez facilement. Ceci vous donnera les bases pour progresser rapidement.
      Cordialement,
      Emmanuel

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.