Exploration et manipulation des données avec les noms de données SAP HANA

Objective

After completing this lesson, you will be able to expliquez comment mettre en forme, agréger et préparer le jeu de données pour la prévision de série temporelle à l'aide des DataFrames SAP HANA.

Préparation des données pour la prévision basée sur une série temporelle

Avant de créer des modèles de prévision, il est essentiel de préparer et de façonner les données d'une manière qui s'aligne sur les exigences de modélisation des séries temporelles. Cela inclut le chargement du jeu de données dans SAP HANA, la transformation des champs en formats temporels et l'exécution d'une agrégation de base, le tout à l'aide de l'API SAP HANA DataFrame, qui active les opérations de type SQL dans Python.

Chargement de l'ensemble de données de série chronologique

L'ensemble de données Nuitées est disponible gratuitement et peut être téléchargé à partir de [1] comme indiqué ci-dessous. À l'aide du code suivant, nous affichons les cinq premières observations du DataFrame Pandas nouvellement créé.

Vous trouverez plus d'articles liés au scénario des nuitées dans le même dossier [2].

Code Snippet
123
df_data= pd.read_csv('./OVERNIGHTSTAYS.csv', sep = ',') df_data.MONTH = pd.to_datetime(df_data.MONTH, format='%d/%m/%Y') df_data.head(5)
 MOISREGIONCOUNTRYOFRESIDENCEOVERNIGHTSTAYS
02022-01-01GrisonsSuisse392805
101/01/2022GrisonsÉtats baltes0
201/01/2022GrisonsAllemagne80648
301/01/2022GrisonsFrance4229
401/01/2022GrisonsItalie10083

Création d'un DataFrame SAP HANA

La fonction SAP hana_ml.dataframe.create_dataframe_from_pandas() [3] crée un DataFrame SAP HANA à partir d'un DataFrame Pandas et crée une table dans SAP HANA, c'est-à-dire nom_table = 'OVERNIGHTSTAYS'.

Ensuite, nous affichons les cinq premières observations du DataFrame SAP HANA, puis DataFrame.collection() copie le DataFrame actuel dans un nouveau DataFrame Python Pandas [4].

Code Snippet
1234567
df_remote = dataframe.create_dataframe_from_pandas(connection_context = conn, pandas_df = df_data, table_name = 'OVERNIGHTSTAYS', force = True, replace = False) display(df_remote.head(5).collect())
100%|█████████| 1/1 [00:01<00:00, 1.44s/it]
 MOISREGIONCOUNTRYOFRESIDENCEOVERNIGHTSTAYS
001/01/2022GrisonsSuisse392805
101/01/2022GrisonsÉtats baltes0
201/01/2022GrisonsAllemagne80648
301/01/2022GrisonsFrance4229
401/01/2022GrisonsItalie10083

Nous montrons ensuite la structure de la table qui a été créée comme suit :

Résultat :

[('MONTH', 'TIMESTAMP', 27, 27, 27, 0), ('REGION', 'NVARCHAR', 5000, 5000, 5000, 0), ('COUNTRYOFRESIDENCE', 'NVARCHAR', 5000, 5000, 5000, 0), ('OVERNIGHTSTAYS', 'INT', 10, 10, 0)]

Chargement des données dans les DataFrames SAP HANA

Nous pouvons également charger explicitement les données de nuitées dans le DataFrame SAP HANA comme indiqué ci-dessous.

Ensuite, nous affichons la requête SQL associée au DataFrame.

Enfin, nous affichons les six premières observations du DataFrame.

Code Snippet
123
hdf_overnightstays = conn.table('OVERNIGHTSTAYS') display(hdf_overnightstays.select_statement) display(hdf_overnightstays.head(6).collect())
'SELECT * FROM ''OVERNIGHTSTAYS'' '
 MOISREGIONCOUNTRYOFRESIDENCEOVERNIGHTSTAYS
001/01/2022GrisonsÉtats baltes0
101/01/2022GrisonsAustralie, Nouvelle-Zélande, Océanie0
201/01/2022Suisse orientaleÉtats baltes0
301/01/2022Suisse orientaleAustralie, Nouvelle-Zélande, Océanie0
401/01/2022Région de ZurichÉtats baltes0
501/01/2022Région de ZurichAustralie, Nouvelle-Zélande, Océanie0

Comptage des lignes dans l'ensemble de données

Ensuite, DataFrame.count()[5] calcule le nombre de lignes dans le DataFrame SAP HANA et l'affiche.

Code Snippet
1
display(hdf_overnightstays.count())

29029

Analyse du DataFrame

La manipulation et l'analyse des données sont vitales dans le domaine de la science des données. La méthode de classe SAP DataFrame.décrit() renvoie un DataFrame contenant différentes statistiques d'attributs/colonnes de données [6].

Ces statistiques descriptives incluent celles qui résument la tendance centrale, la dispersion et la forme de la distribution d'un jeu de données. Cela permet d'organiser et de présenter les données de manière pertinente.

Par exemple, dans la figure suivante, la ligne étiquetée 3 affiche les statistiques pour la colonne COUNTRYOFRESIDENCE. Cette colonne représente le pays de résidence du visiteur. Nous remarquons qu'il contient 29029 observations comme reste des colonnes du jeu de données. Il n'a pas de valeurs nulles et nous pouvons nous rappeler qu'il s'agit d'un type de données basé sur des caractères ; cependant, un attribut numérique est la première colonne, c'est-à-dire la colonne OVERNIGHTSTAYS, pour laquelle plusieurs statistiques sont calculées, à savoir minimum, maximum, moyenne, médiane, etc. Nous pouvons nous rappeler que la médiane est la valeur séparant la moitié supérieure de la moitié inférieure de l'ensemble de données [7].

Code Snippet
1
hdf_overnightstays.describe().head(10).collect()
 colonnecompteruniquevaleurs nullesmoyennestdminmax.médiane25_percent_cont25_percent_disc50_percent_cont50_percent_disc75_percent_cont75_percent_disc
0OVERNIGHTSTAYS29029559603307,07058519415,557910,0583762,0269,058,058,0269,0269,01066,01066,0
1MOIS29029290NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2REGION29029130NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
3COUNTRYOFRESIDENCE29029770NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

4 lignes × 15 colonnes

Nous pouvons explorer les données en consultant un rapport graphique comme indiqué ci-dessous :

Code Snippet
1
UnifiedReport(hdf_overnightstays).build().display()
AVERTISSEMENT:hana_ml.visualizers.unified_report : la clé n'a pas été définie. La première colonne a été traitée comme colonne d'index.Écran Synthèse de l'état de l'ensemble de données

L'image suivante montre le graphique Répartition du type de variable.

L'écran Répartition des types de variables

L'image suivante montre le graphique Variables de cardinalité élevée.

Diagramme Variables à cardinalité élevée

L'image suivante montre le graphique Variables hautement biaisées.

Diagramme Variables hautement biaisées

Analyse supplémentaire avec agrégation de données

Afin d’effectuer une analyse plus approfondie des données, nous devons agréger les nuitées par mois comme indiqué ci-dessous :

Code Snippet
123
hdf_overnightstays_agg = hdf_overnightstays.agg([('sum', 'OVERNIGHTSTAYS', 'OVERNIGHTSTAYS_SUM')], group_by='MONTH') hdf_overnightstays_agg = hdf_overnightstays_agg.sort('MONTH') hdf_overnightstays_agg.head(5).collect()
 MOISSOMMES_HTSTAYS_OVERNIGHTSTAYS
001/01/20222204984
12022-02-012892697
22022-03-013053960
32022-04-012523861
42022-05-012820085

Nous allons tracer les données mensuelles comme suit :

Code Snippet
12345
df_data = hdf_overnightstays_agg.collect() df_data.plot(x='MONTH') plt.xticks( rotation='vertical') plt.show()
Données mensuelles pour nuitées affichées dans un graphique linéaire