Exploração de dados com DataFrames do SAP HANA

Objective

After completing this lesson, you will be able to utilize DataFrames do SAP HANA para processamento de dados.

Processamento de dados usando DataFrames do SAP HANA

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

[2] Classe SAP hana_ml.dataframe.ConnectionContext

[3] SAP hana_ml.dataframe

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.

Python
12
hdf = conn.table("california_housing", schema="ML_DEMO") print(hdf.select_statement)

Saída:

SELECT * FROM "ML_DEMO"."california_housing"

Python
1
print(hdf.columns)

Saída:

['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude', 'Target']

Python
1
print(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]

Python
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 casaAveRoomsAveBedrmsPopulaçãoAveOccupLatitudeLongitudeDestino
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

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.

Python
1
hdf.describe().collect()
 ColunaContagemÚnicoNulosMédiaPdrMín.Máx.Mediana25_percent_cont25_percent_disc50_percent_cont50_percent_disc75_percent_cont75_porcentagem_desc.
0Rend.med.206401292803.871.890.4915.003.532.562.563.533.534.744.74
1Idade da casa2064052028.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
4População20640388801425.471132.463,0035682.001166.00787.00787,001166,001166,001725.001725,00
5AveOccup206401884103.0710.380.691243.332.812.422.422.812.813.283.28
6Latitude20640862035.632.1332.5441.9534.2633.9333.9334.2634.2637.7137.71
7Longitude206408440-119.562.00-124.35-114.31-118.49-121.80-121,80-118,49-118,49-118.01-118.01
8Destino20640384202.0681.150.145,001.791.191.191.791.792.642.64

Referências

[1] Método SAP hana_ml.dataframe - DataFrame.description()

[2] Estatística: mediana

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'.

Python
1
hdf_filter=hdf.filter('"Population">300')
Python
1
print(hdf_filter.select_statement)

Saída:

SELECT * FROM (SELECT * FROM "ML_DEMO"."california_housing") AS "DT_258" WHERE "População">300

Python
1
hdf_filter.head(5).collect()
 Rend.med.Idade da casaAveRoomsAveBedrmsPopulaçãoAveOccupLatitudeLongitudeDestino
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

Exploração de dados visuais usando DataFrame do SAP HANA

A estatística descritiva também envolve uma representação gráfica dos dados por meio de gráficos. Eles podem ajudar ainda mais a visualizar e interpretar as informações.

Ao empregar estatísticas descritivas, pode-se resumir e compartilhar as principais propriedades de um conjunto de dados. Portanto, obter insights mais detalhados dos dados para dar suporte a:

  • Outras análises estatísticas
  • Processos de tomada de decisão

Você pode usar os recursos do HANA [1] para visualizar um gráfico de distribuição para a coluna DataFrame do SAP HANA chamada 'População'.

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)))

Saída:

O tempo necessário para fazer isso ao obter os dados do servidor foi: 0.08s

Um gráfico de distribuição do recurso População.

Referências

[1] SAP hana_ml.visualizers.eda - EDAVisualizer.distribution_plot

Adição de um índice ao conjunto de dados

Considere que o conjunto de dados deve ter uma coluna 'ID' para particioná-lo em subconjuntos disjuntos. Ele é necessário pelo algoritmo de particionamento [1] usado posteriormente para derivar os subconjuntos 'Treinamento' e 'Teste' que suportam a execução do workflow de aprendizagem automática.

Certifique-se de que essa coluna esteja incluída no conjunto de dados, como demonstrado abaixo.

 IDRend.med.Idade da casaAveRoomsAveBedrmsPopulaçãoAveOccupLatitudeLongitudeDestino
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

Referências

[1] Algoritmo SAP hana_ml.algorítms.pal.partição - train_test_val_split.