예측 모델을 구축하기 전에 시계열 모델링 요구사항에 부합하는 방식으로 데이터를 준비하고 형성하는 것이 중요합니다. 여기에는 SAP HANA에 데이터세트 로드, 필드를 시간 인식 형식으로 변환, 기본 집계 수행이 포함됩니다. 모두 SAP HANA DataFrame API를 사용하여 Python에서 SQL 유사 작업을 가능하게 합니다.
시계열 데이터세트 로드
오버나이트 체류 데이터세트는 자유롭게 사용할 수 있으며 아래와 같이 [1]에서 업로드할 수 있습니다. 다음 코드를 사용하여 새로 생성된 Pandas DataFrame의 처음 5개 관찰값을 표시합니다.
오버나이트 숙박 시나리오와 관련된 더 많은 자료는 동일한 폴더 [2]에서 찾을 수 있습니다.
123df_data= pd.read_csv('./OVERNIGHTSTAYS.csv', sep = ',')
df_data.MONTH = pd.to_datetime(df_data.MONTH, format='%d/%m/%Y')
df_data.head(5)| MONTH | REGION | COUNTRYOFRESIDENCE | 당좌 대월 | |
|---|---|---|---|---|
| 0 | 2022-01-01 | Graubünden | 스위스 | 392805 |
| 1 | 2022-01-01 | Graubünden | 발트 국가 | 0 |
| 2 | 2022-01-01 | Graubünden | 독일 | 80648 |
| 3 | 2022-01-01 | Graubünden | 프랑스 | 4229 |
| 4 | 2022-01-01 | Graubü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]에 복사합니다.
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())| MONTH | REGION | COUNTRYOFRESIDENCE | 당좌 대월 | |
|---|---|---|---|---|
| 0 | 2022-01-01 | Graubünden | 스위스 | 392805 |
| 1 | 2022-01-01 | Graubünden | 발트 국가 | 0 |
| 2 | 2022-01-01 | Graubünden | 독일 | 80648 |
| 3 | 2022-01-01 | Graubünden | 프랑스 | 4229 |
| 4 | 2022-01-01 | Graubü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의 처음 여섯 개의 관찰값을 표시합니다.
123hdf_overnightstays = conn.table('OVERNIGHTSTAYS')
display(hdf_overnightstays.select_statement)
display(hdf_overnightstays.head(6).collect())| MONTH | REGION | COUNTRYOFRESIDENCE | 당좌 대월 | |
|---|---|---|---|---|
| 0 | 2022-01-01 | Graubünden | 발트 국가 | 0 |
| 1 | 2022-01-01 | Graubünden | 호주, 뉴질랜드, 오세아니아 | 0 |
| 2 | 2022-01-01 | 스위스 동부 | 발트 국가 | 0 |
| 3 | 2022-01-01 | 스위스 동부 | 호주, 뉴질랜드, 오세아니아 | 0 |
| 4 | 2022-01-01 | 취리히 주 | 발트 국가 | 0 |
| 5 | 2022-01-01 | 취리히 주 | 호주, 뉴질랜드, 오세아니아 | 0 |
데이터세트의 행 카운트
다음으로, DataFrame.count()[5] 는 SAP HANA DataFrame 의 행 수를 계산하여 표시합니다.
1display(hdf_overnightstays.count())29029
DataFrame 분석
데이터 조작 및 분석은 데이터 과학 분야에서 매우 중요합니다. SAP 클래스 메소드 DataFrame.describe() 는 데이터 특성/열의 다양한 통계가 포함된 DataFrame을 리턴합니다. [6]
이러한 설명적 통계에는 데이터 집합 분포의 중심 경향, 분산 및 모양을 요약하는 통계도 포함됩니다. 이를 통해 의미 있는 방식으로 데이터를 구성하고 표시할 수 있습니다.
예를 들어, 다음 그림에서 3라고 표시된 행은 COUNTRYOFRESIDENCE 열에 대한 통계를 표시합니다. 이 열은 방문자의 거주 국가를 나타냅니다. 나머지 데이터세트 열로 29029 개의 관찰값이 있습니다. NULL 값이 없고 문자 기반 데이터 유형이라는 것을 기억할 수 있습니다. 그러나 숫자 특성이 첫 번째 열인 OVERNIGHTSTAYS 열이며, 여기에는 최소, 최대, 평균, 중앙값 등의 여러 통계가 계산됩니다. 중앙값은 데이터세트 [7]의 아래쪽 절반에서 높은 절반을 분할하는 것을 기억할 수 있습니다.
1hdf_overnightstays.describe().head(10).collect()| 열 | 개수 | 고유 | NULL | 평균 | std | 분 | 최대 | 중앙값 | 25_percent_cont | 25_percent_disc | 50_percent_cont | 50_percent_disc | 75_percent_cont | 75_percent_disc | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 당좌 대월 | 29029 | 5596 | 0 | 3307.070585 | 19415.55791 | 0.0 | 583762.0 | 269.0 | 58.0 | 58.0 | 269.0 | 269.0 | 1066.0 | 1066.0 |
| 1 | MONTH | 29029 | 29개 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2 | REGION | 29029 | 13 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 3 | COUNTRYOFRESIDENCE | 29029 | 77 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4행 × 15열
아래와 같이 그래픽 리포트를 보고 데이터를 탐색할 수 있습니다.
1UnifiedReport(hdf_overnightstays).build().display()
다음 이미지는 변수 유형 분포 그래프를 보여줍니다.

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

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

데이터 집계를 통한 추가 분석
추가 데이터 분석을 수행하려면 다음과 같이 월별 오버나이트 숙박을 집계해야 합니다.
123hdf_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()| MONTH | OVERNIGHTSTAYS_SUM | |
|---|---|---|
| 0 | 2022-01-01 | 2204984 |
| 1 | 2022-02-01 | 2892697 |
| 2 | 2022-03-01 | 3053960 |
| 3 | 2022-04-01 | 2523861 |
| 4 | 2022-05-01 | 2820085 |
월별 데이터 플롯은 다음과 같이 진행됩니다.
12345df_data = hdf_overnightstays_agg.collect()
df_data.plot(x='MONTH')
plt.xticks( rotation='vertical')
plt.show()