SAP HANA DataFrame を使用したデータの探索

Objective

After completing this lesson, you will be able to データ処理に SAP HANA DataFrame を利用します。

SAP HANA DataFrame を使用したデータ処理

このセクションでは、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() は、指定されたテーブル ("cCalifornia_housing") とその関連スキーマ ("ML_DEMO" [1]) を表す DataFrame を返します。次に、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', 'DOUBLE', 15, 15, 0), ('HouseAge', 'DOUBLE', 15, 15, 0), ('AveRooms', 'DOUBLE', 15, 15, 0), ('AveBedrms', 'DOUBLE', '15', 'OCU15', 0), ('Population', 'DOUBLE', 15, DOUB15, DOUB15, 15)

参照

[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() は、データ属性または列 [1] のさまざまな統計を含む DataFrame を返します。

このような記述統計には、データセット分布の中心的な傾向、分散、および形状をまとめた統計が含まれます。これにより、意味のある方法でデータを整理および提示することができます。

たとえば、番号 3 (下記参照) のラベルが付いた行には、列 'AveBedrms' の統計が表示されます。この列は、1 世帯あたりの平均寝室数を表します。残りのデータセットの列には '20,640' という観測値があります。null 値はなく、平均値は '1.09' ですが、最小値 '0.33' から最大値 '34.06' までを取ることができます。興味深いことに、中央値は '1.04' [4] です。中央値はデータセットの中間値を表すことに注意してください。

Python
1
hdf.describe().collect()
 カラムテーブル件数一意Null 値平均標準最小最大中央値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.describe()

[2] 統計: 中央値

SAP HANA DataFrame フィルタリング

指定された条件に一致する行を選択できます。

たとえば、次のコードは、'Population' が '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。