Visualiser des données BigQuery dans un notebook Jupyter

BigQuery est un entrepôt de données analytiques à l'échelle du pétaoctet que vous pouvez utiliser pour exécuter des requêtes SQL sur de grandes quantités de données, presque en temps réel.

Les outils de visualisation de données peuvent vous aider à interpréter les données BigQuery et à les analyser de manière interactive. Ils vous permettent d'identifier des tendances, d'agir en conséquence et d'effectuer des prédictions à l'aide de vos données. Dans ce tutoriel, vous allez utiliser la bibliothèque cliente BigQuery pour Python et Pandas dans un notebook Jupyter afin de visualiser les données de l'exemple de table BigQuery sur la natalité.

Objectifs

Dans ce tutoriel, vous allez effectuer les opérations suivantes :

  • Configurer un environnement pour exécuter des blocs-notes Jupyter
  • Interroger et visualiser des données BigQuery à l'aide de la bibliothèque cliente BigQuery Python et de Pandas

Coûts

BigQuery est un produit payant. Des coûts d'utilisation vous sont donc facturés lorsque vous y accédez. Selon la tarification des requêtes BigQuery, le premier To par mois est gratuit. Pour en savoir plus, consultez la page Prix.

Avant de commencer

Avant de commencer ce tutoriel, créez ou sélectionnez un projet à l'aide de Google Cloud Console.

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder à la page de sélection du projet

  3. BigQuery est automatiquement activé dans les nouveaux projets. Pour activer BigQuery dans un projet préexistant, accédez à Activez l'API BigQuery.

    Activer l'API

    .
  4. BigQuery fournit un bac à sable si vous ne souhaitez pas ajouter une carte de crédit ni activer la facturation pour votre projet. Les étapes décrites sur cette page fonctionnent quel que soit l'état de facturation du projet. Si vous le souhaitez, vous pouvez également découvrir comment activer la facturation.

Configurer un environnement Jupyter local

Dans ce tutoriel, vous allez utiliser un notebook Jupyter hébergé localement. Suivez les étapes ci-dessous pour installer Jupyter et les bibliothèques Python requises, ainsi que pour configurer l'authentification.

  1. Dans votre terminal, exécutez la commande suivante pour installer la dernière version de la bibliothèque cliente BigQuery pour Python, y compris la bibliothèque Pandas, requise pour les fonctions utilisant Pandas :

    pip install --upgrade 'google-cloud-bigquery[pandas]'
    
  2. Suivez les instructions d'installation indiquées dans la documentation de Jupyter pour installer Jupyter.

  3. Suivez les instructions indiquées à la page Premiers pas avec l'authentification pour configurer les identifiants par défaut de l'application. Vous devez configurer l'authentification en créant un compte de service et en définissant une variable d'environnement.

Présentation des notebooks Jupyter

Un notebook fournit un environnement dans lequel créer et exécuter du code. Il s'agit essentiellement d'un artefact source, enregistré sous forme de fichier .ipynb. Il peut inclure un contenu textuel descriptif, des blocs de code exécutables et les résultats associés (présentés au format HTML interactif). D'un point de vue structurel, un notebook correspond à une série de cellules.

Une cellule est un bloc de texte d'entrée qui est évalué pour produire des résultats. Les cellules peuvent être de deux types :

  • Des cellules de code contenant le code à évaluer. Les sorties et les résultats générés par l'exécution du code s'affichent immédiatement sous la ligne du code d'entrée.

  • Des cellules Markdown contenant du texte de balisage Markdown qui est converti au format HTML pour produire des en-têtes, des listes et du texte formaté.

La capture d'écran suivante représente une cellule Markdown suivie d'une cellule de code Python. Notez que la sortie de la cellule Python s'affiche immédiatement sous le code.

Cellules de code et Markdown Jupyter

Chaque notebook ouvert est associé à une session en cours d'exécution, qui est également appelée "noyau" en Python. Cette session exécute tout le code saisi dans le notebook et gère l'état (variables, valeurs associées, fonctions et classes, ainsi que tout module Python existant que vous chargez).

Interroger et visualiser des données BigQuery

Dans cette section du tutoriel, vous allez créer un notebook Datalab utilisé pour interroger et visualiser des données dans BigQuery. Vous créerez les représentations visuelles à l'aide des données de l'exemple de table sur la natalité. Toutes les requêtes de ce tutoriel utilisent la syntaxe SQL standard.

Pour interroger et visualiser des données BigQuery à l'aide d'un notebook Jupyter, procédez comme suit :

  1. Si vous n'avez pas encore démarré Jupyter, exécutez la commande ci-dessous dans votre terminal.

    jupyter notebook
    
  2. Jupyter doit désormais être en cours d'exécution et ouvert dans une fenêtre de navigateur. Dans la fenêtre Jupyter, cliquez sur le bouton New (Nouveau), puis sélectionnez Python 3 pour créer un notebook Python.

    Nouveau notebook Jupyter Python 3

  3. En haut de la page, cliquez sur Untitled (Sans titre).

  4. Dans la boîte de dialogue Rename notebook (Renommer le notebook), saisissez un nouveau nom tel que BigQuery tutorial, puis cliquez sur Rename (Renommer).

  5. La bibliothèque cliente BigQuery pour Python propose une commande magique qui vous permet d'exécuter des requêtes avec le moins de code possible. Pour charger les commandes magiques à partir de la bibliothèque cliente, collez le code suivant dans la première cellule du notebook :

    %load_ext google.cloud.bigquery
  6. Exécutez la commande en cliquant sur le bouton Run (Exécuter) ou en appuyant sur SHIFT + ENTER.

  7. La bibliothèque cliente BigQuery pour Python propose une cellule magique, %%bigquery, qui exécute une requête SQL et renvoie les résultats sous la forme d'un objet DataFrame Pandas. Saisissez le code ci-dessous dans la cellule suivante pour afficher le nombre total de naissances par année :

    %%bigquery
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  8. Cliquez sur Run (Exécuter).

  9. Les résultats de la requête s'affichent sous la cellule de code.

    Naissances par année

  10. Dans le bloc de cellules suivant, saisissez la commande ci-dessous pour exécuter la même requête en enregistrant, cette fois, les résultats dans une nouvelle variable total_births, qui est transmise en tant qu'argument à %%bigquery. Les résultats peuvent ensuite être utilisés pour d'autres analyses et représentations visuelles.

    %%bigquery total_births
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  11. Cliquez sur Run (Exécuter).

  12. Vous disposez maintenant d'un objet DataFrame Pandas enregistré dans la variable total_births et pouvant être représenté sous forme graphique. Pour préparer la représentation graphique des résultats de la requête, collez la commande magique intégrée ci-dessous dans la cellule suivante pour activer matplotlib, qui est la bibliothèque utilisée par Pandas pour la représentation graphique.

    %matplotlib inline
  13. Cliquez sur Run (Exécuter).

  14. Dans la cellule suivante, saisissez le code ci-dessous afin d'utiliser la méthode DataFrame.plot() Pandas pour visualiser les résultats de la requête sous la forme d'un graphique à barres. Consultez la documentation sur Pandas pour savoir comment visualiser des données avec cet outil.

    total_births.plot(kind="bar", x="year", y="birth_count")
  15. Cliquez sur Run (Exécuter).

  16. Le graphique s'affiche sous le bloc de code.

    Graphique à barres du nombre de naissances par an

  17. Ensuite, collez la requête ci-dessous dans la cellule suivante pour obtenir le nombre de naissances par jour de la semaine.

    %%bigquery births_by_weekday
    SELECT
        wday,
        SUM(CASE WHEN is_male THEN 1 ELSE 0 END) AS male_births,
        SUM(CASE WHEN is_male THEN 0 ELSE 1 END) AS female_births
    FROM `bigquery-public-data.samples.natality`
    WHERE wday IS NOT NULL
    GROUP BY wday
    ORDER BY wday ASC

    Le champ wday (jour de la semaine) autorisant les valeurs vides (null), la requête exclut les enregistrements pour lesquels wday est vide.

  18. Cliquez sur Run (Exécuter).

  19. Dans la cellule suivante, saisissez le code ci-dessous pour visualiser les résultats de la requête à l'aide d'un graphique en courbes.

    births_by_weekday.plot(x="wday")
  20. Cliquez sur Run (Exécuter).

  21. Le graphique s'affiche sous le bloc de code. Notez que le nombre de naissances diminue considérablement le dimanche (1) et le samedi (7).

    Graphique en courbes du nombre de naissances par jour de la semaine

  22. Cliquez sur File > Save and Checkpoint (Fichier > Enregistrer et effectuer un point de contrôle) ou sur l'icône d'enregistrement dans la barre d'outils. La création d'un point de contrôle permet de rétablir un état antérieur du notebook.

Objets DataFrame Pandas

Les commandes magiques permettent d'employer une syntaxe minimale pour interagir avec BigQuery. En arrière-plan, %%bigquery utilise la bibliothèque cliente BigQuery pour Python pour exécuter la requête concernée, convertir les résultats en objet DataFrame Pandas, et éventuellement les enregistrer dans une variable, puis les afficher. En vous servant directement de la bibliothèque cliente BigQuery pour Python au lieu de passer par les commandes magiques, vous avez la possibilité de mieux contrôler vos requêtes et de définir des configurations plus complexes. Les intégrations de la bibliothèque avec Pandas vous permettent de combiner la puissance du SQL déclaratif au code impératif (Python) pour effectuer des tâches intéressantes d'analyse, de visualisation et de transformation des données.

Interroger et visualiser des données BigQuery à l'aide des objets DataFrame Pandas

Dans cette section du tutoriel, vous allez interroger et visualiser des données dans BigQuery à l'aide d'objets DataFrame Pandas. Vous utiliserez la bibliothèque cliente BigQuery pour Python pour interroger des données BigQuery. Vous vous servirez de la bibliothèque Pandas pour analyser les données à l'aide des objets DataFrame.

  1. Saisissez le code Python ci-dessous dans la cellule suivante pour importer la bibliothèque cliente BigQuery pour Python et initialiser un client, qui permet d'envoyer des messages à l'API BigQuery et d'en recevoir.

    from google.cloud import bigquery
    
    client = bigquery.Client()
  2. Cliquez sur Run (Exécuter).

  3. Utilisez la méthode Client.query() pour exécuter une requête. Dans la cellule suivante, saisissez le code ci-dessous pour exécuter une requête visant à extraire le nombre de naissances multiples par an selon la pluralité (2 pour les jumeaux, 3 pour les triplés, etc.).

    sql = """
    SELECT
        plurality,
        COUNT(1) AS count,
        year
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(plurality) AND plurality > 1
    GROUP BY
        plurality, year
    ORDER BY
        count DESC
    """
    df = client.query(sql).to_dataframe()
    df.head()
  4. Cliquez sur Run (Exécuter).

  5. Pour représenter sous forme graphique les résultats de requête figurant dans votre objet DataFrame, insérez le code ci-dessous dans la cellule suivante pour réorganiser les données et créer un graphique à barres empilées illustrant le nombre de naissances multiples au fil du temps.

    pivot_table = df.pivot(index="year", columns="plurality", values="count")
    pivot_table.plot(kind="bar", stacked=True, figsize=(15, 7))
  6. Cliquez sur Run (Exécuter).

  7. Le graphique s'affiche sous le bloc de code.

    Graphique à barres empilées représentant la pluralité des naissances annuelles

  8. Dans la cellule suivante, saisissez la requête ci-dessous pour obtenir le nombre de naissances en fonction du nombre de semaines de grossesse.

    sql = """
    SELECT
        gestation_weeks,
        COUNT(1) AS count
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(gestation_weeks) AND gestation_weeks <> 99
    GROUP BY
        gestation_weeks
    ORDER BY
        gestation_weeks
    """
    df = client.query(sql).to_dataframe()
  9. Cliquez sur Run (Exécuter).

  10. Pour représenter sous forme graphique les résultats de requête figurant dans votre objet DataFrame, collez le code ci-dessous dans la cellule suivante.

    ax = df.plot(kind="bar", x="gestation_weeks", y="count", figsize=(15, 7))
    ax.set_title("Count of Births by Gestation Weeks")
    ax.set_xlabel("Gestation Weeks")
    ax.set_ylabel("Count")
  11. Cliquez sur Run (Exécuter).

  12. Le graphique à barres s'affiche sous le bloc de code.

    Poids moyen par semaine de gestation

Étape suivante