다음을 통해 공유


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

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

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

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

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

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

필수 조건

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

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

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

    • 코드를 복사하여 셀에 붙여 넣으려면 새 Notebook을 만듭니다.
    • 또는 스튜디오의 샘플 섹션에서 tutorials/get-started-notebooks/explore-data.ipynb를 엽니다. 그런 다음 복제를 선택하여 Notebook을 파일에 추가합니다. 샘플 Notebook을 찾으려면 샘플 Notebook에서 학습을 참조 하세요.

커널을 설정하고 VS Code(Visual Studio Code)에서 엽니다.

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

    컴퓨팅 인스턴스를 만드는 방법을 보여 주는 스크린샷.

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

    스크린샷은 중지된 컴퓨팅 인스턴스를 시작하는 방법을 보여줍니다.

  3. 컴퓨팅 인스턴스가 실행될 때까지 기다립니다. 그런 다음 오른쪽 Python 3.10 - SDK v2위에 있는 커널이 .인지 확인합니다. 그렇지 않은 경우 드롭다운 목록을 사용하여 이 커널을 선택합니다.

    커널 설정 방법을 보여 주는 스크린샷.

    이 커널이 표시되지 않으면 컴퓨팅 인스턴스가 실행 중인지 확인합니다. 이 경우 전자 필기장 오른쪽 위에 있는 새로 고침 단추를 선택합니다.

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

  5. 여기서 Notebook을 실행하거나 Azure Machine Learning 리소스의 기능을 갖춘 전체 IDE(통합 개발 환경)를 위해 VS Code에서 열 수 있습니다. VS Code에서 열기를 선택한 다음 웹 또는 데스크톱 옵션을 선택합니다. 이러한 방식으로 시작하면 VS Code가 컴퓨팅 인스턴스, 커널 및 작업 영역 파일 시스템에 연결됩니다.

    VS Code에서 Notebook을 여는 방법을 보여주는 스크린샷

Important

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

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

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

참고 항목

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

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

    Notebook 도구 모음에 열려 있는 터미널 도구를 보여 주는 스크린샷.

  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. 이제 터미널 창을 닫을 수 있습니다.

UC Irvine 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}")

업로드된 데이터를 검사하려면 왼쪽에서 데이터를 선택합니다. 데이터가 업로드되고 다음과 같은 데이터 자산이 만들어집니다.

스크린샷은 스튜디오의 데이터를 보여 줍니다.

이 데이터의 이름은 신용 카드이며, 데이터 자산 탭의 이름 항목에서 확인할 수 있습니다.

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

  1. 다양한 스토리지 유형

    • Azure Data Lake Storage
    • Blob
    • Files

    및 인증 방법과 상호 작용하는 일반적이고 사용하기 쉬운 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. 개요 페이지에서 리소스 그룹 삭제를 선택합니다.

    Azure Portal에서 리소스 그룹을 삭제하기 위해 선택한 항목의 스크린샷

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

다음 단계

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

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

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