Peut-être vous le savez déjà, mais les 2 langages compilés qui sont les plus adaptés dans le développement d’applications Big Data aujourd’hui sont Java et scala.

Aujourd’hui, votre carrière dans le Big Data serait handicapée si vous n’avez pas un certain niveau de connaissance sur ces 2 langages.  En réalité, Java et Scala sont adaptés pour les profils Data Engineer et/ou Data Architect. Or, aujourd’hui, il y’a une nouvelle catégorie d’acteurs qui travaillent sur les projets Big Data : ce sont les profils de Data Analyst, Data Scientists et Business Analyst. 

Ces 3 profils travaillent en frontal d’un projet Big Data et n’ont pas nécessairement besoin de maîtriser le cycle de vie complet du développement d’une application Data :

  • Le Business  Analyst va se concentrer exclusivement sur la recette, pour valider que les données produites par l’application sont conformes aux spécifications métier. 
  • Le Data Scientist va développer des modèles statistiques
  • Le Data Analyst va mener des analyses de données en frontal et développer des tableaux de bord.

Pour ces 3 profils, il y’a un langage qui leur permet de travailler dans la Data : c’est Python.

A la base, Python n’était pas conçu pour l’analyse de données, mais plus pour le développement web. Avec le temps, Python s’est tellement enrichi qu’aujourd’hui il fait partie des langages les plus utilisés dans le paysage de la data et celui du Big Data. Que ce soit pour le web scraping, le traitement de données, le machine Learning, la Data Science, ou encore l’analyse de données, Python offre une vaste bibliothèque d’API, combinée à une facilité d’utilisation inégalée qui lui permet de couvrir quasiment toute l’exhaustivité des cas d’usage de la data. Ainsi, si vous souhaitez travailler dans le Big Data, et en particulier en tant que Data Analyst, Business Analyst, ou encore Data Scientist, alors vous devez avoir au moins une bonne base en programmation python.

Dans ce tutoriel exhaustif, nous allons vous équiper des concepts et outils qui forment la fondation de l’utilisation de Python en Big Data.

Qu’est ce que le langage Python et à quoi sert-il ?

Python est un langage de programmation dont la première version est sortie en 1991. Créé par le néerlandais Guido van Rossum, ce langage a voyagé du Macintosh de son créateur qui travaillait à l’époque au Centrum voor Wiskunde en Informatica au Pays-Bas, jusqu’à se voir associé à une organisation à but non lucratif, la Python Software Foundation, créée en 2001. Ce langage a été baptisé ainsi en hommage à la troupe de comiques les « Monty Python » dont Guido van Rossum est un grand fan…

Python est un langage de programmation facile à apprendre, disposant de structures de données et de bibliothèques qui le rendent adéquat pour le traitement de données. C’est pourquoi il est si utilisé par les Data Analysts et les Data Scientists.

Parce qu’il a été conçu comme un langage polyvalent (à la fois orienté objet et procédural), il n’est pas limité à un seul type de développement. Vous pouvez l’utiliser pour tout, de l’analyse de données à la création de jeux. Python est également devenu incroyablement populaire dans la communauté scientifique, car les scientifiques l’utilisent pour calculer des équations compliquées et analyser des données.

Quelques applications du langage Python

Python est présent dans quasiment tous les domaines émergents. Grâce à son architecture polymorphique, c’est le langage de programmation qui connaît la croissance la plus rapide actuellement, et qui peut être utilisé pour développer simultanément n’importe quel type d’applications. Voici quelques cas d’usage du langage :

  • Développement web : ce qui fait de Python l’un des langages de programmation les plus populaires pour le développement web, c’est le fait qu’il fournisse un large éventail de frameworks et de systèmes de gestion de contenu (CMS) qui existent pour simplifier la vie d’un développeur web. Parmi les exemples les plus connus de ces frameworks de développement web, citons Flask, Django, Pyramid et Bottle, tandis que les systèmes de gestion de contenu les plus connus sont Django CMS, Plone CMS et Wagtail. L’utilisation de Python pour le développement web offre également plusieurs autres avantages, tels que la sécurité, l’évolutivité facile et la commodité du processus de développement. De plus, Python est livré avec une prise en charge prête à l’emploi de divers protocoles Web tels que HTML, XML, les protocoles de messagerie électronique les plus utilisés et FTP. Python possède également l’une des plus grandes collections de bibliothèques qui non seulement améliorent les fonctionnalités des applications Web, mais facilitent également leur mise en œuvre.
  • Les interfaces graphiques : Il existe de nombreuses boîtes à outils d’interface utilisateur graphique (GUI) que vous pouvez utiliser avec le langage de programmation Python. Les trois principales sont Tkinter, wxPython et PyQt. Chacune de ces boîtes à outils fonctionne sous Windows, macOS et Linux, PyQt ayant la capacité supplémentaire de fonctionner sur les mobiles.
  • La data science : les données jouent un rôle décisif dans le monde moderne. Pourquoi ? Parce qu’elles sont la clé pour comprendre et anticiper les comportements des gens et leurs préférences. Toute la Data science a pour objectif de ressortir ces comportements. La data science implique l’identification du problème, la collecte des données, leur mise en qualité, leur exploration, leur analyse et leur visualisation. L’écosystème Python propose plusieurs bibliothèques adaptées pour aborder les problèmes de Data Science. Par exemple TensorFlow, PyTorch, Pandas, Scikit-Learn, NumPy, SciPy et d’autres bibliothèques spécialisées dans la création et le réglage fin de modèles de deep learning et de machine learning, ainsi que dans le traitement intensif des données et leur manipulation.
  • La Data visualisation : celle-ci entre en jeu lorsque vous devez communiquer vos résultats aux parties prenantes et à votre équipe. Même pour les visualisations, l’écosystème Python ne manque pas de bibliothèques. Plotly, Matplotlib, Seaborn, Ggplot, Geoplotlib sont les outils de visualisation de données les plus utilisés.
  • Le Web scraping : Python est un outil formidable pour extraire les données d’un site web, ou pour le crawler dynamiquement. En effet, les sites Web étant constamment modifiés, leur contenu change au fil du temps. Par exemple, la conception du site peut être modifiée ou de nouveaux éléments de page peuvent être ajoutés. Un web scraper est programmé en fonction de la structure spécifique d’une page. Si la structure de la page est modifiée, le scraper doit être mis à jour. Ceci est particulièrement facile à faire avec Python. Il existe de nombreux outils sophistiqués pour effectuer du web scraping avec Python : Scrapy, Selenium et BeautifulSoup.
  • L’éducation : aujourd’hui, il existe plusieurs langages de programmation dans le monde. Chaque langage supporte des cas d’usage bien spécifiques. Il n’est donc pas facile de décider du langage par lequel commencer son apprentissage de la programmation. En ce moment, le secteur de l’éducation privilégie Python pour l’apprentissage de la programmation. Si ce choix est fait, ce n’est pas au hasard. C’est grâce à toutes ses bibliothèques, sa facilité d’utilisation, et le fait qu’il couvre un large panel de cas d’usage. Python est simple et facile à apprendre. Il possède une syntaxe assez proche de la langue anglaise. Dans le secteur de l’éducation, il est préféré à d’autres outils comme Java et C++ en raison de sa simplicité.

Pourquoi devez-vous apprendre à programmer en Python ?

Quelles sont les principales raisons pour lesquelles il est indispensable que vous appreniez à programmer en Python ? Nous allons vous donner la réponse à cette question ici.

Comme nous l’avons vu précédemment, Python possède plusieurs caractéristiques qui fait de lui un langage de programmation  incontournable dans plusieurs domaines. Ses principales caractéristiques sont les suivantes :

  • open-source : son utilisation est gratuite et les fichiers sources sont disponibles et modifiables ;
  • simple et très lisible : le code python est très facile à lire et à écrire. C’est un langage très facile à prendre en main d’un point de vue syntaxique. Vous n’aurez aucun problème à l’appréhender !
  • doté d’une bibliothèque de base très fournie : que ce soit pour l’analyse de données, la data visualisation, le scraping web, le Machine Learning, ou la Data Science, python dispose d’une bibliothèque d’API très riche.
  • orienté objet : contre tout attente, Python est un langage qui combine à la fois le paradigme de programmation procédurale au paradigme de programmation orientée objet. Vous pourrez donc implémenter des applications complexes sur Python.
  • typage dynamique : le typage (association à une variable de son type et allocation zone mémoire en conséquence) est fait automatiquement lors de l’exécution du programme, ce qui permet une grande flexibilité et rapidité de programmation, mais qui se paye par une surconsommation de mémoire et une perte de performance ;
  • présente un support pour l’intégration d’autres langages.

Maintenant, nous allons entrer dans le vif du sujet.

Les bases de la programmation Python

Maintenant que vous avez compris l’origine de Python, son intérêt dans le monde professionnel, et les caractéristiques qui le rendent si attractif, il est temps d’entrer dans la programmation python proprement dite.

Il est de coutume de démarrer l’apprentissage d’un langage de programmation par le fameux “Hello world”.

 print(Hello World)

Ce programme permet d’afficher “Hello World” dans votre console.

La plupart des langages de programmation tels que C, C ++ et Java utilisent des accolades {} pour définir un bloc de code. Python utilise l’indentation.

Un bloc de code (corps d’une fonction, d’une boucle, etc.) commence par une indentation et se termine par la première ligne non indentée. Le nombre d’indentations dépend de vous, mais il doit être cohérent tout au long de ce bloc.

Généralement, quatre espaces sont utilisés pour l’indentation et sont préférés aux tabulations. Exemple :

if 4 > 3:
   print("4 est supérieur à 3")

Il existe deux façons d’ajouter des commentaires dans le code Python. La première consiste à ajouter un dièse # au début d’une ligne et tout ce qui est écrit après le dièse sur la même ligne sera traité comme un commentaire et donc ignoré lors de l’exécution. Par exemple :

# Ceci est un commentaire
print("Hello world")

La deuxième manière d’ajouter un commentaire en Python est le commentaire multi-ligne écrit grâce à deux série de guillemets. Tout ce qui apparaît après la première série de guillemets est traité comme un commentaire jusqu’à ce que la deuxième série de guillemets soit atteinte. Cela signifie que vous n’êtes pas limités à placer des commentaires sur une seule ligne, vous pouvez en placer sur autant de lignes que nécessaire. Par exemple :

1	"""
2	Ceci est un commentaire
3	ecrit sur plusieurs
4	ligne
5	"""
6	print("Hello world")

Les variables en Python

D’une façon général, en programmation, une variable est une sorte de boite permettant de stocker une ou plusieurs données.

En Python, la déclaration d’une variable et son initialisation (c’est-à-dire la première valeur que l’on va stocker dedans) se font en même temps.

a = 4

Dans cet exemple, nous avons déclaré, puis initialisé la variable a avec la valeur 4. En réalité en arrière-plan, il s’est passé 3 choses :

  • Python a “deviné” que la variable était un entier. On dit que Python est un langage au typage dynamique.
  • Python a alloué  l’espace en mémoire pour y accueillir un entier.
  • Enfin, Python a assigné la valeur 4 à la variable a.

Affichage en Python

Dans le premier programme en python que nous avons effectué, nous avons utilisé la fonction print() pour pouvoir afficher notre fameuxHello world”. En fait la fonction print() affiche tout ce qu’il prend en argument plus un retour à la ligne. Par exemple :

print("Quel belle journée") #affiche "Quel belle journée" plus un retour à la ligne

Pour supprimer le retour à la ligne on ajoute l’argument end=””  à la fonction print()

1	print("Bonjour ", end="")
2	print ("Toto") 
3	"""
4	On a l'affichage suivant:
5	Bonjour toto
6	"""

La fonction print() permet d’afficher également le contenu d’une variable.

1	a = 2
2	print (a) # affiche 2

On peut afficher plusieurs variables simultanément avec la fonction print()

1 age  = 18
2 nom = "toto"
3 print (nom, " a ", age, " ans") #affiche toto a 18 ans

La méthode .format() permet une meilleure organisation de l’affichage des variables.

1  age  = 18
2  nom = "toto"
3  print ("{} a {} ans ".format(nom, age)) #affiche toto a 18 ans

Le typage de données en Python

Python supporte plusieurs types de base. Les données stockées en mémoire peuvent être de plusieurs types. Par exemple, l’âge d’une personne est stocké sous forme de valeur numérique et son adresse est stockée sous forme de caractères alphanumériques. Python dispose de plusieurs types de données standard qui servent à définir les opérations possibles sur ces données et la méthode de stockage pour chacune d’entre elles. Plus précisément, Python dispose de cinq types de données standard :

  •     Les nombres
  •     Les chaînes de caractères
  •     Le type Liste
  •     Le type  Tuple
  •     Et le type Dictionnaire

Vous pouvez obtenir le type de données de tout objet en python en utilisant la fonction type(). Par exemple :

a = 8
print(type(a)) #affiche <class 'int'>

Les types numériques

Python offre trois types numériques : int, float, et complex

Le type entier int permet de représenter n’importe quel nombre entier, peu importe sa taille. Exemple :

a = 8
b = 7849556774455
c = -485621
print(type(a)) #affiche <class 'int'>
print(type(b)) #affiche <class 'int'>
print(type(c)) #affiche <class 'int'>

Le type flottant float permet de représenter des nombres comportant une partie décimale , compris entre 10^-324 et 10^-308. Exemple

a = 2.0
b = 4.75
c = -8.256
print(type(a)) #affiche <class 'float'>
print(type(b)) #affiche <class 'float'>
print(type(c)) #affiche <class 'float'>

Le type complex représente les nombres complexes, où le nombre imaginaire se note j. Exemple :

a = 4+8j
b = 10j
c = -5j
print(type(a)) #affiche <class 'complex'>
print(type(b)) #affiche <class 'complex'>
print(type(c)) #affiche <class 'complex'>

Les chaîne de caractères (str)

Une chaîne de caractères est une suite de caractères entre guillemets (simples ou doubles). En Python, les éléments d’une chaîne sont indexés à partir de 0. Par exemple :

a = 'Bonjour'
b = "Hello"

print(type(a)) #affiche <class 'str'>
print(type(b)) #affiche <class 'str'>
print(b[1]) # affiche e

On utilise la fonction len() pour obtenir la longueur d’une liste

a = "Bonjour, le monde!"
print(len(a)) #affiche 18

Pour vérifier si un mot, une phrase ou un certain caractère est présent dans une chaîne de caractères, nous pouvons utiliser le mot-clé in

a = "Python est un langage incontournable dans le Big Data"
print("langage" in a)    #affiche true

Pour vérifier si un mot, une phrase ou un certain caractère n’est pas présent dans une chaîne de caractères, vous pouvez utiliser le mot clé not in

a = "Python est un langage incontournable dans le Big Data"
print("contournable" not in a) #affiche true

Les listes en Python

En Python, une liste est une structure de données qui contient une collection de valeurs de même types ou de types différents. Par exemple :

databases = ['ORACLE DB', 'MYSQL DB', 'MONGO DB']
customersId = [1,2,3,4,5]
firstCustomer = [1, 'Luc', 'Pierre', 18]

L’accès à un élément de la liste se fait grâce à son index dans la liste. Le premier élément de la liste a pour index 0, le second élément a pour index 1 etc…

print(databases[2]) #affiche MONGO DB
print(databases[0]) #affiche ORACLE DB

On utilise la fonction len() pour déterminer le nombre d’éléments d’une liste.

databases = ['ORACLE DB', 'MYSQL DB', 'MONGO DB']
print(len(databases)) #affiche 3

L’opérateur de concaténation + permet de concaténer deux listes et l’opérateur * permet de dupliquer une liste. Par exemple :

scores1 = [4,1,3]
scores2 = [2,5,8,2]
scores3 = scores1 + scores2
scores4 = scores1 * 2
print(scores3) #affiche [4, 1, 3, 2, 5, 8, 2]
print(scores4) #affiche [4, 1, 3, 4, 1, 3]

Pour ajouter un élément à la liste on utilise l’opérateur de concaténation + ou la méthode append()

fruits =[]
fruits = fruits + ['kiwi']
fruits.append('mangue')
print(fruits) #affiche ['kiwi', 'mangue']

Les tuples en Python

Les tuples ressemblent aux listes, mais on ne peut pas les modifier une fois qu’ils sont créés. On dit qu’ils sont immuables (Cf. Apprendre Scala par la pratique pour plus de détails sur l’immutabilité). Exemple :

a = (1,2,3) #un tuple
b = 4, 5, 7 #un autre tuple
print(b[1]) #affiche 5
print(type(a)) #affiche <class 'tuple'>
print(type(b)) #affiche <class 'tuple'>

L’un des intérêts des tuples est l’affectation multiple. L’affectation multiple permet d’effectuer sur une même ligne plusieurs affectations en même temps.

a, b, c = 1, 2, 3
print(a)    #affiche 1
print(b)    #affiche 2
print(c)   #affiche 3

Les dictionnaires de données en Python

Les dictionnaires sont utilisés pour stocker des valeurs de données dans des paires de clé:valeur. Par exemple :

produit = {
    "id": 1,
    "libelle": "stylo",
    "prix": 2
}
print(produit["libelle"]) #affiche stylo

Les opérateurs en python

Maintenant que vous connaissez manipuler les variables, il est temps de s’attaquer aux opérateurs.

Les opérateurs sur les nombres

Python offre les quatre opérateurs (+, -, *, /) de base pour effectuer des opérations sur les entiers (int) ou sur les décimaux(float). Par exemple :

1	a = 4
2	b = 5.0
3	print(a - b) #affiche -1.0
4	print (a + b) # affiche 9.0
5	print (a * b) # affiche 20.0
6	print (b / a) # affiche 1.25

On utilise l’opérateur ** pour exprimer une puissance

1	a = 5
2	b = a**2
3	print(b) #affiche 25

Pour obtenir le quotient et le reste de la division entière on utilise respectivement les opérateurs // et %. Par exemple :

print(8 // 5)    # affiche 1 
print(8 % 5)   # affiche 3

Il existe des opérateurs d’affectation particuliers qui permettent d’effectuer une opération puis une affectation en une seule étape : += , -=, *=, /=. += fait une addition puis une affection, -= fait une soustraction puis une affectation ainsi de suite. Exemple :

a = 1
a +=1
print(a)   #affiche 2
	
b = 2
b *=2
print(b) #affiche 4

Les opérateurs sur les chaînes de caractères

L’opérateur + concatène deux chaînes de caractères. L’opérateur  * entre un nombre entier  n et une chaîne de caractères duplique n fois une chaîne de caractères.

str = "Hello"
str1 = str + " World !"
str2 = str * 2
print(str1)    #affiche Hello World !
print(str2)    #affiche HelloHello

Les opérateurs de comparaison

Opérateur

Signification

Exemple

==

égalité

Soit a = 2; b = 5;

a == b vaut false

!=

Non égalité

Soit a = 2; b = 5;

a != b vaut true

>

Plus grand que

Soit a = 2; b = 5;

a  > b vaut false

<

Plus petit que

Soit a = 2; b = 5;

a < b vaut true

>=

Supérieur ou égal

Soit a = 2; b = 5;

a >= b vaut false

<=

Inférieur ou égal

Soit a = 2; b = 5;

a >= b vaut true

and

Opérateur logique ET

Soit a = 2; b = 5;

a < 4 and b > 4 vaut

true

Or

Opérateur logique OU

Soit a = 2; b = 5;

a < 1 or b > 3vaut

true

Not

Opérateur logique NON

Soit a = 5;

!( a == 5) vaut false

Les structures de contrôle en python

Python propose  un ensemble de structures de contrôle. Ces structures permettent de donner une certaine dynamique à vos programmes.

La structure conditionnelle if/else en python

L’expression if permet d’exécuter un bloc d’instructions si une condition est vraie. En Python, voici la syntaxe utilisée :

a = 2
b = 3
if b > a:
   print("{} est supérieur à {}".format(b,a))

L’expression else est utilisée pour spécifier le bloc d’instruction qui sera exécuté si la condition du if est fausse. Voici la syntaxe :

a = 2
b = 3
if b > a:
    print("{} est supérieur à {}".format(b,a))
else:
     print("{} est inférieur ou égal à {}".format(b,a))

L’expression elif permet de définir une nouvelle condition si la première condition est fausse.

a = 2
b = 2
if b > a:
    print("{} est supérieur à {}".format(b,a))
elif b == a:
    print("{} est égal à {}".format(b,a))
else:
     print("{} est inférieur  {}".format(b,a))

La boucle while() en Python

L’expression while permet de définir un ensemble d’instructions à répéter tant que la condition est vraie. La syntaxe pour l’utiliser est la suivante :

i = 1
while i < 4 :
    print(i)
    i +=1
#affiche 1 2 3

La boucle itérative for

Une boucle for est utilisée pour itérer sur une séquence (c’est-à-dire une liste, un tuple, un dictionnaire ou  une chaîne).

fruits = ['kiwi', 'mangue']
for fruit in fruits:
    print(fruit)
#affiche kiwi mangue

Les fonctions en python

Une fonction est un bloc de code qui ne s’exécute que lorsqu’il est appelé. On peut lui transmettre des données, appeler des paramètres. En python, une fonction peut renvoyer des données comme elle peut renvoyer un résultat.

La syntaxe utilisée pour définir une fonction en Python est la suivante : on utilise le mot-clé def. Par exemple :

def une_fonction():
    print("Je suis une fonction")

Pour appeler la fonction, c’est relativement simple.

def une_fonction():
    print("Une fonction")

une_fonction() #appel d'une fonction (affiche Une fonction) 

Des informations peuvent être transmises aux fonctions en tant qu’arguments. C’est le cas simplement en indiquant à l’intérieur des parenthèses du nom de la fonction (sa signature), les différents arguments (sans préciser leur type comme c’est le cas dans la majorité des langages de programmation).

def somme(a, b):
    print("{} + {} = {}".format(a, b, a+b))

somme(2,3)  #affiche 2 + 3 = 5

Pour renvoyer une valeur avec la fonction, on utilise simplement le mot-clé return.

def somme(a, b):
    return a + b

c = somme(2,3)
print(c) #affiche 5

Un des avantages énormes de Python est que les fonctions peuvent renvoyer plusieurs valeurs. Par exemple :

def succ1_succ2 (a):
    return a + 1, a + 2

print(succ1_succ2(2)) #affiche (3, 4)

Maintenant, vous êtes équipés des compétences de base nécessaires pour commencer à utiliser Python. Nous allons maintenant aller dans les choses avancées du langages pour vous permettre de développer des cas avancés. La première chose c’est la manipulation des fichiers, car ne perdez pas de vue que Python a été créé pour l’analyse de données.

Le développement applicatif en Python

A ce stade, vous avez l’ensemble des éléments et notions nécessaires pour écrire du code Python et facilement apprivoiser le langage. En réalité, ces éléments ne sont que les outils de base qui vous permettent de commencer à exprimer les problèmes complexes en Python. Dans cette partie, nous allons vous équiper des outils plus avancés dont vous avez besoin pour développer des applications entières en Python. Ces outils incluent la gestion des fichiers, la programmation orientée objet, les bibliothèques de données et les outils de Python pour le Big Data.

La manipulation des fichiers de données en Python

La manipulation de fichiers est souvent le point d’entrée de toute application data, car elle se situe à la phase de collecte. La manipulation de fichiers se situe aussi en fin de chaîne, car à la fin des traitements, vous devez le plus souvent persister et livrer un fichier contenant ces données traitées.

Python dispose de plusieurs fonctions pour créer, lire, mettre à jour et supprimer des fichiers. Pour réaliser les exemples d’utilisation de ces fonctions, nous vous recommandons de créer un fichier dans le répertoire courant nommé settings.txt. Vous écrivez dans ce fichier les lignes suivantes :

volume : 5
luminosite : 10
difficulte : Moyenne

Maintenant que vous avez créé le fichier, fermez-le. Pour ouvrir un fichier en Python, la méthode la plus simple consiste à utiliser sa fonction open().

f = open("settings.txt")

Si le fichier ne se trouve pas dans votre répertoire courant vous devez préciser le chemin d’accès au fichier. Par exemple :

f = open("C:\Users\Juvenal\settings.txt")

Pour fermer le fichier, vous utilisez juste la méthode close() de l’objet qui stocke les données.

f.close()

Pour lire un fichier on utilise la méthode read(). Par exemple :

f = open("settings.txt", "r") #ouverture en mode lecture
print(f.read()) 

La méthode readlines() renvoie une liste contenant toutes les lignes du fichier. Voici la syntaxe avec un exemple simple :

f = open("settings.txt", "r") 
lignes = f.readlines()
for ligne in lignes:
    print(ligne)

La méthode readline() quant à elle renvoie une ligne du fichier sous forme de chaîne de caractères

f = open("settings.txt", "r") 
une_ligne = f.readline()
print(une_ligne)

Pour écrire dans un fichier on utilise la méthode write(). Syntaxe :

f = open("settings.txt", "w") #ouverture en mode écriture
f.write("langage: Français")
f.close()
  • “w” – Write – écrase le contenu existant
  • “a” – Append – ajoutera à la fin du fichier

Les modules Python

En python, les modules sont des programmes contenant des fonctions qui sont souvent réutilisés tout au long du cycle de vie d’un programme. Un module python est également appelé bibliothèque ou librairie.

Pour créer un module, vous créez un fichier .py dans lequel vous définirez vos différentes fonctions. Par exemple, créez le fichier un_module.py et rajoutez-y le code suivant :

def direBonjour(nom):
    print("Bonjour {}".format(nom))

Pour utiliser un module, vous l’importer là où vous voulez l’utiliser à l’aide du mot-clé import.

import un_module as hello
hello.direBonjour("Toto") #affiche Bonjour Toto

Par exemple, importons le module “Math”, le module qui permet d’avoir accès aux fonctions mathématiques comme le cosinus (cos), le sinus (sin), la racine carrée (sqrt), le nombre (pi) etc..

import math
print(math.cos(math.pi / 2))

La programmation orientée objet en Python

La programmation orientée objet (POO) est un modèle de programmation informatique qui met en œuvre une conception basée sur les objets. Python est également un langage  de programmation orientée objet, même si dans le monde de la data, on l’utilise très peu pour cela. Il n’en demeure pas moins qu’il est un langage orienté objet.

Définir une classe et un objet en Python

Une classe est la description d’un ensemble d’objets qui possède une structure identique (attributs) et un même comportement (méthodes). Les objets sont construits à partir de la classe, par un processus appelé instanciation. De ce fait, tout objet est une instance de classe. En python une classe se définit de cette manière :

class Personne:
    "Définition d'une classe Personne"

Un objet est une instance d’une classe. Il contient tous les attributs et méthodes de la classe dont il instancie. Les objets ne sont pas des éléments statiques et leur durée de vie ne correspond pas forcément à la durée d’exécution du programme.

La durée de vie d’un objet passe par trois étapes :

  1. la déclaration de l’objet et  son instanciation
  2. l’utilisation de l’objet en appelant ses méthodes
  3. et la suppression de l’objet

On instancie un objet en appelant le nom de sa classe. Par exemple :

toto = Personne()
toto.age = 18 # attribut d'instance 
toto.nom = "Toto" #attribut d'instance
print(dir(toto)) #affiche les attributs de l'objet toto
print(toto.age) # affiche 18

Méthodes de classes en Python

Une méthode en Python s’écrit comme une fonction  avec un premier paramètre self obligatoire, où self représente l’objet sur lequel la méthode sera appliquée. Par exemple :

class Player:

    # définition d'une méthode
    def deplace(self, dx, dy ):
        self.x = self.x + dx
        self.y = self.y + dy


robot =  Player()
robot.x = 0
robot.y = 0
robot.deplace(2, 3) #appel de la méthode
print("Nouvelle position du robot: ({}, {})".format(robot.x, robot.y))

Le constructeur en Python

Un constructeur est une méthode  qui est utilisée pour initialiser les attributs d’un  objet. Le constructeur est appelé lorsqu’un objet d’une classe est créé. Python nous impose un nom de méthode pour définir un constructeur. C’est le mot-clé __init__. Par exemple :

class Player:

    # définition d'un constructeur
    def __init__(self, abs, ord):
        self.x = abs
        self.y = ord

robot =  Player(5, 3) #appel du constructeur
print("Position du robot: ({}, {})".format(robot.x, robot.y))

L’encapsulation en Python

L’encapsulation est un mécanisme consistant à rassembler les données et les méthodes au sein d’une structure en cachant l’implémentation de l’objet, c’est-à-dire en empêchant l’accès aux données par un autre moyen que les services proposés (donc ses méthodes et propriétés). L’encapsulation permet donc de garantir l’intégrité des données contenues dans l’objet.

L’utilisateur d’une classe n’a pas forcément à savoir de quelle façon sont structurées les données dans l’objet, il n’a pas besoin de connaître son implémentation. Ainsi, en interdisant l’utilisateur de modifier directement les attributs, et en l’obligeant à utiliser les fonctions définies pour les modifier, on est capable de s’assurer de l’intégrité des données. On pourra ainsi effectuer des contrôles sur les données entrées par l’utilisateur.

Ces niveaux de visibilité définissent les droits d’accès aux données. Il existe trois niveaux de visibilité en python :

  • privée (-) : un attribut privé en Python est défini comme suit : __nom_attribut. Les attributs privés sont accessibles seulement par la classe elle-même.
  • protégée (#) : un attribut protégé en Python est défini comme suit : _nom_attribut. Les attributs protégés sont accessibles seulement dans la classe elle-même et aux classes dérivées.
  • publique (+) :  un attribut public en Python est défini comme suit : nom_attribut. Les attributs publics sont accessibles à tous

Par exemple :

class Player:

    def __init__(self, abs, ord):
        self.__x = abs
        self.__y = ord
robot =  Player(5, 3)
print(robot.x)

Le code ci-dessus provoque une erreur :  AttributeError: ‘Player’ object has no attribute ‘x’  car l’attribut x est privé et n’est connu que dans la classe Player. Alors comment accéder à cet attribut ? Réponse : il faut utiliser les accesseurs et les mutateurs.

  • Les accesseurs (get) permettent de récupérer la  valeur des attributs sans y accéder directement de l’extérieur de la classe ; ils sécurisent donc l’attribut en restreignant sa modification.
  • Les mutateurs(set) permettent de modifier la valeur des attributs tout en vérifiant si la valeur que  l’on veut donner à l’attribut respecte les normes.

Voici un exemple montrant comment utiliser les accesseurs/mutateurs pour accéder à la classe précédente :

class Player:

    def __init__(self, nom, abs, ord):
        self.__x = abs
        self.__y = ord
        self.__nom = nom


    def get_x(self):
        return self.__x

    def get_y(self):
        return self.__y
    def set_x(self, x):
        self.__x = x
    def set_y(self, y):
        self.__y = y
    def get_nom(self):
        return self.__nom

player1 = Player("Toto", 1, 2)

print(player1.get_nom()) #affiche Toto
print(player1.get_x()) #affiche 1
player1.set_x(5)
print(player1.get_x()) #affiche 5

Attributs de classe en Python

A la différence des méthodes qui définissent le comportement d’une instance de classe, les attributs permettent quant à eux, de les caractériser. Voici un exemple qui montre comment créer des attributs de classe en Python :

class Player:
    nombre_instance = 0 #attribut de classe

    def __init__(self, nom, abs, ord):
        self.__x = abs
        self.__y = ord
        self.__nom = nom
        Player.nombre_instance = Player.nombre_instance + 1

    @classmethod
    def get_nombre_instance(cls):
        return Player.nombre_instance


player1 = Player("Toto", 1, 2)

print(Player.nombre_instance) #affiche 1 
print(player1.nombre_instance) #affiche 1

player1 = Player("Toto", 1, 2)

print(Player.get_nombre_instance()) # affiche 2

L’héritage en Python

Le terme héritage désigne le principe selon lequel une classe peut hériter des caractéristiques (attributs et méthodes) d’autres classes.

Soient deux classes A et B. Relation d’héritage : Classe B “étend la ” Classe A. A est la super-classe ou classe mère de B. B est la sous-classe ou classe fille de A.

La notion d'héritage en Python

Dans l’exemple ci-dessus la classe Voiture et Avion sont des classes filles de la classe Véhicule. Ainsi tout objet de la classe Voiture ou Avion possédera les attributs et méthodes de la Classe Vehicule.

Une méthode dans une classe mère peut être redéfinie dans une classe fille : on parle de redéfinition ou surcharge de méthode. La nouvelle définition vient remplacer (ou surcharger) celle héritée pour les objets de la classe dérivée. Le remplacement est effectif même quand l’objet de la classe fille est référencé par une variable typée par la super-classe (polymorphisme).

Pour implémenter l’héritage en Python, il vous suffit de mettre en parenthèse le nom de la classe à hériter dans la définition de la classe héritière.

class Point:

    def __init__(self, x, y):
        self._x = x
        self._y = y

    def affiche(self):
        print("(x = {}, y = {} )".format(self._x, self._y), end="")

class PointColore(Point):
    #appel du constructeur de la classe Point
    def __init__(self, x, y, couleur):
        Point.__init__(self, x, y)
        self.couleur = couleur
    #redéfinition de la méthode affiche
    def affiche(self):
        Point.affiche(self)
        print(" couleur = {}".format(self.couleur))

point = Point(5, 2)
pc = PointColore(4,2,"violet")
pc.affiche() # affiche (x = 4, y = 2) couleur = violet

En python, l’héritage multiple est autorisée. Ainsi une classe peut hériter de plusieurs classes. Il vous suffit simplement de mettre entre parenthèse dans la définition de la classe héritière, le nom des classes à hériter. Par exemple :

class A:

    def __init__(self, x):
        self._x = x
    def afficheX(self):
        print("x = {}".format(self._x))

class B:

    def __init__(self, y):
        self._y = y

    def afficheY(self):
        print("y = {}".format(self._y))
class C(A, B):           #classe héritière

    def __init__(self, x, y, z):
        A.__init__(self, x)
        B.__init__(self, y)
        self.z = z

c = C(1,2,3)
c.afficheX() #affiche x = 1
c.afficheY() #affiche y = 2

Les avantages de l’héritage sont doubles que ce soit en Python ou dans n’importe quel autre langage :

  • Spécialisation : la nouvelle classe réutilise les attributs et les méthodes de la classe parent en ajoutant des opérations particulières à cette nouvelle classe.
  • Réutilisation : évite de réécrire du code existant dans la classe mère.

Programmation Python pour le Big Data

Python est très demandé par les entreprises en matière de Big Data. Actuellement, c’est le langage le plus utilisé pour l’analyse de données. Il est très plébiscité par les Data Scientists et les Data Analysts. Il y’a de très bonnes raisons à cela. Nous les avons évoquées au tout début du tutoriel.

La programmation Python offre de multiples bibliothèques scientifiques et structures très efficaces pour manipuler les données indépendamment de leur volume. Comme le Big Data implique beaucoup d’analyse de données et de calcul scientifique, Python et le Big Data sont de grands compagnons.

Nous allons consacrer d’autres articles plus spécialisés sur le Python et le traitement des données massives. Ici, nous allons simplement énumérer quelques bibliothèques Python très utiles pour les projets Big Data en entreprise :

  • Pandas :  Pandas est une bibliothèque spécialisée dans l’analyse des données. Elle fournit des structures de données très efficaces (le Data frame) pour le traitement de données, ainsi que les opérations nécessaires à la manipulation de ces données. C’est la bibliothèque la plus utilisée en Python pour la manipulation de données.
  • NumPy :  NumPy est le paquetage fondamental de Python spécialisé dans le calcul scientifique. Il fournit le support pour l’algèbre linéaire, le calcul de nombres aléatoires, les transformations de Fourier, et tout autre transformation scientifique. Il prend également en charge les tableaux multidimensionnels et les matrices grâce à sa vaste bibliothèque de fonctions mathématiques de haut niveau. Il peut aussi être utilisé pour le traitement de données comme Pandas, mais c’est rare. Il est à privilégier pour le calcul scientifique, là où Panda est à privilégier pour le traitement de données générique.
  • Matplotlib : Matplotlib est une bibliothèque python qui permet d’effectuer des tracés en 2D pour les formats de publication sur papier avec un environnement interactif sur toutes les plateformes. Matplotlib permet de générer des graphiques, des diagrammes à barres, des histogrammes, des diagrammes d’erreur, des spectres de puissance, des diagrammes de dispersion, etc. C’est une bibliothèque qui vous sera très utile pour la Data Visualisation.
  • Pydoop : Python est également compatible avec Hadoop.  Python comprend le paquet Pydoop qui permet d’accéder à l’API HDFS et d’écrire des programmes Hadoop, manipuler les fichiers sur le HDFS. En outre, Pydoop permet la programmation MapReduce pour résoudre des problèmes complexes de big data avec un effort minimal.
  • PySpark : en Big Data, PySpark est très certainement la bibliothèque la plus connue et la plus utilisée. En effet, Python offre cette API pour permettre aux Data Analysts/Data Engineer d’écrire des applications Spark directement depuis Python. C’est grâce à cette librairie que Python a gagné autant de part de marché dans le Big Data. Du coup, si vous souhaitez vous orienter vers les métiers de Data Analyst ou Data Scientist, je ne peux que vous recommander de prendre très au sérieux l’apprentissage de cette bibliothèque. Nous y consacrerons un article prochainement.

Voilà ! Nous sommes arrivés au terme de ce tutoriel complet sur la programmation Python. Nous espérons que vous avez compris l’intérêt de Python dans le marché et son intérêt dans votre carrière. Clairement, Python est un langage à prendre en considération si vous souhaitez travailler dans le Big Data, au même titre que Java ou Scala. C’est un langage qui s’apprivoise très rapidement, et n’est pas aussi compliqué que ses confrères. Si vous avez des questions par rapport à la programmation Python, n’hésitez pas à la poser dans les commentaires. Pour aller plus loin dans vos compétences dans le Big Data, nous vous offrons cette mini-formation de 2h15min sur Spark.


Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

>