Criar um ativo de dados
Como cientista de dados, você gostaria de se concentrar no treinamento de modelos de machine learning. Embora você precise de acesso aos dados como entrada para um modelo de machine learning, não quer se preocupar com a forma de obter acesso. Para simplificar o acesso aos dados com os quais deseja trabalhar, você poderá usar ativos de dados.
Compreender os ativos de dados
No Azure Machine Learning, os ativos de dados são referências a onde os dados são armazenados, como obter acesso e quaisquer outros metadados relevantes. Você pode criar ativos de dados para obter acesso a dados em armazenamentos de dados, serviços de armazenamento do Azure, URLs públicas ou dados armazenados em seu dispositivo local.
Os benefícios de usar ativos de dados são:
- É possível reutilizar e compartilhar os dados com outros membros da equipe para que não seja necessário lembrar dos locais dos arquivos.
- Você pode acessar diretamente os dados durante o treinamento do modelo (em qualquer tipo de computação compatível) sem se preocupar com cadeias de conexão ou caminhos de dados.
- Você pode criar a versão dos metadados do ativo de dados.
Há três tipos principais de ativos de dados que você pode usar:
- Arquivo URI: aponta para um arquivo específico.
- Pasta URI: aponta para uma pasta.
- MLTable: aponta para uma pasta ou arquivo e inclui um esquema para ler como dados tabulares.
Observação
URI significa Uniform Resource Identifier e quer dizer um local de armazenamento em seu computador local, Blob do Azure ou Data Lake Storage, local https disponível publicamente ou até mesmo um armazenamento de dados anexado.
Quando usar ativos de dados
Os ativos de dados serão mais úteis ao executar tarefas de aprendizado de máquina como trabalhos do Azure Machine Learning. Como um trabalho, você pode executar um script Python que usa entradas e gera saídas. Um ativo de dados pode ser analisado como uma entrada ou saída de um trabalho do Azure Machine Learning.
Vamos dar uma olhada em cada um dos tipos de ativos de dados, como criá-los e como usar o ativo de dados em um trabalho.
Criar um ativo de dados de arquivo URI
Um ativo de dados de arquivo URI aponta para um arquivo específico. O Azure Machine Learning armazena apenas o caminho para o arquivo, o que significa que você pode apontar para qualquer tipo de arquivo. Ao usar o ativo de dados, você especifica como deseja ler os dados, que dependem do tipo de dados ao qual está se conectando.
Os caminhos com suporte que você poderá usar ao criar um ativo de dados de arquivo URI são:
- Local:
./<path>
- Armazenamento de Blobs do Azure:
wasbs://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
- Azure Data Lake Storage (Gen 2):
abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>
- Armazenamento de dados:
azureml://datastores/<datastore_name>/paths/<folder>/<file>
Importante
Quando você cria um ativo de dados e aponta para um arquivo ou pasta armazenado em seu dispositivo local, uma cópia do arquivo ou pasta será carregada no armazenamento de dados padrão workspaceblobstore
. Você pode encontrar o arquivo ou a pasta em LocalUpload
. Ao carregar uma cópia, você ainda poderá acessar os dados do workspace do Azure Machine Learning, mesmo quando o dispositivo local no qual os dados estão armazenados não estiver disponível.
Para criar um ativo de dados de arquivo URI, você poderá usar o seguinte código:
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
my_path = '<supported-path>'
my_data = Data(
path=my_path,
type=AssetTypes.URI_FILE,
description="<description>",
name="<name>",
version="<version>"
)
ml_client.data.create_or_update(my_data)
Ao analisar o ativo de dados do arquivo URI como entrada em um trabalho do Azure Machine Learning, primeiro você precisa ler os dados antes de poder trabalhar com eles.
Imagine que você criou um script Python que deseja executar como um trabalho e definiu o valor do parâmetro de entrada input_data
como o recurso de dados do arquivo URI (que aponta para um arquivo CSV). Você pode ler os dados incluindo o seguinte código em seu script Python:
import argparse
import pandas as pd
parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()
df = pd.read_csv(args.input_data)
print(df.head(10))
Se o recurso de dados do arquivo URI apontar para um tipo diferente de arquivo, você precisa usar o código Python apropriado para ler os dados. Por exemplo, se, em vez de arquivos CSV, você estiver trabalhando com arquivos JSON, você usará pd.read_json()
.
Criar um ativo de dados de pasta URI
Um ativo de dados de pasta URI aponta para uma pasta específica. Ele funciona de forma semelhante a um ativo de dados de arquivo URI e dá suporte aos mesmos caminhos.
Para criar um ativo de dados de pasta URI com o SDK do Python, você poderá usar o seguinte código:
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
my_path = '<supported-path>'
my_data = Data(
path=my_path,
type=AssetTypes.URI_FOLDER,
description="<description>",
name="<name>",
version='<version>'
)
ml_client.data.create_or_update(my_data)
Ao analisar o ativo de dados da pasta do URI como entrada em um trabalho do Azure Machine Learning, primeiro você precisa ler os dados antes de trabalhar com ele.
Imagine que você criou um script Python que deseja executar como um trabalho e definiu o valor do parâmetro de entrada input_data
como o recurso de dados da pasta URI (que aponta para vários arquivos CSV). Talvez pode ler todos os arquivos CSV na pasta e concatená-los, o que poderá fazer incluindo o seguinte código em seu script Python:
import argparse
import glob
import pandas as pd
parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()
data_path = args.input_data
all_files = glob.glob(data_path + "/*.csv")
df = pd.concat((pd.read_csv(f) for f in all_files), sort=False)
Dependendo do tipo de dados com o qual você está trabalhando, o código usado para ler os arquivos pode ser alterado.
Criar um ativo de dados MLTable
Um ativo de dados MLTable permite que você aponte para dados tabulares. Ao criar um ativo de dados MLTable, você especificará a definição de esquema para ler os dados. Como o esquema já está definido e armazenado com o ativo de dados, você não precisa especificar como ler os dados ao usá-los.
Portanto, você deseja usar um ativo de dados MLTable quando o esquema de seus dados for complexo ou for alterado com frequência. Em vez de alterar como ler os dados em cada script que usa os dados, você só precisará alterá-los no próprio ativo de dados.
Ao definir o esquema ao criar um ativo de dados MLTable, você também poderá optar por especificar apenas um subconjunto dos dados.
Para determinados recursos no Azure Machine Learning, como o Machine Learning Automatizado, você precisa usar um ativo de dados MLTable, pois o Azure Machine Learning precisa saber como ler os dados.
Para definir o esquema, você pode incluir um arquivo MLTable na mesma pasta que os dados que você deseja ler. O arquivo MLTable inclui o caminho que aponta para os dados que você deseja ler e como ler os dados:
type: mltable
paths:
- pattern: ./*.txt
transformations:
- read_delimited:
delimiter: ','
encoding: ascii
header: all_files_same_headers
Dica
Saiba mais sobre como criar o arquivo MLTable e quais transformações você pode incluir.
Para criar um ativo de dados MLTable com o SDK do Python, você pode usar o seguinte código:
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
my_path = '<path-including-mltable-file>'
my_data = Data(
path=my_path,
type=AssetTypes.MLTABLE,
description="<description>",
name="<name>",
version='<version>'
)
ml_client.data.create_or_update(my_data)
Ao analisar um ativo de dados MLTable como entrada para um script Python que você deseja executar como um trabalho do Azure Machine Learning, poderá incluir o seguinte código para ler os dados:
import argparse
import mltable
import pandas
parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()
tbl = mltable.load(args.input_data)
df = tbl.to_pandas_dataframe()
print(df.head(10))
Uma abordagem comum é converter os dados tabulares em um quadro de dados do Pandas. No entanto, você também poderá converter os dados em um quadro de dados do Spark se isso atender melhor à sua carga de trabalho.