# Projet collaboratif : rendu de mi-semestre

# Hanjoon Ko, Noureen Mansour Farid, Solène Tagmount, Gracia Yan


# Librairies --------------------------------------------------------------

library(skimr)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.1      ✔ purrr   1.0.1 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.4.1 
## ✔ readr   2.1.2      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(gplots)
## 
## Attachement du package : 'gplots'
## 
## L'objet suivant est masqué depuis 'package:stats':
## 
##     lowess
library(readr)
library(esquisse)
library(ggplot2)
library(gganimate)
library(gifski)
library(plotly)
## 
## Attachement du package : 'plotly'
## 
## L'objet suivant est masqué depuis 'package:ggplot2':
## 
##     last_plot
## 
## L'objet suivant est masqué depuis 'package:stats':
## 
##     filter
## 
## L'objet suivant est masqué depuis 'package:graphics':
## 
##     layout
# Importation des données -------------------------------------------------

Regularities_by_liaisons_Trains_France <- read_csv("Regularities_by_liaisons_Trains_France.csv")
## Rows: 7806 Columns: 32
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (4): Departure station, Arrival station, Comment (optional) delays on a...
## dbl (27): Year, Month, Average travel time (min), Number of expected circula...
## lgl  (1): Comment (optional) delays at departure
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
View(Regularities_by_liaisons_Trains_France)

Trains <- Regularities_by_liaisons_Trains_France


# Introduction ----------------------------------------------------------------------------------------------------


# "Depuis le lancement de la nouvelle LGV entre Bordeaux et Paris avec 19 aller-retours par jour pour que les actionnaires de Vinci s'en mettent plein les poches, rien ne va plus en gare Montparnasse où les problèmes techniques s'enchaînent."
# Source: https://blogs.mediapart.fr/revue-frustration/blog/300717/depuis-quand-le-train-n-est-il-plus-un-service-public

# Ce jeu de données présente les circulations de trains sur des longues distances entre 2015 et 2020.
# L'arrivée progressive de la concurrence sur les lignes feroviaires en France nous permet de repenser la place de la SNCF dans nos trajets à travers ces dernières années.
# Nous nous intéresserons à la diversité de l'offre, les problèmes rencontrés ainsi que leurs causes et impacts.



# I. Analyse sommaire du jeu de données -----------------------------------------------------------------------

     ## 1. Combien de trains circulent en moyenne par mois entre 2015 et 2020 ? Est-ce régulier? ------------------------------------------


Trains %>% 
  group_by(Year) %>% 
  summarise(circulations_moyenne = mean(`Number of expected circulations`, na.rm = TRUE))
## # A tibble: 6 × 2
##    Year circulations_moyenne
##   <dbl>                <dbl>
## 1  2015                 289.
## 2  2016                 278.
## 3  2017                 291.
## 4  2018                 266.
## 5  2019                 257.
## 6  2020                 172.
# Entre 2015 et 2019, le nombre moyen de circulations par mois varie entre 291 et 257 trains.
# A partir de 2020, on remarque une chute du nombre de trains en circulations, 117 trains en moins par rapport a 2015. Soit une diminution de 4%.
# Cette chute s'explique certainement par le début de la crise du Covid 19 qui impliquait une limitation des circulations et des confinements.

     ## 2. Combien de trains sont annulés en moyenne par mois ? Ce chiffre est-il stable chaque année? ------------------------------------------


Trains %>% 
  group_by(Year) %>% 
  summarise(annulations_moyenne = mean(`Number of cancelled trains`, na.rm = TRUE))
## # A tibble: 6 × 2
##    Year annulations_moyenne
##   <dbl>               <dbl>
## 1  2015               0.690
## 2  2016               4.63 
## 3  2017               2.85 
## 4  2018              20.3  
## 5  2019               6.74 
## 6  2020              12.5
# Nous constatons que la moyenne des annulations varie en fonction des années.

# Par exemple, en 2015, 0,690 train était annulé en moyenne, soit même pas un train. Tandis qu'en 2016, près de 5 trains par mois sont annulés.
# En 2017, le nombre moyen de trains annulés retombe à près de 3.
# En 2018, je constate un fort taux d'annulation des trains par rapport aux années précédentes (environ 20). 

# Ces nombreuses annulations sont sûrement dûes au mouvement de grève contre la réforme ferroviaire. D'après nos recherches sur cette grève, "deux jours sur cinq du 3 avril au 28 juin 2018, a coûté environ 890 millions d'euros de manque-à-gagner de chiffre d'affaires et amputé de 790 millions la marge opérationnelle"
# Source : https://www.ledauphine.com/france-monde/2019/03/01/la-greve-fait-fondre-le-benefice-de-la-sncf-en-2018

# En 2019, le nombre d'annulations retombe à environ 7 trains.
# Enfin, en 2020, le nombre moyen d'annulations augmente suite à la crise du Covid 19.
# Entre 2015 et 2020, le taux de variation moyen du nombre d'annulation est d'environ 1%.

    ## 3. Quelles sont les lignes les plus impactées par les annulations? ------------------------------------------


Trains %>% 
  group_by(`Departure station`, `Arrival station`) %>% 
  summarise(moyenne = mean(`Number of expected circulations`, na.rm = TRUE), moyenne_annulations = mean(`Number of cancelled trains`, na.rm = TRUE)) %>% 
  arrange(-moyenne_annulations)
## `summarise()` has grouped output by 'Departure station'. You can override using
## the `.groups` argument.
## # A tibble: 130 × 4
## # Groups:   Departure station [59]
##    `Departure station`  `Arrival station`    moyenne moyenne_annulations
##    <chr>                <chr>                  <dbl>               <dbl>
##  1 BORDEAUX ST JEAN     PARIS MONTPARNASSE      717.                29.8
##  2 PARIS MONTPARNASSE   BORDEAUX ST JEAN        668.                24.6
##  3 LYON PART DIEU       MARNE LA VALLEE         252.                24.0
##  4 RENNES               PARIS MONTPARNASSE      558.                20.6
##  5 LYON PART DIEU       MARSEILLE ST CHARLES    488.                19.5
##  6 PARIS MONTPARNASSE   RENNES                  551.                19.2
##  7 PARIS NORD           LILLE                   557.                18.0
##  8 MARNE LA VALLEE      LYON PART DIEU          296.                17.9
##  9 LILLE                PARIS NORD              546.                17.7
## 10 MARSEILLE ST CHARLES LYON PART DIEU          473.                17.7
## # … with 120 more rows
# La liaison Bordeaux Saint Jean - Paris Montparnasse a le plus grand nombre d'annulations avec 29,8 trains annulés par mois en moyenne. En second, vient Paris Montparnasse - Bordeaux Saint Jean avec 24,6 trains annulés.
# Ces deux liaisons rassemblent le plus grand nombre moyen d'annulations, ce qui n'est pas étonnant puisque ce sont les destinations qui comptabilisent le plus de circulations.
# En troisième position, nous avons Lyon Part Dieu - Marne La Vallée avec 24 trains annulés.
# Les grandes villes proposent davantage de trains donc il est plus probable qu'ils comptent un nombre relativement plus élevé d'annulations.

# En moyenne, 717 trains doivent circuler par mois de 2015 et 2020 depuis Bordeaux Saint Jean jusqu'à Paris Montparnasse.
# En moyenne, 668 trains doivent circuler par mois de Paris Montparnasse à Bordeaux Saint Jean.
# Ainsi, 1385 trains auraient du être proposés en moyenne entre Paris et Bordeaux.

# Les annulations ont été de 4% pour la première liaison et de 3% pour la deuxième liaison.

    ## 4. Quels sont les trajets les plus longs ? Les plus courts ? --------------------------------------------------------------


Trains %>% 
  mutate(duree_heures = `Average travel time (min)`/60) %>% 
  select(duree_heures, `Departure station`, `Arrival station`) %>% 
  arrange(-duree_heures)
## # A tibble: 7,806 × 3
##    duree_heures `Departure station`  `Arrival station`   
##           <dbl> <chr>                <chr>               
##  1        13.1  STRASBOURG           NANTES              
##  2         8.21 MADRID               MARSEILLE ST CHARLES
##  3         8.02 MADRID               MARSEILLE ST CHARLES
##  4         8.02 MADRID               MARSEILLE ST CHARLES
##  5         8.02 MADRID               MARSEILLE ST CHARLES
##  6         8.02 MADRID               MARSEILLE ST CHARLES
##  7         7.98 MADRID               MARSEILLE ST CHARLES
##  8         7.87 MADRID               MARSEILLE ST CHARLES
##  9         7.85 MADRID               MARSEILLE ST CHARLES
## 10         7.73 MARSEILLE ST CHARLES MADRID              
## # … with 7,796 more rows
# On constate que la distance parcourue la plus longue est Strasbourg vers Nantes ce qui paraît très surprenant. Le trajet est de 786 minutes soit, 13H01min.
# Il y a sûrement eu des perturbations mais qui ne sont pas mentionnées.

# Puis, Madrid - Marseille avec une durée de 493min soit, 8H21min. Ce qui est assez court puisque aujourd'hui, il est possible de faire ce trajet en 10h22 en moyenne avec 2 connexions (SNCF Connect).



Trains %>% 
  select(`Average travel time (min)`, `Departure station`, `Arrival station`) %>% 
  arrange(`Average travel time (min)`)
## # A tibble: 7,806 × 3
##    `Average travel time (min)` `Departure station` `Arrival station`
##                          <dbl> <chr>               <chr>            
##  1                        35.9 BARCELONA           PARIS LYON       
##  2                        46.0 PARIS EST           REIMS            
##  3                        46.0 PARIS EST           REIMS            
##  4                        46.0 PARIS EST           REIMS            
##  5                        46.0 PARIS EST           REIMS            
##  6                        46.0 PARIS EST           REIMS            
##  7                        46.0 PARIS EST           REIMS            
##  8                        46.0 PARIS EST           REIMS            
##  9                        46.0 PARIS EST           REIMS            
## 10                        46.0 REIMS               PARIS EST        
## # … with 7,796 more rows
# Pour les trajets les plus courts, on constate que le trajet Barcelone - Paris Lyon arrive en première position avec 35,9min, ce qui est étrange étant donné la distance entre les deux villes.
# Viennent ensuite les trajets Paris Est à Reims et Reims vers PAris Est avec un temps de trajet de 46min, ce qui est tout à fait cohérent.

    ## 5. Quelle est la durée des trajets au départ de Paris ? ------------------------------------

# Regardons la durée pour chaque connexion au départ des différentes gares de Paris.


Trains %>% 
  filter(`Departure station` == "PARIS MONTPARNASSE") %>% 
  group_by(Year) %>% 
  summarise(trajet_moyen = mean(`Average travel time (min)`, na.rm = TRUE)) %>% 
  mutate(heures_trajet = trajet_moyen/60)
## # A tibble: 6 × 3
##    Year trajet_moyen heures_trajet
##   <dbl>        <dbl>         <dbl>
## 1  2015         162.          2.69
## 2  2016         162.          2.70
## 3  2017         147.          2.46
## 4  2018         135.          2.26
## 5  2019         136.          2.27
## 6  2020         137.          2.29
Paris_montparnasse <-
  Trains %>%
  filter(`Departure station` == "PARIS MONTPARNASSE") %>%
  group_by(Year) %>%
  summarise(trajet_moyen = mean(`Average travel time (min)`, na.rm = TRUE)) %>%
  mutate(heures_trajet = trajet_moyen/60) %>%
  ggplot() +
  aes(x = Year, y = heures_trajet, fill = heures_trajet) +
  geom_col() +
  scale_x_continuous(breaks = seq(2015, 2020, 1)) +
  scale_fill_viridis_c("") +
  labs(x = "Année", y = "Heures de trajet", 
       title = "Temps d'un trajet au départ de Paris-Montparnasse",
       fill = "Temps", caption = "Université Paris Nanterre DES 22/23
      Projet collaboratif")

Paris_montparnasse + transition_states(Year, wrap = FALSE) + shadow_mark()

# Les trajets sont relativement courts et à partir de 2016, la moyenne diminue. Les destinations au départ de Montparnasse vont vers le Grand Ouest ce qui explique la courte durée.


Paris_nord <-
  Trains %>%
  filter(`Departure station` == "PARIS NORD") %>%
  group_by(Year) %>%
  summarise(trajet_moyen = mean(`Average travel time (min)`, na.rm = TRUE)) %>%
  mutate(heures_trajet = trajet_moyen/60) %>%
  ggplot() +
  aes(x = Year, y = heures_trajet, fill = heures_trajet) +
  geom_col() +
  scale_x_continuous(breaks = seq(2015, 2020, 1)) +
  scale_y_continuous(breaks = seq(0,2, 0.2)) +
  scale_fill_distiller(palette = "GnBu") +
  labs(x = "Année", y = "Heures de trajet",
       title = "Temps d'un trajet au départ de Paris-Nord", fill = "Durée du trajet", caption = "Université Paris Nanterre DES 22/23
      Projet collaboratif")

Paris_nord + transition_states(Year, wrap = FALSE) + shadow_mark()

# Les heures moyennes de trajets au départ de Paris Nord varient entre 1h23 et 1h31, ce qui est encore plus court puisque les destinations ne sont pas très éloignées.


Paris_lyon <-
  Trains %>%
  filter(`Departure station` == "PARIS LYON") %>%
  group_by(Year) %>%
  summarise(trajet_moyen = mean(`Average travel time (min)`, na.rm = TRUE)) %>%
  mutate(heures_trajet = trajet_moyen/60) %>%
  ggplot() +
  aes(x = Year, y = heures_trajet, fill = heures_trajet) +
  geom_col() +
  scale_x_continuous(breaks = seq(2015, 2020, 1)) +
  scale_y_continuous(breaks = seq(0,2, 0.2)) +
  scale_fill_distiller(palette = "GnBu") +
  labs(x = "Année", y = "Heures de trajet", title = "Temps d'un trajet au départ de Paris-Lyon",
       caption = "Université Paris Nanterre DES 22/23
      Projet collaboratif")

Paris_lyon + transition_states(Year, wrap = FALSE) + shadow_mark()

# Au départ de la Gare de Lyon à Paris, les trajets durent en moyenne 3h. 


Paris_est <-
  Trains %>%
  filter(`Departure station` == "PARIS EST") %>%
  group_by(Year) %>%
  summarise(trajet_moyen = mean(`Average travel time (min)`, na.rm = TRUE)) %>%
  mutate(heures_trajet = trajet_moyen/60) %>%
  ggplot() +
  aes(x = Year, y = heures_trajet, fill = heures_trajet) +
  geom_col() +
  scale_x_continuous(breaks = seq(2015, 2020, 1)) +
  scale_y_continuous(breaks = seq(0,2, 0.2)) +
  scale_fill_distiller(palette = "GnBu") +
  labs(x = "Année", y = "Heures de trajet", title = "Temps d'un trajet au départ de Paris-Est",
       caption = "Université Paris Nanterre DES 22/23
      Projet collaboratif")

Paris_est + transition_states(Year, wrap = FALSE) + shadow_mark()

# Depuis Paris Est, les trajets sont en moyenne de 1h30 et 2h, on a des destiantions très proches, situées avant le Grand Est comme des destinations allemandes.


# En fonction des gares de départ je constate que le temps de trajet est différent mais reste relativement court puisque entre les grandes gares il y a principalement des TGV qui circulent.
# Les liaisons comprenant Paris sont donc rapides et il est possible que les individus favorisent ce moyen de locomotion pour partir à proximité pendant les weekends par exemple.

    ## 6. Combien de trains étaient en retard ? ------------------------------------

skim(Trains$`Number of late trains at departure`)
Data summary
Name Trains$Number of late tra…
Number of rows 7806
Number of columns 1
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
data 0 1 63.52 78.82 0 12 33 84 591 ▇▁▁▁▁
# En moyenne, 63.5 trains par mois étaient présentaient un retard au départ.


Trains %>%
  count(`Number of late trains at departure`<1)
## # A tibble: 2 × 2
##   `\`Number of late trains at departure\` < 1`     n
##   <lgl>                                        <int>
## 1 FALSE                                         7669
## 2 TRUE                                           137
# Parmi 7806 lignes de trains de 2015 à 2020, il y a 137 lignes qui n'étaient jamais en retard au départ


Trains %>%
  count(`Number of late trains at departure`>500)
## # A tibble: 2 × 2
##   `\`Number of late trains at departure\` > 500`     n
##   <lgl>                                          <int>
## 1 FALSE                                           7797
## 2 TRUE                                               9
Trains %>%
  arrange(-`Number of late trains at departure`)
## # A tibble: 7,806 × 32
##     Year Month Departu…¹ Arriv…² Avera…³ Numbe…⁴ Numbe…⁵ Numbe…⁶ Avera…⁷ Avera…⁸
##    <dbl> <dbl> <chr>     <chr>     <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1  2019    10 PARIS MO… BORDEA…   150.      784      41     591    5.80    4.48
##  2  2019     9 PARIS MO… BORDEA…   151.      806       4     562    5.49    3.69
##  3  2020     2 PARIS MO… BORDEA…   148.      716       6     562    2.63    1.97
##  4  2020     2 PARIS NO… LILLE      66.4     597       6     558    4.01    3.77
##  5  2019    11 PARIS MO… BORDEA…   146.      738      29     548    6.53    4.92
##  6  2020     1 PARIS NO… LILLE      66.3     596      25     532    4.50    4.17
##  7  2019     6 LYON PAR… PARIS …   121.      625      25     503    4.21    3.51
##  8  2019    10 LYON PAR… PARIS …   121.      622      15     503    4.56    3.75
##  9  2019     6 PARIS MO… BORDEA…   152.      774       7     501    7.85    4.95
## 10  2019     9 LYON PAR… PARIS …   121.      601       5     482    3.69    2.95
## # … with 7,796 more rows, 22 more variables:
## #   `Comment (optional) delays at departure` <lgl>,
## #   `Number of trains late on arrival` <dbl>,
## #   `Average delay of late arriving trains (min)` <dbl>,
## #   `Average delay of all arriving trains (min)` <dbl>,
## #   `Comment (optional) delays on arrival` <chr>,
## #   `% trains late due to external causes (weather, obstacles, suspicious packages, malevolence, social movements, etc.)` <dbl>, …
# Cependant, sur un mois, 9 lignes avaient plus de 500 trains en retard au départ et sur ces 9, 7 lignes partaient de Paris et 2 partaient de Lyon.





# II. Analyse du retard -----------------------------------------------------------------------

    ## 1. Y a-t-il une relation entre la durée moyenne du trajet et la proportion de retard au départ ? -------------------------------------


# Créons une nouvelle colonne pour connaître le nombre de trains qui ont effectivement circulé.

Trains <- Trains %>%
  mutate(number_trains =`Number of expected circulations` - `Number of cancelled trains`)


# Pour analyser le pourcentage du nombre de trains, je divise le nombre de trains en retard au départ,par le nombre de circulations prévues.

Trains <- Trains %>%
  mutate("prct_retard_depart" = `Number of late trains at departure`/ number_trains)

skim(Trains$prct_retard_depart)
Data summary
Name Trains$prct_retard_depart
Number of rows 7806
Number of columns 1
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
data 63 0.99 0.27 0.27 0 0.06 0.15 0.41 1 ▇▂▁▁▁
# Le pourcentage moyen du retard au départ est de 26.7 %.


Trains %>%
  filter(prct_retard_depart < 0.1) %>%
  count()
## # A tibble: 1 × 1
##       n
##   <int>
## 1  2948
# Parmi 7806 lignes, 37 % montrent un retard de moins de 10 % (2948) de leur offre sur 5 ans.



Trains %>%
  filter(prct_retard_depart > 0.9) %>%
  arrange()
## # A tibble: 215 × 34
##     Year Month Departu…¹ Arriv…² Avera…³ Numbe…⁴ Numbe…⁵ Numbe…⁶ Avera…⁷ Avera…⁸
##    <dbl> <dbl> <chr>     <chr>     <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1  2019     7 LE MANS   PARIS …    62.4     435       5     391    3.90    3.53
##  2  2019     7 GENEVE    PARIS …   187.      212       8     200    5.67    5.41
##  3  2018    11 STUTTGART PARIS …   191.      146       4     133    5.32    5.00
##  4  2019     6 ZURICH    PARIS …   234.      144       0     144    2.98    2.98
##  5  2018     2 STUTTGART PARIS …   189.      136       3     121    5.14    4.73
##  6  2019     5 LAUSANNE  PARIS …   207.      145       0     132    2.32    2.07
##  7  2016    12 ITALIE    PARIS …   274.       14       0      14  174.    174.  
##  8  2019     7 AIX EN P… PARIS …   189.      433       0     413    5.87    5.59
##  9  2019     7 TOULON    PARIS …   249.      321       0     289    5.39    4.82
## 10  2019     7 STUTTGART PARIS …   202.      168      29     136    8.09    7.86
## # … with 205 more rows, 24 more variables:
## #   `Comment (optional) delays at departure` <lgl>,
## #   `Number of trains late on arrival` <dbl>,
## #   `Average delay of late arriving trains (min)` <dbl>,
## #   `Average delay of all arriving trains (min)` <dbl>,
## #   `Comment (optional) delays on arrival` <chr>,
## #   `% trains late due to external causes (weather, obstacles, suspicious packages, malevolence, social movements, etc.)` <dbl>, …
# Cependant, 215 lignes présentent un retard sur plus de 90% de leurs trains sur la période de 2015 à 2020.

          ### Relation -------------------------------------

plot(Trains$prct_retard_depart ~ Trains$`Average travel time (min)`)

cor(Trains$prct_retard_depart, Trains$`Average travel time (min)`, use = "complete.obs")
## [1] -0.02471527
# Il n'y a pas de corrélation significative entre la durée moyenne de trajet et le pourcentage du retard au départ (R = -0.02)


plot_duree_prct <- ggplot(Trains) +
  aes(x = `Average travel time (min)`, y = prct_retard_depart, colour = Year) +
  geom_point(shape = "circle", size = 1.5) +
  scale_color_viridis_c(breaks = c(2015,2016,2017,2018,2019,2020), direction = 1) +
  labs(title = "Relationentre la durée moyenne de trajet et le pourcentage du retard au départ",
       subtitle = "De 2015 à 2020", caption = "Université Paris Nanterre DES 22/23
      Projet collaboratif", 
       color = "Année", x = "Durée moyenne de trajet (min)", y = "Pourcentage du retard au départ (%)") +
  theme_minimal()


animate(plot_duree_prct + transition_time(Year) + ease_aes('cubic-in-out'), height = 600, width =800)
## Warning: Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
## Removed 63 rows containing missing values (`geom_point()`).
cor(Trains$Year, Trains$prct_retard_depart, use = "complete.obs")
## [1] 0.6713209
# Mais, on peut trouver qu'il y a une corrélation positive (R = 0.65) entre l'année et le pourcentage du retard.
# Dans le nuage de points, on voit que les années les plus récentes sont plus présentes vers le haut du graphique donc leur taux de retard est plus élevé que celui des années précédentes.


Trains %>%
  filter(Year == 2015) %>%
  skim(prct_retard_depart)
Data summary
Name Piped data
Number of rows 1344
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
prct_retard_depart 0 1 0.09 0.11 0 0.03 0.06 0.11 0.77 ▇▁▁▁▁
Trains %>%
  filter(Year == 2016) %>%
  skim(prct_retard_depart)
Data summary
Name Piped data
Number of rows 1344
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
prct_retard_depart 0 1 0.11 0.12 0 0.04 0.06 0.13 1 ▇▁▁▁▁
Trains %>%
  filter(Year == 2017) %>%
  skim(prct_retard_depart)
Data summary
Name Piped data
Number of rows 1344
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
prct_retard_depart 0 1 0.12 0.1 0 0.06 0.09 0.15 0.64 ▇▂▁▁▁
Trains %>%
  filter(Year == 2018) %>%
  skim(prct_retard_depart)
Data summary
Name Piped data
Number of rows 1560
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
prct_retard_depart 0 1 0.28 0.21 0 0.13 0.21 0.4 0.97 ▇▅▂▂▁
Trains %>%
  filter(Year == 2019) %>%
  skim(prct_retard_depart)
Data summary
Name Piped data
Number of rows 1476
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
prct_retard_depart 0 1 0.51 0.28 0 0.28 0.5 0.74 1 ▆▇▅▇▆
Trains %>%
  filter(Year == 2020) %>%
  skim(prct_retard_depart)
Data summary
Name Piped data
Number of rows 738
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
prct_retard_depart 63 0.91 0.66 0.23 0 0.47 0.72 0.84 1 ▁▃▆▇▇
# Le pourcentage moyen du retard au départ est de 9.27% en 2015; 10.8% en 2016; 12.1% en 2017; 28.2% en 2018; 50.7% en 2019 et 65.8% en 2020.


# Le pourcentage de retard au départ des trains augmente au fur et à mesure des années. Cette augmentation s'accélère à partir de 2019.
# Les raisons peuvent être multiples et se superposent sûrement : les grèves de 2019 montrent le mécontentement des salariés face aux emplois supprimés, aux salaires et aux conditions de travail 
# Source (https://www.francetvinfo.fr/economie/transports/sncf/sncf-7-000-emplois-supprimes-entre-2017-et-2019-les-syndicats-toujours-plus-inquiets_4225075.html)
# Selon le "Bilan social 2019" de la SNCF, 7000 postes ont été supprimés entre 2017 et 2019.

    ## 2. Parmi les trains qui étaient en retard au départ, les trains au départ de Paris sont-ils plus retard que les autres ? -------------------------------------

Trains %>%
  filter(`Departure station` == "PARIS EST" |
           `Departure station` == "PARIS LYON" |
           `Departure station` == "PARIS MONTPARNASSE" |
           `Departure station` == "PARIS NORD") -> depart_paris

# Parmi 7806 lignes, il y a 3330 lignes qui partent de Paris (Est, Lyon, Montparnasse, Nord)


Trains %>%
  filter(`Departure station` != "PARIS EST" &
           `Departure station` != "PARIS LYON" &
           `Departure station` != "PARIS MONTPARNASSE" &
           `Departure station` != "PARIS NORD") -> depart_autres

# Ainsi, 4476 lignes partent de d'autres villes incluant des villes étrangères.


depart_paris %>%
  skim(`Average delay of late departing trains (min)`)
Data summary
Name Piped data
Number of rows 3330
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Average delay of late departing trains (min) 0 1 15.82 9.15 0 9.75 15.35 20.67 116.55 ▇▂▁▁▁
# Les trains qui partent de Paris étaient en retard de 15.8 min en moyenne.


depart_autres %>%
  skim(`Average delay of late departing trains (min)`)
Data summary
Name Piped data
Number of rows 4476
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Average delay of late departing trains (min) 0 1 13.94 15.75 0 6.61 12.06 17.32 316.19 ▇▁▁▁▁
# Les trains qui ne partent pas de Paris étaient en retard de 13.9 min en moyenne.


# Mais, y a-t-il une différence entre les gares dans Paris ?

plot_depart_paris <- depart_paris %>% 
  group_by(`Departure station`) %>% 
  summarise(mean_dep = mean(`Average delay of late departing trains (min)`, na.rm = T)) %>%
  ggplot() +
  aes(x =`Departure station`, y = mean_dep, fill=`Departure station`, label = round(mean_dep, 1)) +
  labs(title = "Différence du retard moyen au départ de chaque gare de Paris",
       subtitle = "De 2015 à 2020", 
       caption = "Université Paris Nanterre DES 22/23
       Projet collaboratif",
       x = "Gare de départ", y = "Retard moyen (min)", fill = "Gare de départ") +
  geom_col() +
  geom_text(vjust = -0.5)


animate(plot_depart_paris + transition_states(`Departure station`, wrap = FALSE) + shadow_mark(), height = 600, width =800)

depart_paris %>%
  filter(`Departure station`== "PARIS EST") %>%
  skim(`Average delay of late departing trains (min)`)
Data summary
Name Piped data
Number of rows 396
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Average delay of late departing trains (min) 0 1 15.7 10.67 0 8.99 14.57 20.35 91.67 ▇▃▁▁▁
# Entre 2015 et 2020, la gare de Paris Est a réalisé des trajets sur 396 lignes. En moyenne, le retard était de 15.7 minutes.


depart_paris %>%
  filter(`Departure station`== "PARIS LYON") %>%
  skim(`Average delay of late departing trains (min)`)
Data summary
Name Piped data
Number of rows 1614
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Average delay of late departing trains (min) 0 1 16.13 8.86 0 11 15.97 20.75 116.55 ▇▁▁▁▁
# Pour la gare de Paris Lyon, il y a eu des trajets sur 1614 lignes avec un retard moyen de  16.1 minutes.


depart_paris %>%
  filter(`Departure station`== "PARIS MONTPARNASSE") %>%
  skim(`Average delay of late departing trains (min)`)
Data summary
Name Piped data
Number of rows 1056
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Average delay of late departing trains (min) 0 1 14.8 8.58 0 8.03 14.44 19.94 50.25 ▆▇▃▁▁
# A Paris Montparnasse, on compte 1056 lignes comptabilisant un retard moyen de 14.8 minutes


depart_paris %>%
  filter(`Departure station`== "PARIS NORD") %>%
  skim(`Average delay of late departing trains (min)`)
Data summary
Name Piped data
Number of rows 264
Number of columns 34
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Average delay of late departing trains (min) 0 1 18.15 10.17 0 12.85 17 22.18 74.2 ▆▇▁▁▁
# Enfin, à Paris Nord, la gare réalise des trajets sur 264 lignes et présente un retard moyen de 18.1 minutes.

# Il y a une grande différence de nombre de trajets mensuels et annuels au départ des différentes gares de Paris. 
# Paris Montparnasse comptabilise près de 4 fois plus de liaisons qu'a Paris Nord et Paris Lyon 6 fois plus.
# Malgré le nombre inférieurs de lignes, la moyenne du retard est plus importante au départ de Paris Nord qu'au départ des 3 autres gares. Elle représente 4 minutes de plus que la moyenne des retard des trains au départ de d'autres villes.

    ## 3. Quelles sont les gares les plus touchées par les retards au départ et leurs causes ? -------------------------

Trains %>% 
  select(`Departure station`,`Number of late trains at departure`, `Delay due to external causes`: `Delay due to travellers taken into account`) %>% 
  group_by(`Departure station`) %>% 
  summarize(retard_total = sum(`Number of late trains at departure`, na.rm = TRUE),
            Retard_externe = mean(`Delay due to external causes`, na.rm = TRUE),
            Retard_infrastructure = mean(`Delay due to railway infrastructure`, na.rm = TRUE),
            Retard_traffic_management = mean(`Delay due to traffic management`, na.rm = TRUE),
            Retard_rolling_stock = mean(`Delay due to rolling stock`, na.rm = TRUE),
            Retard_station_management = mean(`Delay due to station management and reuse of material`, na.rm = TRUE),
            Retard_voyageurs = mean(`Delay due to travellers taken into account`, na.rm = TRUE)) %>% 
  arrange(-retard_total)
## # A tibble: 59 × 8
##    `Departure station`  retard…¹ Retar…² Retar…³ Retar…⁴ Retar…⁵ Retar…⁶ Retar…⁷
##    <chr>                   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1 PARIS MONTPARNASSE      67548    26.9    30.0    14.9    17.9    6.99    3.32
##  2 PARIS LYON              51632    26.7    21.8    16.4    25.4    6.92    2.73
##  3 LYON PART DIEU          50066    25.2    22.7    21.4    15.8    8.52    6.32
##  4 PARIS EST               20327    26.0    21.0    15.1    24.6   10.9     2.43
##  5 MARSEILLE ST CHARLES    16120    28.9    20.8    23.0    16.3    6.94    4.00
##  6 PARIS NORD              16044    28.7    21.3    15.0    19.1   12.4     3.44
##  7 LILLE                   14593    25.3    21.1    20.7    18.8    9.06    5.03
##  8 BORDEAUX ST JEAN        12308    28.2    30.9    19.4    14.0    4.53    2.91
##  9 RENNES                  11247    27.9    27.3    16.9    19.2    4.24    4.38
## 10 STRASBOURG              11224    28.9    22.1    23.0    16.5    5.33    4.20
## # … with 49 more rows, and abbreviated variable names ¹​retard_total,
## #   ²​Retard_externe, ³​Retard_infrastructure, ⁴​Retard_traffic_management,
## #   ⁵​Retard_rolling_stock, ⁶​Retard_station_management, ⁷​Retard_voyageurs
# Sur les 10 premières gares qui ont le plus de retard au départ, il y a les 4 gares de Paris, Lyon, Marseille, Lille, Bordeaux, Rennes et Strasbourg, soit des grandes villes françaises.  
# On peut constater que cela est dû au grand nombre de voyageurs au départ de ces villes grâce à leur nombre d'habitants beaucoup plus supérieur aux autres villes en France. 
# La probabilité que des retards aient lieu à cause de différents facteurs est donc plus grande. 

# On remarque que les causes principales de retard au départ de ces gares sont des facteurs externes (temps, obstacles, colis suspects, mouvements sociaux etc...) à plus de 25%, à l'exception des gares de Paris Montparnasse et Bordeaux St Jean. 
# Ces derniers ont pour cause principale de retard les problèmes d’infrastructure. Dans chacune de ces gare, ce pourcentage s'élève à plus de 30% soit presqu'un tiers.

    ## 4. Quelles sont les gares les plus touchées par les retards à l'arrivée ? -------------------------

Trains %>% 
  select(`Arrival station`,`Number of trains late on arrival`, `Delay due to external causes`: `Delay due to travellers taken into account`) %>% 
  group_by(`Arrival station`) %>% 
  summarize(retard_total = sum(`Number of trains late on arrival`, na.rm = TRUE),
            Retard_externe = mean(`Delay due to external causes`, na.rm = TRUE),
            Retard_infrastructure = mean(`Delay due to railway infrastructure`, na.rm = TRUE),
            Retard_traffic_management = mean(`Delay due to traffic management`, na.rm = TRUE),
            Retard_rolling_stock = mean(`Delay due to rolling stock`, na.rm = TRUE),
            Retard_station_management = mean(`Delay due to station management and reuse of material`, na.rm = TRUE),
            Retard_voyageurs = mean(`Delay due to travellers taken into account`, na.rm = TRUE)) %>% 
  arrange(-retard_total)
## # A tibble: 59 × 8
##    `Arrival station`    retard…¹ Retar…² Retar…³ Retar…⁴ Retar…⁵ Retar…⁶ Retar…⁷
##    <chr>                   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1 PARIS LYON              54024    28.2    24.6    22.8    14.1    5.77    4.30
##  2 PARIS MONTPARNASSE      51384    27.4    33.7    15.3    14.5    5.15    3.91
##  3 LYON PART DIEU          16508    26.0    23.4    19.0    19.7    7.07    4.79
##  4 MARSEILLE ST CHARLES    13776    28.8    19.6    21.4    19.1    6.33    4.77
##  5 PARIS EST               13146    21.1    21.1    31.2    15.9    5.78    4.80
##  6 PARIS NORD              12339    21.6    28.5    26.0    12.4    8.98    2.52
##  7 LILLE                   12116    25.9    22.8    20.2    16.2   10.0     4.85
##  8 MONTPELLIER              6510    29.0    23.5    16.9    19.3    6.63    4.68
##  9 BORDEAUX ST JEAN         5445    22.9    31.6    15.8    22.2    5.77    1.87
## 10 RENNES                   5263    27.0    26.7    15.3    20.6    7.39    3.05
## # … with 49 more rows, and abbreviated variable names ¹​retard_total,
## #   ²​Retard_externe, ³​Retard_infrastructure, ⁴​Retard_traffic_management,
## #   ⁵​Retard_rolling_stock, ⁶​Retard_station_management, ⁷​Retard_voyageurs
# On retrouve encore une fois les gares des plus grandes villes de France qui sont les plus touchées par les retards à l'arrivée, la Gare de Lyon à Paris en première place, avec plus de 54 000 trains en retard sur 5 ans.
# On garde donc la même hypothèse : le grand nombre de voyageurs à destination de ces villes renforce la probabilité de retard.

# Parmi les différentes causes du retard, nous avons pu distinguer plusieurs facteurs par rapport a celles des gares de départ.
# On remarque encore une fois que la cause principale des retards à l’arrivée comme au départ de la gare de Paris Montparnasse est un problème d’infrastructure, avec plus de 30 000 trains en retard pour cette cause, soit plus de la moitié.
# On distingue également une autre cause à l’arrivée qui n’était pas présente au départ qui est la gestion du trafic (Traffic management) à la gare Paris Est (31% des causes de retard).

    ## 5. Quelles sont les raisons des retards ? Qu’est ce qui retarde le plus? ---------------------------

Trains %>%
  arrange(-`Average delay of all arriving trains (min)`) %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `Average delay of all arriving trains (min)`, `Number of trains late on arrival`, 
         `% trains late due to external causes (weather, obstacles, suspicious packages, malevolence, social movements, etc.)`, 
         `% trains late due to railway infrastructure (maintenance, works)`, 
         `% trains late due to traffic management (rail line traffic, network interactions)`, 
         `% trains late due to rolling stock`, 
         `% trains late due to passenger traffic (affluence, PSH management, connections)`
  ) %>%
  slice(0:10)
## # A tibble: 10 × 11
##     Year Month Departu…¹ Arriv…² Avera…³ Numbe…⁴ % tra…⁵ % tra…⁶ % tra…⁷ % tra…⁸
##    <dbl> <dbl> <chr>     <chr>     <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1  2020     4 STRASBOU… PARIS …    83.4       2   0       1       0       0    
##  2  2020     4 STUTTGART PARIS …    61.8       1  NA      NA      NA      NA    
##  3  2020     4 PARIS LY… ZURICH     37.8       6   0       0.667   0       0    
##  4  2018     7 LYON PAR… RENNES     36.8      48   0.2     0.244   0.222   0.222
##  5  2018     6 PARIS LY… ITALIE     32.4      43  NA      NA      NA      NA    
##  6  2018     2 BORDEAUX… TOURCO…    31.2      10   0.167   0       0.667   0.167
##  7  2018    12 PARIS VA… RENNES     30.3       2   0       0.5     0       0    
##  8  2018     8 BORDEAUX… TOURCO…    28.3       2   0       0.5     0.5     0    
##  9  2020     3 NANTES    STRASB…    27.5       6   0.6     0.2     0       0.2  
## 10  2019    10 MADRID    MARSEI…    25.8      10   0.333   0.167   0.333   0    
## # … with 1 more variable:
## #   `% trains late due to passenger traffic (affluence, PSH management, connections)` <dbl>,
## #   and abbreviated variable names ¹​`Departure station`, ²​`Arrival station`,
## #   ³​`Average delay of all arriving trains (min)`,
## #   ⁴​`Number of trains late on arrival`,
## #   ⁵​`% trains late due to external causes (weather, obstacles, suspicious packages, malevolence, social movements, etc.)`,
## #   ⁶​`% trains late due to railway infrastructure (maintenance, works)`, …
# Parmi les 7806 trains recensés, voici les 10 connexions ayant en moyenne le plus de retard à l'arrivée.
# 5 lignes partent ou arrivent de Paris, 5 lignes permettent le trajet entre deux villes de France, 5 lignes comprennent une gare de départ ou d'arrivée à l'étranger.
# Les retards sont causés par les 5 types de retards. Mais tandis que les 3 premières lignes présentent peu de trains en retard à l'arrivée, les 2 suivants en présentent plus de 40 sur un seul mois (juillet 2018).
# Plus de précision :

Trains %>%
  arrange(-`Average delay of all arriving trains (min)`) %>%
  select(`Departure station`, `Arrival station`, `Average delay of all arriving trains (min)`, 
         `% trains late due to external causes (weather, obstacles, suspicious packages, malevolence, social movements, etc.)`, 
         `% trains late due to railway infrastructure (maintenance, works)`, 
         `% trains late due to traffic management (rail line traffic, network interactions)`, 
         `% trains late due to rolling stock`, 
         `% trains late due to passenger traffic (affluence, PSH management, connections)`
  ) %>%
  slice(0:10) %>%
  summarise(moyenne1 = mean(`% trains late due to external causes (weather, obstacles, suspicious packages, malevolence, social movements, etc.)`, na.rm = TRUE),
            moyenne2 = mean(`% trains late due to railway infrastructure (maintenance, works)`, na.rm = TRUE), 
            moyenne3 = mean(`% trains late due to traffic management (rail line traffic, network interactions)`, na.rm = TRUE), 
            moyenne4 = mean(`% trains late due to rolling stock`, na.rm = TRUE),
            moyenne5 = mean(`% trains late due to passenger traffic (affluence, PSH management, connections)`, na.rm = TRUE))
## # A tibble: 1 × 5
##   moyenne1 moyenne2 moyenne3 moyenne4 moyenne5
##      <dbl>    <dbl>    <dbl>    <dbl>    <dbl>
## 1    0.162    0.410    0.215   0.0736   0.0444
# Parmi ces 10 lignes, plus d'un tiers (41%) des retards recensés sont dues aux équipements et aux problèmes d'infrastructures ferroviaires.
# En seconde position (21.5%) vient la gestion du trafic. En troisième (16.2%) les causes extérieures.


# On peut regarder sur la totalité du jeu de données, les raisons principales de retard.

Trains %>%
  arrange(-`Average delay of all arriving trains (min)`) %>%
  select(`Departure station`, `Arrival station`, `Average delay of all arriving trains (min)`, 
         `% trains late due to external causes (weather, obstacles, suspicious packages, malevolence, social movements, etc.)`, 
         `% trains late due to railway infrastructure (maintenance, works)`, 
         `% trains late due to traffic management (rail line traffic, network interactions)`, 
         `% trains late due to rolling stock`, 
         `% trains late due to passenger traffic (affluence, PSH management, connections)`
  ) %>%
  summarise(moyenne1 = mean(`% trains late due to external causes (weather, obstacles, suspicious packages, malevolence, social movements, etc.)`, na.rm = TRUE),
            moyenne2 = mean(`% trains late due to railway infrastructure (maintenance, works)`, na.rm = TRUE), 
            moyenne3 = mean(`% trains late due to traffic management (rail line traffic, network interactions)`, na.rm = TRUE), 
            moyenne4 = mean(`% trains late due to rolling stock`, na.rm = TRUE),
            moyenne5 = mean(`% trains late due to passenger traffic (affluence, PSH management, connections)`, na.rm = TRUE))
## # A tibble: 1 × 5
##   moyenne1 moyenne2 moyenne3 moyenne4 moyenne5
##      <dbl>    <dbl>    <dbl>    <dbl>    <dbl>
## 1    0.267    0.255    0.192    0.181   0.0364
# Dans ce jeu de données, la moitié des retards sont causés par des causes externes (26.7%) et des problèmes d'installations ferroviaires (25.5%).
# Cependant, il y a une certaine quantité de NA dans ces données qui peuvent fausser les résultats.



# III. Analyse des fréquences ----------------------------------------------------------------------------------------------------

    ## 1. Quels sont les trajets les plus fréquentés par an ? -------------------------

max_freq_15_all <- Trains %>%
  mutate(number_trains = `Number of expected circulations` - `Number of cancelled trains`) %>%
  arrange(-number_trains) %>%
  filter(`Year` == "2015") %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`)

# En 2015, les trains ont été les plus nombreux sur la ligne Bordeaux Saint Jean - Paris Montparnasse avec plus de 600 trajets par mois dans les deux sens.
# Les 10 premières lignes sont entre ces 2 gares.


max_freq_16_all <- Trains %>%
  mutate(number_trains = `Number of expected circulations` - `Number of cancelled trains`) %>%
  arrange(-number_trains) %>%
  filter(`Year` == "2016") %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`)

# En 2016, la tendance est la même. Avec les mois de décembre et d'août ayant le plus de trains par mois.
# Mais en 10ème position on a 643 trains qui sont partis de Avignon vers Paris en juillet 2016 (mois du Festival d'Avignon).


max_freq_17_all <- Trains %>%
  mutate(number_trains = `Number of expected circulations` - `Number of cancelled trains`) %>%
  arrange(-number_trains) %>%
  filter(`Year` == "2017") %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`)

# En 2017, on retrouve seulement des lignes entre Bordeaux et Paris, avec 100 à 200 trains en plus par mois que les 2 années précédentes. Il y a peut-être plus de données sur cette année-là .
# On remarque aussi une forte offre de trains sur la fin d'année, tous les mois sont compris entre juillet et décembre. On imagine beaucoup de circulations l'été et au moment des vacances scolaires et des fêtes de fin d'année.


max_freq_18_all <- Trains %>%
  mutate(number_trains = `Number of expected circulations` - `Number of cancelled trains`) %>%
  arrange(-number_trains) %>%
  filter(`Year` == "2018") %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`)

# En 2018, la situation semble assez similaire, mais il y a davantage de trains en début d'année (entre janvier et mars), surtout des trains provenant de Bordeaux à destination de Paris.


max_freq_19_all <- Trains %>%
  mutate(number_trains = `Number of expected circulations` - `Number of cancelled trains`) %>%
  arrange(-number_trains) %>%
  filter(`Year` == "2019") %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`)

#En 2019, la tendance est la même mais se concentre sur la première moitié de l'année.


max_freq_20_all <- Trains %>%
  mutate(number_trains = `Number of expected circulations` - `Number of cancelled trains`) %>%
  arrange(-number_trains) %>%
  filter(`Year` == "2020") %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`)

# Les trajets entre Bordeaux et Paris restent en top 3. Mais on a davantage de villes différentes : Rennes, Lyon, Lille dans les 10 lignes qui proposent le plus de trains par mois.
# Toutes ont un départ ou une arrivée de/à Paris.
# L'offre est cependant un peu réduite par rapport aux 2 années précédentes, sûrement en lien avec la pandémie et les confinements puisque le mois ayant une offre plus élevée de trains est surtout le mois de février, avant le premier confinement.


# Comparons la ligne la plus fréquentée de chaque année avec les autres années.


max_freq_15 <- max_freq_15_all %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`) %>%
  slice(1:1)

max_freq_16 <- max_freq_16_all %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`) %>%
  slice(1:1)

max_freq_17 <- max_freq_17_all %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`) %>%
  slice(1:1)

max_freq_18 <- max_freq_18_all %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`) %>%
  slice(1:1)

max_freq_19 <- max_freq_19_all %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`) %>%
  slice(1:1)

max_freq_20 <- max_freq_20_all %>%
  select(`Year`, `Month`, `Departure station`, `Arrival station`, `number_trains`) %>%
  slice(1:1)


total_max_freq <- rbind(max_freq_15, max_freq_16, max_freq_17, max_freq_18, max_freq_19, max_freq_20)


# Entre 2015 et 2020, la connexion entre Paris et Bordeaux a été la plus nombreuse. 
# A partir de 2017, le nombre de trains mensuel partant de Bordeaux en direction de Paris a augmenté de plus de 150.

    ## 2. La fréquentation est-elle plus importante en été ou en hiver ? -------------------------


# Créons une colonne "saison" pour réunir les mois de janvier et décembre en hiver et ceux de juillet et août en été.



# Sur les deux périodes (été et hiver), l'offre est plus conséquente pour les trajets reliant Paris à Bordeaux comme vu précédemment par année.
# Davantage de trains circulent en décembre et en janvier qu'en été sûrement à cause des fêtes de fin d'années.
# Le train est peut être moins fréquenté en été puisque les individus favoriseraient des trajets de plus longue distance (par avion par exemple).




# Conclusion -------------------------------------------------------------------------------------------------

# La SNCF propose un service très centralisé. Les trajets à l'offre la plus nombreuse sont toujours au départ ou à l'arrivée de Paris, délaissant les lignes possibles entre les villes françaises.
# Cependant, les nombreux retards et annulations par mois sont parfois alarmants et soulèvent des questions sur la qualité des infrastructures proposées par ce quasi unique service disponible.
# De plus, la cause extérieure étant responsable de nombreux retards, qu'en est-il de la reconnaissance de ces travailleurs grâce à qui tous ces trajets sont possibles ?

R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.