Membuat himpunan data Azure Machine Learning

BERLAKU UNTUK:SDK Python azureml v1

Dalam artikel ini, Anda mempelajari cara membuat himpunan data Azure Machine Learning untuk mengakses data terhadap eksperimen lokal atau jarak jauh dengan Azure Machine Learning Python SDK. Untuk informasi selengkapnya tentang bagaimana himpunan data pas di alur kerja akses data Azure Pembelajaran Mesin secara keseluruhan, kunjungi artikel Mengakses data dengan aman.

Saat membuat himpunan data, Anda membuat referensi ke lokasi sumber data, bersama dengan salinan metadatanya. Karena data tetap berada di lokasi yang ada, Anda tidak dikenakan biaya penyimpanan tambahan, dan Anda tidak berisiko dengan integritas sumber data Anda. Selain itu, himpunan data dievaluasi dengan malas, yang membantu meningkatkan kecepatan performa alur kerja. Anda dapat membuat himpunan data dari datastore, URL publik, dan Azure Open Datasets. Untuk informasi tentang pengalaman kode rendah, kunjungi Membuat himpunan data Azure Pembelajaran Mesin dengan studio Azure Pembelajaran Mesin.

Dengan himpunan data Azure Machine Learning, Anda dapat:

  • Simpan satu salinan data di penyimpanan Anda, yang dirujuk oleh himpunan data

  • Mengakses data dengan lancar selama pelatihan model tanpa mengkhawatirkan string koneksi atau jalur data. Untuk informasi selengkapnya tentang pelatihan himpunan data, kunjungi Pelajari selengkapnya tentang cara melatih dengan himpunan data

  • Berbagi data dan berkolaborasi dengan pengguna lain

Penting

Item dalam artikel ini yang ditandai sebagai "pratinjau" saat ini dalam pratinjau publik. Versi pratinjau disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Prasyarat

Untuk membuat dan bekerja dengan himpunan data, Anda memerlukan:

Catatan

Beberapa kelas himpunan data memiliki dependensi pada paket azureml-dataprep, yang hanya kompatibel dengan Python 64-bit. Jika Anda mengembangkan di Linux, kelas-kelas ini mengandalkan .NET Core 2.1, dan hanya distribusi tertentu yang mendukungnya. Untuk informasi selengkapnya tentang distro yang didukung, baca kolom .NET Core 2.1 di artikel Instal .NET di Linux .

Penting

Meskipun paket dapat bekerja pada versi distro Linux yang lebih lama, kami tidak menyarankan penggunaan distro yang berada di luar dukungan mainstream. Distro yang berada di luar dukungan mainstream mungkin memiliki kerentanan keamanan, karena mereka tidak menerima pembaruan terbaru. Kami menyarankan agar Anda menggunakan versi terbaru yang didukung dari distro Anda yang kompatibel.

Panduan ukuran komputasi

Saat Anda membuat himpunan data, tinjau daya pemrosesan komputasi dan ukuran data Anda dalam memori. Ukuran data Anda di penyimpanan tidak sama dengan ukuran data di dataframe. Misalnya, data dalam file CSV dapat diperluas hingga 10 kali dalam dataframe, sehingga file CSV 1 GB dapat menjadi 10 GB dalam dataframe.

Data terkompresi dapat diperluas lebih lanjut. Dua puluh GB data yang relatif jarang disimpan dalam format parket terkompresi dapat diperluas hingga ~800 GB dalam memori. Karena file Parquet menyimpan data dalam format kolom, jika Anda hanya memerlukan setengah dari seluruh kolom, maka Anda hanya perlu memuat ~ 400 GB dalam memori.

Untuk informasi selengkapnya, kunjungi Pelajari selengkapnya tentang mengoptimalkan pemrosesan data di Azure Pembelajaran Mesin.

Jenis himpunan data

Ada dua jenis himpunan data, berdasarkan cara pengguna menggunakan himpunan data dalam pelatihan: FileDatasets dan TabularDatasets. Alur kerja pelatihan Azure Pembelajaran Mesin yang melibatkan estimator, AutoML, hyperDrive, dan alur dapat menggunakan kedua jenis tersebut.

FileDataset

FileDataset adalah satu atau beberapa file di penyimpanan data atau URL publik Anda. Jika data Anda sudah dibersihkan, dan siap digunakan dalam eksperimen pelatihan, Anda dapat mengunduh atau memasang file ke komputasi Anda sebagai objek FileDataset.

Kami merekomendasikan FileDatasets untuk alur kerja pembelajaran mesin Anda, karena file sumber dapat dalam format apa pun. Ini memungkinkan berbagai skenario pembelajaran mesin yang lebih luas, termasuk pembelajaran mendalam.

Buat FileDataset dengan Python SDK atau studio Azure Pembelajaran Mesin.

TabularDataset

TabularDataset mengurai file atau daftar file yang disediakan, untuk mewakili data dalam format tabular. Anda kemudian dapat mewujudkan data ke dalam panda atau Spark DataFrame, untuk bekerja dengan pustaka persiapan dan pelatihan data yang familier sambil tetap berada di buku catatan Anda. Anda dapat membuat TabularDataset objek dari file .csv, .tsv, .parquet, .json baris, dan dari hasil kueri SQL.

Dengan TabularDatasets, Anda dapat menentukan stempel waktu dari kolom dalam data, atau dari lokasi tempat data pola jalur disimpan, untuk mengaktifkan ciri rangkaian waktu. Spesifikasi ini memungkinkan pemfilteran yang mudah dan efisien menurut waktu. Misalnya, kunjungi Demo API terkait rangkaian waktu tabular dengan data cuaca NOAA.

Buat TabularDataset dengan Python SDK atau studio Azure Machine Learning.

Catatan

Alur kerja ML otomatis yang dihasilkan melalui studio Azure Machine Learning saat ini hanya mendukung TabularDatasets.

Selain itu, untuk TabularDataset yang dihasilkan dari hasil kueri SQL, T-SQL (misalnya sub kueri 'WITH') atau nama kolom duplikat tidak didukung. Kueri T-SQL yang kompleks dapat menyebabkan masalah performa. Nama kolom duplikat dalam himpunan data dapat menyebabkan masalah ambiguitas.

Mengakses himpunan data dalam jaringan virtual

Jika ruang kerja Anda terletak di jaringan virtual, Anda harus mengonfigurasi himpunan data untuk melewati validasi. Untuk informasi selengkapnya tentang cara menggunakan datastore dan himpunan data di jaringan virtual, kunjungi Mengamankan ruang kerja dan sumber daya terkait.

Membuat himpunan data dari datastore

Untuk membuat data dapat diakses oleh Azure Pembelajaran Mesin, Anda harus membuat himpunan data dari jalur di URL web atau datastore Azure Pembelajaran Mesin.

Tip

Anda dapat membuat himpunan data langsung dari url penyimpanan dengan akses data berbasis identitas. Untuk informasi selengkapnya, kunjungi Koneksi ke penyimpanan dengan akses data berbasis identitas.

Untuk membuat himpunan data dari datastore dengan Python SDK:

  1. Pastikan Anda memiliki akses contributor atau owner ke layanan penyimpanan utama dari datastore Azure Machine Learning Anda yang terdaftar. Periksa izin akun penyimpanan Anda di portal Azure.

  2. Buat himpunan data dengan mereferensikan jalur di datastore. Anda dapat membuat himpunan data dari beberapa jalur di beberapa datastore. Tidak ada batasan keras pada jumlah file atau ukuran data tempat Anda dapat membuat himpunan data.

Catatan

Untuk setiap jalur data, beberapa permintaan akan dikirim ke layanan penyimpanan untuk memeriksa apakah jalur tersebut mengarah ke file atau folder. Overhead ini dapat menyebabkan penurunan performa atau kegagalan. Himpunan data yang mereferensikan satu folder dengan 1000 file di dalamnya dianggap mereferensikan satu jalur data. Untuk performa optimal, sebaiknya buat himpunan data yang mereferensikan kurang dari 100 jalur di penyimpanan data.

Membuat FileDataset

from_files() Gunakan metode pada FileDatasetFactory kelas untuk memuat file dalam format apa pun, dan untuk membuat FileDataset yang tidak terdaftar.

Jika penyimpanan Anda berada di belakang jaringan virtual atau firewall, atur parameter validate=False dalam from_files() metode . Tindakan ini melewati langkah validasi awal, dan memastikan bahwa Anda dapat membuat himpunan data dari file aman tersebut. Untuk informasi selengkapnya, kunjungi menggunakan datastore dan himpunan data dalam jaringan virtual.

from azureml.core import Workspace, Datastore, Dataset

# create a FileDataset recursively pointing to files in 'animals' folder and its subfolder
datastore_paths = [(datastore, 'animals')]
animal_ds = Dataset.File.from_files(path=datastore_paths)

# create a FileDataset from image and label files behind public web urls
web_paths = ['https://azureopendatastorage.blob.core.windows.net/mnist/train-images-idx3-ubyte.gz',
             'https://azureopendatastorage.blob.core.windows.net/mnist/train-labels-idx1-ubyte.gz']
mnist_ds = Dataset.File.from_files(path=web_paths)

Untuk mengunggah semua file dari direktori lokal, buat FileDataset dalam satu metode dengan upload_directory(). Metode ini mengunggah data ke penyimpanan dasar Anda, dan akibatnya Anda dikenakan biaya penyimpanan.

from azureml.core import Workspace, Datastore, Dataset
from azureml.data.datapath import DataPath

ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
ds = Dataset.File.upload_directory(src_dir='<path to you data>',
           target=DataPath(datastore,  '<path on the datastore>'),
           show_progress=True)

Untuk menggunakan kembali dan berbagi himpunan data di seluruh eksperimen dalam ruang kerja Anda, daftarkan himpunan data Anda.

Membuat TabularDataset

Gunakan metode from_delimited_files() pada kelas TabularDatasetFactory untuk membaca file dalam format .csv atau .tsv, dan untuk membuat TabularDataset yang tidak terdaftar. Untuk membaca dalam file dari .parquet format, gunakan from_parquet_files() metode . Jika Anda membaca dari beberapa file, hasilnya dikumpulkan ke dalam satu representasi tabular.

Untuk informasi tentang format file yang didukung, kunjungi dokumentasi referensi TabularDatasetFactory, dan informasi tentang sintaksis dan pola desain seperti dukungan multibaris.

Jika penyimpanan Anda berada di balik jaringan virtual atau firewall, atur parameter validate=False dalam metode from_delimited_files() Anda. Tindakan ini melewati langkah validasi awal, dan memastikan bahwa Anda dapat membuat himpunan data dari file aman tersebut. Untuk informasi selengkapnya tentang sumber daya penyimpanan data di belakang jaringan virtual atau firewall, kunjungi penyimpanan data dan himpunan data di jaringan virtual.

Kode ini mendapatkan ruang kerja yang ada dan datastore yang diinginkan berdasarkan nama. Kemudian meneruskan datastore dan lokasi file ke path parameter untuk membuat TabularDataset baru bernama weather_ds:

from azureml.core import Workspace, Datastore, Dataset

datastore_name = 'your datastore name'

# get existing workspace
workspace = Workspace.from_config()
    
# retrieve an existing datastore in the workspace by name
datastore = Datastore.get(workspace, datastore_name)

# create a TabularDataset from 3 file paths in datastore
datastore_paths = [(datastore, 'weather/2018/11.csv'),
                   (datastore, 'weather/2018/12.csv'),
                   (datastore, 'weather/2019/*.csv')]

weather_ds = Dataset.Tabular.from_delimited_files(path=datastore_paths)

Mengatur skema data

Saat Anda membuat TabularDataset, jenis data kolom secara otomatis disimpulkan secara default. Jika jenis yang disimpulkan tidak sesuai dengan harapan Anda, Anda dapat menentukan jenis kolom dengan kode berikut untuk memperbarui himpunan data Anda. Parameter infer_column_type hanya berlaku untuk himpunan data yang dibuat dari file yang dibatasi. Untuk informasi selengkapnya, kunjungi Pelajari selengkapnya tentang jenis data yang didukung.

from azureml.core import Dataset
from azureml.data.dataset_factory import DataType

# create a TabularDataset from a delimited file behind a public web url and convert column "Survived" to boolean
web_path ='https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_path, set_column_types={'Survived': DataType.to_bool()})

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Indeks) PassengerId Selamat Pclass Nama Jenis Kelamin Usia SibSp Kering Tiket Tarif Kabin Memulai
0 1 Salah 3 Braund, Mr. Owen Harris laki-laki 22.0 1 0 A/5 21171 7.2500 S
1 2 Benar 1 Cumings, Mrs John Bradley (Florence Briggs Th... perempuan 38.0 1 0 PC 17599 71.2833 C85 C
2 3 Benar 3 Heikkinen, Miss. Laina perempuan 26.0 0 0 STON/O2. 3101282 7.9250 S

Untuk menggunakan kembali dan berbagi himpunan data di seluruh eksperimen dalam ruang kerja Anda, daftarkan himpunan data Anda.

Memanipulasi data

Setelah membuat dan mendaftarkan himpunan data, Anda dapat memuat himpunan data tersebut ke dalam notebook Anda untuk manipulasi dan eksplorasi data, sebelum pelatihan model. Anda mungkin tidak perlu melakukan manipulasi atau eksplorasi data apa pun. Dalam hal ini, untuk informasi selengkapnya tentang cara menggunakan himpunan data dalam skrip pelatihan Anda untuk pengiriman eksperimen ML, kunjungi Melatih dengan himpunan data.

Memfilter himpunan data (pratinjau)

Kemampuan pemfilteran bergantung pada jenis himpunan data yang Anda miliki.

Penting

Memfilter himpunan data dengan filter() metode pratinjau adalah fitur pratinjau eksperimental , dan dapat berubah kapan saja.

Untuk TabularDatasets, Anda dapat menyimpan atau menghapus kolom dengan metode keep_columns() dan drop_columns().

Untuk memfilter baris menurut nilai kolom tertentu dalam TabularDataset, gunakan metode filter() (pratinjau).

Contoh-contoh ini mengembalikan himpunan data yang tidak terdaftar berdasarkan ekspresi yang ditentukan:

# TabularDataset that only contains records where the age column value is greater than 15
tabular_dataset = tabular_dataset.filter(tabular_dataset['age'] > 15)

# TabularDataset that contains records where the name column value contains 'Bri' and the age column value is greater than 15
tabular_dataset = tabular_dataset.filter((tabular_dataset['name'].contains('Bri')) & (tabular_dataset['age'] > 15))

Di FileDatasets, setiap baris sesuai dengan jalur file, sehingga pemfilteran menurut nilai kolom tidak membantu. Namun, Anda dapat memfilter() baris menurut metadata - misalnya, CreationTime, Size, dll. Contoh-contoh ini mengembalikan himpunan data yang tidak terdaftar berdasarkan ekspresi yang ditentukan:

# FileDataset that only contains files where Size is less than 100000
file_dataset = file_dataset.filter(file_dataset.file_metadata['Size'] < 100000)

# FileDataset that only contains files that were either created prior to Jan 1, 2020 or where 
file_dataset = file_dataset.filter((file_dataset.file_metadata['CreatedTime'] < datetime(2020,1,1)) | (file_dataset.file_metadata['CanSeek'] == False))

Himpunan data berlabel yang dibuat dari proyek pelabelan citra adalah kasus khusus. Himpunan data ini adalah jenis TabularDataset yang terdiri dari file gambar. Untuk himpunan data ini, Anda dapat memfilter() gambar menurut metadata, dan menurut label nilai kolom.image_details

# Dataset that only contains records where the label column value is dog
labeled_dataset = labeled_dataset.filter(labeled_dataset['label'] == 'dog')

# Dataset that only contains records where the label and isCrowd columns are True and where the file size is larger than 100000
labeled_dataset = labeled_dataset.filter((labeled_dataset['label']['isCrowd'] == True) & (labeled_dataset.file_metadata['Size'] > 100000))

Data partisi

Untuk mempartisi himpunan data, sertakan partitions_format parameter saat Anda membuat TabularDataset atau FileDataset.

Saat Anda mempartisi himpunan data, informasi partisi dari setiap jalur file diekstraksi ke dalam kolom berdasarkan format yang ditentukan. Format harus dimulai dari posisi kunci partisi pertama dan berlanjut ke akhir jalur file.

Misalnya, mengingat jalur ../Accounts/2019/01/01/data.jsonl, di mana partisi berdasarkan nama dan waktu departemen, partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl' membuat kolom string 'Departemen' dengan nilai 'Akun', dan kolom tanggalwaktu 'PartitionDate' dengan nilai 2019-01-01.

Jika data Anda sudah memiliki partisi yang sudah ada dan Anda ingin mempertahankan format tersebut partitioned_format , sertakan parameter dalam metode Anda from_files() , untuk membuat FileDataset.

Untuk membuat TabularDataset yang mempertahankan partisi yang ada, sertakan partitioned_format parameter dalam from_parquet_files() atau from_delimited_files() metode .

Contoh ini

  • Membuat FileDataset dari file yang dipartisi
  • Mendapatkan kunci partisi
  • Membuat FileDataset baru yang diindeks

file_dataset = Dataset.File.from_files(data_paths, partition_format = '{userid}/*.wav')
ds.register(name='speech_dataset')

# access partition_keys
indexes = file_dataset.partition_keys # ['userid']

# get all partition key value pairs should return [{'userid': 'user1'}, {'userid': 'user2'}]
partitions = file_dataset.get_partition_key_values()


partitions = file_dataset.get_partition_key_values(['userid'])
# return [{'userid': 'user1'}, {'userid': 'user2'}]

# filter API, this will only download data from user1/ folder
new_file_dataset = file_dataset.filter(ds['userid'] == 'user1').download()

Anda juga dapat membuat struktur partisi baru untuk TabularDatasets dengan metode partition_by().


 dataset = Dataset.get_by_name('test') # indexed by country, state, partition_date

# call partition_by locally
new_dataset = ds.partition_by(name="repartitioned_ds", partition_keys=['country'], target=DataPath(datastore, "repartition"))
partition_keys = new_dataset.partition_keys # ['country']

Jelajahi data

Setelah membungkus data, Anda bisa mendaftarkan himpunan data, lalu memuatnya ke buku catatan Anda untuk eksplorasi data sebelum pelatihan model.

Untuk FileDatasets, Anda dapat menginstal atau mengunduh himpunan data Anda, dan menerapkan pustaka Python yang biasanya Anda gunakan untuk eksplorasi data. Untuk informasi selengkapnya, kunjungi Pelajari selengkapnya tentang pemasangan vs unduhan.

# download the dataset 
dataset.download(target_path='.', overwrite=False) 

# mount dataset to the temp directory at `mounted_path`

import tempfile
mounted_path = tempfile.mkdtemp()
mount_context = dataset.mount(mounted_path)

mount_context.start()

Untuk TabularDatasets, gunakan metode to_pandas_dataframe() untuk menampilkan data Anda dalam dataframe.

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Indeks) PassengerId Selamat Pclass Nama Jenis Kelamin Usia SibSp Kering Tiket Tarif Kabin Memulai
0 1 Salah 3 Braund, Mr. Owen Harris laki-laki 22.0 1 0 A/5 21171 7.2500 S
1 2 Benar 1 Cumings, Mrs John Bradley (Florence Briggs Th... perempuan 38.0 1 0 PC 17599 71.2833 C85 C
2 3 Benar 3 Heikkinen, Miss. Laina perempuan 26.0 0 0 STON/O2. 3101282 7.9250 S

Membuat himpunan data dari dataframe pandas

Untuk membuat TabularDataset dari dataframe pandas dalam memori, gunakan metode .register_pandas_dataframe() Metode ini mendaftarkan TabularDataset ke ruang kerja dan mengunggah data ke penyimpanan yang mendasar. Proses ini menimbulkan biaya penyimpanan.

from azureml.core import Workspace, Datastore, Dataset
import pandas as pd

pandas_df = pd.read_csv('<path to your csv file>')
ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
dataset = Dataset.Tabular.register_pandas_dataframe(pandas_df, datastore, "dataset_from_pandas_df", show_progress=True)

Tip

Buat dan daftarkan TabularDataset dari kerangka data spark atau kerangka data dask dalam memori dengan metode tunggal dengan metode pratinjau publik, register_spark_dataframe() dan register_dask_dataframe(). Metode tersebut adalah fitur pratinjau eksperimental, dan dapat berubah sewaktu-waktu.

Metode ini mengunggah data ke penyimpanan utama Anda, dan akibatnya menimbulkan biaya penyimpanan.

Mendaftarkan himpunan data

Untuk menyelesaikan proses pembuatan, daftarkan himpunan data Anda dengan ruang kerja. register() Gunakan metode untuk mendaftarkan himpunan data dengan ruang kerja Anda, untuk membagikannya dengan orang lain dan menggunakannya kembali di seluruh eksperimen di ruang kerja Anda:

titanic_ds = titanic_ds.register(workspace=workspace,
                                 name='titanic_ds',
                                 description='titanic training data')

Membuat himpunan data menggunakan Azure Resource Manager

Anda dapat menemukan banyak templat di microsoft.machinelearningservices yang dapat digunakan untuk membuat himpunan data.

Untuk informasi tentang templat ini, kunjungi Menggunakan templat Azure Resource Manager untuk membuat ruang kerja untuk Azure Pembelajaran Mesin.

Latih dengan set data

Gunakan himpunan data Anda dalam eksperimen pembelajaran mesin untuk melatih model ML. Pelajari selengkapnya tentang cara berlatih dengan himpunan data.

Himpunan data versi

Anda dapat mendaftarkan himpunan data baru dengan nama yang sama dengan cara membuat versi baru. Versi himpunan data dapat menandai status data Anda, untuk menerapkan versi himpunan data tertentu untuk eksperimen atau reproduksi di masa mendatang. Untuk informasi selengkapnya, kunjungi versi himpunan data.

# create a TabularDataset from Titanic training data
web_paths = ['https://dprepdata.blob.core.windows.net/demo/Titanic.csv',
             'https://dprepdata.blob.core.windows.net/demo/Titanic2.csv']
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_paths)

# create a new version of titanic_ds
titanic_ds = titanic_ds.register(workspace = workspace,
                                 name = 'titanic_ds',
                                 description = 'new titanic training data',
                                 create_new_version = True)

Langkah berikutnya