On doit pouvoir separer les touristes des travailleurs - entre saisonnalitƩ annuelle et tendance - entre semaine et WE (travailleur / maison secondaire ) - entre saisonalitƩ trimestrielle (ski / plage)
Les travailleurs ne travaillent pas pendant les vacances (ā¦), donc le mieux Ć faire est quāon enleve la moyenne des deplacements hors vacances scolaire Ć la courbe de nuitĆ©es.
vacances_tsbl <- vacances_tsbl() %>%
mutate(vacances = as.numeric(vacances) * max(nuitees_tsbl()$nuitees , na.rm = TRUE))
# avoid the 13 errors (1 unique) encountered for STL(nuitees ~ season(window = Inf))
# [13] STL decomposition does not support series with missing values.
nuitees_ts_filled <- nuitees_td %>%
as_tsibble(index= date, key=dep) %>%
group_by_key() %>%
fill_gaps() %>%
ungroup %>%
tidyr::fill(nuitees, dep, .direction = "down")
## Warning: Factor `dep` contains implicit NA, consider using
## `forcats::fct_explicit_na`
## Warning: Factor `dep` contains implicit NA, consider using
## `forcats::fct_explicit_na`
On constate visuellement une faible saisonnalitĆ© sur la courbe du dep_31. Mais est-ce confirmĆ© par le calcul, et est-ce le cas pour dāautres departements ?
nuitees_stlf <-nuitee_ts %>% features(nuitees, feat_stl)
nuitees_stlf %>% arrange(desc(trend_strength))
## # A tibble: 13 x 10
## dep trend_strength seasonal_streng⦠seasonal_peak_w⦠seasonal_troughā¦
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 66 0.984 0.404 6 0
## 2 46 0.981 0.513 6 0
## 3 34 0.981 0.480 6 0
## 4 12 0.979 0.611 6 0
## 5 48 0.978 0.503 6 0
## 6 11 0.977 0.371 6 0
## 7 30 0.975 0.496 6 0
## 8 32 0.961 0.504 6 0
## 9 09 0.959 0.422 6 0
## 10 81 0.949 0.542 6 0
## 11 82 0.939 0.486 6 0
## 12 65 0.919 0.341 6 0
## 13 31 0.796 0.437 6 0
## # ⦠with 5 more variables: spikiness <dbl>, linearity <dbl>, curvature <dbl>,
## # stl_e_acf1 <dbl>, stl_e_acf10 <dbl>
nuitees_stlf %>% arrange(seasonal_peak_week)
## # A tibble: 13 x 10
## dep trend_strength seasonal_streng⦠seasonal_peak_w⦠seasonal_troughā¦
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 09 0.959 0.422 6 0
## 2 11 0.977 0.371 6 0
## 3 12 0.979 0.611 6 0
## 4 30 0.975 0.496 6 0
## 5 31 0.796 0.437 6 0
## 6 32 0.961 0.504 6 0
## 7 34 0.981 0.480 6 0
## 8 46 0.981 0.513 6 0
## 9 48 0.978 0.503 6 0
## 10 65 0.919 0.341 6 0
## 11 66 0.984 0.404 6 0
## 12 81 0.949 0.542 6 0
## 13 82 0.939 0.486 6 0
## # ⦠with 5 more variables: spikiness <dbl>, linearity <dbl>, curvature <dbl>,
## # stl_e_acf1 <dbl>, stl_e_acf10 <dbl>
Oumpf, personne nāaurait envie de lire des tableaux aussi absconts, faisons donc un plot !
nuitees_stlf %>%
ggplot(aes(x = trend_strength, y = seasonal_strength_week, label=dep)) +
geom_point()+
geom_text_repel()
Ah ! Oui ! la Haute Garonne se distingue bien largement de ses voisins dāOccitanie. On creusera par origine pour decouvrir dāou viennent les voyageurs qui contribuent à ça.
Voyons dans les faits ce quāon mesure par une visualisation de la dĆ©composition : Cāest trĆØs curieux, le distingo sāĆ©tablit Ć lāoeil sur la tendance, pas sur la composante hebdomadaire.
Pour pouvoir dire āCette serie cāest -majoritairement- des travailleursā Il faudrait avoir un pattern du genre celui-ci [https://slides.mitchelloharawild.com/user2019/#10]
i.e.Ā avec une influence nĆ©gative des weekends, qund les usages des dĆ©placements sont clairement sĆ©parĆ©s.. Ici, qqsoit la sĆ©rie, cāest un mĆ©langeā¦
## Plot variable not specified, automatically selected `.vars = season_7`
## Plot variable not specified, automatically selected `.vars = season_7`
On voit trĆØs bien quāil y a quelque chose Ć dire ici ! On a meme envie de balancer des small multiples sur chaque departement ! Ća donne meme envie de le faire sur chaque dĆ©partement dāorigine, meme si Ƨa risque de faire un pĆ¢tĆ©ā¦
Relançons la meme analyse sur la tendance seulement i.e. sur le dataset capacite
hebergement_stlmod <-hebergement_ts %>%
model(STL(touristes ~ season(window = 31)))
components(hebergement_stlmod) %>% autoplot +
theme(legend.position = "bottom") +
scale_x_date(expand = c(0,0))
On nāapprends rien avec ce gg_tsdisplayā¦
# TODO errors (2 unique) encountered for ets
#[936] .data contains implicit gaps in time. You should check your data and convert implicit gaps into explicit missing values using `tsibble::fill_gaps()` if required.
origines_ts <- origines_ts %>%
group_by_key() %>%
fill_gaps() %>%
tidyr::fill(volume, .direction = "down")
origine_ts_mean <- origines_ts %>% as_tibble %>% group_by(dep_org, dep) %>% summarize_at("volume", mean, na.rm=T)
Le package feats doit nous donner naturellement des viz de la mort:
# origines_feats <-origines_ts %>% features(volume, feat_stl)
# TODO ajoutons l'importance des arrivees sur chacun des points pour en obtenir l'importance
# BUG les series ne sont pas assemblables ( pas d'ordonnancement commun sur les facteurs)
origines_feats <-bind_cols(
origines_ts %>% features(volume, feat_stl, )%>% arrange(.by_group=T),
origine_ts_mean %>% select(volume)
)
## Warning: 1 error encountered for feature 1
## [1] series is not periodic or has less than two periods
## Adding missing grouping variables: `dep_org`
# TODO consider volume in the stat_density_2d
origines_feats %>%
ggplot(aes(x = trend_strength, y = seasonal_strength_week, size = volume) ) +
geom_point() +
stat_density_2d(aes(fill = after_stat(nlevel)), geom = "polygon", alpha=0.2) +
facet_wrap(vars(dep)) +
scale_fill_viridis_c(option = "A")
## Warning: Removed 18 rows containing non-finite values (stat_density2d).
## Warning: Removed 18 rows containing missing values (geom_point).
# TODO turn it 3d with library(rayshader)
cāest vraiement beau, mais jāai pas lāhistoire a raconter avecā¦
On duplique artificiellement la serie sur 5 ans et on cherche des saisonnalites plus longues
heberg_stl_5y <- heberg_ts_5ans %>%
model(STL(touristes ~ season(period="1 month") ))
heberg_stl_5y %>%
components() %>%
# filter(semaine<=yearweek("2018 W52")) %>%
autoplot(.vars = touristes) +
theme(legend.position = "bottom") +
scale_x_date(expand = c(0,0))
Il y a un truc interessant au mois de Mai, avec un comportement different des differents departements, mais pas le tempos de creuser iciā¦