عرض على TensorFlow.org | تشغيل في Google Colab | عرض المصدر على جيثب | تحميل دفتر |
ملخص
وهذا يدل على تعليمي كيفية خلق tf.data.Dataset
من خادم قاعدة بيانات الإنترنت، بحيث خلقت Dataset
يمكن تمريرها إلى tf.keras
لأغراض التدريب أو الاستدلال.
قاعدة بيانات SQL هي مصدر مهم للبيانات لعالم البيانات. باعتبارها واحدة من قاعدة بيانات SQL الأكثر شعبية مفتوحة المصدر، كيو يستخدم على نطاق واسع في المؤسسات لتخزين البيانات critial والمعاملات في جميع المجالات. إنشاء Dataset
من خادم قاعدة بيانات كيو مباشرة وتمرير Dataset
ل tf.keras
للتدريب أو الاستدلال، يمكن تبسيط كبير في خط أنابيب البيانات ومساعدة العلماء بيانات للتركيز على بناء نماذج التعلم الآلي.
الإعداد والاستخدام
قم بتثبيت حزم tensorflow-io المطلوبة ، وأعد تشغيل وقت التشغيل
try:
%tensorflow_version 2.x
except Exception:
pass
!pip install -q tensorflow-io
تثبيت PostgreSQL وإعداده (اختياري)
لتوضيح الاستخدام على 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;'
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
إعداد المتغيرات البيئية الضرورية
تعتمد المتغيرات البيئية التالية على إعداد 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
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) | أكاسيد النيتروجين (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 | 07255 | 10/03/2004 | 20.00.00 | 2،2 | 1402 | 88 | 9،0 | 939 | 131 | 1140 | 114 | 1555 | 1074 | 11،9 | 54،0 | 07502 | 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 |
مزيد من المعلومات حول مجموعة البيانات نوعية الهواء وUCI آلة التعلم مستودع هي availabel في المراجع القسم.
للمساعدة على تبسيط إعداد البيانات، وقد تم إعداد نسخة 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
إنشاء مجموعة بيانات من خادم شبكة الإنترنت هو سهلا كما يدعو tfio.experimental.IODataset.from_sql
مع query
و endpoint
الحجج. في 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)
{'co': TensorSpec(shape=(), dtype=tf.float32, name=None), 'pt08s1': TensorSpec(shape=(), dtype=tf.int32, name=None)}
كما يمكن أن نرى من إخراج dataset.element_spec
أعلاه، فإن عنصر من عناصر خلق Dataset
هو كائن ديكت الثعبان مع أسماء الأعمدة من جدول قاعدة البيانات كمفاتيح. من المريح جدًا تطبيق المزيد من العمليات. على سبيل المثال، يمكنك تحديد كل من nox
و no2
مجال Dataset
، وحساب الفرق:
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
وأنشئت Dataset
على استعداد لتمريرها إلى tf.keras
مباشرة لأي أغراض التدريب أو الاستدلال الآن.
مراجع
- دوا ، د.غراف ، سي (2019). UCI آلة التعلم مستودع [ http://archive.ics.uci.edu/ml ]. إيرفين ، كاليفورنيا: جامعة كاليفورنيا ، كلية المعلومات وعلوم الكمبيوتر.
- S. De Vito، E. Massera، M. Piga، L. Martinotto، G. Di Francia، On Field معايرة للأنف الإلكتروني لتقدير البنزين في سيناريو مراقبة التلوث الحضري ، أجهزة الاستشعار والمحركات ب: المواد الكيميائية ، المجلد 129 ، العدد 2 ، 22 فبراير 2008 ، الصفحات 750-757 ، ISSN 0925-4005