Usa BigQuery DataFrames
BigQuery DataFrames proporciona un DataFrame de Python y una API de aprendizaje automático (AA)
con la tecnología del motor de BigQuery.
BigQuery DataFrames es un paquete de código abierto. Puedes ejecutar pip install --upgrade bigframes
para instalar la versión más reciente.
BigQuery DataFrames proporciona tres bibliotecas:
bigframes.pandas
proporciona una API de Pandas que puedes usar para analizar y manipular datos en BigQuery. Muchas cargas de trabajo se pueden migrar de pandas a bigframes con solo cambiar algunas importaciones. La API debigframes.pandas
es escalable para admitir el procesamiento de terabytes de datos de BigQuery y usa el motor de consulta de BigQuery para realizar cálculos.bigframes.bigquery
proporciona muchas funciones de SQL de BigQuery que podrían no tener un equivalente de pandas.bigframes.ml
proporciona una API similar a la API de scikit-learn para el AA. Las funciones del AA en BigQuery DataFrames te permiten procesar previamente los datos y, luego, entrenar modelos en esos datos. También puedes encadenar estas acciones para crear canalizaciones de datos.
Roles obligatorios
Para obtener los permisos que necesitas para completar las tareas de este documento, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Usuario de trabajo de BigQuery (
roles/bigquery.jobUser
) -
Usuario de sesión de lectura de BigQuery (
roles/bigquery.readSessionUser
) -
Usa BigQuery DataFrames en un notebook de BigQuery:
-
Usuario de BigQuery (
roles/bigquery.user
) -
Usuario del entorno de ejecución del notebook (
roles/aiplatform.notebookRuntimeUser
) -
Creador de código (
roles/dataform.codeCreator
)
-
Usuario de BigQuery (
-
Usa las funciones remotas de BigQuery DataFrames:
-
Editor de datos de BigQuery (
roles/bigquery.dataEditor
) -
Administrador de conexión de BigQuery (
roles/bigquery.connectionAdmin
) -
Desarrollador de Cloud Functions (
roles/cloudfunctions.developer
) -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) -
Visualizador de objetos de almacenamiento (
roles/storage.objectViewer
)
-
Editor de datos de BigQuery (
-
Usa modelos remotos de BigQuery DataFrames ML:
Administrador de conexión de BigQuery (
roles/bigquery.connectionAdmin
)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Además, cuando usas funciones remotas de BigQuery DataFrames o
modelos remotos de BigQuery DataFrames para AA, necesitas el
rol de administrador de IAM del proyecto (roles/resourcemanager.projectIamAdmin
)
si usas una conexión predeterminada de BigQuery o el
rol de navegador (roles/browser
)
si usas una conexión preconfigurada. Este requisito se puede evitar si se configura la opción bigframes.pandas.options.bigquery.skip_bq_connection_check
en True
, en cuyo caso la conexión (predeterminada o preconfigurada) se usa tal como está sin ninguna existencia o permiso. Si usas la
conexión preconfigurada y omites la verificación de conexión, verifica lo
siguiente:
- La conexión se crea en la ubicación correcta.
- Si usas funciones remotas de BigQuery DataFrames, la cuenta de servicio
tiene el
rol de invocador de Cloud Run (
roles/run.invoker
) en el proyecto. - Si usas modelos remotos de BigQuery DataFrames ML, la cuenta de servicio tiene el rol de usuario de Vertex AI (
roles/aiplatform.user
) en el proyecto.
Cuando realizas la autenticación de usuario final en un entorno interactivo como un notebook, el REPL de Python o la línea de comandos, BigQuery DataFrames solicita la autenticación si es necesario. De lo contrario, consulta cómo configurar las credenciales predeterminadas de la aplicación para varios entornos.
Configura las opciones de instalación
Después de instalar BigQuery DataFrames, puedes especificar las siguientes opciones.
Ubicación y proyecto
Debes especificar la ubicación y proyecto en la que deseas usar BigQuery DataFrames.
Puedes definir la ubicación y el proyecto en tu notebook de la siguiente manera:
Ubicación del procesamiento de datos
BigQuery DataFrames está diseñado para el escalamiento, lo que lo logra a través de la conservación de los datos y el procesamiento en el servicio de BigQuery. Sin embargo, puedes incorporar datos a la memoria de tu máquina cliente si llamas a .to_pandas()
en un objeto de DataFrame o de serie. Si eliges hacerlo, se aplica la limitación de memoria de la máquina cliente.
Ubicación de la sesión
BigQuery DataFrames usa un objeto de sesión local para administrar metadatos de forma interna. Esta sesión está vinculada a una ubicación. BigQuery DataFrames usa la multirregional US
como la ubicación predeterminada, pero puedes usar session_options.location
para establecer una ubicación diferente. Cada consulta en una sesión se ejecuta en la ubicación en la que se creó la sesión.
BigQuery DataFrames propaga automáticamente bf.options.bigquery.location
con la ubicación de la tabla si el usuario comienza con read_gbq/read_gbq_table/read_gbq_query()
y especifica una tabla, ya sea directamente o en una instrucción de SQL.
Si deseas restablecer la ubicación de los objetos DataFrame o de serie creados, puedes cerrar la sesión mediante la ejecución de bigframes.pandas.close_session()
. Después de eso, puedes volver a usar bigframes.pandas.options.bigquery.location
para especificar otra ubicación.
read_gbq()
requiere que especifiques una ubicación si el conjunto de datos que consultas no está en la multirregión US
. Si intentas leer una tabla desde otra ubicación, obtendrás una excepción NotFound
.
Cómo migrar a BigQuery DataFrames versión 2.0
La versión 2.0 de BigQuery DataFrames realiza mejoras de seguridad y rendimiento en la API de BigQuery DataFrames, agrega funciones nuevas y presenta cambios rotundos. En este documento, se describen los cambios y se proporciona orientación para la migración. Puedes aplicar estas recomendaciones antes de instalar la versión 2.0 con la versión 1.x más reciente de BigQuery DataFrames.
BigQuery DataFrames versión 2.0 tiene los siguientes beneficios:
- Se crean consultas más rápidas y menos tablas cuando ejecutas consultas que muestran resultados al cliente, ya que
allow_large_results
se establece de forma predeterminada enFalse
. Esto puede reducir los costos de almacenamiento, en especial si usas la facturación de bytes físicos. - Seguridad mejorada de forma predeterminada en las funciones remotas que implementa BigQuery DataFrames
Instala la versión 2.0 de BigQuery DataFrames
Para evitar cambios drásticos, fija una versión específica de BigQuery DataFrames en tu archivo requirements.txt
(por ejemplo, bigframes==1.42.0
) o en tu archivo pyproject.toml
(por ejemplo, dependencies = ["bigframes = 1.42.0"]
). Cuando tengas todo listo para probar la versión más reciente, puedes ejecutar pip install --upgrade bigframes
para instalar la versión más reciente de BigQuery DataFrames.
Usa la opción allow_large_results
BigQuery tiene un límite de tamaño máximo de respuesta para los trabajos de consulta.
A partir de la versión 2.0 de BigQuery DataFrames, BigQuery DataFrames
aplica este límite de forma predeterminada en los métodos que muestran resultados al cliente,
como peek()
, to_pandas()
y to_pandas_batches()
. Si tu trabajo muestra resultados grandes, puedes establecer allow_large_results
en True
en tu objeto BigQueryOptions
para evitar cambios drásticos. Esta opción se establece en False
de forma predeterminada en BigQuery DataFrames versión 2.0.
import bigframes.pandas as bpd bpd.options.bigquery.allow_large_results = True
Puedes anular la opción allow_large_results
con el parámetro allow_large_results
en to_pandas()
y otros métodos. Por ejemplo:
bf_df = bpd.read_gbq(query) # ... other operations on bf_df ... pandas_df = bf_df.to_pandas(allow_large_results=True)
Usa el decorador @remote_function
La versión 2.0 de BigQuery DataFrames realiza algunos cambios en el comportamiento predeterminado del decorador @remote_function
.
Los argumentos de palabras clave se aplican de manera forzosa para los parámetros ambiguos
Para evitar pasar valores a un parámetro no deseado, BigQuery DataFrames versión 2.0 y versiones posteriores aplican el uso de argumentos de palabras clave para los siguientes parámetros:
bigquery_connection
reuse
name
packages
cloud_function_service_account
cloud_function_kms_key_name
cloud_function_docker_repository
max_batching_rows
cloud_function_timeout
cloud_function_max_instances
cloud_function_vpc_connector
cloud_function_memory_mib
cloud_function_ingress_settings
Cuando uses estos parámetros, proporciona el nombre del parámetro. Por ejemplo:
@remote_function( name="my_remote_function", ... ) def my_remote_function(parameter: int) -> str: return str(parameter)
Cómo configurar una cuenta de servicio
A partir de la versión 2.0, BigQuery DataFrames ya no usa la cuenta de servicio de Compute Engine de forma predeterminada para las funciones de Cloud Run que implementa. Para limitar los permisos de la función que implementes, haz lo siguiente:
- Crea una cuenta de servicio con permisos mínimos.
- Proporciona el correo electrónico de la cuenta de servicio al parámetro
cloud_function_service_account
del decorador@remote_function
.
Por ejemplo:
@remote_function( cloud_function_service_account="my-service-account@my-project.iam.gserviceaccount.com", ... ) def my_remote_function(parameter: int) -> str: return str(parameter)
Si deseas usar la cuenta de servicio de Compute Engine, puedes establecer el
parámetro cloud_function_service_account
del decorador @remote_function
en "default"
. Por ejemplo:
# This usage is discouraged. Use only if you have a specific reason to use the # default Compute Engine service account. @remote_function(cloud_function_service_account="default", ...) def my_remote_function(parameter: int) -> str: return str(parameter)
Configura la configuración de entrada
A partir de la versión 2.0, BigQuery DataFrames establece la configuración de entrada de las funciones de Cloud Run que implementa en "internal-only"
. Anteriormente, la configuración de entrada se establecía en "all"
de forma predeterminada. Puedes cambiar la configuración de entrada si estableces el parámetro cloud_function_ingress_settings
del decorador @remote_function
.
Por ejemplo:
@remote_function(cloud_function_ingress_settings="internal-and-gclb", ...) def my_remote_function(parameter: int) -> str: return str(parameter)
Usa extremos personalizados
En las versiones anteriores a la 2.0 de BigQuery DataFrames, si una región no era compatible con los endpoints de servicio regionales ni con bigframes.pandas.options.bigquery.use_regional_endpoints = True
, BigQuery DataFrames recurría a los endpoints de ubicación. La versión 2.0 de BigQuery DataFrames quita este comportamiento de resguardo. Para conectarte a extremos de ubicación en la versión 2.0, configura la opción bigframes.pandas.options.bigquery.client_endpoints_override
. Por ejemplo:
import bigframes.pandas as bpd bpd.options.bigquery.client_endpoints_override = { "bqclient": "https://LOCATION-bigquery.googleapis.com", "bqconnectionclient": "LOCATION-bigqueryconnection.googleapis.com", "bqstoragereadclient": "LOCATION-bigquerystorage.googleapis.com", }
Reemplaza LOCATION por el nombre de la ubicación de BigQuery a la que deseas conectarte.
Usa el módulo bigframes.ml.llm
En la versión 2.0 de BigQuery DataFrames, el model_name
predeterminado para GeminiTextGenerator
se actualizó a "gemini-2.0-flash-001"
. Te recomendamos que proporciones un model_name
directamente para evitar fallas si el modelo predeterminado cambia en el futuro.
import bigframes.ml.llm model = bigframes.ml.llm.GeminiTextGenerator(model_name="gemini-2.0-flash-001")
INPUT y OUTPUT
Con la biblioteca bigframes.pandas
, puedes acceder a datos de varias fuentes, incluidos los archivos CSV locales, los archivos de Cloud Storage, los DataFrames pandas
, los modelos de BigQuery y las funciones de BigQuery. Luego, puedes cargar esos datos en un DataFrame de BigQuery DataFrames. También puedes crear tablas de BigQuery DataFrames de BigQuery.
Carga datos desde una tabla o consulta de BigQuery
Puedes crear un DataFrame a partir de una consulta o tabla de BigQuery de la siguiente manera:
Carga datos desde un archivo CSV
Puedes crear un DataFrame desde un archivo CSV local o de Cloud Storage de la siguiente manera:
Tipos de datos
BigQuery DataFrames es compatible con los siguientes dtypes de NumPy y Pandas:
BigQuery | BigQuery DataFrames y Pandas |
---|---|
ARRAY |
pandas.ArrowDtype(pa.list_()) |
BOOL |
pandas.BooleanDtype() |
DATE |
pandas.ArrowDtype(pa.date32()) |
DATETIME |
pandas.ArrowDtype(pa.timestamp("us")) |
FLOAT64 |
pandas.Float64Dtype() |
GEOGRAPHY |
Solo es compatible con |
INT64 |
pandas.Int64Dtype() |
JSON |
pandas.ArrowDtype(pa.json_(pa.string()) en pandas versión 3.0 o posterior y pyarrow versión 19.0 o posterior; de lo contrario, las columnas JSON se exponen como pandas.ArrowDtype(db_dtypes.JSONArrowType()) . |
STRING |
pandas.StringDtype(storage="pyarrow") |
STRUCT |
pandas.ArrowDtype(pa.struct()) |
TIME |
pandas.ArrowDtype(pa.time64("us")) |
TIMESTAMP |
pandas.ArrowDtype(pa.timestamp("us", tz="UTC")) |
BigQuery DataFrames no es compatible con los siguientes tipos de datos de BigQuery:
NUMERIC
BIGNUMERIC
INTERVAL
RANGE
Todos los demás tipos de datos de BigQuery se muestran como el tipo de objeto.
Manipulación de datos
En las siguientes secciones, se describen las capacidades de manipulación de datos para
los DataFrames de BigQuery. Puedes encontrar las funciones que se describen en la biblioteca bigframes.bigquery
.
API de pandas
Una característica notable de BigQuery DataFrames es que la API de bigframes.pandas
está diseñada para ser similar a las APIs de la biblioteca de Pandas. Este diseño te permite emplear patrones de sintaxis familiares para tareas de manipulación de datos. Las operaciones definidas a través de la API de BigQuery DataFrames se ejecutan del servidor, operan directamente en los datos almacenados en BigQuery y eliminan la necesidad de transferir conjuntos de datos fuera de BigQuery.
Para verificar qué APIs de pandas son compatibles con BigQuery DataFrames, consulta APIs de pandas compatibles.
Inspecciona y manipula datos
Puedes usar la API de bigframes.pandas
para realizar operaciones de inspección y cálculo de datos. En la siguiente muestra de código, se usa la biblioteca bigframes.pandas
para inspeccionar la columna body_mass_g
, calcular la media body_mass
y calcular la media body_mass
por species
:
Biblioteca de BigQuery
La biblioteca de BigQuery proporciona funciones de SQL de BigQuery que podrían no tener un equivalente de pandas. En las siguientes secciones, se presentan algunos ejemplos.
Procesa valores de arrays
Puedes usar la función bigframes.bigquery.array_agg()
en la biblioteca bigframes.bigquery
para agregar valores después de una operación groupby
:
También puedes usar las funciones de array array_length()
y array_to_string()
.
Crea una serie de struct
Puedes usar la función bigframes.bigquery.struct()
en la biblioteca bigframes.bigquery
para crear una nueva serie de struct con subcampos para cada columna en un DataFrame:
Convierte marcas de tiempo en épocas de Unix
Puedes usar la función bigframes.bigquery.unix_micros()
en la biblioteca bigframes.bigquery
para convertir marcas de tiempo en microsegundos de Unix:
También puedes usar las funciones de hora unix_seconds()
y unix_millis()
.
Usa la función escalar de SQL
Puedes usar la función bigframes.bigquery.sql_scalar()
en la
biblioteca bigframes.bigquery
para acceder a una sintaxis de SQL arbitraria que represente una
expresión de una sola columna:
Funciones personalizadas de Python
BigQuery DataFrames te permite convertir tus funciones personalizadas de Python en artefactos de BigQuery que puedes ejecutar en objetos de BigQuery DataFrames a gran escala. Esta compatibilidad con la extensibilidad te permite realizar operaciones más allá de lo que es posible con BigQuery DataFrames y las APIs de SQL, de modo que puedas aprovechar las bibliotecas de código abierto. Las dos variantes de este mecanismo de extensibilidad se describen en las siguientes secciones.
Funciones definidas por el usuario (UDF)
Con las UDF (versión preliminar), puedes convertir tu función personalizada de Python en una UDF de Python. Para ver un ejemplo de uso, consulta Cómo crear una UDF persistente de Python.
Cuando creas una UDF en BigQuery DataFrames, se crea una rutina de BigQuery como la UDF de Python en el conjunto de datos especificado. Para obtener un conjunto completo de parámetros admitidos, consulta udf.
Limpia
Además de limpiar los artefactos de nube directamente en la consola de Google Cloud
o con otras herramientas, puedes limpiar las UDF de BigQuery DataFrames que
se crearon con un argumento de nombre explícito mediante el comando
bigframes.pandas.get_global_session().bqclient.delete_routine(routine_id)
.
Requisitos
Para usar una UDF de BigQuery DataFrames, habilita la API de BigQuery en tu proyecto. Si proporcionas el parámetro bigquery_connection
en
tu proyecto, también debes habilitar la
API de conexión de BigQuery.
Limitaciones
- El código de la UDF debe ser independiente, es decir, no debe contener ninguna referencia a una importación o variable definida fuera del cuerpo de la función.
- El código de la UDF debe ser compatible con Python 3.11, ya que ese es el entorno en el que se ejecuta el código en la nube.
- Si vuelves a ejecutar el código de definición de la UDF después de realizar cambios simples en el código de la función, por ejemplo, cambiar el nombre de una variable o insertar una línea nueva, se volverá a crear la UDF, incluso si estos cambios no son importantes para el comportamiento de la función.
- Los usuarios con acceso de lectura a las rutinas de BigQuery pueden ver el código del usuario, por lo que debes incluir contenido sensible solo con precaución.
- Un proyecto puede tener hasta 1,000 funciones de Cloud Run a la vez en una ubicación de BigQuery.
La UDF de BigQuery DataFrames implementa una función de Python de BigQuery definida por el usuario, y se aplican las limitaciones relacionadas.
Funciones remotas
BigQuery DataFrames te permite convertir tus funciones escalares personalizadas en funciones remotas de BigQuery. Para ver un ejemplo de uso, consulta Crea una función remota. Para obtener un conjunto completo de parámetros admitidos, consulta remote_function.
Cuando se crea una función remota en BigQuery DataFrames, se crea lo siguiente:
- Una función de Cloud Run
- Una conexión de BigQuery.
De forma predeterminada, se usa una conexión llamada
bigframes-default-connection
. Si lo prefieres, puedes usar una conexión de BigQuery preconfigurada, en cuyo caso se omite la creación de la conexión. A la cuenta de servicio para la conexión predeterminada se le otorga el rol de Cloud Run (roles/run.invoker
). - Una función remota de BigQuery que usa la función de Cloud Run que se creó con la conexión de BigQuery.
Las conexiones de BigQuery se crean en la misma ubicación que la sesión de BigQuery DataFrames, con el nombre que proporcionas en la definición de la función personalizada. Para ver y administrar conexiones, haz lo siguiente:
En la consola de Google Cloud , ve a la página BigQuery.
Selecciona el proyecto en el que creaste la función remota.
En el panel Explorador, expande el proyecto y, luego, expande Conexiones externas.
Las funciones remotas de BigQuery se crean en el conjunto de datos que especificas o en un conjunto de datos anónimo, que es un tipo de conjunto de datos oculto.
Si no estableces un nombre para una función remota durante su creación, BigQuery DataFrames aplica un nombre predeterminado que comienza con el prefijo bigframes
. Para ver y administrar funciones remotas creadas en un conjunto de datos especificado por el usuario, haz lo siguiente:
En la consola de Google Cloud , ve a la página BigQuery.
Selecciona el proyecto en el que creaste la función remota.
En el panel Explorador, expande el proyecto, expande el conjunto de datos en el que creaste la función remota y, luego, expande Rutinas.
Para ver y administrar las funciones de Cloud Run, haz lo siguiente:
Ir a la página Cloud Run.
Selecciona el proyecto en el que creaste la función.
Filtra por Tipo de implementación de funciones en la lista de servicios disponibles.
Para identificar las funciones creadas por BigQuery DataFrames, busca nombres de funciones con el prefijo
bigframes
.
Limpia
Además de limpiar los artefactos de la nube directamente en la consola de Google Cloud o con otras herramientas, puedes limpiar las funciones remotas de BigQuery que se crearon sin un argumento de nombre explícito y sus funciones asociadas de Cloud Run de las siguientes maneras:
- Para una sesión de BigQuery DataFrames, usa el comando
session.close()
. - Para la sesión predeterminada de BigQuery DataFrames, usa el comando
bigframes.pandas.close_session()
. - Para una sesión anterior con
session_id
, usa el comandobigframes.pandas.clean_up_by_session_id(session_id)
.
También puedes limpiar las funciones remotas de BigQuery que se crearon con un argumento de nombre explícito y sus funciones asociadas de Cloud Run con el comando bigframes.pandas.get_global_session().bqclient.delete_routine(routine_id)
.
Requisitos
Para usar las funciones remotas de BigQuery DataFrames, debes habilitar las siguientes APIs:
- API de BigQuery (
bigquery.googleapis.com
) - API de BigQuery Connection (
bigqueryconnection.googleapis.com
) - API de Cloud Functions (
cloudfunctions.googleapis.com
) - API de Administrador de Cloud Run (
run.googleapis.com
) - API de Artifact Registry (
artifactregistry.googleapis.com
) - API de Cloud Build (
cloudbuild.googleapis.com
) - API de Compute Engine (
compute.googleapis.com
) API de Cloud Resource Manager (
cloudresourcemanager.googleapis.com
)Para evitar este requisito, configura la opción
bigframes.pandas.options.bigquery.skip_bq_connection_check
comoTrue
, en cuyo caso la conexión (ya sea predeterminada o preconfigurada) se usa tal como está sin verificar el valor de la existencia de la conexión o verificar sus permisos.
Limitaciones
- Las funciones remotas tardan unos 90 segundos en estar disponibles cuando las creas por primera vez. Las dependencias de paquetes adicionales pueden aumentar la latencia.
- Si vuelves a ejecutar el código de definición de la función remota después de realizar cambios simples en el código de la función, por ejemplo, cambiar el nombre de una variable, insertar una línea nueva o insertar una celda nueva en el notebook, es posible que se vuelva a crear la función remota, incluso si estos cambios no son importantes para el comportamiento de la función.
- Los usuarios con acceso de lectura a las funciones de Cloud Run pueden ver el código del usuario, por lo que debes incluir contenido sensible solo con precaución.
- Un proyecto puede tener hasta 1,000 funciones de Cloud Run a la vez en una región. Para obtener más información, consulta Cuotas.
IA y AA
En las siguientes secciones, se describen las capacidades de IA y de procesamiento de datos de BigQuery. Estas funciones usan la biblioteca bigframes.ml
.
Ubicaciones de AA
La biblioteca de bigframes.ml
admite las mismas ubicaciones que BigQuery ML. La predicción de modelos de BigQuery ML y otras funciones del AA son compatibles con todas las regiones de BigQuery. La compatibilidad de la entrenamiento de modelos varía según la región. Para obtener más información, consulta Ubicaciones de BigQuery ML.
Preprocesar datos
Crear transformadores para preparar datos para usar en estimadores (modelos) mediante el módulo bigframes.ml.preprocessing y el módulo bigframes.ml.compose BigQuery DataFrames ofrece las siguientes transformaciones:
Usa la clase KBinsDiscretizer en el módulo
bigframes.ml.preprocessing
para agrupar datos continuos en intervalos.Usa la clase LabelEncoder en el módulo
bigframes.ml.preprocessing
para normalizar las etiquetas de destino como valores de números enteros.Usa la clase MaxAbsScaler en el módulo
bigframes.ml.preprocessing
para escalar cada atributo al rango[-1, 1]
según su valor absoluto máximo.Usa la clase MinMaxScaler en el módulo
bigframes.ml.preprocessing
para estandarizar atributos mediante el escalamiento de cada atributo al rango[0, 1]
.Usa la clase StandardScaler en el módulo
bigframes.ml.preprocessing
para estandarizar atributos mediante la eliminación de la media y la escala a la varianza de unidades.Usa la clase OneHotEncoder en el módulo
bigframes.ml.preprocessing
para transformar los valores categóricos en formato numérico.Usa la clase ColumnTransformer en el módulo
bigframes.ml.compose
para aplicar transformadores a las columnas de DataFrames.
Entrenar modelos
Puedes crear estimadores para entrenar modelos en BigQuery DataFrames.
Agrupa modelos en clústeres
Puedes crear estimadores para los modelos de agrupamiento en clústeres mediante el módulo bigframes.ml.cluster.
- Usa la clase KMeans para crear modelos de agrupamiento en clústeres de K-means. Usa estos modelos para la segmentación de datos. Por ejemplo, identificar segmentos de clientes. K-means es una técnica de aprendizaje no supervisado, por lo que el entrenamiento de modelos no requiere etiquetas ni datos divididos para el entrenamiento o la evaluación.
Puedes usar el módulo bigframes.ml.cluster
para crear estimadores para los modelos de agrupamiento en clústeres.
En la siguiente muestra de código, se usa la clase bigframes.ml.cluster KMeans
para crear un modelo de agrupamiento en clústeres de k-means para la segmentación de datos:
Modelos de descomposición
Puedes crear estimadores para los modelos de descomposición mediante el módulo bigframes.ml.decomposition.
- Usa la clase PCA para crear modelos de análisis de componentes principales (PCA). Usa estos modelos para calcular los componentes principales y usarlos a fin de realizar un cambio de base en los datos. Esto proporciona una reducción de la dimensionalidad mediante la proyección de cada dato a los primeros componentes principales para obtener datos de menor dimensión y, al mismo tiempo, conservar la mayor variación posible de los datos.
Ensamblar modelos
Puedes crear estimadores para modelos de ensamble con el módulo bigframes.ml.ensemble.
Usa la clase RandomForestClassifier para crear modelos clasificadores de bosque aleatorios. Usa estos modelos para construir varios árboles de decisión de métodos de aprendizaje para la clasificación.
Usa la clase RandomForestRegressor para crear modelos de regresión de bosque aleatorio. Usa estos modelos para construir varios árboles de decisión de métodos de aprendizaje para la regresión.
Usa la clase XGBClassifier para crear modelos clasificadores de árbol mejorado con gradiente. Usa estos modelos para construir de forma aditiva varios árboles de decisión de métodos de aprendizaje para la clasificación.
Usa la clase XGBRegressor para crear modelos de regresión de árbol mejorado con gradiente. Usa estos modelos para construir de forma aditiva varios árboles de decisión de métodos de aprendizaje para la regresión.
Modelos de previsión
Puedes crear estimadores para los modelos de previsión mediante el módulo bigframes.ml.forecasting.
- Usa la clase ARIMAPlus para crear modelos de previsión de series temporales.
Modelos importados
Puedes crear estimadores para modelos importados con el módulo bigframes.ml.imported.
Usa la clase ONNXModel para importar modelos de Open Neural Network Exchange (ONNX).
Usar la clase TensorFlowModel para importar modelos de TensorFlow
Usa la clase XGBoostModel para importar modelos XGBoostModel.
Modelos lineales
Crea estimadores para modelos lineales con el módulo bigframes.ml.linear_model.
Usa la clase LinearRegression para crear modelos de regresión lineal. Usa estos modelos para la previsión. Por ejemplo, la previsión de las ventas de un artículo en un día determinado.
Usa la clase LogisticRegression para crear modelos de regresión logística. Usa estos modelos para la clasificación de dos o más valores posibles, por ejemplo, si una entrada es
low-value
,medium-value
ohigh-value
.
En la siguiente muestra de código, se usa bigframes.ml
para hacer lo siguiente:
- Carga datos de BigQuery
- Limpia y prepara los datos de entrenamiento
- Crea y aplica un modelo de regresión bigframes.ml.LinearRegression
Modelos de lenguaje grandes
Puedes crear estimadores para LLM con el módulo bigframes.ml.llm.
Usa la clase GeminiTextGenerator para crear modelos de generador de texto de Gemini. Usa estos modelos para tareas de generación de texto.
Usa el módulo bigframes.ml.llm para crear estimadores para modelos remotos grandes de lenguaje (LLM).
En la siguiente muestra de código, se usa la clase bigframes.ml.llm
GeminiTextGenerator
para crear un modelo de Gemini para la generación de código:
Modelos remotos
Para usar los modelos remotos de BigQuery DataFrames (bigframes.ml.remote
o bigframes.ml.llm
), debes habilitar las siguientes APIs:
API de BigQuery Connection (
bigqueryconnection.googleapis.com
)API de Cloud Resource Manager (
cloudresourcemanager.googleapis.com
)Para evitar este requisito, configura la opción
bigframes.pandas.options.bigquery.skip_bq_connection_check
comoTrue
, en cuyo caso la conexión (ya sea predeterminada o preconfigurada) se usa tal como está sin verificar el valor de la existencia de la conexión o verificar sus permisos.
Cuando se crea un modelo remoto en BigQuery DataFrames, se crea una conexión de BigQuery.
De forma predeterminada, se usa una conexión con el nombre bigframes-default-connection
. Si lo prefieres, puedes usar una conexión de BigQuery preconfigurada, en cuyo caso se omite la creación de la conexión. A la cuenta de servicio
para la conexión predeterminada se le otorga el
rol de usuario de Vertex AI (roles/aiplatform.user
) en el proyecto.
Crear canalizaciones
Puedes crear canalizaciones de AA con el módulo bigframes.ml.pipeline. Las canalizaciones te permiten ensamblar varios pasos del AA para realizar una validación cruzada mientras se configuran diferentes parámetros. Esto simplifica tu código y te permite implementar pasos de procesamiento previo de datos y un estimador juntos.
Usa la clase de canalización para crear una canalización de transformaciones con un estimador final.
Modelos seleccionados
Usa el módulo bigframes.ml.model_selection para dividir tus conjuntos de datos de entrenamiento y prueba, y seleccionar los mejores modelos:
Usa la función
train_test_split
para dividir los datos en conjuntos de entrenamiento y de prueba (evaluación), como se muestra en el siguiente muestra de código:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
Usa la clase
KFold
y el métodoKFold.split
para crear conjuntos de entrenamiento y pruebas múltiples para entrenar y evaluar modelos, como se muestra en la siguiente muestra de código. Esta función es valiosa para conjuntos de datos pequeños.kf = KFold(n_splits=5) for i, (X_train, X_test, y_train, y_test) in enumerate(kf.split(X, y)): # Train and evaluate models with training and testing sets
Usa la función
cross_validate
para crear automáticamente conjuntos de entrenamiento y pruebas de varios pasos, entrenar y evaluar el modelo, y obtener el resultado de cada paso, como se muestra en la siguiente muestra de código:scores = cross_validate(model, X, y, cv=5)
Optimización del rendimiento
En esta sección, se presentan formas de optimizar el rendimiento de los DataFrames de BigQuery.
Modo de pedido parcial
BigQuery DataFrames proporciona una función de modo de ordenamiento. Establece la propiedad ordering_mode
en partial
para generar consultas más eficientes.
El modo de ordenamiento partial
contrasta con el modo strict
predeterminado, que crea un ordenamiento total en todas las filas. Un ordenamiento total hace que los DataFrames de BigQuery sean más compatibles con pandas, ya que proporciona acceso basado en el orden a las filas con la propiedad DataFrame.iloc
. Sin embargo, el ordenamiento total y el índice secuencial predeterminado sobre ese ordenamiento significan que ni los filtros de columna ni los de fila reducen la cantidad de bytes analizados, a menos que esos filtros se apliquen como parámetros a las funciones read_gbq
y read_gbq_table
. Para proporcionar un ordenamiento total sobre todas las filas del DataFrame, BigQuery DataFrames crea un hash de todas las filas. Esto puede generar un análisis de datos completo que omita los filtros de filas y columnas.
Si estableces la propiedad ordering_mode
en partial
, se impide que los DataFrames de BigQuery generen un orden total en todas las filas. El modo de ordenamiento parcial también desactiva las funciones que requieren un ordenamiento total en todas las filas, como la propiedad DataFrame.iloc
.
El modo de ordenamiento parcial establece la clase DefaultIndexKind
en un índice nulo, en lugar de un índice secuencial sobre el ordenamiento.
Cuando se filtra un DataFrame con la propiedad ordering_mode
establecida en partial
, BigQuery DataFrames ya no tiene que calcular qué filas faltan en el índice secuencial, por lo que genera consultas más rápidas y eficientes. La API de BigQuery DataFrames sigue siendo la API de pandas familiar, al igual que la experiencia predeterminada con el modo de ordenamiento estricto.
Sin embargo, el modo de ordenamiento parcial diferirá del comportamiento común de pandas. Por ejemplo, el modo de ordenamiento parcial no realiza uniones implícitas por índice.
Con los modos de ordenamiento parcial y estricto, pagas por los recursos de BigQuery que usas. Sin embargo, usar el modo de ordenamiento parcial puede reducir los costos cuando se trabaja con tablas agrupadas y particionadas grandes, ya que los filtros de filas en las columnas de clúster y partición reducen la cantidad de bytes procesados.
Uso
Para usar el ordenamiento parcial, establece la propiedad ordering_mode
en partial
antes de realizar cualquier otra operación con BigQuery DataFrames, como se muestra en el siguiente muestra de código:
Debido a que no hay un índice secuencial con el modo de ordenamiento parcial, los DataFrames de BigQuery no relacionados no se unen de forma implícita.
En su lugar, debes llamar de forma explícita al método DataFrame.merge
para unir
dos DataFrames de BigQuery que se derivan de diferentes expresiones de
tabla.
Las funciones Series.unique()
y Series.drop_duplicates()
no son compatibles con el modo de ordenamiento parcial. En su lugar, usa el método groupby
para encontrar valores únicos de esta manera:
Con el modo de ordenamiento parcial, el resultado de las funciones DataFrame.head(n)
y Series.head(n)
no es idempotente en todas las invocaciones. Para descargar una muestra pequeña y arbitraria de los datos, usa los métodos DataFrame.peek()
o Series.peek()
.
Si deseas obtener un instructivo detallado en el que se usa la propiedad ordering_mode = "partial"
, consulta este notebook de BigQuery DataFrames en el que se muestra el uso del modo de ordenamiento parcial.
Soluciona problemas
Debido a que los DataFrames en el modo de ordenamiento parcial no siempre tienen un ordenamiento o un índice, es posible que encuentres los siguientes problemas cuando uses algunos métodos compatibles con pandas.
Error de pedido obligatorio
Algunas funciones requieren un orden, como las funciones DataFrame.head()
y DataFrame.iloc
. Para obtener una lista de las funciones que requieren orden, consulta la columna Requiere orden en APIs de pandas compatibles.
Cuando no hay orden en el objeto, la operación falla con un mensaje OrderRequiredError
como el siguiente:
OrderRequiredError: Op iloc requires an ordering. Use .sort_values or .sort_index to provide an ordering.
Como se describe en el mensaje de error, puedes proporcionar un orden con el método DataFrame.sort_values()
para ordenar por una o varias columnas. Otras operaciones, como la operación DataFrame.groupby()
, proporcionan de forma implícita un orden total sobre el grupo por claves.
Si no se puede determinar que el orden es un orden total completamente estable en todas las filas, las operaciones posteriores podrían advertirte con un mensaje AmbiguousWindowWarning
como el siguiente:
AmbiguousWindowWarning: Window ordering may be ambiguous, this can cause unstable results.
Si tu carga de trabajo puede admitir resultados no deterministas o puedes verificar manualmente que el orden que proporcionas es un orden total, puedes filtrar el mensaje AmbiguousWindowWarning
de esta manera:
Error de índice nulo
Algunas funciones requieren un índice, como las propiedades DataFrame.unstack()
y
Series.interpolate()
. Para obtener una lista de las funciones que requieren un índice, consulta la columna Requiere índice en APIs de pandas compatibles.
Cuando usas una operación que requiere un índice con el modo de ordenamiento parcial, la operación genera un mensaje NullIndexError
como el siguiente:
NullIndexError: DataFrame cannot perform interpolate as it has no index. Set an index using set_index.
Como se describe en el mensaje de error, puedes proporcionar un índice con el método DataFrame.set_index()
para ordenar por una o varias columnas. Otras operaciones, como la operación
DataFrame.groupby()
, proporcionan de forma implícita un índice sobre el grupo por claves, a menos que
se configure el parámetro as_index=False
.
Visualizaciones
La API de bigframes.pandas
es una puerta de enlace al ecosistema completo de herramientas de Python. La API es compatible con operaciones estadísticas avanzadas, y puedes visualizar las agregaciones generadas a partir de BigQuery DataFrames.
También puedes cambiar de un DataFrame de BigQuery DataFrames a un DataFrame pandas
con operaciones de muestreo integradas.
¿Qué sigue?
- Aprende a generar código de BigQuery DataFrames con Gemini.
- Obtén información para analizar las descargas de paquetes de PyPI con BigQuery DataFrames.
- Consulta el código fuente, los notebooks de muestra y los ejemplos de BigQuery DataFrames en GitHub.
- Explora la referencia de la API de BigQuery DataFrames.