このセクションでは、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] カリフォルニアの住宅データセット
指定したテーブルからのデータの選択
メソッド ConnectionContext.table() は、指定されたテーブル ("cCalifornia_housing") とその関連スキーマ ("ML_DEMO" [1]) を表す DataFrame を返します。次に、DataFrame の後ろにある SQL クエリを表示します。
データセットを検査するために、DataFrame の列名とそのデータ型が表示されます。
12hdf = conn.table("california_housing", schema="ML_DEMO")
print(hdf.select_statement)出力:
SELECT * FROM "ML_DEMO"."California_housing」
1print(hdf.columns)出力:
['MedInc'、'HouseAge'、'AveRooms'、'AveBedrms'、'Population'、'AveOccup'、'Latitude'、'Longitude'、'Target']
1print(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]
12#Only the use of the collect method, transfers data or result sets from SAP HANA to Python
hdf.head(5).collect()出力:
| MedInc | 世帯年齢 | AveRooms | AveBedrms | 人口 | AveOccup | 緯度 | 経度 | ターゲット | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 1.24 | 52.0 | 2.92 | 0.91 | 396.0 | 4.65 | 37.80 | -122.27 | 5.00 |
| 1 | 1.16 | 52.0 | 2.43 | 0.94 | 1349.0 | 5.39 | 37.87 | -122.25 | 5.00 |
| 2 | 7.85 | 52.0 | 7.79 | 1.05 | 517.0 | 2.41 | 37.86 | -122.24 | 5.00 |
| 3 | 9.39 | 52.0 | 7.51 | 0.95 | 1366.0 | 2.75 | 37.85 | -122.24 | 5.00 |
| 4 | 7.87 | 52.0 | 8.28 | 1.04 | 947.0 | 2.62 | 37.83 | -122.23 | 5.00 |
参照
データ属性の分析
データ操作と分析は、データサイエンスの分野で極めて重要です。SAP クラスメソッド DataFrame.describe() は、データ属性または列 [1] のさまざまな統計を含む DataFrame を返します。
このような記述統計には、データセット分布の中心的な傾向、分散、および形状をまとめた統計が含まれます。これにより、意味のある方法でデータを整理および提示することができます。
たとえば、番号 3 (下記参照) のラベルが付いた行には、列 'AveBedrms' の統計が表示されます。この列は、1 世帯あたりの平均寝室数を表します。残りのデータセットの列には '20,640' という観測値があります。null 値はなく、平均値は '1.09' ですが、最小値 '0.33' から最大値 '34.06' までを取ることができます。興味深いことに、中央値は '1.04' [4] です。中央値はデータセットの中間値を表すことに注意してください。
1hdf.describe().collect()| カラムテーブル | 件数 | 一意 | Null 値 | 平均 | 標準 | 最小 | 最大 | 中央値 | 25_percent_cont | 25_percent_disc | 50_percent_cont | 50_percent_disc | 75_percent_cont | 75_percent_disc | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | MedInc | 20640 | 12928 | 0 | 3.87 | 1.89 | 0.49 | 15.00 | 3.53 | 2.56 | 2.56 | 3.53 | 3.53 | 4.74 | 4.74 |
| 1 | 世帯年齢 | 20640 | 52 | 0 | 28.63 | 12.58 | 1.00 | 52.00 | 29.00 | 18.00 | 18.00 | 29.00 | 29.00 | 37.00 | 37.00 |
| 2 | AveRooms | 20640 | 19392 | 0 | 5.42 | 2.47 | 0.84 | 141.90 | 5.22 | 4.44 | 4.44 | 5.22 | 5.22 | 6.05 | 6.05 |
| 3 | AveBedrms | 20640 | 14233 | 0 | 1.09 | 0.47 | 0.33 | 34.06 | 1.04 | 1.00 | 1.00 | 1.04 | 1.04 | 1.09 | 1.09 |
| 4 | 人口 | 20640 | 3888 | 0 | 1425.47 | 1132.46 | 3.00 | 35682.00 | 1166.00 | 787.00 | 787.00 | 1166.00 | 1166.00 | 1725.00 | 1725.00 |
| 5 | AveOccup | 20640 | 18841 | 0 | 3.07 | 10.38 | 0.69 | 1243.33 | 2.81 | 2.42 | 2.42 | 2.81 | 2.81 | 3.28 | 3.28 |
| 6 | 緯度 | 20640 | 862 | 0 | 35.63 | 2.13 | 32.54 | 41.95 | 34.26 | 33.93 | 33.93 | 34.26 | 34.26 | 37.71 | 37.71 |
| 7 | 経度 | 20640 | 844 | 0 | -119.56 | 2.00 | -124.35 | -114.31 | -118.49 | -121.80 | -121.80 | -118.49 | -118.49 | -118.01 | -118.01 |
| 8 | ターゲット | 20640 | 3842 | 0 | 2.068 | 1.15 | 0.14 | 5.00 | 1.79 | 1.19 | 1.19 | 1.79 | 1.79 | 2.64 | 2.64 |
参照
[1] SAP メソッド hana_ml.dataframe - DataFrame.describe()
[2] 統計: 中央値
SAP HANA DataFrame フィルタリング
指定された条件に一致する行を選択できます。
たとえば、次のコードは、'Population' が '300' より大きい行のサブセットを選択します。最初の 5 行が表示され、すべての '母集団' 値が '300' を超えていることが確認されます。
1hdf_filter=hdf.filter('"Population">300') 1print(hdf_filter.select_statement)出力:
SELECT * FROM (SELECT * FROM "ML_DEMO"."california_housing") AS "DT_258" WHERE "Population">300
1hdf_filter.head(5).collect()| MedInc | 世帯年齢 | AveRooms | AveBedrms | 人口 | AveOccup | 緯度 | 経度 | ターゲット | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 1.24 | 52.0 | 2.92 | 0.91 | 396.0 | 4.65 | 37.80 | -122.27 | 5.00 |
| 1 | 1.16 | 52.0 | 2.43 | 0.94 | 1349.0 | 5.39 | 37.87 | -122.25 | 5.00 |
| 2 | 7.85 | 52.0 | 7.79 | 1.05 | 517.0 | 2.41 | 37.86 | -122.24 | 5.00 |
| 3 | 9.39 | 52.0 | 7.51 | 0.95 | 1366.0 | 2.75 | 37.85 | -122.24 | 5.00 |
| 4 | 7.87 | 52.0 | 8.28 | 1.04 | 947.0 | 2.62 | 37.83 | -122.23 | 5.00 |
