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

TensorFlow IO에서 PostgreSQL 데이터베이스 읽기

개요

이 튜토리얼에서는 PostgreSQL 데이터베이스 서버에서 tf.data.Dataset를 생성하는 방법을 보여줍니다. 생성된 Dataset를 훈련이나 추론 목적으로 tf.keras로 전달할 수 있습니다.

SQL 데이터베이스는 데이터 과학자에게 중요한 데이터 소스입니다. 가장 널리 사용되는 오픈 소스 SQL 데이터베이스 중 하나인 PostgreSQL은 기업에서 중요 데이터와 트랜잭션 데이터를 전사적으로 저장하는 데 보편적으로 사용됩니다. PostgreSQL 데이터베이스 서버에서 직접 Dataset를 만들고 훈련 또는 추론 목적으로 Datasettf.keras로 전달하면 데이터 파이프라인이 크게 간소화되고 데이터 과학자들이 머신러닝 모델을 빌드하는 데 집중할 수 있습니다.

설정 및 사용법

필요한 tensorflow-io 패키지를 설치하고 런타임 다시 시작하기

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

PostgreSQL 설치 및 설정하기(선택 사항)

경고: 이 노트북은 Google Colab에서만 실행되도록 설계되었습니다. 여기서는 시스템에 패키지를 설치하고 sudo 액세스가 필요합니다. 로컬 Jupyter 노트북에서 실행하려면 주의해서 진행해야 합니다.

Google Colab에서 사용법을 데모하기 위해 PostgreSQL 서버를 설치합니다. 암호와 빈 데이터베이스도 필요합니다.

Google Colab에서 이 노트북을 실행하지 않거나 기존 데이터베이스를 사용하려는 경우 다음 설정을 건너뛰고 다음 섹션으로 진행하세요.

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

필요한 환경 변수 설정하기

다음 환경 변수는 마지막 섹션의 PostgreSQL 설정을 기반으로 합니다. 다른 설정이 있거나 기존 데이터베이스를 사용하는 경우 적절하게 변경해야 합니다.

%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

PostgreSQL 서버에서 데이터 준비하기

이 튜토리얼에서는 데모 목적으로 데이터베이스를 생성하고 데이터베이스에 일부 데이터를 채웁니다. 이 가이드에 사용된 데이터는 UCI 머신러닝 리포지토리에서 제공되는 대기 품질 데이터세트에서 가져온 것입니다.

다음은 대기 질 데이터세트의 일부를 미리 나타낸 것입니다.

날짜시간CO (GT)PT08.S1 (CO)NMHC (GT)C6H6 (GT)PT08.S2 (NMHC)NOx (GT)PT08.S3 (NOx)NO2 (GT)PT08.S4 (NO2)PT08.S5 (O3)RHAH
10/03/200418.00.002,6136015011,9104616610561131692 년1268 년13,648,90,7578
10/03/200419.00.00212921129,49551031174 년921559 년97213,347,70,7255
10/03/200420.00.002,21402889,09391311140 년1141555 년107411,954,00,7502
10/03/200421.00.002,21376809,294817210921221584 년1203 년11,060,00,7867
10/03/200422.00.001,61272516,58361311205 년11614901110 년11,259,60,7888

대기 품질 데이터세트 및 UCI 머신러닝 리포지토리에 대한 자세한 정보는 참고 문헌 섹션에서 확인할 수 있습니다.

데이터 준비를 단순화하기 위해 대기 품질 데이터세트의 SQL 버전이 준비되었으며 AirQualityUCI.sql로 제공됩니다.

테이블을 만드는 문은 다음과 같습니다.

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

데이터베이스에 테이블을 만들고 데이터를 채우는 전체 명령은 다음과 같습니다.

!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

PostgreSQL 서버에서 데이터세트를 만들고 TensorFlow에서 사용하기

PostgreSQL 서버에서 데이터세트를 만들려면 queryendpoint 인수를 사용하여 tfio.experimental.IODataset.from_sql을 호출하기만 하면 됩니다. query는 테이블의 선택 열에 대한 SQL 쿼리이고 endpoint 인수는 주소 및 데이터베이스 이름입니다.

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)

위의 dataset.element_spec 출력에서 알 수 있듯이 생성된 Dataset의 요소는 데이터베이스 테이블의 열 이름을 키로 사용하는 python dict 개체입니다. 추가 작업을 적용하면 매우 편리합니다. 예를 들어 Datasetnoxno2 필드를 모두 선택하고 차이를 계산할 수 있습니다.

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

생성된 Dataset는 이제 훈련 또는 추론 목적으로 tf.keras로 직접 전달할 수 있습니다.

참고 문헌

  • 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