Retour au blog

Les Langages Clés en Data Science : Python, R, SQL, Power BI

Comprends ce que fait chacun des quatre outils en leur posant la même question, puis entraîne-toi sur quatre exercices corrigés.

Cet article a été rédigé à des fins pédagogiques. Les informations présentées peuvent évoluer. Nous t’invitons à vérifier auprès de sources officielles.

Python, R, SQL et Power BI ne se font pas concurrence : ils se passent le relais. SQL va chercher les données dans la base où elles sont rangées, Python ou R les analysent, et Power BI les affiche dans un tableau de bord que d'autres filtrent eux-mêmes. Exemple : pour suivre des ventes, tu calcules le total par région en SQL, tu étudies son évolution en Python ou en R, puis tu publies le graphique dans Power BI. On pose ici la même question à chaque outil.

Le point de départ : une table de ventes

Une base de données relationnelle range les informations dans des tables, des tableaux en lignes et en colonnes reliés entre eux par des identifiants. Le logiciel qui la gère s'appelle un SGBD (système de gestion de bases de données).

Toute la page travaille sur la table ventes ci-dessous, aux données fictives, et sur une seule question : quel est le total des ventes par région ?

idregionmoismontant (en €)
1Nordjanvier120
2Nordfévrier80
3Sudjanvier200
4Sudfévrier150
5Estjanvier60

Le programme national du BUT Science des données met SQL au premier semestre (ressource R1.02) et cite R et le logiciel SAS pour la programmation statistique (R2.04) ; pour le reste, il parle d'un « langage de script » (R1.03) et d'« outils de reporting » pour les tableaux de bord (R3.01), sans les nommer : le choix revient à ton IUT.

Conseil : si tu dois choisir par où commencer, prends SQL et le langage de script de tes cours. Power BI reprend les mêmes idées de tables et de regroupements : tu les auras déjà comprises.

SQL : interroger la base

SQL (Structured Query Language) sert à écrire des requêtes, c'est-à-dire des demandes adressées au SGBD, qui répond par un tableau. Tu décris le résultat voulu, et le SGBD trouve comment l'obtenir.

SELECT region, SUM(montant) AS total
FROM ventes
GROUP BY region;

Lis cette requête dans l'ordre où le SGBD la traite. FROM désigne la table. GROUP BY range les lignes en paquets, un par région. SUM réduit chaque paquet à un nombre : c'est une agrégation, comme AVG (moyenne) ou COUNT (nombre de lignes). SELECT choisit enfin les colonnes affichées, et AS nomme le résultat. Le Nord donne $120 + 80 = 200$ €, le Sud $200 + 150 = 350$ € et l'Est 60 €.

Pour ne garder qu'une partie des données, deux mots se partagent le travail : WHERE filtre les lignes avant le regroupement, HAVING filtre les paquets après.

Piège classique : mettre une condition sur une somme dans le WHERE. Quand il s'applique, les paquets n'existent pas encore, donc SUM(montant) non plus : la requête est refusée. Condition sur une ligne, WHERE ; condition sur un regroupement, HAVING.

Python et R : analyser les données

SQL sait compter et additionner, mais il n'est pas fait pour construire un modèle statistique ni pour enchaîner des traitements automatiques. Pour ça, tu écris un script, une suite d'instructions exécutées dans l'ordre, et les données y deviennent un data frame : un tableau en mémoire, une ligne par observation, une colonne par variable.

En Python, le data frame vient de pandas, une bibliothèque (un ensemble de fonctions toutes prêtes que tu importes) :

import pandas as pd
ventes = pd.read_csv("ventes.csv")
print(ventes.groupby("region")["montant"].sum())

En R, il fait partie du langage :

ventes <- read.csv("ventes.csv")
aggregate(montant ~ region, data = ventes, FUN = sum)

Les deux affichent les mêmes totaux que SQL. La différence est ailleurs. R a été pensé pour le calcul statistique et les graphiques : tests classiques, modèles linéaires et tracés y sont fournis d'origine. Python est un langage généraliste : la statistique y passe par des bibliothèques, et le même langage sert aussi à collecter des données sur le web ou à automatiser des tâches.

Piège classique : Python numérote les éléments à partir de 0, R à partir de 1. Sur la même suite de valeurs, montants[1] ne désigne donc pas la même case. Le code tourne sans erreur, seul le résultat est faux : c'est ce qui rend ce piège dangereux.

Power BI : montrer et laisser filtrer

Power BI est un logiciel de Microsoft, pas un langage. Il se connecte à une base ou à un fichier, et tu y construis à la souris des graphiques et des segments, ces listes ou boutons qui servent à filtrer. Son apport, c'est le tableau de bord : une page qu'une autre personne consulte et filtre elle-même, sans écrire de code.

Les calculs s'y écrivent en DAX (Data Analysis Expressions), un langage de formules qui sert aussi dans Power Pivot, sous Excel. Le total des ventes devient une mesure :

Total ventes = SUM(ventes[montant])

Définition : une mesure est une formule DAX dont le résultat dépend du contexte, c'est-à-dire des filtres en place dans le rapport. Une colonne calculée, elle, se calcule ligne par ligne, puis reste stockée.

Place la mesure dans un graphique avec la colonne region : tu obtiens un total par région, comme avec le GROUP BY de SQL. Si quelqu'un choisit « janvier » dans un segment, chaque total est recalculé sur les seules lignes de janvier, sans que tu aies touché à la formule.

Power BI n'est qu'un logiciel de tableaux de bord parmi d'autres : savoir choisir un indicateur et le graphique qui le montre te servira avec n'importe lequel.

Exercices corrigés

Les exercices reprennent la table ventes du début (données fictives). Cherche sur papier avant d'ouvrir la correction.

Exercice 1 : Que renvoie cette requête sur la table ventes ?

SELECT region, AVG(montant) AS moyenne
FROM ventes
GROUP BY region;

Correction :

GROUP BY forme trois paquets et AVG fait la moyenne de chacun. Nord : $\dfrac{120 + 80}{2} = 100$. Sud : $\dfrac{200 + 150}{2} = 175$. Est : une seule ligne, donc 60.

Résultat : trois lignes, Nord 100 €, Sud 175 € et Est 60 €. Sans ORDER BY, leur ordre d'affichage n'est pas garanti.

Exercice 2 : Pour lister les régions dont le total des ventes dépasse 150 €, un camarade écrit la requête suivante, que le SGBD refuse. Explique pourquoi, corrige-la et donne son résultat.

SELECT region, SUM(montant) AS total
FROM ventes
WHERE SUM(montant) > 150
GROUP BY region;

Correction :

WHERE agit ligne par ligne, avant le GROUP BY : à ce moment, aucune somme n'existe. Une condition sur un regroupement se place dans HAVING, après le GROUP BY :

SELECT region, SUM(montant) AS total
FROM ventes
GROUP BY region
HAVING SUM(montant) > 150;

Les totaux valent 200 € pour le Nord, 350 € pour le Sud et 60 € pour l'Est. La requête renvoie donc deux lignes : Nord 200 € et Sud 350 €.

Exercice 3 : On saisit les cinq montants de la table, d'abord en Python, puis en R.

# Python
montants = [120, 80, 200, 150, 60]
print(montants[1])

# R
montants <- c(120, 80, 200, 150, 60)
print(montants[1])

Qu'affiche chaque langage ? Calcule ensuite la moyenne des cinq montants et donne l'instruction R qui la renvoie.

Correction :

Python numérote à partir de 0 : montants[1] est le deuxième élément, il affiche 80. R numérote à partir de 1 : montants[1] est le premier élément, il affiche [1] 120, où [1] n'est qu'un repère d'affichage.

Moyenne : $\dfrac{120 + 80 + 200 + 150 + 60}{5} = \dfrac{610}{5} = 122$, soit 122 €. En R, mean(montants) renvoie 122.

Exercice 4 : Sur la table ventes, la responsable commerciale veut chaque lundi un écran où elle choisit un mois et lit le total des ventes par région, sans rien programmer. a) Quel outil choisis-tu, et pourquoi pas un script Python ? b) Écris la mesure DAX du total. c) Quels totaux affiche le graphique quand elle choisit « février », et quel est alors le total général ?

Correction :

a) Power BI : elle doit filtrer elle-même, sans code, et c'est le rôle d'un tableau de bord. Avec un script Python, il faudrait relancer le code à chaque changement de mois.

b) Total ventes = SUM(ventes[montant]). C'est une mesure, puisque son résultat doit suivre le mois choisi.

c) En février, la table n'a que deux lignes : Nord 80 € et Sud 150 €. L'Est n'a aucune vente ce mois-là, donc pas de total. Total général : $80 + 150 = 230$, soit 230 €.

À retenir

À retenir :

  • SQL extrait et regroupe, Python ou R analysent, Power BI présente.
  • En SQL, WHERE filtre les lignes avant le GROUP BY, HAVING filtre les regroupements après.
  • R est pensé pour la statistique, Python est généraliste ; le premier numérote à partir de 1, le second à partir de 0.
  • Power BI n'est pas un langage : on y écrit des mesures DAX, recalculées selon les filtres.

Sources

  • Programme national du BUT Science des données, ministère de l'Enseignement supérieur, de la Recherche et de l'Innovation, version 2022 mise à jour en 2023 (ressources R1.02, R1.03, R2.04 et R3.01) : texte sur education.gouv.fr.
  • « What is R? », présentation du langage par le projet R : r-project.org.
  • « Vue d'ensemble de DAX », documentation Microsoft Learn : learn.microsoft.com.

Tu peux partager cette page librement, en citant ORBITECH AI Academy avec son lien.