Datascientists : n’ayez plus peur de la ligne de commande Unix !

DATASCIENTISTS : N'AYEZ PLUS PEUR DE LA LIGNE DE COMMANDE UNIX !

Unix est un système d’exploitation répandu. Il existe plusieurs façons de communiquer avec celui-ci. Facile à appréhender quand il est utilisé via une interface graphique, car elle se veut plutôt ergonomique et simple à prendre en main. Toutefois, l’interface graphique devient rapidement peu adaptée pour une automatisation des tâches. Une seconde approche doit être considérée : le Terminal et les commandes Unix.

Unix en général  

Les commandes Unix sont souvent simples et ne répondent, en général, qu’à un besoin très précis. Cette spécificité ne limite pas pour autant les capacités de cet OS. Une combinaison de commandes permet de réaliser des opérations plus complexes. Le pipe | facilite l’association de plusieurs commandes. Il redirige le résultat de la commande précédente vers la commande suivante.

La commande « commande1 | commande2 » donne comme input à la commande2 l’output de commande1. Une commande plus complexe est créée à partir de deux commandes « simples ».

Prenons l’exemple suivant : connaître le nombre de lignes où la chaîne de caractères « nan » est présente dans un fichier.

L’usage de la commande suivante y répondra :

grep "nan" fichier | wc -l

La commande grep recherche la chaîne « nan » dans le fichier. Ensuite, le pipe redirige le résultat de celle-ci qui deviendra l’input du wc -l. « – l” compte le nombre de lignes d’un fichier.

Cet exemple simple illustre la modularité et la multiplicité des combinaisons possibles.

Ces commandes sont majoritairement utilisées pour la gestion des user, la gestion du file system, le réseau, le monitoring…, Grace à elles, une communication avec la machine à un niveau assez fin est facilité. Les sysAdmin les utilisent souvent, étant responsables de ces tâches centrales. Elles ne restent pas pour autant oubliées par d’autres fonctions telles que les Datascientists.

Unix Datascience  

Un Datascientist rédige des scripts dans différents langages lancés sur différents environnements. Il lui arrivera souvent de préparer les données en SQL, puis de réaliser la modélisation sous Python et enfin d’intégrer ses résultats dans un outil de dataviz afin de les valider. Les commandes Unix orchestreront l’enchaînement de toutes ces opérations aisément voire d’aller plus loin.

Dans le cas d’une extraction de données en SQL, pour un modèle en Python suivis d’une intégration à un outil de dataviz, le Datascientist lancerait son script SQL puis rapatrierait le résultat de ses requêtes vers son environnement local afin de pouvoir les traiter en Python. Une fois le traitement terminé, les données doivent de nouveau être transférées vers l’environnement consacré à la dataviz. 

Durant tout ce processus, le Datascientist peut utiliser tout type de commandes qui vont lui permettre de :

  • Monitorer l’état des serveurs ;
  • Suivre, contrôler ses traitements ;
  • Faire communiquer les différents environnements ;
  • Apporter des modifications aux fichiers le cas échéant.

Avant l’extraction des données par le script SQL, la capacité de stockage disponible doit être vérifiée. Cette information est accessible via la commande :

df -h chemin

La commande df pour ‘disk free’ est associée à l’option ‘-h’ afin d’obtenir les résultats dans une unité lisible par un humain, et non en bytes.

Une fois validé, le script SQL est exécuté. Durant le traitement, s’il souhaite connaître l’état du serveur ; plusieurs commandes Unix lui en donnent la possibilité.

La commande nmon en est une. Elle ouvre dans le terminal une interface graphique, interactive, qui se met à jour, par défaut, toutes les deux secondes et fournit un certain nombre d’informations sur la mémoire, et l’usage des CPU entre autres.

Le traitement SQL terminé, le Datascientist peut contrôler rapidement les résultats. via la commande head . Les 10 premières lignes d’un fichier dans la sortie standard sont renvoyées, par défaut.

head fichier

Après consultation du fichier, s’il s’aperçoit que le nom des colonnes ne figure pas : il peut soit relancer son traitement soit utiliser des commandes Unix.

La commande cat facilite la concaténation des plusieurs fichiers. Un fichier contenant l’ensemble des noms de variables est créé.  Il pourra ajouter à la variable ‘col_name.csv’ les données ‘data.csv’. La commande est la suivante :

cat col_name.csv data.csv > data.csv

À l’instar du pipe | qui redirige la sortie standard vers une autre commande, le symbole > (chevron) qui joue ce rôle  vers un fichier, en l’occurrence data.csv’. L’ancien fichier est écrasé par le nouveau dans lequel sont complétés le nom des variables.

Arrive l’étape ou les données du serveur SQL doivent être envoyées vers le local où est installé Python. La commande scp le rend possible.

Deux options sont envisageables :

  • Depuis le serveur SQL, envoyer les données vers le local :
scp chemin/data.csv user@local:chemin
  • Depuis le local, rapatrier les données du serveur SQL :
scp user@SQL_serveur:chemin/data.csv chemin

La commande scp fonctionne ainsi : scp ‘from’ ‘to’. Selon la situation choisie, il faudra soit être connecté :

  • Au serveur SQL et indiquer que l’envoi est effectué vers le local

(user@local:)

  • Au local indiquer que les données sont récupérées depuis le serveur SQL

(user@SQL_serveur:)

Le script Python peut être exécuté.

python chemin/script.py

Comme mentionné précédemment, monitorer le traitement se réalise facilement (cf nmon). De plus, une conservation des logs est réalisable et sauvegardée dans un fichier, par exemple ‘logFile’.

python chemin/script.py > logFile

L’ensemble des informations qui auraient été affichées dans la sortie standard sont maintenant redirigées vers le fichier ‘logFile’.

L’avancement du script est obtenu via la commande tail. Elle s’apparente à la commande head vue précédemment. Les dix dernières lignes d’un fichier sont affichées. Durant l’exécution du script, le fichier logFile sera régulièrement mis à jour ce qui nécessiterait l’utilisation régulière de la commande tail . L’option ‘-f’ permet de s’en défaire.

tail -f logFile

Ici, les dix dernières lignes du fichier de log seront affichées et se mettront à jour à chaque nouvelle écriture. Une fois le traitement terminé, le Datascientist pourra également :

  • Contrôler ses résultats ( head ) ;
  • Envoyer les résultats vers le serveur de dataviz ( scp )

Le projet de Datascience a été menée dans sa globalité, malgré les environnements et langages différents ainsi que les petites erreurs inhérentes aux traitements. Les commandes vues facilitent l’automatisation de l’ensemble des traitements.

Cet article a mis en avant quelques usages des commandes Unix, ainsi que leur modularité. Ce système d’exploitation offre des possibilités énormes et, utilisé habilement, s’adapte aux métiers de la Data. Ces commandes accompagnent l’ensemble d’un projet de Datascience. Connaître les fonctions de base, voire les maîtriser présente un avantage non négligeable pour un Datascientist.