SAP HANA 데이터 프레임을 사용한 데이터 탐색

Objective

After completing this lesson, you will be able to 데이터 처리에 SAP HANA 데이터 프레임 사용

SAP HANA 데이터 프레임을 사용한 데이터 처리

이 섹션에서는 SAP HANA DataFrame을 사용하여 SAP HANA Cloud에서 데이터를 관리하고 조작하는 방법에 대해 설명합니다. SAP HANA Cloud에 사전 로드된 캘리포니아 하우징 데이터세트는 이 개념을 더 자세히 설명하는 예시로 사용됩니다[1].

Python에서 HANA 데이터 프레임 생성

SAP HANA DataFrame은 실제 데이터를 포함하지 않고 SAP HANA에 저장된 데이터를 볼 수 있는 방법을 제공합니다. HANA-ML은 SAP HANA DataFrame을 훈련 및 채점을 위한 입력으로 사용합니다.

SAP HANA DataFrame은 기본 SQL 문을 숨겨 사용자에게 SAP HANA 데이터에 대한 Python 인터페이스를 제공합니다.

SAP HANA DataFrame을 사용하려면 먼저 hana_ml.dataframe.ConnectionContext 클래스(SAP HANA에 연결) [2]에서 오브젝트를 생성한 다음 라이브러리에 제공된 메소드를 사용하여 SAP HANA DataFrame을 생성합니다.

SAP HANA DataFrame은 연결이 열려 있는 동안에만 사용할 수 있으며 연결이 닫히면 액세스할 수 없습니다. 사용 가능한 클래스 및 함수에 대한 전체 문서는 [3]을(를) 참조하십시오.

참조

[1] 캘리포니아 하우징 데이터세트

[2] SAP 클래스 hana_ml.dataframe.ConnectionContext

[3] SAP hana_ml.dataframe

지정된 테이블에서 데이터 선택

ConnectionContext.table() 메소드는 지정된 테이블을 나타내는 DataFrame, 즉 "california_housing" 및 관련 스키마(즉, "ML_DEMO" [1])를 반환합니다. 그런 다음 DataFrame을 백업하는 SQL 쿼리를 표시합니다.

데이터세트를 검사하기 위해 DataFrame의 열 이름과 해당 데이터 유형이 표시됩니다.

Python
12
hdf = conn.table("california_housing", schema="ML_DEMO") print(hdf.select_statement)

출력:

SELECT * FROM "ML_DEMO"."california_housing"

Python
1
print(hdf.columns)

출력:

['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude', 'Target']

Python
1
print(hdf.dtypes())

출력:

[('MedInc', 'DOUBLE', 15, 15, 15, 15, 15, 0), ('HouseAge', 'DOUBLE', 'DOUBLE', 15, 15, 15, 15, 15, 15, 15th), ('AveRooms', 'DOUBLE', 'DOUBLE', 'DOUBLE', 'DOUBLE', 'DOUBLE', 15), ('AveBedr', 'DOUBLE', 'DOUBLE', 'DOUBLE', 15세, ('AveBLE', 'DOUBLE', 'DOUBLE'), ('AveBedrms', 'DOUBLE', '15, 15, 15, itude, ('Population', 'DOUBLE, 'DOBLE', 'DOUBLE'), ('AveBedrms', 'DOUBLE', '15, 15, itude, 0), ('Population', 'DOUBLE', 'DOUBLE'

참조

[1] SAP hana_ml.dataframe - ConnectionContext.table()

주어진 대로 SAP DataFrame의 처음 5개 관찰값이 표시되면 DataFrame.collect() 메소드가 현재 DataFrame을 새로운 Python Pandas DataFrame [1]에 복사합니다.

Python
12
#Only the use of the collect method, transfers data or result sets from SAP HANA to Python hdf.head(5).collect()

출력:

 MedInc가구 연령AveRoomsAveBedrms인구AveOccup위도경도대상
01.2452.02.920.91396.04.6537.80-122.275.00
11.1652.02.430.941349.05.3937.87-122.255.00
27.8552.07.791.05517.02.4137.86-122.245.00
39.3952.07.510.951366.02.7537.85-122.245.00
47.8752.08.281.04947.02.6237.83-122.235.00

참조

[1] SAP 메소드 hana_ml.dataframe - ConnectionContext.table()

데이터 특성 분석

데이터 조작 및 분석은 데이터 과학 분야에서 매우 중요합니다. SAP 클래스 메소드 DataFrame.describe() 는 데이터 특성 또는 열의 다양한 통계가 포함된 DataFrame 을 리턴합니다.

이러한 설명 통계에는 데이터 집합 분포의 중심 경향, 분산 및 모양을 요약하는 통계도 포함됩니다. 이를 통해 의미 있는 방식으로 데이터를 구성하고 표시할 수 있습니다.

예를 들어 숫자 3(아래 표시)으로 레이블이 지정된 행은 'AveBedrms' 열에 대한 통계를 표시합니다. 이 열은 가구당 평균 침실 수를 나타냅니다. 나머지 데이터세트 열로 '20,640' 관찰값이 있음을 알 수 있습니다. NULL 값이 없고 평균값은 '1.09'이지만 최소 '0.33'에서 최대값 '34.06'으로 값을 가져올 수 있습니다. 흥미롭게도 중앙값은 '1.04' [4]입니다. 중앙값은 데이터세트의 중간 값을 나타냅니다.

Python
1
hdf.describe().collect()
 실사고유(Unique)NULL평균Std최소최대중앙값25_percent_cont25_percent_disc50_percent_cont50_percent_disc75_percent_cont75_percent_disc
0MedInc206401292803.871.890.4915.003.532.562.563.533.534.744.74
1가구 연령2064052028.6312.581.0052.0029.0018.0018.0029.0029.0037.0037.00
2AveRooms206401939205.422.470.84141.905.224.444.445.225.226.056.05
3AveBedrms206401423301.090.470.3334.061.041.001.001.041.041.091.09
4인구20640388801425.471132.463.0035682.001166.00787.00787.001166.001166.001725.001725.00
5AveOccup206401884103.0710.380.691243.332.812.422.422.812.813.283.28
6위도20640862035.632.1332.5441.9534.2633.9333.9334.2634.2637.7137.71
7경도206408440-119.562.00-124.35-114.31-118.49-121.80-121.80-118.49-118.49-118.01-118.01
8대상20640384202.0681.150.145.001.791.191.191.791.792.642.64

참조

[1] SAP 메소드 hana_ml.dataframe - DataFrame.describes()

[2] 통계: 중앙값

SAP HANA DataFrame 필터링

지정된 조건과 일치하는 행을 선택할 수 있습니다.

예를 들어 다음 코드는 '모집단'이 '300'보다 큰 행의 하위 세트를 선택합니다. 그러면 처음 5개 행이 표시되어 모든 '모집단' 값이 '300'을 초과하는지 확인합니다.

Python
1
hdf_filter=hdf.filter('"Population">300')
Python
1
print(hdf_filter.select_statement)

출력:

SELECT * FROM (SELECT * FROM "ML_DEMO"."california_housing") AS "DT_258" WHERE "Population">300

Python
1
hdf_filter.head(5).collect()
 MedInc가구 연령AveRoomsAveBedrms인구AveOccup위도경도대상
01.2452.02.920.91396.04.6537.80-122.275.00
11.1652.02.430.941349.05.3937.87-122.255.00
27.8552.07.791.05517.02.4137.86-122.245.00
39.3952.07.510.951366.02.7537.85-122.245.00
47.8752.08.281.04947.02.6237.83-122.235.00

SAP HANA DataFrame을 사용한 시각적 데이터 탐색

설명 통계에는 플롯을 통한 데이터 그래픽 표현도 포함됩니다. 또한 정보를 시각화하고 해석하는 데 도움이 될 수 있습니다.

설명 통계를 사용하여 데이터세트의 주요 속성을 요약하고 공유할 수 있습니다. 따라서 다음을 지원하기 위해 데이터에 대한 심층적인 인사이트를 얻을 수 있습니다.

  • 추가 통계 분석
  • 의사결정 프로세스

HANA 기능 [1]을 사용하여 'Population'이라는 SAP HANA DataFrame 열의 분포 플롯을 시각화할 수 있습니다.

Python
1234567891011
#Exploratory Data Visualizations from hana_ml.visualizers.eda import EDAVisualizer start = time.time() eda = EDAVisualizer(enable_plotly=True) fig, trace, bin_data = eda.distribution_plot(data=hdf, debrief=True, column="Population", bins=60, x_axis_fontsize=13, x_axis_rotation=1, width=600, title="Distribution of feature: Population", height=400) fig.show() end = time.time() print("Time taken to do this by getting the data from the server was: {}s".format(round(end-start, 3)))

출력:

서버에서 데이터를 가져오는 데 걸린 시간: 0.08s

모집단 기능의 분포 플롯입니다.

참조

[1] SAP hana_ml.visualizers.eda - EDAVisualizer.distribution_plot

데이터 집합에 인덱스 추가

데이터 집합을 분리된 하위 집합으로 분할하려면 데이터 집합에 'ID' 열이 있어야 합니다. 나중에 기계 학습 워크플로우 실행을 지원하는 '교육' 및 '테스트' 하위 세트를 파생하기 위해 사용되는 분할 알고리즘 [1]에 의해 필요합니다.

이 열이 아래 그림과 같이 데이터 집합에 포함되어 있는지 확인합니다.

 IDMedInc가구 연령AveRoomsAveBedrms인구AveOccup위도경도대상
011.2452.02.920.91396.04.6537.80-122.275.00
121.1652.02.430.941349.05.3937.87-122.255.00
237.8552.07.791.05517.02.4137.86-122.245.00
349.3952.07.510.951366.02.7537.85-122.245.00
457.8752.08.281.04947.02.6237.83-122.235.00

참조

[1] SAP 알고리즘 hana_ml.algorithms.pal.partition - train_test_val_split