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 :
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 :
- BigQuery
- Vertex AI Workbench user-managed notebooks instance. You are also charged for resources used within notebooks, including compute resources, BigQuery, and API requests.
- Cloud Storage
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine 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.
Dans Google Cloud Console, accédez à la page Notebooks.
Dans l'onglet Notebooks gérés par l'utilisateur, cliquez sur
Nouveau notebook.Sélectionnez R 3.6.
Pour ce tutoriel, conservez toutes les valeurs par défaut et cliquez sur Create (Créer) :
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 :
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.
Dans la liste des instances, cliquez sur Ouvrir Jupyterlab. Cela ouvre l'environnement JupyterLab dans votre navigateur.
Pour ouvrir un onglet de terminal, cliquez sur Terminal dans le lanceur d'applications.
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.Dans le navigateur de fichiers, ouvrez
ml-on-gcp
,tutorials
, puisR.
.Le résultat du clonage se présente comme suit :
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.
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.
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
Authentifiez
bigrquery
à l'aide de l'authentification hors bande :bq_auth(use_oob = True)
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"
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.
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 colonnesyear
,month
etweight_pounds
.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 ) )
Afficher les résultats récupérés :
head(natality_data)
Le résultat ressemble à ce qui suit :
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" ...
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é.
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 :
Affichez la relation entre
gestation_weeks
etweight_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 :
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.
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 ) ) }
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.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.
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.
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 ) )
É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 = ",")
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.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Étape suivante
- Pour plus d'informations sur l'utilisation des données BigQuery dans les notebooks R, consultez la documentation sur bigrquery.
- Découvrez les bonnes pratiques en matière d'ingénierie de ML dans les Règles du machine learning.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.