자습서: Azure Machine Learning에서 데이터 업로드, 액세스 및 탐색

적용 대상: Python SDK azure-ai-ml v2(현재)

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 클라우드 스토리지에 데이터 업로드
  • Azure Machine Learning 데이터 자산 만들기
  • 대화형 개발을 위해 Notebook의 데이터에 액세스합니다.
  • 새로운 버전의 데이터 자산 만들기

Machine Learning 프로젝트의 시작에는 일반적으로 EDA(예비 데이터 분석), 데이터 전처리(정리, 기능 엔지니어링), 가설 유효성 검사를 위한 Machine Learning 모델 프로토타입 빌드가 포함됩니다. 이 프로토타입 제작 프로젝트 단계는 매우 상호 작용적입니다. Python 대화형 콘솔을 사용하여 IDE 또는 Jupyter Notebook에서 개발하는 데 적합합니다. 이 자습서에서는 이러한 아이디어를 설명합니다.

이 동영상에서는 자습서의 단계를 따를 수 있도록 Azure Machine Learning 스튜디오를 시작하는 방법을 보여 줍니다. 동영상에서는 Notebook을 만들고, Notebook을 복제하고, 컴퓨팅 인스턴스를 만들고, 자습서에 필요한 데이터를 다운로드하는 방법을 보여 줍니다. 해당 단계는 다음 섹션에서도 설명됩니다.

필수 조건

  1. Azure Machine Learning을 사용하려면 먼저 작업 영역이 필요합니다. 작업 영역이 없으면 시작하는 데 필요한 리소스 만들기를 완료하여 작업 영역을 만들고 사용 방법에 대해 자세히 알아봅니다.

  2. 스튜디오로그인하고 아직 열려 있지 않은 경우 작업 영역을 선택합니다.

  3. 작업 영역에서 Notebook을 열거나 만듭니다.

    • 코드를 셀에 복사하여 붙여넣으려면 새 전자 필기장을 만드세요.
    • 또는 스튜디오의 샘플 섹션에서 tutorials/get-started-notebooks/explore-data.ipynb를 엽니다. 그런 다음 복제를 선택하여 Notebook을 파일에 추가합니다. (샘플을 찾을 수 있는 위치를 확인합니다.)

커널 설정

  1. 아직 컴퓨팅 인스턴스가 없는 경우 열린 Notebook 위 상단 표시줄에서 컴퓨팅 인스턴스를 만듭니다.

    Screenshot shows how to create a compute instance.

  2. 컴퓨팅 인스턴스가 중지된 경우 컴퓨팅 시작을 선택하고 실행될 때까지 기다립니다.

    Screenshot shows how to start compute if it is stopped.

  3. 오른쪽 위에 있는 커널이 Python 3.10 - SDK v2인지 확인합니다. 그렇지 않은 경우 드롭다운을 사용하여 이 커널을 선택합니다.

    Screenshot shows how to set the kernel.

  4. 인증이 필요하다는 배너가 표시되면 인증을 선택합니다.

Important

이 자습서의 나머지 부분에는 자습서 Notebook의 셀이 포함되어 있습니다. 새 Notebook을 복사/붙여넣거나, 복제한 경우 지금 Notebook으로 전환합니다.

이 자습서에 사용된 데이터 다운로드

데이터 수집의 경우 Azure Data Explorer는 이러한 형식의 원시 데이터를 처리합니다. 이 자습서에서는 CSV 형식 신용 카드 클라이언트 데이터 샘플을 사용합니다. Azure Machine Learning 리소스에서 진행 단계를 확인합니다. 해당 리소스에서 이 Notebook이 있는 폴더 바로 아래에 제안된 이름인 data를 사용하여 로컬 폴더를 만들 예정입니다.

참고 항목

이 자습서는 Azure Machine Learning 리소스 폴더 위치에 있는 데이터에 따라 달라집니다. 이 자습서에서 '로컬'은 해당 Azure Machine Learning 리소스의 폴더 위치를 의미합니다.

  1. 다음 이미지에 표시된 것처럼 세 개의 점 아래에 있는 터미널 열기를 선택합니다.

    Screenshot shows open terminal tool in notebook toolbar.

  2. 터미널 창이 새 탭에서 열립니다.

  3. 이 Notebook이 있는 동일한 폴더로 cd했는지 확인합니다. 예를 들어, Notebooks가 get-started-notebooks라는 폴더에 있는 경우:

    cd get-started-notebooks    #  modify this to the path where your notebook is located
    
  4. 컴퓨팅 인스턴스에 데이터를 복사하려면 터미널 창에 다음 명령을 입력합니다.

    mkdir data
    cd data                     # the sub-folder where you'll store the data
    wget https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv
    
  5. 이제 터미널 창을 닫을 수 있습니다.

UCI Machine Learning 리포지토리에서 이 데이터에 대해 자세히 알아봅니다.

작업 영역에 대한 핸들 만들기

코드를 살펴보기 전에 작업 영역을 참조할 수 있는 방법이 필요합니다. 작업 영역 핸들에 대해 ml_client를 만듭니다. 그런 다음 ml_client를 사용하여 리소스와 작업을 관리하게 됩니다.

다음 셀에 구독 ID, 리소스 그룹 이름 및 작업 영역 이름을 입력합니다. 이러한 값을 찾으려면 다음을 수행합니다.

  1. 오른쪽 위 Azure Machine Learning 스튜디오 도구 모음에서 작업 영역 이름을 선택합니다.
  2. 작업 영역, 리소스 그룹 및 구독 ID의 값을 코드에 복사합니다.
  3. 하나의 값을 복사하고 해당 영역을 닫고 붙여넣은 후 다음 값으로 돌아와야 합니다.
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

# authenticate
credential = DefaultAzureCredential()

# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id="<SUBSCRIPTION_ID>",
    resource_group_name="<RESOURCE_GROUP>",
    workspace_name="<AML_WORKSPACE_NAME>",
)

참고 항목

MLClient를 만들면 작업 영역에 연결되지 않습니다. 클라이언트 초기화는 지연되어 처음 호출이 필요할 때까지 기다립니다(이는 다음 코드 셀에서 발생합니다).

클라우드 스토리지에 데이터 업로드

Azure Machine Learning은 클라우드의 스토리지 위치를 가리키는 URI(Uniform Resource Identifier)를 사용합니다. URI를 사용하면 Notebooks 및 작업의 데이터에 쉽게 액세스할 수 있습니다. 데이터 URI 형식은 웹 페이지에 액세스하기 위해 웹 브라우저에서 사용하는 웹 URL과 유사합니다. 예시:

  • 공용 https 서버의 데이터에 액세스: https://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
  • Azure Data Lake Gen 2에서 데이터에 액세스: abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>

Azure Machine Learning 데이터 자산은 웹 브라우저 책갈피(즐겨찾기)와 비슷합니다. 가장 자주 사용하는 데이터를 가리키는 긴 스토리지 경로(URI)를 기억하는 대신 데이터 자산을 만든 다음 식별 이름으로 해당 자산에 액세스할 수 있습니다.

데이터 자산 만들기는 메타데이터 복사본과 함께 데이터 원본 위치에 대한 참조도 만듭니다. 데이터가 기존 위치에 남아 있기 때문에 추가 스토리지 비용이 발생하지 않으며 데이터 원본 무결성이 위험하지 않습니다. Azure Machine Learning 데이터 저장소, Azure Storage, 공용 URL 및 로컬 파일에서 데이터 자산을 만들 수 있습니다.

소규모 데이터 업로드의 경우 Azure Machine Learning 데이터 자산 만들기는 로컬 컴퓨터 리소스에서 클라우드 스토리지로의 데이터 업로드에 적합합니다. 이 방식을 사용하면 추가 도구나 유틸리티가 필요하지 않습니다. 그러나 더 큰 크기의 데이터 업로드에는 전용 도구나 유틸리티(예: azcopy)가 필요할 수 있습니다. azcopy 명령줄 도구는 Azure Storage 간에 데이터를 이동합니다. azcopy에 대해 여기에서 자세히 알아봅니다.

다음 Notebook 셀은 데이터 자산을 만듭니다. 코드 샘플은 원시 데이터 파일을 지정된 클라우드 스토리지 리소스에 업로드합니다.

데이터 자산을 만들 때마다 고유한 버전이 필요합니다. 버전이 이미 존재하는 경우 오류가 발생합니다. 이 코드에서는 데이터의 첫 번째 읽기에 "initial"을 사용하고 있습니다. 해당 버전이 이미 존재하는 경우 다시 만들기를 건너뜁니다.

version 매개 변수를 생략할 수도 있으며, 1부터 시작하여 증가하는 버전 번호가 자동으로 생성됩니다.

이 자습서에서는 첫 번째 버전으로 "initial"이라는 이름을 사용합니다. 프로덕션 기계 학습 파이프라인 만들기 자습서에서도 이 버전의 데이터를 사용하므로 여기서는 해당 자습서에서 다시 볼 수 있는 값을 사용합니다.

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

# update the 'my_path' variable to match the location of where you downloaded the data on your
# local filesystem

my_path = "./data/default_of_credit_card_clients.csv"
# set the version number of the data asset
v1 = "initial"

my_data = Data(
    name="credit-card",
    version=v1,
    description="Credit card data",
    path=my_path,
    type=AssetTypes.URI_FILE,
)

## create data asset if it doesn't already exist:
try:
    data_asset = ml_client.data.get(name="credit-card", version=v1)
    print(
        f"Data asset already exists. Name: {my_data.name}, version: {my_data.version}"
    )
except:
    ml_client.data.create_or_update(my_data)
    print(f"Data asset created. Name: {my_data.name}, version: {my_data.version}")

왼쪽의 데이터를 선택하면 업로드된 데이터를 볼 수 있습니다. 데이터가 업로드되고 데이터 자산이 만들어지는 것을 볼 수 있습니다.

Screenshot shows the data in studio.

이 데이터의 이름은 신용 카드이며, 데이터 자산 탭의 이름 항목에서 확인할 수 있습니다. 이 데이터는 workspaceblobstore라는 작업 영역의 기본 데이터 저장소에 업로드되었으며 데이터 원본 열에 표시됩니다.

Azure Machine Learning 데이터 저장소는 Azure의 ‘기존’ 스토리지 계정에 대한 ‘참조’입니다. 데이터 저장소는 다음과 같은 이점을 제공합니다.

  1. 다양한 스토리지 형식(Blob/Files/Azure Data Lake Storage) 및 인증 방법과 상호 작용하는 일반적이고 사용하기 쉬운 API입니다.
  2. 팀으로 작업할 때 유용한 데이터 저장소를 더 쉽게 발견할 수 있는 방법입니다.
  3. 스크립트에서 자격 증명 기반 데이터 액세스(서비스 주체/SAS/키)에 대한 연결 정보를 숨기는 방법입니다.

Notebook의 데이터에 액세스

Pandas는 URI를 직접 지원합니다. 이 예에서는 Azure Machine Learning 데이터 저장소에서 CSV 파일을 읽는 방법을 보여 줍니다.

import pandas as pd

df = pd.read_csv("azureml://subscriptions/<subid>/resourcegroups/<rgname>/workspaces/<workspace_name>/datastores/<datastore_name>/paths/<folder>/<filename>.csv")

그러나 앞서 언급한 것처럼 이러한 URI를 기억하는 것이 어려워질 수 있습니다. 또한 pd.read_csv 명령의 모든 <하위 문자열> 값을 리소스의 실제 값으로 수동으로 대체해야 합니다.

자주 액세스하는 데이터에 대한 데이터 자산을 만들고 싶을 것입니다. Pandas에서 CSV 파일에 액세스하는 더 쉬운 방법은 다음과 같습니다.

Important

Notebook 셀에서 다음 코드를 실행하여 Jupyter 커널에 azureml-fsspec Python 라이브러리를 설치합니다.

%pip install -U azureml-fsspec
import pandas as pd

# get a handle of the data asset and print the URI
data_asset = ml_client.data.get(name="credit-card", version=v1)
print(f"Data asset URI: {data_asset.path}")

# read into pandas - note that you will see 2 headers in your data frame - that is ok, for now

df = pd.read_csv(data_asset.path)
df.head()

Notebook의 데이터 액세스에 대해 자세히 알아보려면 대화형 개발 중에 Azure 클라우드 스토리지에서 데이터에 액세스를 참조하세요.

데이터 자산의 새 버전 만들기

기계 학습 모델을 학습하는 데 적합하도록 데이터를 약간 정리해야 한다는 것을 눈치챘을 것입니다. 여기에는:

  • 두 개의 헤더
  • 클라이언트 ID 열; Machine Learning에서는 이 기능을 사용하지 않습니다.
  • 응답 변수 이름의 공백

또한 CSV 형식과 비교할 때 Parquet 파일 형식은 이 데이터를 저장하는 더 나은 방법이 됩니다. Parquet는 압축을 제공하고 스키마를 유지합니다. 따라서 데이터를 정리하고 Parquet에 저장하려면 다음을 사용합니다.

# read in data again, this time using the 2nd row as the header
df = pd.read_csv(data_asset.path, header=1)
# rename column
df.rename(columns={"default payment next month": "default"}, inplace=True)
# remove ID column
df.drop("ID", axis=1, inplace=True)

# write file to filesystem
df.to_parquet("./data/cleaned-credit-card.parquet")

이 표는 이전 단계에서 다운로드한 원본 default_of_credit_card_clients.csv 파일 .CSV 파일의 데이터 구조를 보여 줍니다. 업로드된 데이터에는 다음과 같이 23개의 설명 변수와 1개의 응답 변수가 포함되어 있습니다.

열 이름 변수 유형 설명
X1 설명 지정된 크레딧 금액(NT 달러): 여기에는 개인 소비자 크레딧과 가족(보조) 크레딧이 모두 포함됩니다.
X2 설명 성별(1 = 남성, 2 = 여성).
X3 설명 교육(1 = 대학원, 2 = 대학교, 3 = 고등학교, 4 = 기타).
X4 설명 결혼 상태(1 = 기혼, 2 = 미혼, 3 = 기타).
X5 설명 나이(년).
X6-X11 설명 과거 결제 내역. 지난 월별 지급 내역(2005년 4월부터 9월까지)을 추적했습니다. -1 = 정식 결제함; 1 = 한 달 동안 결제가 지연됨; 2 = 2개월간 결제 지연; . . .; 8 = 8개월간 결제 지연; 9 = 9개월 이상 결제가 지연됨.
X12-17 설명 2005년 4월부터 9월까지의 청구서 금액(NT달러)입니다.
X18-23 설명 2005년 4월부터 9월까지의 이전 결제(NT달러)입니다.
Y 응답 기본 결제(예 = 1, 아니요 = 0)

그런 다음 데이터 자산의 새 버전을 만듭니다(데이터는 자동으로 클라우드 스토리지에 업로드됩니다). 이 버전의 경우 시간 값을 추가하여 이 코드가 실행될 때마다 다른 버전 번호가 만들어집니다.

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
import time

# Next, create a new *version* of the data asset (the data is automatically uploaded to cloud storage):
v2 = "cleaned" + time.strftime("%Y.%m.%d.%H%M%S", time.gmtime())
my_path = "./data/cleaned-credit-card.parquet"

# Define the data asset, and use tags to make it clear the asset can be used in training

my_data = Data(
    name="credit-card",
    version=v2,
    description="Default of credit card clients data.",
    tags={"training_data": "true", "format": "parquet"},
    path=my_path,
    type=AssetTypes.URI_FILE,
)

## create the data asset

my_data = ml_client.data.create_or_update(my_data)

print(f"Data asset created. Name: {my_data.name}, version: {my_data.version}")

정리된 parquet 파일은 최신 버전의 데이터 원본입니다. 이 코드는 CSV 버전 결과 집합을 먼저 표시한 다음 Parquet 버전을 표시합니다.

import pandas as pd

# get a handle of the data asset and print the URI
data_asset_v1 = ml_client.data.get(name="credit-card", version=v1)
data_asset_v2 = ml_client.data.get(name="credit-card", version=v2)

# print the v1 data
print(f"V1 Data asset URI: {data_asset_v1.path}")
v1df = pd.read_csv(data_asset_v1.path)
print(v1df.head(5))

# print the v2 data
print(
    "_____________________________________________________________________________________________________________\n"
)
print(f"V2 Data asset URI: {data_asset_v2.path}")
v2df = pd.read_parquet(data_asset_v2.path)
print(v2df.head(5))

리소스 정리

지금 다른 자습서를 계속 진행하려면 다음 단계로 건너뛰세요.

컴퓨팅 인스턴스 중지

지금 사용하지 않으려면 컴퓨팅 인스턴스를 중지합니다.

  1. 스튜디오의 왼쪽 탐색 영역에서 컴퓨팅을 선택합니다.
  2. 맨 위 탭에서 컴퓨팅 인스턴스를 선택합니다.
  3. 목록에서 컴퓨팅 인스턴스를 선택합니다.
  4. 맨 위의 도구 모음에서 중지를 선택합니다.

모든 리소스 삭제

Important

사용자가 만든 리소스는 다른 Azure Machine Learning 자습서 및 방법 문서의 필수 구성 요소로 사용할 수 있습니다.

사용자가 만든 리소스를 사용하지 않으려면 요금이 발생하지 않도록 해당 리소스를 삭제합니다.

  1. Azure Portal 맨 왼쪽에서 리소스 그룹을 선택합니다.

  2. 목록에서 만든 리소스 그룹을 선택합니다.

  3. 리소스 그룹 삭제를 선택합니다.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. 리소스 그룹 이름을 입력합니다. 그런 다음 삭제를 선택합니다.

다음 단계

데이터 자산에 대한 자세한 내용은 데이터 자산 만들기를 참조하세요.

데이터 저장소에 대해 자세히 알아보려면 데이터 저장소 만들기를 참조하세요.

학습 스크립트를 개발하는 방법을 알아보려면 자습서를 계속 진행합니다.