TensorFlow.org'da görüntüleyin | Google Colab'da çalıştırın | Kaynağı GitHub'da görüntüleyin | Not defterini indir |
genel bakış
Bu öğretici şov nasıl oluşturmak için tf.data.Dataset
yaratılmış, böylece PostgreSQL veri sunucusundan Dataset
geçirilen olabilir tf.keras
eğitim veya çıkarsama amaçlı.
Bir SQL veritabanı, veri bilimcisi için önemli bir veri kaynağıdır. En popüler açık kaynak SQL veritabanı biri olarak, PostgreSQL yaygın yönüyle critial ve işlem verileri depolamak için işletmelerde kullanılır. Oluşturma Dataset
doğrudan PostgreSQL veri sunucusundan ve pas Dataset
için tf.keras
büyük ölçüde makine öğrenme modellerini oluşturmak odaklanmak veri boru hattı ve yardım veri bilimcisi basitleştirmek olabilir, eğitim veya çıkarım için.
Kurulum ve kullanım
Gerekli tensorflow-io paketlerini kurun ve çalışma zamanını yeniden başlatın
try:
%tensorflow_version 2.x
except Exception:
pass
!pip install -q tensorflow-io
PostgreSQL'i kurun ve kurun (isteğe bağlı)
Google Colab üzerinde kullanımın demosunu yapmak için PostgreSQL sunucusunu kuracaksınız. Parola ve boş bir veritabanı da gereklidir.
Bu not defterini Google Colab üzerinde çalıştırmıyorsanız veya mevcut bir veritabanını kullanmayı tercih ediyorsanız, lütfen aşağıdaki kurulumu atlayın ve sonraki bölüme geçin.
# 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;'
Preconfiguring packages ... Selecting previously unselected package libpq5:amd64. (Reading database ... 254633 files and directories currently installed.) Preparing to unpack .../0-libpq5_10.15-0ubuntu0.18.04.1_amd64.deb ... Unpacking libpq5:amd64 (10.15-0ubuntu0.18.04.1) ... Selecting previously unselected package postgresql-client-common. Preparing to unpack .../1-postgresql-client-common_190ubuntu0.1_all.deb ... Unpacking postgresql-client-common (190ubuntu0.1) ... Selecting previously unselected package postgresql-client-10. Preparing to unpack .../2-postgresql-client-10_10.15-0ubuntu0.18.04.1_amd64.deb ... Unpacking postgresql-client-10 (10.15-0ubuntu0.18.04.1) ... Selecting previously unselected package ssl-cert. Preparing to unpack .../3-ssl-cert_1.0.39_all.deb ... Unpacking ssl-cert (1.0.39) ... Selecting previously unselected package postgresql-common. Preparing to unpack .../4-postgresql-common_190ubuntu0.1_all.deb ... Adding 'diversion of /usr/bin/pg_config to /usr/bin/pg_config.libpq-dev by postgresql-common' Unpacking postgresql-common (190ubuntu0.1) ... Selecting previously unselected package postgresql-10. Preparing to unpack .../5-postgresql-10_10.15-0ubuntu0.18.04.1_amd64.deb ... Unpacking postgresql-10 (10.15-0ubuntu0.18.04.1) ... Selecting previously unselected package postgresql. Preparing to unpack .../6-postgresql_10+190ubuntu0.1_all.deb ... Unpacking postgresql (10+190ubuntu0.1) ... Selecting previously unselected package sysstat. Preparing to unpack .../7-sysstat_11.6.1-1ubuntu0.1_amd64.deb ... Unpacking sysstat (11.6.1-1ubuntu0.1) ... Setting up sysstat (11.6.1-1ubuntu0.1) ... Creating config file /etc/default/sysstat with new version update-alternatives: using /usr/bin/sar.sysstat to provide /usr/bin/sar (sar) in auto mode Created symlink /etc/systemd/system/multi-user.target.wants/sysstat.service → /lib/systemd/system/sysstat.service. Setting up ssl-cert (1.0.39) ... Setting up libpq5:amd64 (10.15-0ubuntu0.18.04.1) ... Setting up postgresql-client-common (190ubuntu0.1) ... Setting up postgresql-common (190ubuntu0.1) ... Adding user postgres to group ssl-cert Creating config file /etc/postgresql-common/createcluster.conf with new version Building PostgreSQL dictionaries from installed myspell/hunspell packages... Removing obsolete dictionary files: Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /lib/systemd/system/postgresql.service. Setting up postgresql-client-10 (10.15-0ubuntu0.18.04.1) ... update-alternatives: using /usr/share/postgresql/10/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode Setting up postgresql-10 (10.15-0ubuntu0.18.04.1) ... Creating new PostgreSQL cluster 10/main ... /usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5 The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "C.UTF-8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /var/lib/postgresql/10/main ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting default timezone ... Etc/UTC selecting dynamic shared memory implementation ... posix creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok Success. You can now start the database server using: /usr/lib/postgresql/10/bin/pg_ctl -D /var/lib/postgresql/10/main -l logfile start Ver Cluster Port Status Owner Data directory Log file 10 main 5432 down postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log update-alternatives: using /usr/share/postgresql/10/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode Setting up postgresql (10+190ubuntu0.1) ... Processing triggers for man-db (2.8.3-2ubuntu0.1) ... Processing triggers for ureadahead (0.100.0-21) ... Processing triggers for libc-bin (2.27-3ubuntu1.2) ... Processing triggers for systemd (237-3ubuntu10.38) ... ALTER ROLE NOTICE: database "tfio_demo" does not exist, skipping DROP DATABASE CREATE DATABASE
Gerekli çevresel değişkenleri ayarlayın
Aşağıdaki çevresel değişkenler, son bölümdeki PostgreSQL kurulumuna dayanmaktadır. Farklı bir kurulumunuz varsa veya mevcut bir veritabanı kullanıyorsanız, bunlar uygun şekilde değiştirilmelidir:
%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
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
Verileri PostgreSQL sunucusunda hazırlayın
Demo amacıyla bu öğretici bir veritabanı oluşturacak ve veritabanını bazı verilerle dolduracaktır. Bu eğitimde kullanılan veri dan Hava Kalitesi Veri Kümesi edinilebilir, UCI Machine Learning Repository .
Aşağıda, Hava Kalitesi Veri Kümesinin bir alt kümesinin gizli bir önizlemesi bulunmaktadır:
Tarih|Saat|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)|T|RH|AH| ----|----|------|-----------|--------|--------|--- ----------|----|----------|-------|------------|-- ---------|-|--|--| 10/03/2004|18.00.00|2,6|1360|150|11,9|1046|166|1056|113|1692|1268|13,6|48,9|0,7578| 10/03/2004|19.00.00|2|1292|112|9,4|955|103|1174|92|1559|972|13,3|47,7|0,7255| 10/03/2004|20.00.00|2,2|1402|88|9,0|939|131|1140|114|1555|1074|11,9|54,0|0,7502| 10/03/2004|21.00.00|2,2|1376|80|9,2|948|172|1092|122|1584|1203|11,0|60,0|0,7867| 10/03/2004|22.00.00|1,6|1272|51|6,5|836|131|1205|116|1490|1110|11,2|59,6|0,7888|
Hava Kalitesi Veri Kümesi ve UCI Machine Learning Repository hakkında daha fazla bilgi de availabel vardır Başvurular bölümünde.
Veri hazırlama basitleştirmeye yardımcı olmak için Hava Kalitesi Veri Kümesinin bir sql sürümü hazırlanmıştır ve olarak mevcuttur AirQualityUCI.sql .
Tabloyu oluşturmak için ifade şudur:
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
);
Veritabanında tablo oluşturmak ve verileri doldurmak için tam komutlar şunlardır:
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 sunucusundan Veri Kümesi oluşturun ve bunu TensorFlow'da kullanın
Bir Veri Kümesi PostgreSQL'den sunucusu oluşturun çağıran kadar kolaydır tfio.experimental.IODataset.from_sql
ile query
ve endpoint
argümanlar. query
tablolarda seçme sütunlar için SQL sorgusu ve endpoint
argüman adresi ve veritabanı adıdır:
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)
{'co': TensorSpec(shape=(), dtype=tf.float32, name=None), 'pt08s1': TensorSpec(shape=(), dtype=tf.int32, name=None)}
Eğer çıkışından görebiliyordu gibi dataset.element_spec
yukarıda yarattı unsuru Dataset
tuşları olarak veritabanı tablosu sütun adlarını içeren bir piton dict nesnesidir. Daha fazla işlem uygulamak oldukça uygundur. Örneğin, her iki seçebilir nox
ve no2
alanını Dataset
ve farkı hesaplamak:
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())
NOx - NO2: 53.0 11.0 17.0 50.0 15.0 -7.0 -15.0 -14.0 -15.0 0.0 -13.0 -12.0 -14.0 16.0 62.0 28.0 14.0 3.0 9.0 34.0
Oluşturulan Dataset
geçirilecek hazır tf.keras
şimdi ya eğitim ya da çıkarsama amaçlı doğrudan.
Referanslar
- Dua, D. ve Graff, C. (2019). UCI Machine Learning Deposu [ http://archive.ics.uci.edu/ml ]. Irvine, CA: California Üniversitesi, Bilgi ve Bilgisayar Bilimleri Okulu.
- S. De Vito, E. Massera, M. Piga, L. Martinotto, G. Di Francia, Bir kentsel kirlilik izleme senaryosunda benzen tahmini için elektronik bir burnun saha kalibrasyonu üzerine, Sensörler ve Aktüatörler B: Kimyasal, Cilt 129, Sayı 2, 22 Şubat 2008, Sayfalar 750-757, ISSN 0925-4005