使用 SAP HANA 数据框架浏览和处理数据

学习目标

  • 演示如何使用 SAP HANA DataFrame 访问和可视化数据。

加载员工流失数据集

员工流失数据集可自由使用,可以从 [1] 上载。加载时,可以使用 SAP HANA 数据框架进行浏览,该框架提供高性能的列式内存数据结构,以便在 SAP HANA Cloud 中进行高效的数据操作和分析。

首先,使用 read_csv() 函数将数据集读取到 Pandas DataFrame 中,并显示前五个观测对象以获取初始概览:

df_data = pd.read_csv("./Emp_Churn_Train.csv", sep = ',')
df_data.head(5)

概览

项目编号

EMPLOYEE_ID

年龄

AGE_GROUP10

AGE_GROUP5

生成

CRITICAL_JOB_ROLE

RISK_OF_LOSS

IMPACT_OF_LOSS

FUTURE_LEADER

生成者...

CURRENT_COUNTRY

CURCOUNTRYLAT

CURCOUNTRYLON

PROMOTION_WITHIN_LAST_3_YEARS

CHANGED_POSITION_WITHIN_LAST_2_YEARS

CHANGE_IN_PERFORMANCE_RATING

FUNCTIONALAREACHANGETYPE

JOBLEVELCHANGETYPE

标题

FLIGHT_RISK

0

10032

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

女性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

无更改

无更改

1

1

10033

43

(35-45]

(40-45]

X 世代

关键

无未来领导人

女性 ...

德国

51.08342

10.423447

无促销

无更改

0 - 不可用

无更改

无更改

1

2

10034

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

女性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

外部录用

外部录用

1

3

10035

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

男性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

无更改

无更改

1

4

10036

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

男性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

无更改

无更改

1

5 行 x 43 列

标识符

可在同一文件夹 [2] 中找到与员工流失场景相关的其他材料。

参考

[1]员工流失场景数据集

[2]2022 年 SAP HANA Cloud 机器学习挑战

创建 SAP HANA 数据框架

要利用 SAP HANA 的内存处理功能,数据集必须转换为 SAP HANA DataFrame。可以使用 hana_ml.dataframe.create_dataframe_from_pandas() 函数 [1] 来完成此操作,该函数会在 SAP HANA 中创建表:

df_remote = dataframe.create_dataframe_from_pandas(connection_context = conn,
pandas_df = df_data,
table_name = 'EMPLOYEE_CHURN_DATA',
force = True,
replace = False)
display(df_remote.head(5).collect())

100%|&1/1 [00:00<00:00, 1.32it/s]

ITEM_NUMBER

EMPLOYEE_ID

年龄

AGE_GROUP10

AGE_GROUP5

生成

CRITICAL_JOB_ROLE

RISK_OF_LOSS

IMPACT_OF_LOSS

FUTURE_LEADER

生成者...

CURRENT_COUNTRY

CURCOUNTRYLAT

CURCOUNTRYLON

PROMOTION_WITHIN_LAST_3_YEARS

CHANGED_POSITION_WITHIN_LAST_2_YEARS

CHANGE_IN_PERFORMANCE_RATING

FUNCTIONALAREACHANGETYPE

JOBLEVELCHANGETYPE

标题

FLIGHT_RISK

0

10032

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

女性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

无更改

无更改

1

1

10033

43

(35-45]

(40-45]

X 世代

关键

无未来领导人

女性 ...

德国

51.08342

10.423447

无促销

无更改

0 - 不可用

无更改

无更改

1

2

10034

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

女性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

外部录用

外部录用

1

3

10035

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

男性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

无更改

无更改

1

4

10036

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

男性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

无更改

无更改

1

5

10037

33

(25-35]

(30-35]

Y 世代

非关键

无未来领导人

男性 ...

墨西哥

19.432601

-99.133342

无促销

无更改

0 - 不可用

无更改

无更改

1

5 行 × 43 列

拒绝可在参考 [1] 中找到与 SAP HANA 数据框架相关的附加物料。

参考

[1]SAP 函数 hana_ml.dataframe.create_dataframe_from_pandas()

将数据加载到 SAP HANA 数据框架

或者,您可以将员工流失数据加载到 SAP HANA 数据框架中。conn.table() 方法允许您访问 SAP HANA 表:

hdf_employeechurn = conn.table('EMPLOYEE_CHURN_DATA')
display(hdf_employeechurn.select_statement)
display(hdf_employeechurn.head(6).collect())

'SELECT * FROM "EMPLOYEE_CHURN_DATA"'

ITEM_NUMBER

EMPLOYEE_ID

年龄

AGE_GROUP10

AGE_GROUP5

生成

CRITICAL_JOB_ROLE

RISK_OF_LOSS

IMPACT_OF_LOSS

FUTURE_LEADER

生成者...

CURRENT_COUNTRY

CURCOUNTRYLAT

CURCOUNTRYLON

PROMOTION_WITHIN_LAST_3_YEARS

CHANGED_POSITION_WITHIN_LAST_2_YEARS

CHANGE_IN_PERFORMANCE_RATING

FUNCTIONALAREACHANGETYPE

JOBLEVELCHANGETYPE

标题

FLIGHT_RISK

0

10032

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

女性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

无更改

无更改

1

1

10033

43

(35-45]

(40-45]

X 世代

关键

无未来领导人

女性 ...

德国

51.08342

10.423447

无促销

无更改

0 - 不可用

无更改

无更改

1

2

10034

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

女性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

外部录用

外部录用

1

3

10035

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

男性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

无更改

无更改

1

4

10036

33

(25-35]

(30-35]

Y 世代

关键

无未来领导人

男性 ...

美国

39.78373

-100.445882

无促销

无更改

0 - 不可用

无更改

无更改

1

5

10037

33

(25-35]

(30-35]

Y 世代

非关键

无未来领导人

男性 ...

墨西哥

19.432601

-99.133342

无促销

无更改

0 - 不可用

无更改

无更改

1

6 行 × 43 列

计算数据集中的行数

要计算 SAP HANA DataFrame 中的行数,请使用 DataFrame.count()****[1] 方法。此方法提供数据集的总行数,如下所示:

display(hdf_employeechurn.count())

19115

参考

[1]SAP hana_ml.dataframe - DataFrame.count()

按分组和计数汇总数据

在下面,SAP HANA DataFrame 与 group_by 列一起与聚合一起返回。此方法支持 SAP HANA 数据库实例中的所有聚合函数,例如 'max'、'min'、'count'、'avg'、'sum'、'media'、'stddev'、'var'。

返回的 DataFrame 中的列名称与原始列的名称相同,即 FLIGHT_RISKFLIGHT_RISK 列指示员工是否在过去 12 个月内离开公司。

有关员工流失数据集的详细信息,请参阅文件夹员工流失数据集描述 [1]

要根据 'FLIGHT_RISK' 计数员工数,可使用以下代码:

hdf_employeechurn.agg([('count', 'EMPLOYEE_ID', 'N')], group_by='FLIGHT_RISK').collect()

ITEM_NUMBER

FLIGHT_RISK

N

0

17015

1

2100

参考

[1]员工流失数据集描述

了解数据属性/列的描述性统计信息

接下来,显示支持返回的 SAP HANA DataFrame 的 SQL 查询(使用 group_by 列)。

hdf_employeechurn.agg([('count', 'EMPLOYEE_ID', 'N')], group_by='FLIGHT_RISK').select_statement

'SELECT "FLIGHT_RISK", count("EMPLOYEE_ID") AS "N" FROM (SELECT * FROM "EMPLOYEE_CHURN_DATA") AS "DT_6" GROUP BY "FLIGHT_RISK"'

数据操作和分析在 Data Science 中至关重要。SAP 类方法 DataFrame.describe() 返回包含数据属性/列 [1] 的各种统计信息的 DataFrame。这些描述性统计信息汇总数据集分布的中心趋势、分散和形状,有助于有意义地组织和呈现数据。

例如,行编号 3(如下所示)显示"SALARY"列的统计,表示员工工资(欧元)。此列有"19,115"个观测值,没有空值,其平均值为" 62,003.15 欧元",最小值为" 4,900.00 欧元",最大值为"120,000.00 欧元"。中间值为" 63,000.00 欧元"[2],它将数据集拆分为较高半部分和下半部分。

hdf_employeechurn.describe().head(10).collect()

ITEM_NUMBER

计数

唯一

空值

平均值

标准

分钟

最大

中值

25_percent_cont

25_percent_disc

50_percent_cont

50_percent_disc

75_percent_cont

75_percent_disc

0

EMPLOYEE_ID

19115

19115

0

19589.000000

5518.169533

10032.000000

29146.000000

19589.00

14810.500000

14810.000000

19589.000000

19589.000000

24367.500000

24368.000000

1

年龄

19115

40

0

39.074915

9.188863

18.000000

57.000000

39.000000

32.000000

32.000000

39.000000

39.000000

46.000000

46.000000

2

TENURE_MONTHS

19115

472

0

140.363484

103.163766

1.000000

486.000000

120.000000

55.000000

55.000000

120.000000

120.000000

209.000000

209.000000

3

SALARY

19115

14

0

62003.159822

24708.791838

4900.000000

120000.000000

63000.000000

40000.000000

40000.000000

63000.000000

63000.000000

70000.000000

70000.000000

4

PREVCOUNTRYLAT

12594

55

6521

38.768486

18.956135

-41.500083

64.686314

40.033265

35.000074

35.000074

40.033265

40.033265

51.083420

51.083420

5

PREVCOUNTRYLON

12594

55

6521

5.960068

71.502329

-107.991707

172.834408

10.423447

-7.979460

-7.979460

10.423447

10.423447

78.667743

78.667743

6

TIMEINPREVPOSITIONMONTH

19115

58

0

19.885901

19.864530

0.000000

396.000000

9.000000

3.000000

3.000000

9.000000

9.000000

36.000000

36.000000

7

CURCOUNTRYLAT

19115

55

0

39.749109

18.354538

-41.500083

64.686314

46.603354

36.574844

36.574844

46.603354

46.603354

51.083420

51.083420

8

CURCOUNTRYLON

19115

55

0

4.282763

69.918683

-107.991707

172.834408

10.423447

-7.979460

-7.979460

10.423447

10.423447

25.920916

25.920916

9

标题

19115

1

0

1.000000

0.000000

1.000000

1.000000

1.000000

1.000000

1.000000

1.000000

1.000000

1.000000

1.000000

根据数据集的统计汇总,"PREVCOUNTRYLAT"和"PREVCOUNTRYLON"列包含大量空值(每个列约 51%)。鉴于缺少数据的比例较高,这些列将从数据集中删除,以供进一步分析。

参考

[1]SAP hana_ml.dataframe - DataFrame.describe()

[2]统计信息:中值