Interrogation des bases de données en utilisant SQL#

La première étape consiste à charger et explorer les données. Nous utilisons pandas pour charger les données et nous les stockons simplement dans des variables.

import pandas as pd
from pandasql import sqldf

Lorsqu’on travaille avec SQL, il est courant d’appeler les tables (aussi appelées DataFrames) au singulier. Cela permet une meilleure lecture du code SQL. Par exemple, dans une base de données contenant des expériences, nous pouvons plus tard utiliser experiment.concentration pour décrire la concentration d’un médicament utilisé pour exposer les cellules.

experiment = pd.read_csv("../../data/experiments.csv")
measurement = pd.read_csv("../../data/measurements.csv")

Ensuite, nous combinons ces tables dans une base de données. Pour ce faire, nous définissons une fonction qui peut interroger la base de données.

query_database = lambda q: sqldf(q, globals())

Select From#

Ensuite, nous définissons une requête en SQL. SQL a un format assez facilement lisible par l’homme. Typiquement, nous commençons par définir ce que nous voulons lire (SELECT) et d’où (FROM).

query = """
SELECT * 
FROM measurement
"""

query_database(query)
Unnamed: 0 image_ID time_after_exposure_in_s number_of_cells
0 0 1 0 99
1 1 1 1 52
2 2 1 2 33
3 3 1 3 25
4 4 1 4 21
... ... ... ... ...
95 95 10 5 52
96 96 10 6 54
97 97 10 7 54
98 98 10 8 54
99 99 10 9 51

100 rows × 4 columns

Au fait, SQL n’est pas sensible à la casse en soi, mais vous trouvez généralement les mots de commande SQL en majuscules.

query = """
select * 
from measurement
"""

query_database(query)
Unnamed: 0 image_ID time_after_exposure_in_s number_of_cells
0 0 1 0 99
1 1 1 1 52
2 2 1 2 33
3 3 1 3 25
4 4 1 4 21
... ... ... ... ...
95 95 10 5 52
96 96 10 6 54
97 97 10 7 54
98 98 10 8 54
99 99 10 9 51

100 rows × 4 columns

Vous pouvez également sélectionner des colonnes spécifiques par leur nom. Ici aussi, SQL n’est pas sensible à la casse. La colonne sélectionnée concentration apparaît comme Concentration car c’est son nom dans la base de données.

query = """
select Comment, concentration
from experiment
"""

query_database(query)
Comment Concentration
0 High dose 50
1 Medium dose 20
2 Control 0
3 Super high dose 1000

Tri des tables#

Cette table peut également être triée en utilisant l’instruction ORDER BY, par exemple pour voir le plus grand nombre de cellules. Dans ce cas, nous trions la colonne par ordre décroissant en utilisant l’instruction DESC. L’ordre croissant ASC serait par défaut.

query = """
SELECT * 
FROM measurement
ORDER BY number_of_cells DESC
"""

query_database(query)
Unnamed: 0 image_ID time_after_exposure_in_s number_of_cells
0 10 2 0 201
1 75 8 5 161
2 50 6 0 158
3 78 8 8 158
4 70 8 0 157
... ... ... ... ...
95 47 5 7 8
96 38 4 8 7
97 48 5 8 7
98 39 4 9 6
99 49 5 9 6

100 rows × 4 columns

Spécification du nombre de lignes à interroger#

Dans le cas où une table est très grande, récupérer toutes les lignes peut prendre beaucoup de temps. Pour obtenir quand même des informations sur les données, il peut être judicieux de LIMIT la table aux 10 premières lignes.

query = """
SELECT * 
FROM measurement
ORDER BY number_of_cells DESC
LIMIT 10;
"""

query_database(query)
Unnamed: 0 image_ID time_after_exposure_in_s number_of_cells
0 10 2 0 201
1 75 8 5 161
2 50 6 0 158
3 78 8 8 158
4 70 8 0 157
5 77 8 7 157
6 76 8 6 154
7 60 7 0 153
8 64 7 4 153
9 66 7 6 153

Exercice#

Déterminez le plus long time_after_exposure_in_s appliqué dans n’importe quelle expérience.