SAP HANA 데이터 프레임으로 데이터 탐색 및 조작

Objective

After completing this lesson, you will be able to SAP HANA DataFrame을 사용하여 시계열 예측을 위한 데이터 세트의 형식을 지정하고 집계하고 준비하는 방법을 설명합니다.

시계열 예측을 위한 데이터 준비

예측 모델을 구축하기 전에 시계열 모델링 요구사항에 부합하는 방식으로 데이터를 준비하고 형성하는 것이 중요합니다. 여기에는 SAP HANA에 데이터세트 로드, 필드를 시간 인식 형식으로 변환, 기본 집계 수행이 포함됩니다. 모두 SAP HANA DataFrame API를 사용하여 Python에서 SQL 유사 작업을 가능하게 합니다.

시계열 데이터세트 로드

오버나이트 체류 데이터세트는 자유롭게 사용할 수 있으며 아래와 같이 [1]에서 업로드할 수 있습니다. 다음 코드를 사용하여 새로 생성된 Pandas DataFrame의 처음 5개 관찰값을 표시합니다.

오버나이트 숙박 시나리오와 관련된 더 많은 자료는 동일한 폴더 [2]에서 찾을 수 있습니다.

Code Snippet
123
df_data= pd.read_csv('./OVERNIGHTSTAYS.csv', sep = ',') df_data.MONTH = pd.to_datetime(df_data.MONTH, format='%d/%m/%Y') df_data.head(5)
 MONTHREGIONCOUNTRYOFRESIDENCE당좌 대월
02022-01-01Graubünden스위스392805
12022-01-01Graubünden발트 국가0
22022-01-01Graubünden독일80648
32022-01-01Graubünden프랑스4229
42022-01-01Graubünden이탈리아10083

SAP HANA 데이터 프레임 생성

SAP 함수 hana_ml.dataframe.create_dataframe_from_pandas() [3] 은 Pandas DataFrame 에서 SAP HANA DataFrame 을 생성하고 SAP HANA에 테이블 이름 = 'OVERNIGHTSTAYS' 를 생성합니다.

그런 다음 SAP HANA DataFrame의 처음 5개 관찰값을 표시한 다음 DataFrame.collect() 에서 현재 DataFrame을 새로운 Python Pandas DataFrame [4]에 복사합니다.

Code Snippet
1234567
df_remote = dataframe.create_dataframe_from_pandas(connection_context = conn, pandas_df = df_data, table_name = 'OVERNIGHTSTAYS', force = True, replace = False) display(df_remote.head(5).collect())
100%|███████████| 1/1 [00:01<00:00:00, 1.44s/it]
 MONTHREGIONCOUNTRYOFRESIDENCE당좌 대월
02022-01-01Graubünden스위스392805
12022-01-01Graubünden발트 국가0
22022-01-01Graubünden독일80648
32022-01-01Graubünden프랑스4229
42022-01-01Graubünden이탈리아10083

그런 다음 생성된 테이블의 구조를 다음과 같이 표시합니다.

출력:

[('MONTH', 'TIMESTAMP', 27, 27, 27, 0), ('REGION', 'NVARCHAR', 5000, 5000, 5000, 0), ('COUNTRYOFRESIDENCE', 'NVARCHAR', 5000, 5000, 5000, 0), ('OVERNIGHTSTAYS', 'INT', 10, 10, 10, 0)]

SAP HANA 데이터 프레임으로 데이터 로드

또한 하룻밤 체류 데이터를 아래와 같이 명시적으로 SAP HANA DataFrame에 로드할 수도 있습니다.

그런 다음 DataFrame을 백업하는 SQL 쿼리를 표시합니다.

마지막으로, DataFrame의 처음 여섯 개의 관찰값을 표시합니다.

Code Snippet
123
hdf_overnightstays = conn.table('OVERNIGHTSTAYS') display(hdf_overnightstays.select_statement) display(hdf_overnightstays.head(6).collect())
'SELECT * FROM ''OVERNIGHTSTAYS'' '
 MONTHREGIONCOUNTRYOFRESIDENCE당좌 대월
02022-01-01Graubünden발트 국가0
12022-01-01Graubünden호주, 뉴질랜드, 오세아니아0
22022-01-01스위스 동부발트 국가0
32022-01-01스위스 동부호주, 뉴질랜드, 오세아니아0
42022-01-01취리히 주발트 국가0
52022-01-01취리히 주호주, 뉴질랜드, 오세아니아0

데이터세트의 행 카운트

다음으로, DataFrame.count()[5] 는 SAP HANA DataFrame 의 행 수를 계산하여 표시합니다.

Code Snippet
1
display(hdf_overnightstays.count())

29029

DataFrame 분석

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

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

예를 들어, 다음 그림에서 3라고 표시된 행은 COUNTRYOFRESIDENCE 열에 대한 통계를 표시합니다. 이 열은 방문자의 거주 국가를 나타냅니다. 나머지 데이터세트 열로 29029 개의 관찰값이 있습니다. NULL 값이 없고 문자 기반 데이터 유형이라는 것을 기억할 수 있습니다. 그러나 숫자 특성이 첫 번째 열인 OVERNIGHTSTAYS 열이며, 여기에는 최소, 최대, 평균, 중앙값 등의 여러 통계가 계산됩니다. 중앙값은 데이터세트 [7]의 아래쪽 절반에서 높은 절반을 분할하는 것을 기억할 수 있습니다.

Code Snippet
1
hdf_overnightstays.describe().head(10).collect()
 개수고유NULL평균std최대중앙값25_percent_cont25_percent_disc50_percent_cont50_percent_disc75_percent_cont75_percent_disc
0당좌 대월29029559603307.07058519415.557910.0583762.0269.058.058.0269.0269.01066.01066.0
1MONTH2902929개0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2REGION29029130NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
3COUNTRYOFRESIDENCE29029770NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

4행 × 15열

아래와 같이 그래픽 리포트를 보고 데이터를 탐색할 수 있습니다.

Code Snippet
1
UnifiedReport(hdf_overnightstays).build().display()
경고: hana_ml.visualizers.unified_report: 키가 설정되지 않았습니다. 첫 번째 열이 인덱스 열로 처리되었습니다.데이터세트 리포트의 개요 화면

다음 이미지는 변수 유형 분포 그래프를 보여줍니다.

변수 유형 분배 화면

다음 이미지는 높은 카디널리티 변수 차트를 보여줍니다.

높은 카디널리티 변수 차트

다음 이미지는 높은 스케일별 변수 차트를 보여줍니다.

고도로 왜곡된 변수 차트

데이터 집계를 통한 추가 분석

추가 데이터 분석을 수행하려면 다음과 같이 월별 오버나이트 숙박을 집계해야 합니다.

Code Snippet
123
hdf_overnightstays_agg = hdf_overnightstays.agg([('sum', 'OVERNIGHTSTAYS', 'OVERNIGHTSTAYS_SUM')], group_by='MONTH') hdf_overnightstays_agg = hdf_overnightstays_agg.sort('MONTH') hdf_overnightstays_agg.head(5).collect()
 MONTHOVERNIGHTSTAYS_SUM
02022-01-012204984
12022-02-012892697
22022-03-013053960
32022-04-012523861
42022-05-012820085

월별 데이터 플롯은 다음과 같이 진행됩니다.

Code Snippet
12345
df_data = hdf_overnightstays_agg.collect() df_data.plot(x='MONTH') plt.xticks( rotation='vertical') plt.show()
야간 숙박에 대한 월별 데이터가 꺾은선 그래프에 표시됨