Importa datos y crea conjuntos de datos

En esta página, se describe cómo crear un conjunto de datos y cómo importar tus datos tabulares. Luego, puedes usar AutoML Tables para entrenar un modelo en ese conjunto de datos.

Introducción

Un conjunto de datos es un objeto de Google Cloud que contiene los datos de la tabla fuente, junto con la información del esquema que determina los parámetros del entrenamiento de modelos. El conjunto de datos sirve como entrada para entrenar un modelo.

Un proyecto puede tener varios conjuntos de datos. Puedes obtener una lista de los conjuntos de datos disponibles y borrar los conjuntos de datos que ya no necesites.

Cuando actualizas un conjunto de datos o su información de esquema, influyes en cualquier modelo futuro que use ese conjunto de datos. Los modelos que ya se comenzaron a entrenar no se verán afectados.

Antes de comenzar

Antes de poder usar AutoML Tables, debes configurar tu proyecto como se describe en la página sobre qué hacer antes de comenzar. Antes de crear un conjunto de datos, debes crear los datos de entrenamiento como se describe en la sección sobre cómo preparar los datos de entrenamiento.

Crea un conjunto de datos

Console

  1. Visita la página AutoML Tables en la consola de Google Cloud para crear tu conjunto de datos.

    Ir a la página AutoML Tables

  2. Selecciona Conjuntos de datos y, luego, selecciona Conjunto de datos nuevo.

  3. Ingresa el nombre de tu conjunto de datos y especifica la Región en la que se creará el conjunto de datos.

    Para obtener más información, consulta la página sobre ubicaciones.

  4. Haga clic en Crear conjunto de datos.

    Aparecerá la pestaña Importar. Ahora puedes importar tus datos.

REST

Para crear un conjunto de datos, debes usar el método datasets.create.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • endpoint: automl.googleapis.com para la ubicación global y eu-automl.googleapis.com para la región de la UE.
  • project-id: Es el ID de tu proyecto de Google Cloud.
  • location: la ubicación del recurso: us-central1 para la global o eu para la Unión Europea
  • dataset-display-name: el nombre visible de tu conjunto de datos.

HTTP method and URL:

POST https://endpoint/v1beta1/projects/project-id/locations/location/datasets

Cuerpo JSON de la solicitud:

{
  "displayName": "dataset-display-name",
  "tablesDatasetMetadata": { },
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-id" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://endpoint/v1beta1/projects/project-id/locations/location/datasets"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://endpoint/v1beta1/projects/project-id/locations/location/datasets" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name": "projects/1234/locations/us-central1/datasets/TBL6543",
  "displayName": "sample_dataset",
  "createTime": "2019-12-23T23:03:34.139313Z",
  "updateTime": "2019-12-23T23:03:34.139313Z",
  "etag": "AB3BwFq6VkX64fx7z2Y4T4z-0jUQLKgFvvtD1RcZ2oikA=",
  "tablesDatasetMetadata": {
    "areStatsFresh": true
    "statsUpdateTime": "1970-01-01T00:00:00Z",
    "tablesDatasetType": "BASIC"
  }
}

Guarda el name del nuevo conjunto de datos (de la respuesta) para usarlo con otras operaciones, como importar elementos a tu conjunto de datos y entrenar un modelo.

Ahora puedes importar tus datos.

Java

Si tus recursos se encuentran en la región de la UE, debes establecer el extremo de manera explícita. Obtener más información.

import com.google.cloud.automl.v1beta1.AutoMlClient;
import com.google.cloud.automl.v1beta1.Dataset;
import com.google.cloud.automl.v1beta1.LocationName;
import com.google.cloud.automl.v1beta1.TablesDatasetMetadata;
import java.io.IOException;

class TablesCreateDataset {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "YOUR_PROJECT_ID";
    String displayName = "YOUR_DATASET_NAME";
    createDataset(projectId, displayName);
  }

  // Create a dataset
  static void createDataset(String projectId, String displayName) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AutoMlClient client = AutoMlClient.create()) {
      // A resource that represents Google Cloud Platform location.
      LocationName projectLocation = LocationName.of(projectId, "us-central1");
      TablesDatasetMetadata metadata = TablesDatasetMetadata.newBuilder().build();
      Dataset dataset =
          Dataset.newBuilder()
              .setDisplayName(displayName)
              .setTablesDatasetMetadata(metadata)
              .build();

      Dataset createdDataset = client.createDataset(projectLocation, dataset);

      // Display the dataset information.
      System.out.format("Dataset name: %s%n", createdDataset.getName());
      // To get the dataset id, you have to parse it out of the `name` field. As dataset Ids are
      // required for other methods.
      // Name Form: `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}`
      String[] names = createdDataset.getName().split("/");
      String datasetId = names[names.length - 1];
      System.out.format("Dataset id: %s%n", datasetId);
    }
  }
}

Node.js

Si tus recursos se encuentran en la región de la UE, debes establecer el extremo de manera explícita. Obtener más información.

const automl = require('@google-cloud/automl');
const util = require('util');
const client = new automl.v1beta1.AutoMlClient();

/**
 * Demonstrates using the AutoML client to create a dataset
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = '[PROJECT_ID]' e.g., "my-gcloud-project";
// const computeRegion = '[REGION_NAME]' e.g., "us-central1";
// const datasetName = '[DATASET_NAME]' e.g., “myDataset”;

// A resource that represents Google Cloud Platform location.
const projectLocation = client.locationPath(projectId, computeRegion);

// Set dataset name and metadata.
const myDataset = {
  displayName: datasetName,
  tablesDatasetMetadata: {},
};

// Create a dataset with the dataset metadata in the region.
client
  .createDataset({parent: projectLocation, dataset: myDataset})
  .then(responses => {
    const dataset = responses[0];
    // Display the dataset information.
    console.log(`Dataset name: ${dataset.name}`);
    console.log(`Dataset Id: ${dataset.name.split('/').pop(-1)}`);
    console.log(`Dataset display name: ${dataset.displayName}`);
    console.log(`Dataset example count: ${dataset.exampleCount}`);
    console.log(
      `Tables dataset metadata: ${util.inspect(
        dataset.tablesDatasetMetadata,
        false,
        null
      )}`
    );
  })
  .catch(err => {
    console.error(err);
  });

Python

La biblioteca cliente de AutoML Tables incluye métodos adicionales de Python que simplifican el uso de la API de AutoML Tables. Estos métodos hacen referencia a conjuntos de datos y modelos por nombre en lugar de ID. El conjunto de datos y los nombres de los modelos deben ser únicos. Para obtener más información, consulta la página de referencia del cliente.

Si tus recursos se encuentran en la región de la UE, debes establecer el extremo de manera explícita. Obtener más información.

# TODO(developer): Uncomment and set the following variables
# project_id = 'PROJECT_ID_HERE'
# compute_region = 'COMPUTE_REGION_HERE'
# dataset_display_name = 'DATASET_DISPLAY_NAME_HERE'

from google.cloud import automl_v1beta1 as automl

client = automl.TablesClient(project=project_id, region=compute_region)

# Create a dataset with the given display name
dataset = client.create_dataset(dataset_display_name)

# Display the dataset information.
print(f"Dataset name: {dataset.name}")
print("Dataset id: {}".format(dataset.name.split("/")[-1]))
print(f"Dataset display name: {dataset.display_name}")
print("Dataset metadata:")
print(f"\t{dataset.tables_dataset_metadata}")
print(f"Dataset example count: {dataset.example_count}")
print(f"Dataset create time: {dataset.create_time}")

Importa datos a un conjunto de datos

No puedes importar datos a un conjunto de datos que ya los contenga. Primero debes crear un conjunto de datos nuevo.

Console

  1. Si es necesario, selecciona el conjunto de datos de la lista en la página Conjuntos de datos para abrir la pestaña Importar.

  2. Elige la fuente de importación de tus datos: BigQuery, Cloud Storage o tu computadora local. Proporciona la información requerida.

    Si cargas los archivos CSV desde tu computadora local, debes proporcionar un bucket de Cloud Storage. Los archivos se cargan en ese bucket antes de que se importen a AutoML Tables. Los archivos permanecen allí después de la importación de datos, a menos que los quites.

    El bucket debe estar en la misma ubicación que tu conjunto de datos. Obtener más información.

  3. Haz clic en Importar para iniciar el proceso de importación.

    Cuando finalice el proceso de importación, aparecerá la pestaña Entrenar y estarás listo para entrenar tu modelo.

REST

Importa tus datos con el método datasets.importData.

Asegúrate de que tu fuente de importación cumpla con los requisitos descritos en la sección sobre cómo preparar tu fuente de importación.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • endpoint: automl.googleapis.com para la ubicación global y eu-automl.googleapis.com para la región de la UE.
  • project-id: Es el ID de tu proyecto de Google Cloud.
  • location: la ubicación del recurso: us-central1 para la global o eu para la Unión Europea
  • dataset-id: Es el ID del conjunto de datos. Por ejemplo, TBL6543
  • input-config: Es la información de la ubicación de la fuente de datos:
    • Para BigQuery: { "bigquerySource": { "inputUri": "bq://projectId.bqDatasetId.bqTableId } }"
    • Para Cloud Storage: { "gcsSource": { "inputUris": ["gs://bucket-name/csv-file-name.csv"] } }

HTTP method and URL:

POST https://endpoint/v1beta1/projects/project-id/locations/location/datasets/dataset-id:importData

Cuerpo JSON de la solicitud:

{
  "inputConfig": input-config,
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-id" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://endpoint/v1beta1/projects/project-id/locations/location/datasets/dataset-id:importData"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://endpoint/v1beta1/projects/project-id/locations/location/datasets/dataset-id:importData" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name": "projects/292381/locations/us-central1/operations/TBL6543",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2019-12-26T20:42:06.092180Z",
    "updateTime": "2019-12-26T20:42:06.092180Z",
    "cancellable": true,
    "worksOn": [
      "projects/292381/locations/us-central1/datasets/TBL6543"
    ],
    "importDataDetails": {},
    "state": "RUNNING"
  }
}

La importación de datos a un conjunto de datos es una operación de larga duración. Puedes consultar el estado de la operación o esperar a que esta se muestre. Obtener más información.

Cuando finalices el proceso de importación, estarás listo para entrenar tu modelo.

Java

Si tus recursos se encuentran en la región de la UE, debes establecer el extremo de manera explícita. Obtener más información.

import com.google.cloud.automl.v1beta1.AutoMlClient;
import com.google.cloud.automl.v1beta1.BigQuerySource;
import com.google.cloud.automl.v1beta1.DatasetName;
import com.google.cloud.automl.v1beta1.GcsSource;
import com.google.cloud.automl.v1beta1.InputConfig;
import com.google.protobuf.Empty;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;

class TablesImportDataset {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "YOUR_PROJECT_ID";
    String datasetId = "YOUR_DATASET_ID";
    String path = "gs://BUCKET_ID/path/to//data.csv or bq://project_id.dataset_id.table_id";
    importDataset(projectId, datasetId, path);
  }

  // Import a dataset via BigQuery or Google Cloud Storage
  static void importDataset(String projectId, String datasetId, String path)
      throws IOException, ExecutionException, InterruptedException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AutoMlClient client = AutoMlClient.create()) {
      // Get the complete path of the dataset.
      DatasetName datasetFullId = DatasetName.of(projectId, "us-central1", datasetId);

      InputConfig.Builder inputConfigBuilder = InputConfig.newBuilder();

      // Determine which source type was used for the input path (BigQuery or GCS)
      if (path.startsWith("bq")) {
        // Get training data file to be imported from a BigQuery source.
        BigQuerySource.Builder bigQuerySource = BigQuerySource.newBuilder();
        bigQuerySource.setInputUri(path);
        inputConfigBuilder.setBigquerySource(bigQuerySource);
      } else {
        // Get multiple Google Cloud Storage URIs to import data from
        GcsSource gcsSource =
            GcsSource.newBuilder().addAllInputUris(Arrays.asList(path.split(","))).build();
        inputConfigBuilder.setGcsSource(gcsSource);
      }

      // Import data from the input URI
      System.out.println("Processing import...");

      Empty response = client.importDataAsync(datasetFullId, inputConfigBuilder.build()).get();
      System.out.format("Dataset imported. %s%n", response);
    }
  }
}

Node.js

Si tus recursos se encuentran en la región de la UE, debes establecer el extremo de manera explícita. Obtener más información.

const automl = require('@google-cloud/automl');
const client = new automl.v1beta1.AutoMlClient();

/**
 * Demonstrates using the AutoML client to import data.
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = '[PROJECT_ID]' e.g., "my-gcloud-project";
// const computeRegion = '[REGION_NAME]' e.g., "us-central1";
// const datasetId = '[DATASET_ID]' e.g., "TBL2246891593778855936";
// const path = '[GCS_PATH]' | '[BIGQUERY_PATH]'
// e.g., "gs://<bucket-name>/<csv file>" or
// "bq://<project_id>.<dataset_id>.<table_id>",
// `string or array of paths in AutoML Tables format`;

// Get the full path of the dataset.
const datasetFullId = client.datasetPath(projectId, computeRegion, datasetId);

let inputConfig = {};
if (path.startsWith('bq')) {
  // Get Bigquery URI.
  inputConfig = {
    bigquerySource: {
      inputUri: path,
    },
  };
} else {
  // Get the multiple Google Cloud Storage URIs.
  const inputUris = path.split(',');
  inputConfig = {
    gcsSource: {
      inputUris: inputUris,
    },
  };
}

// Import the dataset from the input URI.
client
  .importData({name: datasetFullId, inputConfig: inputConfig})
  .then(responses => {
    const operation = responses[0];
    console.log('Processing import...');
    return operation.promise();
  })
  .then(responses => {
    // The final result of the operation.
    const operationDetails = responses[2];

    // Get the data import details.
    console.log('Data import details:');
    console.log('\tOperation details:');
    console.log(`\t\tName: ${operationDetails.name}`);
    console.log(`\t\tDone: ${operationDetails.done}`);
  })
  .catch(err => {
    console.error(err);
  });

Python

La biblioteca cliente de AutoML Tables incluye métodos adicionales de Python que simplifican el uso de la API de AutoML Tables. Estos métodos hacen referencia a conjuntos de datos y modelos por nombre en lugar de ID. El conjunto de datos y los nombres de los modelos deben ser únicos. Para obtener más información, consulta la página de referencia del cliente.

Si tus recursos se encuentran en la región de la UE, debes establecer el extremo de manera explícita. Obtener más información.

# TODO(developer): Uncomment and set the following variables
# project_id = 'PROJECT_ID_HERE'
# compute_region = 'COMPUTE_REGION_HERE'
# dataset_display_name = 'DATASET_DISPLAY_NAME'
# path = 'gs://path/to/file.csv' or 'bq://project_id.dataset.table_id'

from google.cloud import automl_v1beta1 as automl

client = automl.TablesClient(project=project_id, region=compute_region)

response = None
if path.startswith("bq"):
    response = client.import_data(
        dataset_display_name=dataset_display_name,
        bigquery_input_uri=path,
        dataset_name=dataset_name,
    )
else:
    # Get the multiple Google Cloud Storage URIs.
    input_uris = path.split(",")
    response = client.import_data(
        dataset_display_name=dataset_display_name,
        gcs_input_uris=input_uris,
        dataset_name=dataset_name,
    )

print("Processing import...")
# synchronous check of operation status.
print(f"Data imported. {response.result()}")

¿Qué sigue?