Introduction

Ce jeu de données est issu de SNCF Open Data et a été nettoyé par Gaétan Dubuc, un data scientist chez Fogo (version anglaise). Il se compose de 32 colonnes d’informations pour chaque ligne de train par mois, pour toutes les lignes TGV de l’année 2015 à 2020. Dans le cadre de ce projet collaboratif, après avoir effectué une analyse générale, nous allons nous concentrer sur les informations relatives à la durée des trajets, aux trains en retard et à leurs fréquences, en visualisant leur relation.

I. Analyse sommaire du jeu de données

1. La circulation moyenne de trains par mois entre 2015 et 2020

## # 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.

En créant une nouvelle colonne montrant le nombre moyen de circulations prévues, on peut comparer les moyennes pour chaque année. Ce qui est intéressant, c’est que le chiffre a fortement diminué depuis 2020, année où la pandémie de Covid-19 s’est propagée dans le monde entier. Jusqu’à 2020, le nombre moyen de trajets TGV par mois était de 276,2.

2. L’annulation moyenne de trains par mois

## # 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

Comparé aux autres années, nous constatons une forte augmentation des annulations en 2018 et en 2020. Selon nos recherches, de nombreuses annulations ont eu lieu en raison de grandes grèves contre la réforme ferroviaire qui ont eu lieu d’avril à juin 2018. (Source) En 2020, le Covid-19 a contribué à cette augmentation des annulations.

2-1. Quelles sont les lignes les plus impactées par les 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

Suite à la question 2, on était curieux de savoir quelles lignes étaient le plus impactées par les annulations. Dans le tableau, les deux liaisons entre Bordeaux Saint Jean et Paris Montparnasse occupent respectivement les première et deuxième places. D’ailleurs, les dix premières liaisons sont toutes entre les grandes villes qui proposent plus de trains.

3. Les trajets les plus longs et les plus courts

## # 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 le trajet le plus long est celui entre Strasbourg et Nantes, d’une durée de 13H01min. Il y a sûrement eu des problèmes anomaux mais qui ne sont pas mentionnées. Si nécessaire, on peut supprimer cette donnée très atypique pour une visualisation plus lisible. En revanche, les liaisons entre Madrid et Marseille occupent le deuxième au dixième rang, ce qui signifie que le trajet entre ces deux villes est normalement le plus long.

## # 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

Il y a également une donnée étrange qui montre une durée de trajet de 35 minutes entre Barcelone et Paris Lyon. Si on ignore cette donnée, le trajet le plus court est celui entre Paris Est et Reims.

Nous regardons la durée pour chaque connexion au départ des différentes gares Paris.

## # 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
## # A tibble: 6 × 3
##    Year trajet_moyen heures_trajet
##   <dbl>        <dbl>         <dbl>
## 1  2015         76.2          1.27
## 2  2016         77.0          1.28
## 3  2017         74.0          1.23
## 4  2018         75.5          1.26
## 5  2019         76.1          1.27
## 6  2020         78.3          1.31
## # A tibble: 6 × 3
##    Year trajet_moyen heures_trajet
##   <dbl>        <dbl>         <dbl>
## 1  2015         179.          2.98
## 2  2016         180.          3.00
## 3  2017         191.          3.19
## 4  2018         197.          3.28
## 5  2019         198.          3.29
## 6  2020         193.          3.22
## # A tibble: 6 × 3
##    Year trajet_moyen heures_trajet
##   <dbl>        <dbl>         <dbl>
## 1  2015        103.           1.72
## 2  2016         98.8          1.65
## 3  2017        114.           1.91
## 4  2018        114.           1.90
## 5  2019        121.           2.02
## 6  2020        123.           2.05

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.

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.

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

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 nous constatons 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.

Visualisations

  • PARIS MONTPARNASSE
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) +
  scale_x_continuous(breaks = seq(2015, 2020, 1)) +
  scale_y_continuous(breaks = seq(0,2, 0.2)) +
  scale_fill_distiller(palette = "GnBu", direction = 1) +
  labs(x = "Année", y = "Heures de trajet", title = "Temps d'un trajet au départ de Paris-Montparnasse", fill = "Durée du trajet")

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

Paris_montparnasse

  • PARIS NORD

  • PARIS LYON

  • PARIS EST
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", direction = 1) +
  labs(x = "Année", y = "Heures de trajet", title = "Temps d'un trajet au départ de Paris-Est", fill = "Durée du trajet")

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

Paris_est

4. Combien de trains était 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 ?

Nous créons une nouvelle colonne poru 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, nous divisons 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
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>, …

Parmi 7806 lignes, 37 % montrent un retard de moins de 10 % (2948) de leur offre sur 5 ans. Cependant, 215 lignes présentent un retard sur plus de 90% de leurs trains sur la période de 2015 à 2020.

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)

ggplot(Trains) +
  aes(x = `Average travel time (min)`, y = prct_retard_depart, colour = Year) +
  geom_point(shape = "circle", size = 1.5) +
  scale_color_distiller(palette = "Set2", direction = 1) +
  theme_minimal()
## Warning: 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. Selon le “Bilan social 2019” de la SNCF, 7000 postes ont été supprimés entre 2017 et 2019.

Source : (https://www.francetvinfo.fr/economie/transports/sncf/sncf-7-000-emplois-supprimes-entre-2017-et-2019-les-syndicats-toujours-plus-inquiets_4225075.html))

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 MONTPARNASSE" |
           `Departure station` == "PARIS EST" |
           `Departure station` == "PARIS NORD" |
           `Departure station` == "PARIS LYON") -> depart_paris

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

Trains %>%
  filter(`Departure station` != "PARIS MONTPARNASSE" &
           `Departure station` != "PARIS EST" &
           `Departure station` != "PARIS NORD" &
           `Departure station` != "PARIS LYON") -> 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 ?

  • PARIS MONTPARNASSE
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.

  • PARIS NORD
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 ▆▇▁▁▁

A Paris Nord, la gare réalise des trajets sur 264 lignes et présente un retard moyen de 18.1 minutes.

  • PARIS LYON
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.

  • PARIS EST
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 ▇▃▁▁▁

Enfin, 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.

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.

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

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

plot1 <- Trains %>% 
  ggplot(aes(x = reorder(`Departure station`,-`Number of late trains at departure`), y = `Number of late trains at departure`, fill = `Number of late trains at departure`)) +
  geom_col(fill="steelblue") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=5),
        axis.title=element_text(size=5),
        plot.title = element_text(size=10)) +
  labs(x = "Gare de départ", y = "Nombre de trains en retard", title = "Gares les plus touchées par les retards au départ")

top10 <- plot1 + scale_x_discrete(limits=c("PARIS MONTPARNASSE","PARIS LYON", "LYON PART DIEU", "PARIS EST", "MARSEILLE ST CHARLES", "PARIS NORD", "LILLE", "BORDEAUX ST JEAN", "RENNES","STRASBOURG"))
top10 + transition_states(`Departure station`, wrap = FALSE) + shadow_mark()
## Warning: Removed 3246 rows containing missing values (`position_stack()`).

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.

4.Les causes de rétard au départ

plot3 <- Trains %>% 
  ggplot(aes(x = reorder(`Departure station`,-`Delay due to external causes`), y = `Delay due to external causes`)) +
  geom_col(fill= "purple") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare de depart", y = "Nombre de trains en retard", title = "Retards dus aux causes externes")

external1 <- plot3 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot4 <- Trains %>% 
  ggplot(aes(x = reorder(`Departure station`,-`Delay due to railway infrastructure`), y = `Delay due to railway infrastructure`)) +
  geom_col(fill= "lightblue") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare de depart", y = "Nombre de trains en retard", title = "Infrastructure ferroviaire")

infra1 <- plot4 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot5 <- Trains %>% 
  ggplot(aes(x = reorder(`Departure station`,-`Delay due to traffic management`), y = `Delay due to traffic management`)) +
  geom_col(fill= "lightgreen") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare de depart", y = "Nombre de trains en retard", title = "Gestion du trafic")

traffic1 <- plot5 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot6 <- Trains %>% 
  ggplot(aes(x = reorder(`Departure station`,-`Delay due to rolling stock`), y = `Delay due to rolling stock`)) +
  geom_col(fill="yellow") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare de depart", y = "Nombre de trains en retard", title = "Materiel roulant")

stock1 <- plot6 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot7 <- Trains %>% 
  ggplot(aes(x = reorder(`Departure station`,-`Delay due to station management and reuse of material`), y = `Delay due to station management and reuse of material`)) +
  geom_col(fill="orange") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=5),
        axis.title=element_text(size=5),
        plot.title = element_text(size=10)) +
  labs(x = "Gare de depart", y = "Nombre de trains en retard", title = "Gestion des stations et reutilisation du materiel")

management1 <- plot7 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot8 <- Trains %>% 
  ggplot(aes(x = reorder(`Departure station`,-`Delay due to travellers taken into account`), y = `Delay due to travellers taken into account`)) +
  geom_col(fill="pink") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=5),
        axis.title=element_text(size=5),
        plot.title = element_text(size=10)) +
  labs(x = "Gare de depart", y = "Nombre de trains en retard", title = "Voyageurs")

travellers1 <- plot8 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST"))


library(patchwork)
external1+infra1+traffic1+stock1+management1+travellers1
## Warning: Removed 4271 rows containing missing values (`position_stack()`).
## Removed 4271 rows containing missing values (`position_stack()`).
## Removed 4271 rows containing missing values (`position_stack()`).
## Removed 4271 rows containing missing values (`position_stack()`).
## Removed 4271 rows containing missing values (`position_stack()`).
## Removed 4271 rows containing missing values (`position_stack()`).

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.

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

plot2 <- Trains %>% 
  select(`Arrival station`,`Number of trains late on arrival`) %>% 
  ggplot(aes(x = reorder(`Arrival station`,-`Number of trains late on arrival`), y = `Number of trains late on arrival`)) +
  geom_col(fill = "pink")+
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=5),
        axis.title=element_text(size=5),
        plot.title = element_text(size=10)) +
  labs(x = "Gare d'arrivee", y = "Nombre de trains en retard", title = "Gares les plus touchees par les retards a l'arrivee")

top10_2 <- plot2 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST", "PARIS NORD", "LILLE", "MONTPELLIER","BORDEAUX ST JEAN", "RENNES")) 
top10_2 + transition_states(`Arrival station`, wrap = FALSE) + shadow_mark()
## Warning: Removed 3306 rows containing missing values (`position_stack()`).

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.

Les causes des retards à l’arrivée

plot9 <- Trains %>% 
  ggplot(aes(x = reorder(`Arrival station`,-`Delay due to external causes`), y = `Delay due to external causes`)) +
  geom_col(fill= "purple") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare d'arrivee", y = "Nombre de trains en retard", title = "Retards dus aux causes externes")

external2 <- plot9 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot10 <- Trains %>% 
  ggplot(aes(x = reorder(`Arrival station`,-`Delay due to railway infrastructure`), y = `Delay due to railway infrastructure`)) +
  geom_col(fill= "lightblue") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare d'arrivee", y = "Nombre de trains en retard", title = "Infrastructure ferroviaire")

infra2 <- plot10 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot11 <- Trains %>% 
  ggplot(aes(x = reorder(`Arrival station`,-`Delay due to traffic management`), y = `Delay due to traffic management`)) +
  geom_col(fill= "lightgreen") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare d'arrivee", y = "Nombre de trains en retard", title = "Gestion du trafic")

traffic2 <- plot11 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot12 <- Trains %>% 
  ggplot(aes(x = reorder(`Arrival station`,-`Delay due to rolling stock`), y = `Delay due to rolling stock`)) +
  geom_col(fill= "yellow") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare d'arrivee", y = "Nombre de trains en retard", title = "Materiel roulant")

stock2 <- plot12 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot13 <- Trains %>% 
  ggplot(aes(x = reorder(`Arrival station`,-`Delay due to station management and reuse of material`), y = `Delay due to station management and reuse of material`)) +
  geom_col(fill="orange") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare d'arrivee", y = "Nombre de trains en retard", title = "Gestion des stations et reutilisation du materiel")

management2 <- plot13 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

plot14 <- Trains %>% 
  ggplot(aes(x = reorder(`Arrival station`,-`Delay due to travellers taken into account`), y = `Delay due to travellers taken into account`)) +
  geom_col(fill="pink") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(axis.text=element_text(size=4),
        axis.title=element_text(size=4),
        plot.title = element_text(size=7)) +
  labs(x = "Gare d'arrivee", y = "Nombre de trains en retard", title = "Voyageurs")


travellers2 <- plot14 + scale_x_discrete(limits=c("PARIS LYON","PARIS MONTPARNASSE", "LYON PART DIEU", "MARSEILLE ST CHARLES", "PARIS EST")) 

library(patchwork)
external2+infra2+traffic2+stock2+management2+travellers2
## Warning: Removed 4181 rows containing missing values (`position_stack()`).
## Removed 4181 rows containing missing values (`position_stack()`).
## Removed 4181 rows containing missing values (`position_stack()`).
## Removed 4181 rows containing missing values (`position_stack()`).
## Removed 4181 rows containing missing values (`position_stack()`).
## Removed 4181 rows containing missing values (`position_stack()`).

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).

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`)
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 ?