arrow_back

Del análisis de macrodatos a un documento de Presentaciones

Unirse Acceder
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Del análisis de macrodatos a un documento de Presentaciones

Lab 1 hora universal_currency_alt No cost show_chart Intermedio
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP240

Labs de autoaprendizaje de Google Cloud

Descripción general

Existen muchas herramientas que les permiten a los científicos de datos analizar macrodatos, pero ¿cuál de esas herramientas puede ayudarte a explicar y justificar tu análisis ante los directivos y las partes interesadas? Los números sin procesar, en papel o en una base de datos, difícilmente lo harán. Este lab de Google Apps Script usa dos plataformas para desarrolladores de Google: Workspace y Google Cloud, con el objetivo de ayudarte a completar ese proceso.

Con las herramientas para desarrolladores de Google Cloud, puedes recopilar y procesar tus datos, luego, generar una presentación de diapositivas y hojas de cálculo para impresionar a los directivos y a las partes interesadas con tu asombroso análisis y tus conclusiones reveladoras.

En este lab, se explican la API de BigQuery de Google Cloud (como un servicio avanzado de Apps Script) y los servicios integrados de Apps Script para Hojas de cálculo de Google y Presentaciones de Google.

Además, se establece una situación muy similar a la vida real. La app que se utiliza muestra algunas APIs y características de todo Google Cloud. El objetivo es demostrar cómo puedes aprovechar Google Cloud y Workspace para resolver problemas complejos para tu organización o tus clientes.

Aprendizajes esperados

  • Cómo usar Google Apps Script con múltiples servicios de Google
  • Cómo usar BigQuery para realizar un análisis de macrodatos
  • Cómo crear una hoja de cálculo de Google y propagar datos en ella, y también cómo crear un gráfico con datos de esa hoja
  • Cómo transferir el gráfico y los datos de la hoja de cálculo a diapositivas separadas de un documento de Presentaciones de Google

Configuración

Antes de hacer clic en el botón Comenzar lab

Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.

Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.

Para completar este lab, necesitarás lo siguiente:

  • Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
Nota: Usa una ventana de navegador privada o de Incógnito para ejecutar este lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
  • Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Nota: Si ya tienes un proyecto o una cuenta personal de Google Cloud, no los uses en este lab para evitar cargos adicionales en tu cuenta.

Introducción

Google Apps Script y BigQuery

Google Apps Script es una plataforma de desarrollo de Workspace que funciona a un nivel superior que las APIs de REST de Google. Es un entorno de desarrollo y hosting de aplicaciones sin servidores que pueden usar desarrolladores con distintos niveles de habilidades. A modo de resumen, “Apps Script es un entorno de ejecución de JavaScript sin servidores para la integración, extensión y automatización de Workspace”.

Es un lenguaje JavaScript del lado del servidor, similar a Node.js, pero se enfoca en la integración estrecha con Workspace y otros servicios de Google, y no en el hosting de aplicaciones rápido, asíncrono y basado en eventos. También presenta un entorno de desarrollo que puede ser completamente diferente al que conoces. Con Apps Script, puedes realizar las siguientes acciones:

  • Desarrollar en un editor de código basado en navegador, pero puedes elegir hacerlo localmente si usas clasp, la herramienta de implementación de línea de comandos para Apps Script
  • Escribir código en una versión especializada de JavaScript, personalizada para acceder a Workspace y a otros servicios externos o de Google (con los servicios de URLfetch o Jdbc de Apps Script)
  • Evitar escribir código de autorización, ya que Apps Script lo puede manejar
  • Evitar alojar tu aplicación, ya que esta reside y se ejecuta en los servidores de Google en la nube
Nota: Para obtener más información sobre Apps Script, consulta la documentación oficial, que incluye una descripción general con guías de inicio rápido, instructivos y videos.

Apps Script interactúa con otras tecnologías de Google de dos maneras diferentes:

  • Servicio integrado
  • Servicio avanzado

Un servicio integrado proporciona métodos de alto nivel que puedes usar para acceder a datos de productos de Workspace o de Google, y también otros métodos convenientes de utilidad. Un servicio avanzado es simplemente un wrapper delgado en torno a una API de REST de Google o de Workspace. Los servicios avanzados proporcionan una cobertura completa de la API de REST y, a menudo, pueden hacer más que los servicios integrados, pero requieren un código más complejo (y, a su vez, son más fáciles de usar que la API de REST).

Los servicios avanzados también deben estar habilitados para un proyecto de secuencia de comandos antes de que se los pueda usar. Siempre que sea posible, se prefiere un servicio integrado, ya que es más fácil de usar y ejecuta más trabajo pesado que los servicios avanzados. Sin embargo, algunas APIs de Google no tienen servicios integrados, por lo que un servicio avanzado puede ser la única opción. BigQuery es un ejemplo de esto: no hay un servicio integrado disponible, pero existe un servicio avanzado de BigQuery (mejor que ningún servicio, ¿cierto?).

Nota: En caso de que no tengas experiencia en BigQuery, se trata de un servicio de Google Cloud que se usa para realizar consultas simples (o complejas) en grandes volúmenes de datos, por ejemplo, de varios terabytes, y proporcionar resultados en segundos, en lugar de horas o días.

Accede a Hojas de cálculo y Presentaciones de Google desde Apps Script

BigQuery solo está disponible como un servicio avanzado de Apps Script. Sin embargo, tanto Hojas de cálculo como Presentaciones de Google tienen servicios integrados de Apps Script, así como servicios avanzados, por ejemplo, para acceder a características que solo se encuentran en la API y que no están disponibles en la versión integrada. Siempre que sea posible, elige un servicio integrado en lugar de su equivalente avanzado, ya que el servicio integrado proporciona constructos de nivel superior y llamadas convenientes, lo que simplifica el desarrollo.

Nota: Para hacer una revisión antes de pasar al código, consulta el servicio de Hojas de cálculo y el servicio de Presentaciones.

Tarea 1. Consulta BigQuery y registra los resultados en un documento de Hojas de cálculo

Cubrirás gran parte del contenido de este lab cuando realices esta primera tarea. Luego de finalizar esta sección, estarás casi en la mitad del lab.

En esta sección, realizarás las siguientes tareas:

  • Iniciar un nuevo proyecto de Google Apps Script
  • Habilitar el acceso al servicio avanzado de BigQuery
  • Ir al editor de desarrollo y, luego, ingresar el código fuente de la aplicación
  • Realizar el proceso de autorización de la aplicación (OAuth2)
  • Ejecutar la aplicación que envía una solicitud a BigQuery
  • Ver un documento completamente nuevo de Hojas de cálculo de Google con los resultados de BigQuery

Crea un nuevo proyecto de Apps Script

  1. Crea un nuevo proyecto de Apps Script desde script.google.com. Para este lab, haz clic en el vínculo Crear una secuencia de comandos de Apps Script.

Vínculo de Crear una secuencia de comandos de Apps Script

  1. Se abrirá el editor de código de Apps Script:

Editor de código de Apps Script

  1. Haz clic en el nombre del proyecto de la parte superior (“Proyecto sin título” en la imagen de arriba) para asignar un nombre a tu proyecto.

  2. En el diálogo Cambiar nombre del proyecto, asigna el nombre que quieras al proyecto (por ejemplo, “BigQuery”, “Hojas de cálculo”, “Demostración de Presentaciones”, etc.) y haz clic en Cambiar nombre.

Habilita el servicio avanzado de BigQuery

Habilita el servicio avanzado de BigQuery para tu proyecto nuevo y habilita la API de BigQuery.

  1. Haz clic en el ícono Agregar un servicio junto a Servicios.

Agregar ícono

  1. En el diálogo Agregar un servicio, selecciona los servicios y las APIs que correspondan.

Cuadro de diálogo Agregar un servicio, que incluye las opciones API de AdSense Management y API de SDK de Admin.

  1. Ve a la consola de Cloud y selecciona el menú de navegación > APIs y servicios > Biblioteca.

El menú APIs y servicios, que incluye las opciones Panel, Biblioteca y Credenciales.

  1. Escribe o pega API de BigQuery en el cuadro de búsqueda y selecciona la API de BigQuery.

API de BigQuery escrito en el cuadro de búsqueda

  1. Haz clic en Habilitar para habilitar la API de BigQuery si es necesario.

El botón Habilitar destacado en la página Biblioteca de APIs.

  1. Vuelve al proyecto. El diálogo Agregar un servicio debería seguir abierto.

  2. Selecciona API de BigQuery y haz clic en Agregar para cerrarlo.

Cuadro de diálogo Agregar un servicio con la opción API de BigQuery y el botón Agregar destacados.

Ingresa y ejecuta el código de tu aplicación

Ya estás listo para ingresar el código de la aplicación, realizar el proceso de autorización y hacer funcionar la primera versión de esta aplicación.

  1. Copia el código del siguiente recuadro y pégalo por encima de lo que aparece en el editor de código:
/** * Copyright 2018 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at apache.org/licenses/LICENSE-2.0. * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Filename for data results var QUERY_NAME = "Most common words in all of Shakespeare's works"; // Replace this value with your Google Cloud API project ID var PROJECT_ID = '<YOUR_PROJECT_ID>'; if (!PROJECT_ID) throw Error('Project ID is required in setup'); /** * Runs a BigQuery query; puts results into Sheet. You must enable * the BigQuery advanced service before you can run this code. * @see http://developers.google.com/apps-script/advanced/bigquery#run_query * @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs * * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results * @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet */ function runQuery() { // Replace sample with your own BigQuery query. var request = { query: 'SELECT ' + 'LOWER(word) AS word, ' + 'SUM(word_count) AS count ' + 'FROM [bigquery-public-data:samples.shakespeare] ' + 'GROUP BY word ' + 'ORDER BY count ' + 'DESC LIMIT 10' }; var queryResults = BigQuery.Jobs.query(request, PROJECT_ID); var jobId = queryResults.jobReference.jobId; // Wait for BQ job completion (with exponential backoff). var sleepTimeMs = 500; while (!queryResults.jobComplete) { Utilities.sleep(sleepTimeMs); sleepTimeMs *= 2; queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId); } // Get all results from BigQuery. var rows = queryResults.rows; while (queryResults.pageToken) { queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, { pageToken: queryResults.pageToken }); rows = rows.concat(queryResults.rows); } // Return null if no data returned. if (!rows) { return Logger.log('No rows returned.'); } // Create the new results spreadsheet. var spreadsheet = SpreadsheetApp.create(QUERY_NAME); var sheet = spreadsheet.getActiveSheet(); // Add headers to Sheet. var headers = queryResults.schema.fields.map(function(field) { return field.name.toUpperCase(); }); sheet.appendRow(headers); // Append the results. var data = new Array(rows.length); for (var i = 0; i < rows.length; i++) { var cols = rows[i].f; data[i] = new Array(cols.length); for (var j = 0; j < cols.length; j++) { data[i][j] = cols[j].v; } } // Start storing data in row 2, col 1 var START_ROW = 2; // skip header row var START_COL = 1; sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data); Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); }
  1. Para guardar el archivo que acabas de crear, haz clic en elícono Guardar proyecto de la barra de menú o presiona Ctrl + S.

  2. Para cambiar el nombre del archivo, haz clic en los tres puntos junto a su nombre y selecciona Cambiar nombre.

La opción Cambiar nombre destacada

  1. Cambia el nombre del archivo a bq-sheets-slides.gs y presiona Intro.

¿Qué hace este código? Sabemos que consultas a BigQuery y que escribes los resultados en un documento nuevo de Hojas de cálculo de Google, pero ¿qué representa esta consulta?

  1. Examina el código de consulta en la función runQuery():
SELECT LOWER(word) AS word, SUM(word_count) AS count FROM [bigquery-public-data:samples.shakespeare] GROUP BY word ORDER BY count DESC LIMIT 10

Esta consulta revisa las obras de Shakespeare, que forman parte del conjunto de datos públicos de BigQuery, y muestra las 10 palabras que aparecen con mayor frecuencia en todas sus obras, en orden descendente de popularidad. Para tener una idea de lo útil que es BigQuery, basta con imaginar lo tedioso que sería hacer esta tarea manualmente.

Ya falta poco. Se requiere un ID de proyecto válido para establecer la variable PROJECT_ID en la parte superior de bq-sheets-slides.gs.

  1. Reemplaza <YOUR_PROJECT_ID> por el ID del proyecto que se encuentra en el panel izquierdo.

A continuación, veremos un ejemplo del código con un ID de proyecto de muestra. El valor real de tu PROJECT_ID será diferente.

Código de ejemplo:

// Filename for data results var QUERY_NAME = "Most common words in all of Shakespeare's works"; // Replace this value with your Google Cloud API project ID var PROJECT_ID = '<YOUR_PROJECT_ID>'; if (!PROJECT_ID) throw Error('Project ID is required in setup'); Nota: En este fragmento de código, la sentencia if sirve para evitar que la aplicación avance sin un ID de proyecto implementado. Nota: Si el selector de menú está fijo y no funciona, vuelve a cargar la página.
  1. Haz clic en la opción Ejecutar de la barra de menú para guardar el archivo y ejecutar tu código.

  2. Luego, haz clic en Revisar permisos.

Nota: Si se produce el error Exception: Service BigQuery API has not been enabled for your Apps.. quita el servicio de la API de BigQuery y vuelve a agregarlo.
  1. En el diálogo Elegir una cuenta de qwiklabs.net, haz clic en tu Nombre de usuario y, luego, en Permitir.
Nota: Una vez que hayas autorizado la app, no necesitas repetir este proceso para cada ejecución. Cuando llegues a la sección “Coloca los datos de resultados en una presentación de diapositivas” más adelante en este lab, verás la pantalla de diálogo nuevamente. Ahí se te pedirá permiso de usuario para crear y administrar los documentos de Presentaciones de Google.
  1. Cuando se ejecuta la función, se abre un pequeño cuadro de mensaje en la parte superior.

Mensaje: Ejecutando función runQuery…

El cuadro de mensaje desaparece una vez que finaliza la función. Si no lo ves, es probable que haya finalizado su ejecución.

  1. Ve a tu unidad de Google Drive y busca una nueva hoja de cálculo de Google con el nombre Most common words in all of Shakespeare's works, o bien con el nombre que le asignaste a la variable QUERY_NAME.

Ventana Mi unidad

  1. Abre la hoja de cálculo. Deberías ver 10 filas de palabras y su conteo total en orden descendente.

Hoja de cálculo Most common words in all of Shakespeare&#39;s works

Haz clic en Revisar mi progreso para verificar el objetivo. Consultar BigQuery y registrar los resultados en un documento de Hojas de cálculo

Resumen

¿Qué acaba de suceder? Ejecutaste el código que consultó todas las obras de Shakespeare. No es una cantidad ENORME de datos, pero definitivamente es más texto del que puedes revisar por tu cuenta para examinar todas las palabras en todas las obras, llevar un conteo de esas palabras y clasificarlas en orden descendente. No solo le derivaste este trabajo a BigQuery, sino que también pudiste usar el servicio integrado en Apps Script para Hojas de cálculo de Google con el fin de organizar los datos y facilitar su utilización.

Siempre puedes probar la consulta en la consola de BigQuery antes de ejecutarla en Apps Script. La interfaz de usuario de BigQuery está disponible para los desarrolladores.

  1. Ve a la consola de Cloud y selecciona el menú de navegación > BigQuery.

Menú de navegación

  1. En el diálogo Te damos la bienvenida a BigQuery en la consola de Cloud, haz clic en LISTO.

Se abrirá la consola de BigQuery.

  1. Ingresa tu código en el editor de consultas y, luego, haz clic en Ejecutar:
SELECT LOWER(word) AS word, sum(word_count) AS count FROM `bigquery-public-data.samples.shakespeare` GROUP BY word ORDER BY count DESC LIMIT 10

El editor de consultas con el botón Ejecutar destacado

Tarea 2. Crea un gráfico en Hojas de cálculo de Google

Vuelve al Editor de secuencias de comandos. Hasta ahora, codificaste una aplicación que consulta las obras de Shakespeare, las ordena y, luego, presenta los resultados en Hojas de cálculo. En el código, la función runQuery() se comunica con BigQuery y envía sus resultados a un documento de Hojas de cálculo. Ahora agregarás código para crear un gráfico con los datos. En esta sección, crearás una nueva función llamada createColumnChart(), que llama al método newChart() de Hojas de cálculo para crear un gráfico con los datos.

La función createColumnChart() recibe la hoja de cálculo con los datos y solicita un gráfico de columnas con todos los datos. El rango de datos comienza en la celda A2 debido a que la primera fila contiene los encabezados de las columnas, y no datos.

  1. Para crear el gráfico, agrega la función createColumnChart() a bq-sheets-slides.gs justo después de runQuery() (después de la última línea de código):
/** * Uses spreadsheet data to create columnar chart. * @param {Spreadsheet} Spreadsheet containing results data * @returns {EmbeddedChart} visualizing the results * @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart */ function createColumnChart(spreadsheet) { // Retrieve the populated (first and only) Sheet. var sheet = spreadsheet.getSheets()[0]; // Data range in Sheet is from cell A2 to B11 var START_CELL = 'A2'; // skip header row var END_CELL = 'B11'; // Place chart on Sheet starting on cell E5. var START_ROW = 5; // row 5 var START_COL = 5; // col E var OFFSET = 0; // Create & place chart on the Sheet using above params. var chart = sheet.newChart() .setChartType(Charts.ChartType.COLUMN) .addRange(sheet.getRange(START_CELL + ':' + END_CELL)) .setPosition(START_ROW, START_COL, OFFSET, OFFSET) .build(); sheet.insertChart(chart); }
  1. Para devolver la hoja de cálculo, en el código anterior, createColumnChart() necesita el objeto de la hoja de cálculo, por lo que debes modificar la app para que devuelva el objeto spreadsheet y lo pase a createColumnChart(). Luego de registrar la creación correcta de la hoja de cálculo de Google, devuelve el objeto al final de runQuery().

  2. Reemplaza la última línea (la que comienza con Logger.log) por lo siguiente:

Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); // Return the spreadsheet object for later use. return spreadsheet; }
  1. Acciona la función createBigQueryPresentation(): segregar de manera lógica la funcionalidad para crear gráficos de BigQuery es una gran idea. Crea la función createBigQueryPresentation() para accionar la app llamando a esa función y a createColumnChart(). El código que agregues debería verse así:
/** * Runs a BigQuery query, adds data and a chart in a Sheet. */ function createBigQueryPresentation() { var spreadsheet = runQuery(); createColumnChart(spreadsheet); }
  1. Coloca la función createBigQueryPresentation() justo después del siguiente bloque de código:
// Filename for data results var QUERY_NAME = "Most common words in all of Shakespeare's works"; // Replace this value with your Google Cloud API project ID var PROJECT_ID = '<YOUR_PROJECT_ID>'; if (!PROJECT_ID) throw Error('Project ID is required in setup');
  1. Haz que el código se pueda reutilizar. Previamente realizaste 2 pasos importantes: devolviste el objeto de la hoja de cálculo y creaste una función de accionamiento. ¿Qué sucede si un colega quisiera reutilizar runQuery() y no quiere que se registre la URL?

Con el fin de que runQuery() sea más accesible para un uso general, mueve la línea de registro. ¿Cuál es el mejor lugar donde colocarla? Si pensaste en createBigQueryPresentation(), estás en lo correcto.

Después de mover la línea de registro, el código debería verse así:

/** * Runs a BigQuery query, adds data and a chart in a Sheet. */ function createBigQueryPresentation() { var spreadsheet = runQuery(); Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); createColumnChart(spreadsheet); }

Con los cambios anteriores, bq-sheets-slides.js debería verse como el siguiente código (excepto en PROJECT_ID):

/** * Copyright 2018 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at apache.org/licenses/LICENSE-2.0. * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Filename for data results var QUERY_NAME = "Most common words in all of Shakespeare's works"; // Replace this value with your Google Cloud API project ID var PROJECT_ID = '<YOUR_PROJECT_ID>'; if (!PROJECT_ID) throw Error('Project ID is required in setup'); /** * Runs a BigQuery query, adds data and a chart in a Sheet. */ function createBigQueryPresentation() { var spreadsheet = runQuery(); Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); createColumnChart(spreadsheet); } /** * Runs a BigQuery query; puts results into Sheet. You must enable * the BigQuery advanced service before you can run this code. * @see http://developers.google.com/apps-script/advanced/bigquery#run_query * @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs * * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results * @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet */ function runQuery() { // Replace sample with your own BigQuery query. var request = { query: 'SELECT ' + 'LOWER(word) AS word, ' + 'SUM(word_count) AS count ' + 'FROM [bigquery-public-data:samples.shakespeare] ' + 'GROUP BY word ' + 'ORDER BY count ' + 'DESC LIMIT 10' }; var queryResults = BigQuery.Jobs.query(request, PROJECT_ID); var jobId = queryResults.jobReference.jobId; // Wait for BQ job completion (with exponential backoff). var sleepTimeMs = 500; while (!queryResults.jobComplete) { Utilities.sleep(sleepTimeMs); sleepTimeMs *= 2; queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId); } // Get all results from BigQuery. var rows = queryResults.rows; while (queryResults.pageToken) { queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, { pageToken: queryResults.pageToken }); rows = rows.concat(queryResults.rows); } // Return null if no data returned. if (!rows) { return Logger.log('No rows returned.'); } // Create the new results spreadsheet. var spreadsheet = SpreadsheetApp.create(QUERY_NAME); var sheet = spreadsheet.getActiveSheet(); // Add headers to Sheet. var headers = queryResults.schema.fields.map(function(field) { return field.name.toUpperCase(); }); sheet.appendRow(headers); // Append the results. var data = new Array(rows.length); for (var i = 0; i < rows.length; i++) { var cols = rows[i].f; data[i] = new Array(cols.length); for (var j = 0; j < cols.length; j++) { data[i][j] = cols[j].v; } } // Start storing data in row 2, col 1 var START_ROW = 2; // skip header row var START_COL = 1; sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data); Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); // Return the spreadsheet object for later use. return spreadsheet; } /** * Uses spreadsheet data to create columnar chart. * @param {Spreadsheet} Spreadsheet containing results data * @returns {EmbeddedChart} visualizing the results * @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart */ function createColumnChart(spreadsheet) { // Retrieve the populated (first and only) Sheet. var sheet = spreadsheet.getSheets()[0]; // Data range in Sheet is from cell A2 to B11 var START_CELL = 'A2'; // skip header row var END_CELL = 'B11'; // Place chart on Sheet starting on cell E5. var START_ROW = 5; // row 5 var START_COL = 5; // col E var OFFSET = 0; // Create & place chart on the Sheet using above params. var chart = sheet.newChart() .setChartType(Charts.ChartType.COLUMN) .addRange(sheet.getRange(START_CELL + ':' + END_CELL)) .setPosition(START_ROW, START_COL, OFFSET, OFFSET) .build(); sheet.insertChart(chart); }
  1. Guarda el archivo.

  2. En la barra de menú, haz clic en runQuery y selecciona createBigQueryPresentation en el menú desplegable.

  3. Luego, haz clic en Ejecutar.

Después de ejecutarlo, obtendrás otro documento de Hojas de cálculo de Google en tu unidad de Google Drive, pero esta vez aparecerá un gráfico junto a los datos en el documento:

Hoja de cálculo Most common words in all of Shakespeare&#39;s works con gráfico de barras.

Tarea 3. Coloca los datos de resultados en una presentación de diapositivas

La parte final del lab consiste en crear un documento nuevo de Presentaciones de Google, completar el título y el subtítulo en la primera diapositiva y, luego, agregar 2 nuevas diapositivas, una para cada una de las celdas de datos y otra para el gráfico.

  1. Crea una presentación de diapositivas, luego agrega un título y subtítulo en la primera diapositiva predeterminada que se genera en toda presentación nueva. Todo el trabajo en la presentación se realiza en la función createSlidePresentation(), que se agrega a bq-sheets-slides.gs justo después del código de la función createColumnChart():
/** * Create presentation with spreadsheet data & chart * @param {Spreadsheet} Spreadsheet with results data * @param {EmbeddedChart} Sheets chart to embed on slide * @returns {Presentation} Slide deck with results */ function createSlidePresentation(spreadsheet, chart) { // Create the new presentation. var deck = SlidesApp.create(QUERY_NAME); // Populate the title slide. var [title, subtitle] = deck.getSlides()[0].getPageElements(); title.asShape().getText().setText(QUERY_NAME); subtitle.asShape().getText().setText('via GCP and G Suite APIs:\n' + 'Google Apps Script, BigQuery, Sheets, Slides');
  1. Agrega una tabla de datos. El siguiente paso en createSlidePresentation() es importar los datos de las celdas de la hoja de cálculo de Google a la nueva presentación. Agrega este fragmento de código a la función createSlidePresentation():
// Data range to copy is from cell A1 to B11 var START_CELL = 'A1'; // include header row var END_CELL = 'B11'; // Add the table slide and insert an empty table on it of // the dimensions of the data range; fails if Sheet empty. var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK); var sheetValues = spreadsheet.getSheets()[0].getRange( START_CELL + ':' + END_CELL).getValues(); var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length); // Populate the table with spreadsheet data. for (var i = 0; i < sheetValues.length; i++) { for (var j = 0; j < sheetValues[0].length; j++) { table.getCell(i, j).getText().setText(String(sheetValues[i][j])); } }
  1. Importa el gráfico: el paso final en createSlidePresentation() es crear una diapositiva más, importar el gráfico desde nuestra hoja de cálculo y devolver el objeto Presentation. Agrega este fragmento final a la siguiente función:
// Add a chart slide and insert the chart on it. var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK); chartSlide.insertSheetsChart(chart); // Return the presentation object for later use. return deck; }
  1. Devuelve el gráfico. Ahora que la función final está completa, vuelve a ver su firma. Sí, createSlidePresentation() requiere tanto una hoja de cálculo como un objeto de gráfico. Ya ajustaste runQuery() para que devuelva el objeto Spreadsheet, pero ahora necesitas hacer un cambio similar en createColumnChart() de forma que devuelva el objeto de gráfico (EmbeddedChart). Para hacerlo, vuelve a tu aplicación y agrega una última línea al final de createColumnChart():
// Return chart object for later use return chart; }
  1. Actualiza createBigQueryPresentation(). Dado que createColumnChart() devuelve el gráfico, es necesario guardarlo en una variable y, luego, pasar a createSlidePresentation() los dos elementos: la hoja de cálculo y el gráfico. Como ya registras la URL de la hoja de cálculo creada, también puedes registrar la URL de la nueva presentación de diapositivas. Reemplaza este bloque de código:
/** * Runs a BigQuery query, adds data and a chart in a Sheet. */ function createBigQueryPresentation() { var spreadsheet = runQuery(); Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); createColumnChart(spreadsheet); }

Con este bloque:

/** * Runs a BigQuery query, adds data and a chart in a Sheet, * and adds the data and chart to a new slide presentation. */ function createBigQueryPresentation() { var spreadsheet = runQuery(); Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); var chart = createColumnChart(spreadsheet); var deck = createSlidePresentation(spreadsheet, chart); Logger.log('Results slide deck created: %s', deck.getUrl()); }

Luego de todas las actualizaciones, tu bq-sheets-slides.gs debería verse de la siguiente manera, excepto por el PROJECT_ID:

bq-sheets-slides.gs - final version

// Filename for data results var QUERY_NAME = "Most common words in all of Shakespeare's works"; // Replace this value with your Google Cloud API project ID var PROJECT_ID = '<YOUR_PROJECT_ID>'; if (!PROJECT_ID) throw Error('Project ID is required in setup'); /** * Runs a BigQuery query; puts results into Sheet. You must enable * the BigQuery advanced service before you can run this code. * @see http://developers.google.com/apps-script/advanced/bigquery#run_query * @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs * * @returns {Spreadsheet} Returns a spreadsheet with BigQuery results * @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet */ function runQuery() { // Replace sample with your own BigQuery query. var request = { query: 'SELECT ' + 'LOWER(word) AS word, ' + 'SUM(word_count) AS count ' + 'FROM [bigquery-public-data:samples.shakespeare] ' + 'GROUP BY word ' + 'ORDER BY count ' + 'DESC LIMIT 10' }; var queryResults = BigQuery.Jobs.query(request, PROJECT_ID); var jobId = queryResults.jobReference.jobId; // Wait for BQ job completion (with exponential backoff). var sleepTimeMs = 500; while (!queryResults.jobComplete) { Utilities.sleep(sleepTimeMs); sleepTimeMs *= 2; queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId); } // Get all results from BigQuery. var rows = queryResults.rows; while (queryResults.pageToken) { queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, { pageToken: queryResults.pageToken }); rows = rows.concat(queryResults.rows); } // Return null if no data returned. if (!rows) { return Logger.log('No rows returned.'); } // Create the new results spreadsheet. var spreadsheet = SpreadsheetApp.create(QUERY_NAME); var sheet = spreadsheet.getActiveSheet(); // Add headers to Sheet. var headers = queryResults.schema.fields.map(function(field) { return field.name.toUpperCase(); }); sheet.appendRow(headers); // Append the results. var data = new Array(rows.length); for (var i = 0; i < rows.length; i++) { var cols = rows[i].f; data[i] = new Array(cols.length); for (var j = 0; j < cols.length; j++) { data[i][j] = cols[j].v; } } // Start storing data in row 2, col 1 var START_ROW = 2; // skip header row var START_COL = 1; sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data); // Return the spreadsheet object for later use. return spreadsheet; } /** * Uses spreadsheet data to create columnar chart. * @param {Spreadsheet} Spreadsheet containing results data * @returns {EmbeddedChart} visualizing the results * @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart */ function createColumnChart(spreadsheet) { // Retrieve the populated (first and only) Sheet. var sheet = spreadsheet.getSheets()[0]; // Data range in Sheet is from cell A2 to B11 var START_CELL = 'A2'; // skip header row var END_CELL = 'B11'; // Place chart on Sheet starting on cell E5. var START_ROW = 5; // row 5 var START_COL = 5; // col E var OFFSET = 0; // Create & place chart on the Sheet using above params. var chart = sheet.newChart() .setChartType(Charts.ChartType.COLUMN) .addRange(sheet.getRange(START_CELL + ':' + END_CELL)) .setPosition(START_ROW, START_COL, OFFSET, OFFSET) .build(); sheet.insertChart(chart); // Return the chart object for later use. return chart; } /** * Create presentation with spreadsheet data & chart * @param {Spreadsheet} Spreadsheet with results data * @param {EmbeddedChart} Sheets chart to embed on slide * @returns {Presentation} Returns a slide deck with results * @see http://developers.google.com/apps-script/reference/slides/presentation */ function createSlidePresentation(spreadsheet, chart) { // Create the new presentation. var deck = SlidesApp.create(QUERY_NAME); // Populate the title slide. var [title, subtitle] = deck.getSlides()[0].getPageElements(); title.asShape().getText().setText(QUERY_NAME); subtitle.asShape().getText().setText('via GCP and G Suite APIs:\n' + 'Google Apps Script, BigQuery, Sheets, Slides'); // Data range to copy is from cell A1 to B11 var START_CELL = 'A1'; // include header row var END_CELL = 'B11'; // Add the table slide and insert an empty table on it of // the dimensions of the data range; fails if Sheet empty. var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK); var sheetValues = spreadsheet.getSheets()[0].getRange( START_CELL + ':' + END_CELL).getValues(); var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length); // Populate the table with spreadsheet data. for (var i = 0; i < sheetValues.length; i++) { for (var j = 0; j < sheetValues[0].length; j++) { table.getCell(i, j).getText().setText(String(sheetValues[i][j])); } } // Add a chart slide and insert the chart on it. var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK); chartSlide.insertSheetsChart(chart); // Return the presentation object for later use. return deck; } /** * Runs a BigQuery query, adds data and a chart in a Sheet, * and adds the data and chart to a new slide presentation. */ function createBigQueryPresentation() { var spreadsheet = runQuery(); Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); var chart = createColumnChart(spreadsheet); var deck = createSlidePresentation(spreadsheet, chart); Logger.log('Results slide deck created: %s', deck.getUrl()); }
  1. Guarda y ejecuta createBigQueryPresentation() nuevamente. Antes de que se ejecute, se te solicitará un conjunto más de permisos para ver y administrar tus documentos de Presentaciones de Google.
  2. Ve a Mi unidad y observa que, además del documento de Hojas de cálculo que se creó, también deberías ver un nuevo documento de Presentaciones con 3 diapositivas (título, tabla de datos, gráfico de datos), como se muestra a continuación:

Most common words in all of Shakespeare&#39;s works - Diapositiva de título

Most common words in all of Shakespeare&#39;s works - Diapositiva de tabla de datos

Most common words in all of Shakespeare&#39;s works - Tercera diapositiva de gráfico de datos

¡Felicitaciones!

Creaste una aplicación que aprovecha varias funciones de Google Cloud, ya que realiza una solicitud de BigQuery que consulta uno de sus conjuntos de datos públicos, crea una nueva hoja de cálculo de Google para almacenar los resultados, agrega un gráfico basado en los datos obtenidos y, por último, crea un documento de Presentaciones de Google con los resultados, así como un gráfico en la hoja de cálculo.

Técnicamente, eso es lo que hiciste. En términos generales, pasaste de un análisis de macrodatos a algo que puedes presentar a las partes interesadas, todo en código, todo automatizado. Ahora puedes partir desde este lab y personalizarlo para tus propios proyectos.

Finaliza la Quest

Este lab de autoaprendizaje es parte de las Quests Workspace: Integrations for Data y BigQuery Basics for Data Analysts. Una Quest es una serie de labs relacionados que forman una ruta de aprendizaje. Si completas esta Quest, obtendrás una insignia como reconocimiento por tu logro. Puedes hacer públicas tus insignias y agregar vínculos a ellas en tu currículum en línea o en tus cuentas de redes sociales. Inscríbete en cualquier Quest que contenga este lab y obtén un crédito inmediato de finalización. Consulta el catálogo de Google Cloud Skills Boost para ver todas las Quests disponibles.

¿Buscas un lab de desafío práctico para demostrar tus habilidades de BigQuery y validar tus conocimientos? Una vez que hayas completado esta Quest, realiza este Lab de desafío adicional para recibir una insignia digital exclusiva de Google Cloud.

Más información

El código que se muestra en este lab también está disponible en GitHub. El objetivo de este lab es mantenerse sincronizado con el repo. Aquí, encontrarás recursos adicionales que te ayudarán a analizar en profundidad el material que vimos en este lab y a explorar otras formas de acceder a las herramientas para desarrolladores de Google de manera programática.

Documentación

Videos relacionados y generales

Noticias y actualizaciones relacionadas y generales

Última actualización del manual: 6 de marzo de 2023

Prueba más reciente del lab: 6 de marzo de 2023

Copyright 2024 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.