使用 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]员工流失场景数据集
创建 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 数据框架相关的附加物料。
参考
将数据加载到 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
参考
按分组和计数汇总数据
在下面,SAP HANA DataFrame 与 group_by 列一起与聚合一起返回。此方法支持 SAP HANA 数据库实例中的所有聚合函数,例如 'max'、'min'、'count'、'avg'、'sum'、'media'、'stddev'、'var'。
返回的 DataFrame 中的列名称与原始列的名称相同,即 FLIGHT_RISK。FLIGHT_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]统计信息:中值