Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/pt-br/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.

Leitura de banco de dados PostgreSQL pelo TensorFlow IO

Visão geral

Este tutorial mostra como criar um tf.data.Dataset a partir de um servidor de banco de dados PostgreSQL de forma que o Dataset criado possa ser passado ao tf.keras para treinamento e inferência.

Bancos de dado SQL são uma fonte de dados importante para cientistas de dados. Por ser um dos bancos de dados SQL de código aberto mais populares, o PostgreSQL é amplamente usado em empresas para armazenar dados críticos e transacionais. Criar um Dataset a partir de um servidor de banco de dados PostgreSQL diretamente e passar o Dataset ao tf.keras para treinamento e inferência pode simplificar bastante o pipeline da dados e ajudar os cientistas de dados a se concentrarem em criar modelos de aprendizado de máquina.

Configuração e uso

Instale os pacotes tensorflow-io necessários e reinicie o runtime

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

Instale e configure o PostgreSQL (opcional)

Atenção: este notebook foi criado para execução somente no Google Colab. Ele instala pacotes no sistema e requer acesso sudo. Se você quiser executar em um notebook Jupyter local, prossiga com cautela.

Para demonstrar o uso no Google Colab, você instalará o servidor PostgreSQL. Também serão necessários a senha e um banco de dados vazio.

Se você não estiver executando este notebook no Google Colab ou se preferir usar um banco de dados existente, pule a configuração abaixo e avance para a próxima seção.

# 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;'

Configure as variáveis de ambiente necessárias

As variáveis de ambiente abaixo são baseadas na configuração do PostgreSQL da última seção. Se você tiver uma configuração diferente ou se estiver utilizando um banco de dados existente, altere as variáveis conforme necessário:

%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

Prepare os dados no servidor PostgreSQL

Para fins de demonstração deste tutorial, você vai criar um banco de dados e preenchê-lo com alguns dados. Os dados usados no tutorial são do dataset Air Quality (qualidade do ar), disponível no Repositório de aprendizado de máquina da UCI.

Veja abaixo uma prévia de um subconjunto do dataset Air Quality:

DataHorárioCO(GT)PT08.S1(CO)NMHC(GT)C6H6(GT)PT08.S2(NMHC)NOx(GT)PT08.S3(NOx)NO2(GT)PT08.S4(NO2)PT08.S5(O3)TURUA
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

Confira mais informações sobre o dataset Air Quality e o Repositório de aprendizado de máquina da UCI na seção Referências.

Para ajudar a simplificar a preparação dos dados, preparamos uma versão em SQL do dataset Air Quality, disponível como AirQualityUCI.sql.

A declaração para criar a tabela é:

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 );

Veja os comandos completos para criar a tabela no banco de dados e preencher com os dados:

!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

Crie um dataset a partir do servidor PostgreSQL e utilize-o no TensorFlow

Criar um dataset a partir do servidor PostgreSQL é fácil, basta chamar tfio.experimental.IODataset.from_sql com os argumentos query (consulta) e endpoint. query é a consulta SQL para selecionar colunas nas tabelas, e endpoint é o endereço e nome do banco de dados:

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 podemos ver na saída de dataset.element_spec acima, o elemento do Dataset criado é um objeto dict (dicionário) do Python, com nomes de colunas da tabela do banco de dados usadas como chaves. É muito simples aplicar outras operações. Por exemplo, você pode selecionar tanto o campo nox quanto o campo no2 do Dataset e calcular a diferença:

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())

Agora, o Dataset criado está pronto para ser passado ao tf.keras diretamente para treinamento ou inferência.

Referências

  • Dua, D. e Graff, C. (2019). Repositório de aprendizado de máquina da UCI [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, edição 2, 22 de fevereiro de 2008, páginas 750-757, ISSN 0925-4005 (Calibração em campo de um nariz eletrônico para estimativa de benzeno em um cenário de monitoramento de poluição urbana)