Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/es-419/io/tutorials/postgresql.ipynb
25118 views
Kernel: Python 3
#@title 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 # # https://www.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.

Lectura de la base de datos PostgreSQL desde TensorFlow IO

Descripción general

En este tutorial se muestra cómo crear tf.data.Dataset desde un servidor de base de datos PostgreSQL, de modo que el Dataset creado pueda pasarse a tf.keras con fines de entrenamiento o inferencia.

Una base de datos SQL es una fuente importante de datos para los científicos de datos. Como una de las bases de datos SQL de código abierto más populares, PostgreSQL se usa bastante en las empresas para almacenar datos críticos y transaccionales en todos los ámbitos. Crear Dataset directamente desde un servidor de base de datos PostgreSQL y pasar el Dataset a tf.keras para entrenamiento o inferencia podría simplificar enormemente la canalización de datos y ayudar a los científicos de datos a centrarse en la creación de modelos de aprendizaje automático.

Configuración y uso

Instale los paquetes tensorflow-io necesarios y reinicie el tiempo de ejecución

try: %tensorflow_version 2.x except Exception: pass !pip install tensorflow-io

Instalar y configurar PostgreSQL (opcional)

Advertencia: Este bloc de notas fue diseñado para ejecutarse únicamente en Google Colab. Instala paquetes en el sistema y requiere acceso de a sudo. Si desea ejecutarlo en un bloc de notas de Jupyter local, hágalo con cuidado.

Para demostrar el uso en Google Colab, deberá instalar el servidor PostgreSQL. También se necesita la contraseña y una base de datos vacía.

Si no está ejecutando este bloc de notas en Google Colab o prefiere usar una base de datos existente, omita esta configuración y continúe con la siguiente sección.

# Install postgresql server !sudo apt-get -y -qq update !sudo apt-get -y -qq install postgresql !sudo service postgresql start # Setup a password `postgres` for username `postgres` !sudo -u postgres psql -U postgres -c "ALTER USER postgres PASSWORD 'postgres';" # Setup a database with name `tfio_demo` to be used !sudo -u postgres psql -U postgres -c 'DROP DATABASE IF EXISTS tfio_demo;' !sudo -u postgres psql -U postgres -c 'CREATE DATABASE tfio_demo;'

Configurar las variables del entorno necesarias

Las siguientes variables del entorno se basan en la configuración de PostgreSQL en la última sección. Si tiene una configuración diferente o está usando una base de datos existente, debe cambiarla como corresponde:

%env TFIO_DEMO_DATABASE_NAME=tfio_demo %env TFIO_DEMO_DATABASE_HOST=localhost %env TFIO_DEMO_DATABASE_PORT=5432 %env TFIO_DEMO_DATABASE_USER=postgres %env TFIO_DEMO_DATABASE_PASS=postgres

Preparar datos en el servidor PostgreSQL

Para fines de demostración, este tutorial creará una base de datos y la completará con algunos datos. Los datos que se usan en este tutorial provienen del conjunto de datos de calidad del aire, disponible en el repositorio de aprendizaje automático de UCI.

A continuación se muestra un adelanto de un subconjunto del conjunto de datos sobre la calidad del aire:

FechaHoraCO(GT)PT08.S1(CO)NMHC(GT)C6H6(GT)PT08.S2(NMHC)NOx(GT)PT08.S3(NOx)NO2(GT)PT08.S4(NO2)PT08.S5(O3)TRHAH
10/03/200418.00.002,6136015011,9104616610561131692126813,648,90,7578
10/03/200419.00.00212921129,4955103117492155997213,347,70,7255
10/03/200420.00.002,21402889,093913111401141555107411,954,00,7502
10/03/200421.00.002,21376809,294817210921221584120311,060,00,7867
10/03/200422.00.001,61272516,583613112051161490111011,259,60,7888

Puede obtener más información sobre el conjunto de datos de calidad del aire y el repositorio de aprendizaje automático de UCI en la sección de Referencias.

Para ayudar a simplificar la preparación de datos, se ha preparado una versión SQL del conjunto de datos de calidad del aire y la puede encontrar como AirQualityUCI.sql.

La declaración para crear la tabla es:

CREATE TABLE AirQualityUCI ( Date DATE, Time TIME, CO REAL, PT08S1 INT, NMHC REAL, C6H6 REAL, PT08S2 INT, NOx REAL, PT08S3 INT, NO2 REAL, PT08S4 INT, PT08S5 INT, T REAL, RH REAL, AH REAL );

Los comandos completos para crear la tabla en la base de datos y completar los datos son:

!curl -s -OL https://github.com/tensorflow/io/raw/master/docs/tutorials/postgresql/AirQualityUCI.sql !PGPASSWORD=$TFIO_DEMO_DATABASE_PASS psql -q -h $TFIO_DEMO_DATABASE_HOST -p $TFIO_DEMO_DATABASE_PORT -U $TFIO_DEMO_DATABASE_USER -d $TFIO_DEMO_DATABASE_NAME -f AirQualityUCI.sql

Crear un conjunto de datos desde el servidor PostgreSQL y usarlo en TensorFlow

Crear un conjunto de datos desde el servidor PostgreSQL es tan fácil como llamar tfio.experimental.IODataset.from_sql con argumentos query y endpoint. La query es la consulta SQL para columnas seleccionadas en tablas y el argumento endpoint es la dirección y el nombre de la base de datos:

import os import tensorflow_io as tfio endpoint="postgresql://{}:{}@{}?port={}&dbname={}".format( os.environ['TFIO_DEMO_DATABASE_USER'], os.environ['TFIO_DEMO_DATABASE_PASS'], os.environ['TFIO_DEMO_DATABASE_HOST'], os.environ['TFIO_DEMO_DATABASE_PORT'], os.environ['TFIO_DEMO_DATABASE_NAME'], ) dataset = tfio.experimental.IODataset.from_sql( query="SELECT co, pt08s1 FROM AirQualityUCI;", endpoint=endpoint) print(dataset.element_spec)

Como puede ver en el resultado de dataset.element_spec anterior, el elemento del Dataset que se crea es un objeto dict de Python con nombres de columnas de la tabla de la base de datos como claves. Es muy conveniente aplicar más operaciones. Por ejemplo, puede seleccionar los campos nox y no2 del Dataset y calcular la diferencia:

dataset = tfio.experimental.IODataset.from_sql( query="SELECT nox, no2 FROM AirQualityUCI;", endpoint=endpoint) dataset = dataset.map(lambda e: (e['nox'] - e['no2'])) # check only the first 20 record dataset = dataset.take(20) print("NOx - NO2:") for difference in dataset: print(difference.numpy())

El Dataset creado ya está listo para pasarse a tf.keras directamente para entrenamiento o inferencia.

Referencias

  • Dua, D. and Graff, C. (2019). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.

  • S. De Vito, E. Massera, M. Piga, L. Martinotto, G. Di Francia, On field calibration of an electronic nose for benzene estimation in an urban pollution monitoring scenario, Sensors and Actuators B: Chemical, Volume 129, Issue 2, 22 February 2008, Pages 750-757, ISSN 0925-4005