Explorons l’analyse de la donnée. Partie 1 : installation des outils

Introduction

Cette article débute une série d’articles concernant l’analyse de la donnée. La démarche est exploratoire, les résultats seront présentés petit à petit dans de futurs articles.

Cela impose quelques explications. Quand on parle d’analyse de la donnée, de quoi s’agit t’il ?
Pour y mettre un visage cela se traduit par un métier très en vogue, le métier de data scientist. Sa définition est selon wikipedia :

Le premier objectif du « data scientist » est de produire des méthodes (automatisées, autant que possible) de tri et d’analyse de données de masse et de sources plus ou moins complexes ou disjointes de données, afin d’en extraire des informations utiles ou potentiellement utiles.
Pour cela, le « scientifique des données » s’appuie sur la fouille de données, les statistiques, le traitement du signal, diverses méthodes de référencement, apprentissage automatique et lavisualisation de données. Il s’intéresse donc à la classification, au nettoyage, à l’exploration, à l’analyse et à la protection de bases de données plus ou moins interopérables.

Un ordinateur, un soupçon d’informatique et un bloc note

Deux langages informatiques sont prépondérants pour faire de l’analyse de données : le langage Python et un dérivé, le langage R. J’utiliserai le langage Python qui peut être utilisé pour beaucoup d’autres usages.
J’en profite pour passer un message :  n’ayez pas peur des langages informatique, c’est accessible avec quelques bases simples  … et à partir du moment où on peut copier des blocs de code tout fait pris à droite et gauche. Internet est une source inépuisable en ce qui concerne la programmation.

Avant d’automatiser, si possible, le traitement de cette donnée, il est nécessaire de l’explorer et de tester différentes méthodes et différents outils sur cette matière. Pour que cette exploration soit efficace, il faut un outil adapté, le bloc note du data scientist.
Un produit open source sort du lot : Jupyter qui est effectivement un bloc note en ligne permettant de mélanger des notes, du code informatique et le résultat généré par ce dernier. Le concept est vraiment génial ! Cela ressemble donc à quelque chose comme cela:

Autre avantage de Jupyter : l’exportation au format html des cahiers de notes que je vais pouvoir réimporter directement dans le blog pour générer un article. Trop facile !

Où et comment mettre en oeuvre Python et Jupyter

J’ai trois solutions à vous proposer, allant de la plus évidente à la plus complexe :

1. Créer un compte sur l’espace colab de google

Cela se passe là : https://colab.research.google.com/.
Créer un compte google si vous n’en avez pas déjà un, et cet espace infini et au delà est à vous sans autre manipulation !
En effet google fournit gratuitement un environnement de travail basé sur jupyter qui vous permet de réaliser ces expérimentations sans rien installer.

2. Installer le nécessaire sur votre PC habituel

Désolé je n’ai pas choisi cette solution, c’était trop simple 😉 . Mais vous avez de nombreux articles qui vous aideront à réaliser cette installation dont certains en français :

3. Installer sur un serveur linux

Jupyter est un service Web, on y accède avec un browser internet. Cela a donc du sens que ce soit hébergé sur un serveur. Par ailleurs en l’installant sur mon serveur linux, au plus proche des bases de données, je m’assure d’un traitement efficace.

Cela me permet aussi de vérifier que ce serveur a la puissance nécessaire pour traiter automatiquement ces données dans un temps raisonnable, une fois la période d’exploration passée.

Installation d’une machine virtuelle hébergeant Jupyter

Voici les étapes que j’ai passées pour installer Jupyter. Cette installation s’est faite dans une machine virtuelle séparée des autres fonctions du serveur, pour des raisons de sécurité, mais surtout pour être en mesure de pouvoir limiter la puissance CPU utilisée par Jupyter sur le serveur. Les traitements pourraient effectivement devenir lourds, mais cela ne doit pas impacter les autres fonctions du serveur.

L’OS de ce serveur est Ubuntu serveur en version 16.04 ( Xenial), version du noyau 4.4.0-174-generic. Le système de fichier est au format btrfs.

1. Création et configuration d’un container LXC

J’utilise la technologie LXC pour installer un équivalent de machine virtuelle linux. Cette technologie se base sur trois principes

  • l’utilisation du même noyau linux que la machine hôte
  • le chroot qui permet de séparer le système de fichier du container LXC de celui de la machine hôte
  • Un namespace séparé isolant complètement les actions effectuées dans le container de la machine hôte et des autres containers

A l’utilisation, cela signifie qu’on a l’impression d’être sur une machine complètement séparée des autres, mais en gardant des performances identiques à la machine hôte.

Avant de créer ce nouveau container, je crée un subvolume btrfs qui me permettra de réaliser par la suite des snapshots (des sauvegardes flash) séparées de ce container

cd /var/lib/lxc
btrfs subvolume create lxc-linuxai

Puis création du container

lxc-create -t download -n lxc-linuxai -- -d ubuntu -r xenial -a amd64

Modification de la configuration du container (paramétrage réseau, réduction des ressources de calcul et mémoire allouées à la machine)

cd lxc-linuxai
nano config
******** Contenu fichier config ********
#Auto Start
lxc.start.auto = 1
lxc.start.delay = 17
lxc.aa_profile = unconfined
# Common configuration
lxc.include = /usr/share/lxc/config/ubuntu.common.conf
# Container specific configuration
lxc.rootfs = /var/lib/lxc/lxc-linuxai/rootfs
lxc.rootfs.backend = dir
lxc.utsname = lxc-linuxai
lxc.arch = amd64
# Network configuration local
lxc.network.type = veth
lxc.network.name = eth0
lxc.network.link = br0
lxc.network.flags = up
#Hardware setup
#lxc.cgroup.memory.limit_in_bytes = 2048M
#lxc.cgroup.cpuset.cpus = 1
lxc.cgroup.cpu.shares = 200
# Network configuration Out
lxc.network.type = veth
lxc.network.name = eth1
lxc.network.link = out0
lxc.network.flags = up

Enfin on démarre ce container, on s’assure que la connectivité réseau est bien montée, puis on se connecte dans ce container pour effectuer sa configuration interne.

lxc-start lxc-linuxai
lxc-ls --fancy
lxc-execute lxc-linuxai -- /bin/bash

2. Configuration de la machine virtuelle

La connectivité réseau est essentielle, donc première étape, la configurer ou la vérifier

cd /etc/network
vi interfaces
******** Contenu fichier interfaces ********
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.2.xx
network 192.168.2.0
netmask 255.255.255.0
gateway 192.168.2.xx
dns-nameservers 192.168.2.xx

Redémarrage de l’interface réseau pour mettre à jour la configuration. On peut alors réaliser une mise à jour des paquets avec apt-get puis installer et le démarrer le serveur ssh

ifdown eth0
ifup eth0
apt-get update
apt-get upgrade
apt-get install nano
apt-get install openssh-server
service ssh start

Il est à présent possible de se connecter en ssh directement à la machine virtuelle (utilisation du logiciel putty par exemple). L’ utilisateur/mot de passe par défaut est ubuntu/ubuntu.

3. Installation de Python et Jupyter

Par défaut ubuntu installe Python2, et l’utilise pour différents usages. Néanmoins cette version est ancienne, et certaines bibliothèques d’importance pour le traitement de la donnée ne seront plus maintenues pour python2. Installons donc Python3 puis Jupyter

apt-get install python3 python3-dev python3-pip
python3 -m pip install --upgrade pip
apt-get install ipython ipython-notebook
pip install jupyter

Faisons en sorte que l’accès à Jupyter ne soit pas limité à la machine locale

jupyter notebook --ip='*' --allow-root

Jupyter peut être lancé automatiquement au démarrage de la machine si un service est programmé.

nano /lib/systemd/system/jupyter.service
systemctl enable jupyter.service
systemctl start jupyter.service
******** Contenu fichier jupyter.service ********
$ cat /usr/lib/systemd/system/jupyter.service
[Unit]
Description=Jupyter Notebook
[Service]
Type=simple
PIDFile=/run/jupyter.pid
# Step 1 and Step 2 details are here..
# ------------------------------------
ExecStart=/usr/local/bin/jupyter-notebook --config=/home/jupyter/.jupyter/jupyter_notebook_config.py
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/jupyter/
Restart=always
RestartSec=10
#KillMode=mixed
[Install]
WantedBy=multi-user.target

4. Installation de librairies python3

L’une des forces du langage python est la disponibilité de multiples librairies offrant des fonctions avancées. A minima les librairies suivantes sont nécessaires car très largement utilisées dans le domaine de l’analyse de donnée :

  • matplotlib : fonctions pour traçage de graphiques
  • pandas : fonctions d’analyse de donnée de masse

Pour rappel,python2 et python3 sont installés, mais c’est bien python3 qui sera utilisé pour le traitement de la donnée. L’installation se fait donc avec la commande pip3 impérativement.

pip3 install matplotlib
pip3 install pandas

5. Installation finie, accédons à Jupyter

On accède par défaut à Jupyter par cette adresse :

http://adresse.ip.machine.virtuelle:8888

Au premier accès, il est possible de fixer un mot de passe pour protéger son accès.

Vincent Recipon

Propriétaire de ce blog. Owner of this blog.

Vous aimerez aussi...

2 réponses

  1. lundi 20 avril 2020

    […] développé le code sur Jupyter. L’installation sur serveur est expliquée ici. La programmation est en Python.Utilisation des librairies numpy, pandas, geopandas, […]

  2. dimanche 17 mai 2020

    […] développé le code sur Jupyter. L’installation sur serveur est expliquée ici. La programmation est en Python.Utilisation des librairies numpy, pandas, geopandas, […]

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.