Esta seção aborda como gerenciar e manipular dados no SAP HANA Cloud usando DataFrames do SAP HANA. O conjunto de dados de alojamento da Califórnia, pré-carregado no SAP HANA Cloud, serve como exemplo para ilustrar ainda mais esse conceito [1].
Criação de um HANA Dataframe no Python
Um DataFrame do SAP HANA fornece uma forma de visualizar os dados armazenados no SAP HANA sem conter nenhum dado físico. O HANA-ML usa um DataFrame do SAP HANA como entrada para fins de treinamento e pontuação.
Um DataFrame do SAP HANA oculta a instrução SQL subjacente, fornecendo aos usuários uma interface Python para dados do SAP HANA.
Para usar um DataFrame do SAP HANA, primeiro crie um objeto da classe hana_ml.dataframe.ConnectionContext (uma conexão com o SAP HANA) [2] e use os métodos fornecidos na biblioteca para criar um DataFrame do SAP HANA.
O DataFrame do SAP HANA só pode ser usado enquanto a conexão está aberta e fica inacessível depois que a conexão é fechada. Para obter a documentação completa sobre as classes e funções disponíveis, consulte [3].
Referências
[1] Conjunto de dados de alojamento da Califórnia
Selecionando dados da tabela especificada
O método ConnectionContext.table() retorna um DataFrame que representa a tabela especificada, ou seja, "california_housing", e seu esquema associado, ou seja, "ML_DEMO" [1]. Em seguida, exibimos a consulta SQL que dá suporte ao DataFrame.
Para inspecionar o conjunto de dados, os nomes das colunas do DataFrame e seus tipos de dados são exibidos.
12hdf = conn.table("california_housing", schema="ML_DEMO")
print(hdf.select_statement)Saída:
SELECT * FROM "ML_DEMO"."california_housing"
1print(hdf.columns)Saída:
['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude', 'Target']
1print(hdf.dtypes())Saída:
[]'MedInc', 'DOUBLE', 15, 15, 15, 0), ('HouseAge', 'DOUBLE', 15, 15, 15, 0), ('AveRooms', 'DOUBLE', 15, 15, 15, DO0), ('AveBedrms', 'DOUBLE', 15, 15, DO0), ('UveBedrms', 'DOBLE', 15
Referências
[1] SAP hana_ml.dataframe - ConnectionContext.table()
Como indicado, as primeiras cinco observações do SAP DataFrame são exibidas e, em seguida, o método DataFrame.collection() copia o DataFrame atual para um novo Pandas DataFrame Python [1]
12#Only the use of the collect method, transfers data or result sets from SAP HANA to Python
hdf.head(5).collect()Saída:
| Rend.med. | Idade da casa | AveRooms | AveBedrms | População | AveOccup | Latitude | Longitude | Destino | |
|---|---|---|---|---|---|---|---|---|---|
| 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 |
Referências
[1] Método SAP hana_ml.dataframe - ConnectionContext.table()
Análise de atributos de dados
Manipulação e análise de dados são vitais no campo da Ciência de Dados. O método de classe SAP DataFrame.description() retorna um DataFrame que contém várias estatísticas de atributos de dados ou colunas [1].
Tais estatísticas descritivas incluem aquelas que resumem a tendência central, dispersão e forma da distribuição de um conjunto de dados. Isso ajuda a organizar e apresentar dados de forma significativa.
Por exemplo, a linha rotulada como número 3 (mostrada abaixo) exibe as estatísticas para a coluna 'AveBedrms'. Esta coluna representa o número médio de quartos por domicílio. Você notará que ele tem '20.640' observações como o resto das colunas do conjunto de dados. Ele não tem valores nulos e seu valor médio é '1,09'; no entanto, pode ter valores de um mínimo de '0,33' para um valor máximo de '34,06'. Curiosamente, a mediana é de '1,04' [4]. Você deve lembrar que o valor da mediana representa o valor médio de um conjunto de dados.
1hdf.describe().collect()| Coluna | Contagem | Único | Nulos | Média | Pdr | Mín. | Máx. | Mediana | 25_percent_cont | 25_percent_disc | 50_percent_cont | 50_percent_disc | 75_percent_cont | 75_porcentagem_desc. | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Rend.med. | 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 | Idade da casa | 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 | População | 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 | Latitude | 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 | Longitude | 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 | Destino | 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 |
Referências
Filtragem de DataFrame do SAP HANA
As linhas que correspondem às condições fornecidas podem ser selecionadas.
Por exemplo, o código a seguir seleciona o subconjunto de linhas em que a 'População' é maior que '300'. As primeiras cinco linhas são exibidas para confirmar que todos os valores de 'População' excedem '300'.
1hdf_filter=hdf.filter('"Population">300') 1print(hdf_filter.select_statement)Saída:
SELECT * FROM (SELECT * FROM "ML_DEMO"."california_housing") AS "DT_258" WHERE "População">300
1hdf_filter.head(5).collect()| Rend.med. | Idade da casa | AveRooms | AveBedrms | População | AveOccup | Latitude | Longitude | Destino | |
|---|---|---|---|---|---|---|---|---|---|
| 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 |
