Dans la prévision univariée, nous avons modélisé toutes les nuitées comme une série chronologique combinée. Cependant, les scénarios réels nécessitent souvent des prévisions distinctes pour chaque sous-groupe, telles que les régions, les produits ou, dans ce cas, les pays de résidence. Dans cette leçon, vous apprendrez à préparer le jeu de données pour prendre en charge la prévision de séries temporelles groupées en filtrant et en agrégeant les données par pays.
Préparation de l'ensemble de données pour le scénario multivarié
Dans la section précédente, nous nous sommes concentrés sur le scénario de modélisation de séries chronologiques univariées dans lequel nous avons agrégé toutes les nuitées restantes en valeurs mensuelles et prévu les 12 mois suivants.
Dans cette section, nous nous concentrons sur le scénario de modélisation de séries temporelles multivariées dans lequel nous créons des prévisions individuelles pour les pays d'où viennent la plupart des visiteurs.
Par conséquent, découvrons le top 10 des pays avec le plus de nuitées.
12hdf_overnightstays = conn.table('OVERNIGHTSTAYS')
hdf_overnightstays.agg([('sum', 'OVERNIGHTSTAYS', 'TOTAL')], group_by='COUNTRYOFRESIDENCE' ).sort('TOTAL', desc=True).head(10).collect()| COUNTRYOFRESIDENCE | TOTAL | |
|---|---|---|
| 0 | Suisse | 50087144 |
| 1 | Allemagne | 8885041 |
| 2 | United States | 6365130 |
| 3 | Royaume-Uni | 3726785 |
| 4 | France | 3279915 |
| 5 | Italie | 2027511 |
| 6 | Pays-Bas | 1676202 |
| 7 | Belgique | 1282186 |
| 8 | Inde | 1210124 |
| 9 | Espagne | 1056512 |
Nous devons utiliser la liste des pays susmentionnés comme filtre sur l'ensemble de la table.
Pour ce faire, vous pouvez créer une liste de valeurs séparées par des virgules pour une "clause where" comme indiqué ci-dessous :
12345678countries = hdf_overnightstays.agg([('sum', 'OVERNIGHTSTAYS', 'TOTAL')], group_by='COUNTRYOFRESIDENCE') \
.sort('TOTAL', desc=True).select('COUNTRYOFRESIDENCE').head(10).collect() \
.iloc[:,0].tolist()
countries = str(countries)
countries = countries.replace('[', '(')
countries = countries.replace(']', ')')
countries"('Suisse', 'Allemagne', 'États-Unis', 'Royaume-Uni', 'France', 'Italie', 'Pays-Bas', 'Belgique', 'Inde', 'Espagne')"
Pour le moment, le DataFrame SAP HANA contient uniquement des informations sur les 10 premiers pays susmentionnés.
Ensuite, nous agrégeons à nouveau le jeu de données, mais cette fois-ci par mois et par pays. Par conséquent, nous sommes en mesure de créer des prévisions propres à chaque pays.
12hdf_overnightstays = hdf_overnightstays.filter(f'''"COUNTRYOFRESIDENCE" IN {countries}''')
hdf_overnightstays.head(10).collect()| MOIS | REGION | COUNTRYOFRESIDENCE | OVERNIGHTSTAYS | |
|---|---|---|---|---|
| 0 | 2022-01-01 | Oblast de Fribourg | Inde | 0 |
| 1 | 01/01/2022 | Grisons | Italie | 10083 |
| 2 | 01/01/2022 | Grisons | Espagne | 1586 |
| 3 | 01/01/2022 | Suisse orientale | Italie | 1167 |
| 4 | 01/01/2022 | Suisse orientale | Espagne | 212 |
| 5 | 01/01/2022 | Région de Zurich | Espagne | 2949 |
| 6 | 01/01/2022 | Lucerne / Lac de Lucerne | Espagne | 523 |
| 7 | 01/01/2022 | Région de Bâle | Italie | 1356 |
| 8 | 01/01/2022 | Région de Bâle | Espagne | 672 |
| 9 | 01/01/2022 | Région de Berne | Italie | 2724 |
Maintenant, nous agrégeons les nuitées par mois et par pays comme indiqué ci-dessous :
123hdf_overnightstays_agg = hdf_overnightstays.agg([('sum', 'OVERNIGHTSTAYS', 'OVERNIGHTSTAYS_SUM')], group_by=['MONTH', 'COUNTRYOFRESIDENCE'])
hdf_overnightstays_agg = hdf_overnightstays_agg.sort('MONTH')
hdf_overnightstays_agg.head(5).collect()| MOIS | COUNTRYOFRESIDENCE | SOMMES_HTSTAYS_OVERNIGHTSTAYS | |
|---|---|---|---|
| 0 | 01/01/2022 | Inde | 4701 |
| 1 | 01/01/2022 | France | 63084 |
| 2 | 01/01/2022 | Italie | 43065 |
| 3 | 01/01/2022 | Allemagne | 206477 |
| 4 | 01/01/2022 | Belgique | 26172 |
Préparons ensuite l'ensemble de données pour tracer les nuitées dans le temps pour chaque pays comme suit :
12hdf_overnightstays_plot = hdf_overnightstays_agg.pivot_table(values='OVERNIGHTSTAYS_SUM', index='MONTH', columns='COUNTRYOFRESIDENCE', aggfunc='sum').collect()
hdf_overnightstays.collect()| MOIS | REGION | COUNTRYOFRESIDENCE | OVERNIGHTSTAYS | |
|---|---|---|---|---|
| 0 | 01/01/2022 | Oblast de Fribourg | Inde | 0 |
| 1 | 01/01/2022 | Grisons | Italie | 10083 |
| 2 | 01/01/2022 | Grisons | Espagne | 1586 |
| 3 | 01/01/2022 | Suisse orientale | Italie | 1167 |
| 4 | 01/01/2022 | Suisse orientale | Espagne | 212 |
| ... | ... | ... | ... | ... |
| 3765 | 2024-05-01 | Genève | Inde | 6887 |
| 3766 | 01/05/2024 | Valais | Inde | 4866 |
| 3767 | 01/05/2024 | Tessin | Inde | 2215 |
| 3768 | 01/05/2024 | Oblast de Fribourg | Inde | 157 |
| 3769 | 01/05/2024 | Région d'Argovie et de Soleure | Inde | 3954 |
3770 lignes × 4 colonnes
Nous générons le tracé comme suit :
12345hdf_overnightstays_plot.plot(x='MONTH').legend(loc='center left',bbox_to_anchor=(1.0, 0.5));
plt.xticks(rotation='vertical')
plt.grid()
plt.show()
L'intrigue précédente est densément peuplée. Ainsi, nous décidons de nous concentrer sur les deux premiers pays étrangers les plus populaires.
Ensuite, nous créons un complot uniquement pour l'Allemagne et les États-Unis.
12345hdf_overnightstays_plot[['MONTH', 'Germany', 'United States']].plot(x='MONTH').legend(loc='center left',bbox_to_anchor=(1.0, 0.5));
plt.xticks(rotation='vertical')
plt.grid()
plt.show()
En regardant l'intrigue ci-dessus, nous identifions des similitudes dans les nuitées pour les deux pays, où la saison estivale est plus évidente.
Les prévisions individuelles pour chaque pays peuvent saisir ces modèles individuels.