Visualiser des données BigQuery dans un bloc-notes 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 Python et Pandas dans un bloc-notes Jupyter pour 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, utilisez la console Google Cloud Platform pour créer ou sélectionner un projet et activer la facturation.

  1. Connectez-vous à votre compte Google.

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

  2. Sélectionnez ou créez un projet Google Cloud Platform.

    Accéder à la page "Gérer les ressources"

  3. Assurez-vous que la facturation est activée pour votre projet Google Cloud Platform.

    Découvrir comment activer la facturation

  4. BigQuery est automatiquement activé dans les nouveaux projets. Pour activer BigQuery dans un projet préexistant, Activez BigQuery API.

    Activez API

Configurer un environnement Jupyter local

Dans ce tutoriel, vous allez utiliser un bloc-notes 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. Exécutez la commande ci-dessous sur votre terminal pour installer la dernière version de la bibliothèque cliente BigQuery Python, y compris la bibliothèque Pandas dont vous aurez besoin 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 blocs-notes Jupyter

Un bloc-notes fournit un environnement pour 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 bloc-notes 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 ci-dessous 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 bloc-notes ouvert est associé à une session en cours d'exécution, qui est également appelée "noyau" en IPython. Cette session exécute tout le code saisi dans le bloc-notes 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 bloc-notes Cloud 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 bloc-notes 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 2 ou Python 3 pour créer un bloc-notes Python.

    Nouveau bloc-notes Jupyter Python 3

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

  4. Dans la boîte de dialogue Renommer le bloc-notes, saisissez un nouveau nom tel que BigQuery tutorial, puis cliquez sur Renommer.

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

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

  7. La bibliothèque cliente BigQuery 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 les informations ci-dessous dans la cellule suivante pour obtenir le nombre total de naissances par an.

    %%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.

    Table des naissances annuelles

  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 relative à 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 vous permet de rétablir un état antérieur du bloc-notes.

Objets DataFrame Pandas

Les commandes magiques vous permettent d'employer une syntaxe minimale pour interagir avec BigQuery. En arrière-plan, %%bigquery utilise la bibliothèque cliente BigQuery Python pour exécuter la requête concernée, convertir les résultats en objet DataFrame Pandas, enregistrer éventuellement ces derniers dans une variable, puis les afficher. En vous servant directement de la bibliothèque cliente BigQuery 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 Python pour interroger les 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 Python et initialiser un client. Ce dernier 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-après 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 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.

    Graphique du poids moyen par semaine de grossesse

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…