Dans quel endroit du monde, vaut-il mieux éviter d’aller barboter ?

Je vous présente une courte analyse dans laquelle j’ai voulu présenter un indicateur plus pertinent pour classer les régions du monde en fonction du nombre d’attaques de requins enregistré.

Pour cela, j’ai utilisé les données de sharkattackfile.net, ainsi que des données provenant de Wikipédia. Si vous le souhaitez vous pouvez consulter le projet complet (en Python) sur mon repo GitHub, je vais ici partir de mes données nettoyées pour créer les différents graphiques en R.

LES ATTAQUES PAR ANNÉE

shark <- read.csv("shark_attack.csv")
shark$X <- NULL

shark$Date <- as.Date(shark$Date)
shark$Year <- as.numeric(format(shark$Date, "%Y"))
shark$Month <- format(shark$Date, "%B")

library("ggplot2")

p <- ggplot(data=shark)

p + geom_bar(aes(x=Year), fill="lightblue3") + 
  xlab("Année") + ylab("Nombre d'Attaques") +
  scale_x_continuous(limits = c(1939, 2018), breaks = seq(1940,2018, 5), expand = c(0,0)) +
  scale_y_continuous(limits = c(0, 150), breaks = seq(0,150, 25)) +
  theme_minimal() +
  theme(axis.title.x = element_text(color="Grey", size=12),
        axis.title.y = element_text(color="Grey", size=12),
        axis.text.x = element_text(size=10, angle = 0),
        axis.text.y = element_text(size=10),
        
        plot.title = element_text(color="Black", size=15, family = "Helvetica", hjust=0.5)
        )
Evolution Annuelle des Attaques

C’est l’année 2015 qui détient le record du nombre d’attaques de requins, même s’il est difficile d’analyser les périodes plus anciennes du fait de la collecte non systématique de données, on peut tout de même noter que depuis l’an 2000, le nombre d’attaques a tendance à augmenter.

LES ATTAQUES PAR HÉMISPHÈRE SELON LE MOIS DE L’ANNÉE

q <- ggplot(data=shark[!shark$Hemisphere =="" & !shark$Fatal == "UNKNOWN",]) 
q + geom_bar(aes(x=Month, fill=Fatal)) + 
  xlab("Mois") + ylab("Nombre d'Attaques") +
  scale_x_discrete(limits=c("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août","septembre","octobre","novembre","décembre")) +
  scale_fill_discrete("Mortel",
                      breaks=c("N","Y"), 
                      labels=c("Non", "Oui")) +
  facet_grid(Hemisphere ~ .) +
  theme_minimal() +
  theme(axis.title.x = element_text(color="Grey", size=12),
        axis.title.y = element_text(color="Grey", size=12),
        axis.text.x = element_text(size=10, angle = 0),
        axis.text.y = element_text(size=10),
        strip.text.y = element_text(angle = 0),
        
        plot.title = element_text(color="Black", size=15, family = "Helvetica", hjust=0.5)
  )
Attaque selon le mois de l’année et par hémisphère

Comme on pouvait le supposer, les attaques se sont plutôt produites durant l’été, période pendant laquelle il y a une plus forte activité nautique. De plus, avec 90 % de la population habitant dans l’hémisphère nord, il est naturel d’avoir plus d’attaques dans cet hémisphère.

LES ATTAQUES PAR PAYS

top10country <- table(shark$Country)
top10country <- sort(top10country, decreasing = TRUE)
top10country <- rownames(top10country[0:10])

r <- ggplot(data=shark[!shark$Fatal == "UNKNOWN",]) 
r + geom_bar(aes(x=Country, fill=Fatal)) + 
  xlab("Pays") + ylab("Nombre d'Attaques") +
  scale_x_discrete(limits=top10country) +
  scale_fill_discrete("Mortel",
                      breaks=c("N","Y"), 
                      labels=c("Non", "Oui")) +
  theme_minimal() +
  theme(axis.title.x = element_text(color="Grey", size=12),
        axis.title.y = element_text(color="Grey", size=12),
        axis.text.x = element_text(size=10, angle = 0),
        axis.text.y = element_text(size=10),
        strip.text.y = element_text(angle = 0),
        
        plot.title = element_text(color="Black", size=15, family = "Helvetica", hjust=0.5)
  )
Nombre d’attaques par Pays

Les trois principaux pays touchés par les attaques de requins sont les États-Unis, l’Australie et l’Afrique du Sud, mais il est certain que la taille des pays a un impact sur le nombre d’attaques. J’ai donc choisi de pondérer le nombre d’attaques par la longueur du littoral.

LE NOMBRE D’ATTAQUES RAPPORTÉ À LA LONGUEUR DU LITTORAL

On ajoute les données supplémentaires utiles pour calculer notre nouvelle donnée et on calcule donc le nombre d’attaques en fonction de la longueur du littoral de chaque pays.

new_shark <- table(shark[!shark$Fatal == "UNKNOWN",]$Country, shark[!shark$Fatal == "UNKNOWN",]$Fatal)
new_shark <- as.data.frame.matrix(new_shark) 
new_shark$UNKNOWN <- NULL
new_shark$N <- new_shark$N + new_shark$Y
colnames(new_shark) <- c("Total Shark Attacks","Fatal Shark Attacks")

country <- read.csv("countries.csv", sep=";")
country <- country[,c("Country..en.", "Coastline")]
colnames(country) <- c("Country", "Coastline")

country[country$Country == "Reunion", "Coastline"] <- 419
country[country$Country == "Martinique", "Coastline"] <- 350
country[country$Country == "Mayotte", "Coastline"] <- 185
country[country$Country == "Netherlands Antilles", "Coastline"] <- 364

country_shark <- merge(new_shark, country, by.x = 0, by.y = "Country")
colnames(country_shark) <- c("Country", "Total Shark Attacks", "Fatal Shark Attacks", "Coastline")

country_shark$TpCoastline <- (country_shark$`Total Shark Attacks` / country_shark$Coastline) * 100
country_shark$FpCoastline <- (country_shark$`Fatal Shark Attacks` / country_shark$Coastline) * 100
country_shark[is.infinite(country_shark$TpCoastline), "TpCoastline"] <- 0
country_shark[is.infinite(country_shark$FpCoastline), "FpCoastline"] <- 0

Les 10 pays avec le nombre d’attaques pondéré par la taille de son littoral le plus élevé

top10country_shark <- country_shark[order(-country_shark$TpCoastline),]
top10country_shark <- top10country_shark[1:10,]

s <- ggplot(data=top10country_shark, aes(x=Country, y=TpCoastline)) 
s + geom_bar(stat = "identity", fill="lightblue3") + 
  scale_x_discrete(limits=top10country_shark$Country) +
  xlab("Pays") + ylab("Attaques/Littoral") +
  theme_minimal() +
  theme(axis.title.x = element_text(color="Grey", size=12),
        axis.title.y = element_text(color="Grey", size=12),
        axis.text.x = element_text(size=10, angle = 0),
        axis.text.y = element_text(size=10)
  )
Attaque rapportée au littoral par pays

Les 10 pays avec le nombre d’attaques mortelles pondéré par la taille de son littoral le plus élevé

top10country_fshark <- country_shark[order(-country_shark$FpCoastline),]
top10country_fshark <- top10country_fshark[1:10,]

t <- ggplot(data=top10country_fshark, aes(x=Country, y=FpCoastline)) 
t + geom_bar(stat = "identity", fill="lightblue3") + 
  scale_x_discrete(limits=top10country_fshark$Country) +
  xlab("Pays") + ylab("Attaques/Littoral") +
  theme_minimal() +
  theme(axis.title.x = element_text(color="Grey", size=12),
        axis.title.y = element_text(color="Grey", size=12),
        axis.text.x = element_text(size=10, angle = 0),
        axis.text.y = element_text(size=10)
  )
Attaque mortelle rapportée au littoral par pays

En prenant en compte la taille des pays et plus exactement la longueur de leur littoral, le classement laisse apparaitre un nouveau trio : l’Afrique du Sud, La Réunion et Les Bermudes. Dans ce nouveau classement, les États-Unis se retrouvent en 4e position et l’Australie en 6e position.

En matière de mortalité, La Réunion avec notamment les attaques de ces dernières années est la région la plus touchée par les attaques mortelles, l’Afrique du Sud et les Iles Samoa Américaines viennent compléter ce funeste trio.

Il est bon de noter que par rapport au Jupyter Notebook, je n’ai inclus que les cas où l’on sait si l’attaque a été mortelle.


Source Photos : Businessman Under Shark Attack | Source Data : sharkattackfile.net