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].
123df_data= pd.read_csv('./OVERNIGHTSTAYS.csv', sep = ',')
df_data.MONTH = pd.to_datetime(df_data.MONTH, format='%d/%m/%Y')
df_data.head(5)| MOIS | REGION | COUNTRYOFRESIDENCE | OVERNIGHTSTAYS | |
|---|---|---|---|---|
| 0 | 2022-01-01 | Grisons | Suisse | 392805 |
| 1 | 01/01/2022 | Grisons | États baltes | 0 |
| 2 | 01/01/2022 | Grisons | Allemagne | 80648 |
| 3 | 01/01/2022 | Grisons | France | 4229 |
| 4 | 01/01/2022 | Grisons | Italie | 10083 |
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].
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())| MOIS | REGION | COUNTRYOFRESIDENCE | OVERNIGHTSTAYS | |
|---|---|---|---|---|
| 0 | 01/01/2022 | Grisons | Suisse | 392805 |
| 1 | 01/01/2022 | Grisons | États baltes | 0 |
| 2 | 01/01/2022 | Grisons | Allemagne | 80648 |
| 3 | 01/01/2022 | Grisons | France | 4229 |
| 4 | 01/01/2022 | Grisons | Italie | 10083 |
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.
123hdf_overnightstays = conn.table('OVERNIGHTSTAYS')
display(hdf_overnightstays.select_statement)
display(hdf_overnightstays.head(6).collect())| MOIS | REGION | COUNTRYOFRESIDENCE | OVERNIGHTSTAYS | |
|---|---|---|---|---|
| 0 | 01/01/2022 | Grisons | États baltes | 0 |
| 1 | 01/01/2022 | Grisons | Australie, Nouvelle-Zélande, Océanie | 0 |
| 2 | 01/01/2022 | Suisse orientale | États baltes | 0 |
| 3 | 01/01/2022 | Suisse orientale | Australie, Nouvelle-Zélande, Océanie | 0 |
| 4 | 01/01/2022 | Région de Zurich | États baltes | 0 |
| 5 | 01/01/2022 | Région de Zurich | Australie, Nouvelle-Zélande, Océanie | 0 |
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.
1display(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].
1hdf_overnightstays.describe().head(10).collect()| colonne | compter | unique | valeurs nulles | moyenne | std | min | max. | médiane | 25_percent_cont | 25_percent_disc | 50_percent_cont | 50_percent_disc | 75_percent_cont | 75_percent_disc | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | OVERNIGHTSTAYS | 29029 | 5596 | 0 | 3307,070585 | 19415,55791 | 0,0 | 583762,0 | 269,0 | 58,0 | 58,0 | 269,0 | 269,0 | 1066,0 | 1066,0 |
| 1 | MOIS | 29029 | 29 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2 | REGION | 29029 | 13 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 3 | COUNTRYOFRESIDENCE | 29029 | 77 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4 lignes × 15 colonnes
Nous pouvons explorer les données en consultant un rapport graphique comme indiqué ci-dessous :
1UnifiedReport(hdf_overnightstays).build().display()
L'image suivante montre le graphique Répartition du type de variable.

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

L'image suivante montre le graphique 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 :
123hdf_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()| MOIS | SOMMES_HTSTAYS_OVERNIGHTSTAYS | |
|---|---|---|
| 0 | 01/01/2022 | 2204984 |
| 1 | 2022-02-01 | 2892697 |
| 2 | 2022-03-01 | 3053960 |
| 3 | 2022-04-01 | 2523861 |
| 4 | 2022-05-01 | 2820085 |
Nous allons tracer les données mensuelles comme suit :
12345df_data = hdf_overnightstays_agg.collect()
df_data.plot(x='MONTH')
plt.xticks( rotation='vertical')
plt.show()