Data science avec R sur Google Cloud : tutoriel d'analyse de données exploratoire

Last reviewed 2024-04-16 UTC

Ce tutoriel explique comment utiliser la data science à grande échelle avec R sur Google Cloud. Il est destiné aux personnes qui maîtrisent les langages R et les notebooks Jupyter, et qui sont familiarisés avec SQL.

Ce tutoriel porte sur l'analyse exploratoire des données à l'aide des notebooks gérés par l'utilisateur Vertex AI Workbench et de BigQuery. Vous trouverez le code de ce tutoriel dans un notebook Jupyter disponible sur GitHub.

Présentation

R est l'un des langages de programmation les plus couramment utilisés pour la modélisation statistique. Il dispose d'une vaste et active communauté de data scientists et de professionnels du machine learning (ML). Avec plus de 15 000 packages dans le dépôt Open Source du Réseau d'archives R complet (CRAN) , R comprend des outils pour toutes les applications d'analyse de données statistiques, le ML et la visualisation. L'utilisation de R fait l'objet d'une croissance exponentielle au cours des deux dernières décennies en raison de son expressivité de sa syntaxe et de l'étendue de ses données et de ses bibliothèques de ML.

En tant que data scientist, vous souhaiterez peut-être savoir comment utiliser vos compétences avec R et comment exploiter les avantages des services cloud entièrement gérés et évolutifs pour le ML.

Architecture

Dans ce tutoriel, vous allez utiliser des notebooks gérés par l'utilisateur en tant qu'environnement de data science pour effectuer une analyse exploratoire des données (EDA). Vous utilisez le langage R sur les données que vous extrayez dans le cadre de ce tutoriel à partir de BigQuery, l'entrepôt de données cloud sans serveur, hautement évolutif et économique de Google. Après avoir analysé et traité les données, les données transformées sont stockées dans Cloud Storage pour effectuer d'autres tâches de ML. Ce flux est illustré dans le schéma suivant :

Flux de données de BigQuery vers les notebooks gérés par l'utilisateur, où elles sont traitées à l'aide de R et les résultats sont envoyés à Cloud Storage pour une analyse plus approfondie.

Données du tutoriel

L'ensemble de données utilisé dans ce tutoriel est l 'ensemble de données de natalité BigQuery. Cet ensemble de données public comprend des informations sur plus de 137 millions de naissance enregistrées aux États-Unis entre 1969 et 2008.

Ce tutoriel se concentre sur l'EDA et sur la visualisation à l'aide de R et BigQuery. Ce tutoriel vous permet de définir un objectif de machine learning permettant de prédire le poids d'un nouveau-né en fonction d'un certain nombre de facteurs relatifs à la grossesse et à la mère, mais cette tâche n'est pas abordée.

Notebooks gérés par l'utilisateur

Les notebooks gérés par l'utilisateur Vertex AI Workbench sont un service qui propose un environnement JupyterLab intégré, avec les fonctionnalités suivantes :

  • Déploiement en un clic Vous pouvez utiliser un seul clic pour démarrer une instance JupyterLab préconfigurée avec les derniers frameworks de machine learning et de data science.
  • Évolutivité à la demande Vous pouvez commencer avec une configuration de petite machine (par exemple, 4 processeurs virtuels et 15 Go de RAM, comme dans ce tutoriel). Lorsque vos données deviennent trop volumineuses pour une seule machine, vous pouvez augmenter le nombre de processeurs, de RAM et de GPU.
  • Intégration à Google Cloud Les instances de notebooks gérés par l'utilisateur Vertex AI Workbench sont intégrées aux services Google Cloud tels que BigQuery. Cette intégration permet de passer facilement de l'ingestion de données au prétraitement, puis à l'exploration.
  • Tarification à l'utilisation Il n'y a pas de frais minimums ni d'engagement préalable. Consultez les tarifs des notebooks gérés par l'utilisateur Vertex AI Workbench. Les ressources Google Cloud que vous utilisez avec l'instance de notebooks gérées par l'utilisateur vous sont également facturées.

Les notebooks gérés par l'utilisateur s'exécutent sur des instances Deep Learning VM Image. Ces images sont optimisées pour être compatibles avec des frameworks de ML tels que PyTorch et TensorFlow. Ce tutoriel permet de créer une instance de notebooks gérés par l'utilisateur avec R 3.6.

Travailler avec BigQuery à l'aide de R

BigQuery ne nécessite pas de gestion d'infrastructure. Vous pouvez donc vous concentrer sur la découverte d'informations significatives. BigQuery vous permet d'utiliser le langage SQL familier pour exploiter vos données. Vous n'avez donc pas besoin d'un administrateur de base de données. BigQuery vous permet d'analyser de grandes quantités de données à grande échelle et de préparer des ensembles de données pour le ML à l'aide des fonctionnalités d'analyse SQL approfondies de BigQuery.

Pour interroger des données BigQuery à l'aide de R, vous pouvez utiliser bigrquery, une bibliothèque R Open Source. Le package bigrquery fournit les niveaux d'abstraction suivants en plus de BigQuery :

  • L'API de bas niveau fournit des wrappers fins sur l 'API REST BigQuery sous-jacente.

  • L'interface DBI encapsule l'API de bas niveau et rend l'utilisation de BigQuery semblable à celle de tout autre système de base de données. Il s'agit de la couche la plus pratique si vous souhaitez exécuter des requêtes SQL dans BigQuery ou importer moins de 100 Mo.

  • L'interface dbplyr vous permet de traiter des tables BigQuery telles que des cadres de données en mémoire. Il s'agit de la couche la plus pratique si vous ne souhaitez pas écrire avec SQL et que souhaitez que dbplyr l'écrive pour vous.

Ce tutoriel utilise l'API de bas niveau de Bigrquery, sans avoir besoin de DBI ni de dbplyr.

Objectifs

  • Créez une instance de notebooks gérés par l'utilisateur compatible avec R.
  • Interrogez et analysez les données de BigQuery à l'aide de la bibliothèque Bigrquery R.
  • Préparez et stockez des données pour le ML dans Cloud Storage.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API.

    Enable the API

Créer une instance de notebooks gérés par l'utilisateur avec R

La première étape consiste à créer une instance de notebooks gérés par l'utilisateur que vous pourrez utiliser dans le cadre de ce tutoriel.

  1. Dans Google Cloud Console, accédez à la page Notebooks.

    Accéder à Notebooks

  2. Dans l'onglet Notebooks gérés par l'utilisateur, cliquez sur  Nouveau notebook.

  3. Sélectionnez R 3.6.

    Sélection de la version R.

  4. Pour ce tutoriel, conservez toutes les valeurs par défaut et cliquez sur Create (Créer) :

    Création de l'instance de notebook.

    Le démarrage de l'instance de notebooks gérés par l'utilisateur peut prendre jusqu'à 90 secondes. Lorsqu'elle est prête, elle est répertoriée dans le volet Notebook instances (Instances de notebook) avec un lien Open JupyterLab (Ouvrir JupyterLab) situé à côté du nom de l'instance :

    Console lorsque l'instance est prête.

Ouvrir JupyterLab

Pour suivre le tutoriel dans le notebook, vous devez ouvrir l'environnement JupyterLab, cloner le dépôt GitHub ml-on-gcp, puis ouvrir le notebook.

  1. Dans la liste des instances, cliquez sur Ouvrir Jupyterlab. Cela ouvre l'environnement JupyterLab dans votre navigateur.

    Le lanceur Jupyter.

  2. Pour ouvrir un onglet de terminal, cliquez sur Terminal dans le lanceur d'applications.

  3. Dans le terminal, clonez le dépôt GitHub ml-on-gcp :

    git clone https://github.com/GoogleCloudPlatform/ml-on-gcp.git
    

    Une fois la commande terminée, le dossier ml-on-gcp s'affiche dans le navigateur de fichiers.

  4. Dans le navigateur de fichiers, ouvrez ml-on-gcp, tutorials, puis R..

    Le résultat du clonage se présente comme suit :

    Ouverture du fichier R.

Ouverture du notebook et configuration de R

Les bibliothèques R dont vous avez besoin pour ce tutoriel, y compris bigrquery, sont installées par défaut dans les notebooks R. Dans le cadre de cette procédure, vous les importez pour les mettre à la disposition du notebook.

  1. Dans l'explorateur de fichiers, ouvrez le notebook 01-EDA-with-R-and-BigQuery.ipynb.

    Ce notebook couvre le tutoriel d'analyse de données exploratoire avec R et BigQuery. À partir de ce point du tutoriel, vous travaillez dans le notebook et vous exécutez le code affiché dans le notebook Jupyter lui-même.

  2. Importez les bibliothèques R dont vous avez besoin pour ce tutoriel :

    library(bigrquery) # used for querying BigQuery
    library(ggplot2) # used for visualization
    library(dplyr) # used for data wrangling
    
  3. Authentifiez bigrquery à l'aide de l'authentification hors bande :

    bq_auth(use_oob = True)
    
  4. Définissez une variable sur le nom du projet que vous utilisez pour ce tutoriel :

    # Set the project ID
    PROJECT_ID <- "gcp-data-science-demo"
    
  5. Définissez une variable sur le nom du bucket Cloud Storage :

    BUCKET_NAME <- "bucket-name"
    

    Remplacez bucket-name par un nom unique.

    Vous utilisez le bucket plus tard pour stocker les données de sortie.

Interroger des données à partir de BigQuery

Dans cette section du tutoriel, vous allez lire les résultats de l'exécution d'une instruction SQL BigQuery dans le langage R et examiner de manière préliminaire les données.

  1. Créez une instruction SQL BigQuery qui extrait certains prédicteurs possibles et la variable de prédiction cible pour un échantillon de naissance depuis 2000 :

    sql_query <- "
        SELECT
          ROUND(weight_pounds, 2) AS weight_pounds,
          is_male,
          mother_age,
          plurality,
          gestation_weeks,
          cigarette_use,
          alcohol_use,
          CAST(ABS(FARM_FINGERPRINT(CONCAT(
            CAST(YEAR AS STRING), CAST(month AS STRING),
            CAST(weight_pounds AS STRING)))
            ) AS STRING) AS key
        FROM
            publicdata.samples.natality
        WHERE
          year > 2000
          AND weight_pounds > 0
          AND mother_age > 0
          AND plurality > 0
          AND gestation_weeks > 0
          AND month > 0
        LIMIT %s
    "
    

    La colonne key est un identifiant de ligne généré basé sur les valeurs concaténées des colonnes year, month et weight_pounds.

  2. Exécutez la requête et récupérez les données en tant qu'objet data frame en mémoire :

    sample_size <- 10000
    sql_query <- sprintf(sql_query, sample_size)
    
    natality_data <- bq_table_download(
        bq_project_query(
            PROJECT_ID,
            query=sql_query
        )
    )
    
  3. Afficher les résultats récupérés :

    head(natality_data)
    

    Le résultat ressemble à ce qui suit :

    Résultats de la récupération du cadre de données.

  4. Affichez le nombre de lignes et les types de données de chaque colonne :

    str(natality_data)
    

    Le résultat ressemble à ce qui suit :

    Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   10000 obs. of  8 variables:
     $ weight_pounds  : num  7.75 7.4 6.88 9.38 6.98 7.87 6.69 8.05 5.69 9.22 ...
     $ is_male        : logi  FALSE TRUE TRUE TRUE FALSE TRUE ...
     $ mother_age     : int  47 44 42 43 42 43 42 43 45 44 ...
     $ plurality      : int  1 1 1 1 1 1 1 1 1 1 ...
     $ gestation_weeks: int  41 39 38 39 38 40 35 40 38 39 ...
     $ cigarette_use  : logi  NA NA NA NA NA NA ...
     $ alcohol_use    : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
     $ key            : chr  "3579741977144949713" "8004866792019451772" "7407363968024554640" "3354974946785669169" ...
    
  5. Affichez un résumé des données récupérées :

    summary(natality_data)
    

    Le résultat ressemble à ce qui suit :

     weight_pounds     is_male          mother_age     plurality
     Min.   : 0.620   Mode :logical   Min.   :13.0   Min.   :1.000
     1st Qu.: 6.620   FALSE:4825      1st Qu.:22.0   1st Qu.:1.000
     Median : 7.370   TRUE :5175      Median :27.0   Median :1.000
     Mean   : 7.274                   Mean   :27.3   Mean   :1.038
     3rd Qu.: 8.110                   3rd Qu.:32.0   3rd Qu.:1.000
     Max.   :11.440                   Max.   :51.0   Max.   :4.000
     gestation_weeks cigarette_use   alcohol_use         key
     Min.   :18.00   Mode :logical   Mode :logical   Length:10000
     1st Qu.:38.00   FALSE:580       FALSE:8284      Class :character
     Median :39.00   TRUE :83        TRUE :144       Mode  :character
     Mean   :38.68   NA's :9337      NA's :1572
     3rd Qu.:40.00
     Max.   :47.00
    

Visualiser des données à l'aide de ggplot2

Dans cette section, vous allez utiliser la bibliothèque ggplot2 en R pour examiner certaines des variables de l'ensemble de données de natalité.

  1. Affichez la distribution des valeurs weight_pounds à l'aide d'un histogramme :

    ggplot(
        data = natality_data,
        aes(x = weight_pounds)
    ) + geom_histogram(bins = 200)
    

    Le tracé obtenu est semblable à celui-ci :

    Histogramme illustrant la distribution du poids

  2. Affichez la relation entre gestation_weeks et weight_pounds à l'aide d'un nuage de points :

    ggplot(
        data = natality_data,
        aes(x = gestation_weeks, y = weight_pounds)
    ) + geom_point() + geom_smooth(method = "lm")
    

    Le tracé obtenu est semblable à celui-ci :

    Nuage de points des semaines de gestation par rapport au poids.

Traiter des données dans BigQuery à partir de R

Lorsque vous utilisez des ensembles de données volumineux, nous vous recommandons d'effectuer autant d'analyses que possible (agrégation, filtrage, jointure, colonnes de calcul, etc.) dans BigQuery, puis d'extraire les résultats. L'exécution de ces tâches en R est moins efficace. L'utilisation de BigQuery pour l'analyse exploite l'évolutivité et les performances de BigQuery, et garantit que les résultats renvoyés peuvent tenir dans la mémoire en R.

  1. Créez une fonction qui trouve le nombre d'enregistrements et le poids moyen pour chaque valeur de la colonne choisie :

    get_distinct_values <- function(column_name) {
        query <- paste0(
            'SELECT ', column_name, ',
                COUNT(1) AS num_babies,
                AVG(weight_pounds) AS avg_wt
            FROM publicdata.samples.natality
            WHERE year > 2000
            GROUP BY ', column_name)
    
        bq_table_download(
            bq_project_query(
                PROJECT_ID,
                query = query
            )
        )
    }
    
  2. Appelez cette fonction à l'aide de la colonne mother_age, puis examinez le nombre de bébés et leur poids moyen en fonction de l'âge de la mère :

    df <- get_distinct_values('mother_age')
    ggplot(data = df, aes(x = mother_age, y = num_babies)) + geom_line()
    ggplot(data = df, aes(x = mother_age, y = avg_wt)) + geom_line()
    

    Le résultat de la première commande ggplot est présenté ci-dessous. Il indique le nombre de bébés nés en fonction de l'âge de la mère.

    Représentation graphique du nombre de bébés qui naissent en fonction de l&#39;âge de leur mère.

    Le résultat de la deuxième commande ggplot est le suivant, indiquant le poids moyen des bébés en fonction de l'âge de la mère.

    Représentation graphique du poids moyen des bébés en fonction de l&#39;âge de la mère.

Pour voir d'autres exemples de visualisation, reportez-vous au notebook.

Enregistrement de données au format CSV

La tâche suivante consiste à enregistrer les données extraites de BigQuery sous forme de fichiers CSV dans Cloud Storage afin de pouvoir les utiliser pour d'autres tâches de ML.

  1. Chargez les données d'entraînement et d'évaluation de BigQuery vers le langage R :

    # Prepare training and evaluation data from BigQuery
    sample_size <- 10000
    sql_query <- sprintf(sql_query, sample_size)
    
    train_query <- paste('SELECT * FROM (', sql_query,
      ') WHERE MOD(CAST(key AS INT64), 100) <= 75')
    eval_query <- paste('SELECT * FROM (', sql_query,
      ') WHERE MOD(CAST(key AS INT64), 100) > 75')
    
    # Load training data to data frame
    train_data <- bq_table_download(
        bq_project_query(
            PROJECT_ID,
            query = train_query
        )
    )
    
    # Load evaluation data to data frame
    eval_data <- bq_table_download(
        bq_project_query(
            PROJECT_ID,
            query = eval_query
        )
    )
    
  2. Écrivez les données dans un fichier CSV local :

    # Write data frames to local CSV files, without headers or row names
    dir.create(file.path('data'), showWarnings = FALSE)
    write.table(train_data, "data/train_data.csv",
       row.names = FALSE, col.names = FALSE, sep = ",")
    write.table(eval_data, "data/eval_data.csv",
       row.names = FALSE, col.names = FALSE, sep = ",")
    
  3. Importez les fichiers CSV dans Cloud Storage en encapsulant les commandes gsutil transmises au système :

    # Upload CSV data to Cloud Storage by passing gsutil commands to system
    gcs_url <- paste0("gs://", BUCKET_NAME, "/")
    command <- paste("gsutil mb", gcs_url)
    system(command)
    gcs_data_dir <- paste0("gs://", BUCKET_NAME, "/data")
    command <- paste("gsutil cp data/*_data.csv", gcs_data_dir)
    system(command)
    command <- paste("gsutil ls -l", gcs_data_dir)
    system(command, intern = TRUE)
    

    Une autre option consiste à utiliser la bibliothèque googleCloudStorageR à l'aide de l'API JSON Cloud Storage.

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud, vous pouvez les supprimer.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Étape suivante