4 - Jointures & pandas Flashcards
Comment utiliser la commande GROUP BY pour regrouper des données et appliquer des fonctions d’agrégation ?
- GROUP BY permet de regrouper les données selon certaines colonnes pour appliquer des fonctions d’agrégation (ex : COUNT, SUM, AVG).
-
Syntaxe :
SELECT select_list (aggregates) FROM table_name GROUP BY column;
-
select_list
: colonnes ou expressions à sélectionner (avec fonctions d’agrégation). -
column
: colonne de regroupement.
-
Exemple :
- Somme des salaires par département :
SELECT department, SUM(salary) FROM employees GROUP BY department;
- Somme des salaires par département :
-
Important :
- Seules les colonnes dans
GROUP BY
peuvent être incluses sans fonction d’agrégation. - Les autres colonnes doivent être agrégées.
- Seules les colonnes dans
Qu’est-ce qu’une jointure de tables en SQL et pourquoi est-elle utilisée ?
Dans le cadre du cours, nous étudierons le inner join, left/right join et le full outer join.
- Jointure de tables : Combine des données provenant de plusieurs tables en une seule requête en utilisant une clé étrangère.
- Utilité : Récupérer des informations liées mais réparties dans différentes tables.
Types de jointures :
- INNER JOIN : Récupère les lignes où il y a une correspondance dans les deux tables.
- LEFT JOIN (ou LEFT OUTER JOIN) : Récupère toutes les lignes de la table de gauche, et les correspondances de la table de droite.
- RIGHT JOIN (ou RIGHT OUTER JOIN) : Récupère toutes les lignes de la table de droite, et les correspondances de la table de gauche.
- FULL OUTER JOIN : Récupère toutes les lignes des deux tables, avec les correspondances lorsque disponibles.
Quelle est la différence entre une inner join et une left join en SQL ?
-
INNER JOIN : Renvoie uniquement les lignes avec des correspondances dans les deux tables.
-
Exemple :
SELECT * FROM employees INNER JOIN departments ON employees.department_id = departments.id;
-
Exemple :
-
LEFT JOIN (ou LEFT OUTER JOIN) : Renvoie toutes les lignes de la table de gauche, avec les correspondances de la table de droite. Si aucune correspondance, les valeurs de la table de droite sont NULL.
-
Exemple :
SELECT * FROM employees LEFT JOIN departments ON employees.department_id = departments.id;
-
Exemple :
Que fait une RIGHT JOIN en SQL ?
-
RIGHT JOIN (ou RIGHT OUTER JOIN) : Renvoie toutes les lignes de la table de droite et les correspondances de la table de gauche. Si aucune correspondance n’est trouvée dans la table de gauche, les résultats sont remplis avec des valeurs NULL pour la table de gauche.
-
Exemple :
SELECT * FROM employees RIGHT JOIN departments ON employees.department_id = departments.id;
-
Exemple :
Quelle est la différence entre une FULL OUTER JOIN et une INNER JOIN ?
- FULL OUTER JOIN : Renvoie toutes les lignes, qu’il y ait ou non une correspondance dans les deux tables. Les résultats de la table sans correspondance seront remplis avec des valeurs NULL.
- INNER JOIN : Renvoie uniquement les lignes où il y a une correspondance dans les deux tables.
-
Exemple FULL OUTER JOIN :
SELECT * FROM employees FULL OUTER JOIN departments ON employees.department_id = departments.id;
Qu’est-ce qu’une CROSS JOIN et quand l’utiliser en SQL ?
- CROSS JOIN : Produit le produit cartésien de deux tables, combinant chaque ligne de la première table avec chaque ligne de la seconde sans condition de jointure.
- Utilisation : Utilisé lorsqu’on souhaite combiner toutes les lignes d’une table avec toutes les lignes d’une autre table.
-
Exemple :
SELECT * FROM employees CROSS JOIN departments;
Quelle est la syntaxe générale d’une jointure SQL ?
-
Syntaxe générale d’une jointure SQL :
SELECT column1, column2, ...
FROM table1
JOIN table2
ON table1.column = table2.column
-
Types de jointures :
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL OUTER JOIN, etc.
Pourquoi utiliser une jointure SQL au lieu d’une sous-requête dans certains cas ?
-
Avantages des jointures par rapport aux sous-requêtes :
- Efficacité : Les jointures sont généralement plus performantes, car le moteur de base de données optimise l’exécution d’une seule requête avec des relations explicites entre les tables.
- Optimisation : Les jointures permettent une meilleure gestion des index et de la mémoire.
- Simplicité : Les jointures rendent souvent le code SQL plus lisible et plus facile à comprendre.
-
Cas spécifiques pour sous-requêtes :
- Utile pour des calculs complexes ou lorsqu’on a besoin d’une sous-sélection d’un ensemble de résultats avant de les utiliser dans la requête principale.
Le inner join est la jointure la plus commune qui nous permet de rejoindre les informations communes entre deux tables.
La requête SQL suivante effectue une jointure interne (INNER JOIN) entre deux tables, table1
et table2
, en se basant sur une colonne commune id_common
:
```sql
SELECT
*
FROM
table1
INNER JOIN
table2 ON table1.id_common = table2.id_common;
~~~
-
INNER JOIN
: Retourne uniquement les lignes qui ont des correspondances dans les deux tables basées sur la condition spécifiée dansON
. -
table1.id_common = table2.id_common
: Condition de jointure qui lie les tables en utilisant la colonneid_common
partagée.
Cette requête retourne toutes les colonnes de table1
et table2
où il y a une correspondance entre les deux tables sur la colonne id_common
. Si aucune correspondance n’est trouvée, ces lignes ne seront pas incluses dans les résultats.
La jointure gauche/droite permet d’avoir tous les éléments d’une table avec des informations possiblement vides d’une deuxième table. Il est aussi possible d’avoir une “soustraction” pour avoir seulement les éléments d’une première table ne se retrouvant pas dans une deuxième table.
-
LEFT JOIN :
- Récupère toutes les lignes de
table1
et les correspondances detable2
. Si pas de correspondance, les valeurs detable2
sontNULL
. -
Soustraction : Filtrer les lignes de
table1
sans correspondance danstable2
.
- Récupère toutes les lignes de
- Exemple :
```sql
SELECT *
FROM table1
LEFT OUTER JOIN table2 ON table1.id_common = table2.id_common
WHERE table2.column IS NULL;
~~~
Full outer join
-
FULL OUTER JOIN :
- Récupère toutes les lignes des deux tables, avec
NULL
là où il n’y a pas de correspondance. - Soustraction : Filtrer les éléments uniques dans chaque table.
- Récupère toutes les lignes des deux tables, avec
- Exemple :
```sql
SELECT *
FROM table1
FULL JOIN table2 ON table1.id_common = table2.id_common
WHERE table1.column IS NULL OR table2.column IS NULL;
~~~
Qu’est-ce qu’un dictionnaire en Python et comment est-il structuré ?
-
Dictionnaire en Python :
- Collection non ordonnée de paires clé-valeur (key-value).
- Chaque clé est unique et permet d’accéder à la valeur associée.
- Déclaré avec des accolades
{}
et séparé par:
.
-
Exemple :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'}
Que représente une clé dans un dictionnaire Python ?
-
Clé dans un dictionnaire Python :
- Identifiant unique permettant d’accéder à la valeur associée.
- Doit être immuable (ex. nombre, chaîne de caractères, tuple).
- Ne peut pas être modifiée après sa création.
Que représente une valeur dans un dictionnaire Python ?
-
Valeur dans un dictionnaire Python :
- Information ou objet associé à une clé.
- Peut être de n’importe quel type de données (nombre, chaîne, liste, dictionnaire, etc.).
Comment accéder à une valeur dans un dictionnaire Python ?
-
Accéder à une valeur dans un dictionnaire Python :
- Utiliser la clé entre crochets après le nom du dictionnaire.
- Exemple :
telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'}
print(telephone['Marie'])
# Affiche ‘444-1111’
Que se passe-t-il si tu utilises une clé qui n’existe pas dans un dictionnaire ?
-
Accès à une clé inexistante dans un dictionnaire :
- Si la clé n’existe pas, Python lèvera une exception
KeyError
. - Exemple :
telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'}
print(telephone['Paul'])
# Provoque une erreur KeyError
- Si la clé n’existe pas, Python lèvera une exception
Comment ajouter une nouvelle clé-valeur à un dictionnaire Python ?
-
Ajouter une nouvelle clé-valeur à un dictionnaire :
- Tu peux ajouter une clé en lui assignant une valeur.
- Exemple :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'} telephone['Paul'] = '444-4444' print(telephone) # Affiche {'Marie': '444-1111', 'Bob': '444-2222', 'Alice': '444-3333', 'Paul': '444-4444'}
Comment modifier une valeur dans un dictionnaire Python ?
-
Modifier une valeur dans un dictionnaire :
- Tu peux modifier la valeur associée à une clé en réassignant une nouvelle valeur.
- Exemple :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'} telephone['Marie'] = '444-9999' print(telephone) # Affiche {'Marie': '444-9999', 'Bob': '444-2222', 'Alice': '444-3333'}
Comment supprimer une paire clé-valeur dans un dictionnaire Python ?
-
Supprimer une paire clé-valeur dans un dictionnaire :
- Utilise
del
pour supprimer une clé et sa valeur associée. - Exemple :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'} del telephone['Bob'] print(telephone) # Affiche {'Marie': '444-1111', 'Alice': '444-3333'}
- Utilise
Quelle méthode permet de vérifier si une clé existe dans un dictionnaire en Python ?
-
Vérifier si une clé existe dans un dictionnaire :
- Utilise l’opérateur
in
pour vérifier la présence d’une clé. - Exemple :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'} print('Marie' in telephone) # Affiche True print('Paul' in telephone) # Affiche False
- Utilise l’opérateur
Quelle est la syntaxe pour itérer sur un dictionnaire Python ?
-
Itérer sur un dictionnaire en Python :
- Utiliser une boucle
for
pour parcourir les clés, les valeurs ou les paires clé-valeur. - Exemple pour itérer sur les paires clé-valeur :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'} for key, value in telephone.items(): print(key, value)
- Utiliser une boucle
Comment accède-t-on à un élément d’un dictionnaire Python ?
-
Accéder à un élément d’un dictionnaire :
- Utiliser la clé entre crochets pour accéder à la valeur associée.
- Exemple :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'} print(telephone['Marie']) # Affiche '444-1111'
Quel opérateur permet de vérifier si une clé existe dans un dictionnaire Python ?
-
Opérateurs pour vérifier l’existence d’une clé dans un dictionnaire :
- in : Vérifie si la clé existe.
- not in : Vérifie si la clé n’existe pas.
- Exemple :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'} print('Bob' in telephone) # Affiche True print('Paul' not in telephone) # Affiche True
Que fait l’instruction len(telephone) sur un dictionnaire Python ?
-
len() : Retourne le nombre de paires clé-valeur dans un dictionnaire.
- Exemple :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'} print(len(telephone)) # Affiche 3
- Exemple :
Que se passe-t-il si tu essaies d’accéder à une clé qui n’existe pas dans le dictionnaire ?
-
Accès à une clé inexistante : Si tu accèdes à une clé qui n’existe pas dans le dictionnaire, Python soulève une exception KeyError.
- Exemple :
python telephone = {'Marie':'444-1111', 'Bob':'444-2222', 'Alice':'444-3333'} print(telephone['Paul']) # Provoque une erreur KeyError
- Exemple :
Les méthodes des dictionnaires
- clear() : Vide le dictionnaire.
- get(key) : Retourne la valeur associée avec la clé. Ne génère pas d’erreur si la clé n’existe pas.
- items() : Renvoie une séquence de tuples (key, value).
- keys() : Retourne toutes les clés du dictionnaire.
- pop(key) : Retourne la valeur associée à la clé et enlève l’élément du dictionnaire.
- popitem() : Retourne un tuple (key, value) aléatoire et l’enlève du dictionnaire.
- values() : Retourne toutes les valeurs des éléments du dictionnaire.
Voici un exemple pour chaque méthode :
```python
# Création d’un dictionnaire exemple
mon_dict = {“nom”: “Alice”, “age”: 25, “ville”: “Montréal”}
clear() : Vide le dictionnaire
mon_dict.clear()
print(mon_dict) # {}
Réinitialisation du dictionnaire
mon_dict = {“nom”: “Alice”, “age”: 25, “ville”: “Montréal”}
get(key) : Retourne la valeur associée à la clé, sans erreur si la clé n’existe pas
print(mon_dict.get(“age”)) # 25
print(mon_dict.get(“pays”, “Clé inexistante”)) # Clé inexistante
items() : Renvoie une séquence de tuples (key, value)
print(list(mon_dict.items())) # [(‘nom’, ‘Alice’), (‘age’, 25), (‘ville’, ‘Montréal’)]
keys() : Retourne toutes les clés du dictionnaire
print(list(mon_dict.keys())) # [‘nom’, ‘age’, ‘ville’]
pop(key) : Retourne la valeur associée à la clé et enlève l’élément du dictionnaire
valeur = mon_dict.pop(“age”)
print(valeur) # 25
print(mon_dict) # {‘nom’: ‘Alice’, ‘ville’: ‘Montréal’}
popitem() : Retourne un tuple (key, value) aléatoire et l’enlève du dictionnaire
element_supprime = mon_dict.popitem()
print(element_supprime) # (‘ville’, ‘Montréal’) (ou un autre élément selon l’ordre interne)
print(mon_dict) # {‘nom’: ‘Alice’}
Réinitialisation du dictionnaire
mon_dict = {“nom”: “Alice”, “age”: 25, “ville”: “Montréal”}
values() : Retourne toutes les valeurs des éléments du dictionnaire
print(list(mon_dict.values())) # [‘Alice’, 25, ‘Montréal’]
~~~
Ces exemples montrent comment chaque méthode fonctionne sur un dictionnaire Python. 😊
Quelles sont les structures de base utilisées dans Pandas pour travailler avec des données ?
- Series : Structure unidimensionnelle, similaire à une liste ou un tableau, contenant des données de même type (nombres, chaînes, etc.).
- DataFrame : Structure bidimensionnelle, similaire à une table, composée de plusieurs Series, avec des colonnes nommées et des indices de lignes.
Quel est l’alias couramment utilisé pour Pandas en Python ?
L’alias couramment utilisé pour Pandas est pd
. Exemple :
```python
import pandas as pd
~~~
Comment créer un DataFrame à partir d’un dictionnaire en Pandas ?
Voici comment créer un DataFrame à partir d’un dictionnaire en Pandas :
```python
import pandas as pd
df = pd.DataFrame({
“Name”: [“Braund, Mr. Owen Harris”, “Allen, Mr. William Henry”, “Bonnell, Miss. Elizabeth”],
“Age”: [22, 35, 58],
“Sex”: [“male”, “male”, “female”]
})
print(df)
~~~
Cela crée un DataFrame avec les colonnes “Name”, “Age”, et “Sex”.
Comment accéder à une colonne spécifique dans un DataFrame Pandas ?
Pour accéder à une colonne spécifique dans un DataFrame Pandas, vous pouvez utiliser la syntaxe suivante :
```python
df[“Age”]
~~~
Cela retournera la colonne “Age” sous forme de Series. Vous pouvez également utiliser un autre format pour accéder à la colonne en utilisant un point :
```python
df.Age
~~~
Les deux méthodes renverront le même résultat.
Quelle méthode de Pandas est utilisée pour effectuer une jointure entre deux DataFrames ?
La méthode utilisée pour effectuer une jointure entre deux DataFrames est merge()
. Voici un exemple de syntaxe :
```python
df3 = pd.merge(df1, df2, on=”common_column”)
~~~
Dans cet exemple, on
spécifie la colonne commune sur laquelle les DataFrames doivent être joints. Si les colonnes ont des noms différents, vous pouvez utiliser left_on
et right_on
pour spécifier les colonnes de chaque DataFrame.
Comment effectuer une** jointure entre deux DataFrames** en spécifiant une colonne de jointure ?
Pour effectuer une jointure entre deux DataFrames en spécifiant une colonne de jointure, vous utilisez le paramètre **on**
. Voici un exemple complet :
```python
df3 = pd.merge(df1, df2, on=”employee”)
~~~
Si les colonnes de jointure ont des noms différents dans les deux DataFrames, vous pouvez utiliser left_on
et right_on
pour spécifier les colonnes respectives :
```python
df3 = pd.merge(df1, df2, left_on=”employee_id”, right_on=”emp_id”)
~~~
Cela permet de définir des colonnes différentes pour chaque DataFrame tout en faisant la jointure correctement.
Quelle est la différence entre une Series et un DataFrame en Pandas ?
Création d’une Series
C’est tout à fait ça ! Voici un résumé plus détaillé des différences :
-
Series :
- Unidimensionnelle (une seule colonne).
- Peut contenir un seul type de données (numérique, chaîne de caractères, etc.).
- Dispose d’un index qui permet de référencer les éléments.
-
DataFrame :
- Bidimensionnelle (lignes et colonnes).
- Chaque colonne peut contenir un type de données différent (par exemple, une colonne pour les nombres et une autre pour les chaînes).
- Possède à la fois un index pour les lignes et des noms de colonnes pour chaque colonne.
Exemple :
```python
s = pd.Series([1, 2, 3, 4])
Création d’un DataFrame
df = pd.DataFrame({
‘A’: [1, 2, 3],
‘B’: [‘a’, ‘b’, ‘c’]
})
~~~
Dans cet exemple, s
est une Series avec un seul type de données (entiers), tandis que df
est un DataFrame composé de deux colonnes : une colonne avec des entiers et une autre avec des chaînes.
Que fait la méthode merge() lorsqu’elle est appliquée à deux DataFrames ?
merge() en Pandas :
- Fusionne deux DataFrames en fonction des colonnes spécifiées pour la jointure.
- Prend en compte le type de jointure (interne, externe, etc.).
- Crée un nouveau DataFrame avec les résultats de la fusion.
Exemple :
```python
df3 = pd.merge(df1, df2, on=”colonne_commune”, how=”inner”)
~~~
Comment afficher plusieurs DataFrames à la fois dans Pandas ?
Afficher plusieurs DataFrames dans Pandas :
- Utilisez la fonction display()
pour afficher plusieurs DataFrames à la fois.
Exemple :
```python
display(df1, df2)
~~~
Quelle est la fonction Pandas utilisée pour afficher le contenu d’un DataFrame ?
Afficher le contenu d’un DataFrame dans Pandas :
- Utilisez print(df)
ou simplement df
.
Exemple :
```python
print(df) # ou simplement df
~~~