--- title: "Untitled" author: "ALI" date: "11 mars 2018" output: pdf_document: default html_document: default --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` ## T?l?chargement des packages n?cessaires On va t?l?charger les packages n?cessaires pour notre ?tude (Visualsitation et cr?ation de mod?le pr?dictif de l'?tat de port gr?ce aux donn?es de m?t?o). ```{r,message=FALSE,warning=FALSE} library(readxl) library(xlsx) library(ggplot2) library(ggcorrplot) library(lubridate) library(Amelia) ``` ##Restitution des donn?es dans une seule base Apr?s avoir lu et organis? les donn?es de m?t?o pour chaque ann?e (de 2007 ? 2017),il est temps de les restituer dans une seule base, pour ca il faut unifier tout d'abord les colonnes de chaque feuille d'excel, et il faut les assembler dans une seule feuille. Apr?s On a int?gr? les variables qui sont collect?es gr?ce aux diff?rentes bases de donn?es fournies par les services de m?t?o Maroc dans une seule base de donn?es qui pr?sente l'?tat de port pour chaque jour (de 2007 ? 2017) en fonction de plusieurs variables de m?t?o : la direction de vent, la vitesse de vent minimale, la vitesse de vent maximale, la vitesse moyenne de vent, la direction de la houle, la hauteur maximale de la houle, la hauteur minimale de la houle, la hauteur moyenne de la houle, la p?riode de la houle, la temp?rature nocturne, la temp?rature diurne, la pluie, la couverture de nuage et le Beaufort. Ce travail est fait par l'Excel. ## Lecture des donn?es météorologiques de l'années 2007 jusqu'à 2017: Il s'agit ici de la lecture des bases de données sur des feuilles d'Excel. ```{r,message=FALSE,warning=FALSE} WEATHER=read_excel("Weather.xlsx") WEATHER17=read_excel("Weather-2017.xlsx") WEATHER16=read_excel("Weather-2016.xlsx") WEATHER15=read_excel("Weather-2015.xlsx") WEATHER14=read_excel("Weather-2014.xlsx") WEATHER13=read_excel("Weather-2013.xlsx") WEATHER12=read_excel("Weather-2012.xlsx") WEATHER11=read_excel("Weather-2011.xlsx") WEATHER10=read_excel("Weather-2010.xlsx") WEATHER9=read_excel("Weather-2009.xlsx") WEATHER8=read_excel("Weather-2008.xlsx") WEATHER7=read_excel("Weather-2007.xlsx") table(WEATHER[,14]) sum(is.na(WEATHER)) colSums(is.na(WEATHER)) ``` ## Les donn?es manquantes: On a déja traité notre base de données sur l'excel, tel que on a organisé les données de météo et l'?tat de port dans une seule feuille d'excel et on a standardisé les différentes observations. Par ex le STATUS_PORT va prendre les 3 valeurs : "CLOSED"" - "OPEN"" - "OPEN + CLOSED". la dernière catégorie c'est pour signifier le STATUS : Consigné pour un demi journée (après midi ou matin). ##Traitement des donn?es manquantes: On a traité quelques données manquantes dans le fichier Excel. On a remarqué qu'il y a des lignes vides (notamment ? l'ann?e 2007), et puisque on avait un grand nombre d'observations ( presque 365*11 = 4015 observations) donc on a supprimé ces lignes vides (notre base de donn?es a 3891 lignes). Maintenant on a seulement 28 valeurs manquantes dans les donn?es m?t?o. Visualisation des diff?rentes caract?ristiques de la base ```{r, message=FALSE,warning=FALSE } str(WEATHER) ``` ```{r, message=FALSE,warning=FALSE } dim(WEATHER) ``` ```{r, message=FALSE,warning=FALSE } names(WEATHER) ``` ```{r, message=FALSE,warning=FALSE } summary(WEATHER) missmap(WEATHER) ``` d'apr?s le missingness Map, on remarque qu'on a des valeus manquantes dans la direction de la houle et la direction de vent pour certains jours, on a aussi des valeurs manquantes dans quelques variables m?t?o (NIGHTTIME_TEMPERATURE, RAIN ....) qui ne sont pas observables dans le Missingness Map, parce que le nombre de ces valeurs manquantes est tr?s faible par rapport la taille de la base de donn?es. ##Etude de corr?lation entre les diff?rentes variables Diagramme de corr?lation entre les variables num?riques. ```{r,message=FALSE,warning=FALSE} nums= sapply(WEATHER, is.numeric) nums WEATHER.NUM=WEATHER[ , nums] str(WEATHER.NUM) dim(WEATHER.NUM) names(WEATHER.NUM) pairs(WEATHER.NUM) ``` Le diagramme de pairs n'est pas remarquable vu le nombre important des variables de la base. Pour bien visualiser le diagramme pairs on a pens? de subdiviser la base de donn?es WEATHER.NUM en 2 sous base de donn?es, la premi?re contient les 8 premi?res variables et la deuxi?me contient les 7 variables restantes. ```{r,message=FALSE,warning=FALSE} WEATHER.NUM1=WEATHER.NUM[ , c(1:8)] WEATHER.NUM2=WEATHER.NUM[ , c(9:15)] str(WEATHER.NUM1) str(WEATHER.NUM2) pairs(WEATHER.NUM1) pairs(WEATHER.NUM2) ``` et voici le correlogram num?rique des diff?rentes variables de la base de données WEATHER.NUM qui contient que les variables num?riques : "YEAR", DAY", "WIND_SPEED_MIN", "WIND_SPEED_MAX", "MEAN_WIND_SPEED", "SWELL_HEIGHT_MIN", "SWELL_HEIGHT_MAX", "MEAN_SWELL_HEIGHT", "PERIOD_SWELL", "NIGHTTIME_TEMPERTAURE", "DAYTIME_TEMPERATURE", "RAIN", "CLOUD_COVER", "BF", "STATUS_ORIGIN" (prends 0 si le port est ouvert, 1 s'il est fermé et 0.5 s'il est ouvert pour un demi journée e fermé pour le reste de journée). ```{r ,message=FALSE,warning=FALSE} WEATHER.NUM= na.omit(WEATHER.NUM) corr <- round(cor(WEATHER.NUM), 1) ggcorrplot(corr, hc.order = TRUE, type = "lower", lab = TRUE, lab_size = 3, method="circle", colors = c("tomato2", "white", "springgreen3"), title="Correlogram of WEATHER", ggtheme=theme_bw) ``` Parmi les variables existantes dans la base On s'inter?sse particuli?rement au STATUS_ORIGIN, on remarque que cette variable est positivement corr?l?e avec la hauteur de la houle, la vitesse de vent, la pluie et la couverture de nuage [Autrement dit plus que la vitesse de vent et la hauteur de houle augmentent plus le STATUS_ORIGIN augmente (La probabilité que le STATUS_ORIGIN soit 1 augmente c'est ? dire la probabilité que le port soit consigné augmente) et c'est tout a fait logique]. Voyons la relation de variable STATUS_ORIGIN avec les variables de m?t?o d'une façon plus lisible. ###STATUS_ORIGIN VS MEAN_WIND_SPEED On va faire une représentation de tout observation sur un intervalle du temps d'un ans (chaque année a son propre couleur). ```{r,message=FALSE,warning=FALSE } gg <- ggplot(WEATHER, aes(x=MEAN_WIND_SPEED, y=STATUS_ORIGIN)) + geom_point(aes(col=as.factor(YEAR))) + geom_smooth(method="loess", se=F) + xlim(c(0, 100)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS MEAN_WIND_SPEED", y="STATUS_ORIGIN", x="MEAN_WIND_SPEED", title="STATUS_ORIGIN VS MEAN_WIND_SPEED", caption = "Source: WEATHER") plot(gg) ``` On remaraque que si le MEAN_WIND_SPEED est supérieur à 25, on peut dire que la probabilit? que le port va ?tre consigné augmente d'une mani?re significative. Ainsi on remarque que si la vitesse de vent est sup?rieure ? une certaine valeur (45 - 50) le port doit ?tre consign?. Dans le cas des petites valeurs de la vitesse de vent on remarque un comportement contradictoire au bon sens, quand la vitesse diminue la probabilit? que le port sera consign? augmente, donc la n?c?ssit? d'intégrer les autres variables m?t?o. Pour avoir une premi?re id?e sue la r?partition de l'?tat de port en fonction de la vitesse de vent voil? le sch?ma suivant: ```{r,message=FALSE,warning=FALSE } rr <- ggplot(WEATHER, aes(x=MEAN_WIND_SPEED, y=STATUS_ORIGIN)) + geom_point(aes(col=as.factor(YEAR))) + geom_jitter(method="loess", se=F) + xlim(c(0, 100)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS MEAN_WIND_SPEED", y="STATUS_ORIGIN", x="MEAN_WIND_SPEED", title="STATUS_ORIGIN VS MEAN_WIND_SPEED", caption = "Source: WEATHER") plot(rr) ``` ###STATUS_ORIGIN VS MEAN_SWELL_HEIGHT ```{r,message=FALSE,warning=FALSE } ggg <- ggplot(WEATHER, aes(x=MEAN_SWELL_HEIGHT, y=STATUS_ORIGIN)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(0, 10)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS MEAN_SWELL_HEIGHT", y="STATUS_ORIGIN", x="MEAN_SWELL_HEIGHT", title="STATUS_ORIGIN VS MEAN_SWELL_HEIGHT", caption = "Source: WEATHER") plot(ggg) ``` On remaraque que si le MEAN_SWELL_HEIGHT est supérieur à 2m, on peut dire que le port va être probablement consigné. Ainsi on remarque que le statut de port est fortement corrélé avec la hauteur de houle si cette dernière est entre 1 et 2. Aux éxtrêmes (des petites valeurs et des grandes valeurs de la hauteur de houle) il est difficile de prédire le status de port (peut être il faut intégrer d'autres variables m?t?o). La r?partition de l'?tat de port en fonction de la hauteur de la houle: ```{r,message=FALSE,warning=FALSE } rrr<- ggplot(WEATHER, aes(x=MEAN_SWELL_HEIGHT, y=STATUS_ORIGIN)) + geom_point(aes(col=YEAR)) + geom_jitter(method="loess", se=F) + xlim(c(0, 10)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS MEAN_SWELL_HEIGHT", y="STATUS_ORIGIN", x="MEAN_SWELL_HEIGHT", title="STATUS_ORIGIN VS MEAN_SWELL_HEIGHT", caption = "Source: WEATHER") plot(rrr) ``` ###STATUS_ORIGIN VS (PERIOD_SWELL, TEMPERATURE, RAIN, CLOUD_COVER, BF) ```{r,message=FALSE,warning=FALSE } gggg <- ggplot(WEATHER, aes(x=PERIOD_SWELL, y=STATUS_ORIGIN)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(0, 20)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS PERIOD_SWELL", y="STATUS_ORIGIN", x="PERIOD_SWELL", title="STATUS_ORIGIN VS PERIOD_SWELL", caption = "Source: WEATHER") plot(gggg) ``` On remaraque qu'on a une corr?lation positive entre la p?riode de la houle et l'?tat de port. ```{r,message=FALSE,warning=FALSE } ggggg <- ggplot(WEATHER, aes(x=DAYTIME_TEMPERATURE, y=STATUS_ORIGIN)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(10, 35)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS DAYTIME_TEMPERATURE", y="STATUS_ORIGIN", x="DAYTIME_TEMPERATURE", title="STATUS_ORIGIN VS DAYTIME_TEMPERATURE", caption = "Source: WEATHER") plot(ggggg) ``` On remaraque qu'on a une corr?lation n?gative entre la temp?rature de la journ?e et l'?tat de port. ```{r,message=FALSE,warning=FALSE } gggggg <- ggplot(WEATHER, aes(x=RAIN, y=STATUS_ORIGIN)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(0, 50)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS RAIN", y="STATUS_ORIGIN", x="RAIN", title="STATUS_ORIGIN VS RAIN", caption = "Source: WEATHER") plot(gggggg) ``` R n'a pas pu r?aliser le smoothing, peut ?tre c'est ? cause des variations brutales de la courbe. Pour ce faire on va visualiser la r?partition de l'?tat de port en fonction des pr?cipitations. ```{r,message=FALSE,warning=FALSE } rrrrrr <- ggplot(WEATHER, aes(x=RAIN, y=STATUS_ORIGIN)) + geom_point(aes(col=YEAR)) + geom_jitter(method="loess", se=F) + xlim(c(0, 50)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS RAIN", y="STATUS_ORIGIN", x="RAIN", title="STATUS_ORIGIN VS RAIN", caption = "Source: WEATHER") plot(rrrrrr) ``` On remarque qu'on a plus des points dans l'abcisse 0 (le climat sec de Laayon). Quand les pr?cipitations augmentents la probabilit? que le port sera consign? augmente. ```{r,message=FALSE,warning=FALSE } ggggggg <- ggplot(WEATHER, aes(x=CLOUD_COVER, y=STATUS_ORIGIN)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(0,100)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS CLOUD_COVER", y="STATUS_ORIGIN", x="CLOUD_COVER", title="STATUS_ORIGIN VS CLOUD_COVER", caption = "Source: WEATHER") plot(ggggggg) ``` On a une faible corr?lation positive entre la variable STATUS_ORIGIN et CLOUD_COVER. ```{r,message=FALSE,warning=FALSE } gggggggg <- ggplot(WEATHER, aes(x=BF, y=STATUS_ORIGIN)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(2,8)) + ylim(c(0, 1)) + labs(subtitle="STATUS_ORIGIN VS Beaufort", y="STATUS_ORIGIN", x="Beaufort", title="STATUS_ORIGIN VS Beaufort", caption = "Source: WEATHER") plot(gggggggg) ``` On remarque bien qu'on a une corr?lation positive entre la variable STATUS_ORIGIN et la variable Beaufort. ###:MEAN_WIND_SPEED VS DAY nous allons voir l'?volution de la vitesse de vent dans le temps. ```{r,message=FALSE,warning=FALSE } ggggggggg <- ggplot(WEATHER, aes(x=DAY, y=MEAN_WIND_SPEED)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(0, 366)) + ylim(c(0, 100)) + labs(subtitle="MEAN_WIND_SPEED VS DAY", y="MEAN_WIND_SPEED", x="DAY", title="MEAN_WIND_SPEED VS DAY", caption = "Source: WEATHER") plot(ggggggggg) ``` On remarque qu'? Laayoun la vitesse de vent augmente entre le jour 150 et le jour 250 (p?riode d'?t?). ###:MEAN_SWELL_HEIGHT VS DAY nous allons voir la corr?lation entre le MEAN_SWELL_HEIGHT et le DAY. ```{r,message=FALSE,warning=FALSE } gggggggggg <- ggplot(WEATHER, aes(x=DAY, y=MEAN_SWELL_HEIGHT)) + geom_point(aes(col=as.factor(YEAR))) + geom_smooth(method="loess", se=F) + xlim(c(0, 366)) + ylim(c(0, 10)) + labs(subtitle="MEAN_SWELL_HEIGHT VS DAY", y="MEAN_SWELL_HEIGHT", x="DAY", title="MEAN_SWELL_HEIGHT VS DAY", caption = "Source: WEATHER") plot(gggggggggg) ``` On remarque que dans la période d'été on une petite diminution de la hauteur de la houle. ###:DAYTIME_TEMPERATURE VS DAY nous allons voir l'?volution de la temp?rature dans le temps. ```{r,message=FALSE,warning=FALSE } gggggggggggg <- ggplot(WEATHER, aes(x=DAY, y=DAYTIME_TEMPERATURE)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(0, 366)) + ylim(c(10,50 )) + labs(subtitle="Temp?rature de la journ?e dans une ann?e", y="DAY", x="DAYTIME_TEMPERATURE", title="DAYTIME_TEMPERATURE VS DAY", caption = "Source: WEATHER") plot(gggggggggggg) ``` Il es bien remarquable que dans la p?riode d'?t? la temp?rature augmente contrairement ? l'hiver. ###:MEAN_SWELL_HEIGHT VS MEAN_WIND_SPEED nous allons voir la corr?lation entre MEAN_SWELL_HEIGHT et MEAN_WIND_SPEED. ```{r ,message=FALSE,warning=FALSE} ggggggggggg <- ggplot(WEATHER, aes(x=MEAN_WIND_SPEED, y=MEAN_SWELL_HEIGHT)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(0, 100)) + ylim(c(0, 10)) + labs(subtitle="MEAN_SWELL_HEIGHT VS MEAN_WIND_SPEED", y="MEAN_SWELL_HEIGTH", x="MEAN_WIND_SPEED", title="MEAN_SWELL_HEIGHT VS MEAN_WIND_SPEED", caption = "Source: WEATHER") plot(ggggggggggg) ``` On remarque bien qu'y en a une corrélation positive entre le MEAN_SWELL_HEIGHT et le MEAN_WIND_SPEED. ```{r ,message=FALSE,warning=FALSE} ggggggggggggg <- ggplot(WEATHER, aes(x=CLOUD_COVER, y=RAIN)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(0, 100)) + ylim(c(0, 50)) + labs(subtitle="RAIN vs CLOUD_COVER", y="RAIN", x="CLOUD_COVER", title="RAIN vs CLOUD_COVER", caption = "Source: WEATHER") plot(ggggggggggggg) ``` On remarque bien la corr?lation positive entre la couverture de nuage et les pr?cipitation, c'est tout a fait logique puisque on sait que g?n?ralement des nuages plus dense augmenteront les chances de pr?cipitations dans de telles circonstances. On sait que la houle est une onde, et alors elle caract?ris?e par une p?riode et un logueur d'onde, cette derni?re est proportionnelle au carr? de la p?riode. quand la vitesse de vent augment la longueur d'onde des vagues diminue et alors la p?riode diminue aussi. Donc on a une corr?lation n?gative entre la p?riode de la houle et la vitesse de vent, on va v?rifier ?a par le sch?ma ci-dessous: ```{r ,message=FALSE,warning=FALSE} gggggggggggggg <- ggplot(WEATHER, aes(x=MEAN_WIND_SPEED, y=PERIOD_SWELL)) + geom_point(aes(col=YEAR)) + geom_smooth(method="loess", se=F) + xlim(c(0, 60)) + ylim(c(0, 20)) + labs(subtitle="PERIOD_SWELL VS MEAN_WIND_SPEED", y="PERIOD_SWELL", x="MEAN_WIND_SPEED", title="PERIOD_SWELL VS MEAN_WIND_SPEED", caption = "Source: WEATHER") plot(gggggggggggggg) ``` Quand la vitesse de vent est sup?rieure ? 35 - 40 la p?riode augmente, peut ?tre que la houle d?pend des autres variables plus que la vitesse de vent (la force du vent, la dur?e d'action du vent, la distance sur laquelle le vent peut souffler sans rencontrer d'obstacles, appel?e fetch....). ###Densit?,boxplot,et s?rie chronologique de l'?tat de port et les varuables m?t?orologique. pour le STATUS_ORIGIN: ```{r,message=FALSE,warning=FALSE } attach(WEATHER) theme_set(theme_classic()) d <- ggplot(WEATHER,aes(STATUS_ORIGIN)) d + geom_density(aes(fill=as.factor(YEAR)), alpha=0.3) + labs(title="Density plot", subtitle="STATUS_ORIGIN Grouped by Year", x="STATUS_ORIGIN", fill="# YEAR") ``` On remarque que dans chaque ann?e le port est ferm? plus qu'il est ouvert. pour le MEAN_WIND_SPEED: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) dd <- ggplot(WEATHER,aes(MEAN_WIND_SPEED)) dd + geom_density( aes(fill=as.factor(YEAR)),alpha=0.3) + labs(title="Density plot", subtitle="MEAN_WIND_SPEED Grouped by Years", x="MEAN_WIND_SPEED ", fill="# YEAR") ``` On remarque que la distribution de la vitesse de vent est presque normal de moyenne entre 20 et 25. pour le MEAN_SWELL_HEIGHT : ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) ddd <- ggplot(WEATHER,aes(MEAN_SWELL_HEIGHT)) ddd + geom_density(aes(fill=as.factor(YEAR)), alpha=0.3) + labs(title="Density plot", subtitle="MEAN_SWELL_HEIGHT Grouped by Years", x="MEAN_SWELL_HEIGHT", fill="# YEAR") ``` De m?me pour la hauteur de swell sauf aux etr?mes (dans les valeurs extr?mes on peut bien pr?dire les hauteurs de la houle car on a une d?pendance avec des autres variables m?t?orologiques) pour le DAYTIME_TEMPERATURE : ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) dddd <- ggplot(WEATHER,aes(DAYTIME_TEMPERATURE)) dddd + geom_density(aes(fill=as.factor(YEAR)), alpha=0.3) + labs(title="Density plot", subtitle="DAYTIME_TEMPERATURE Grouped by Years", x="DAYTIME_TEMPERATURE", fill="# YEAR") ``` pour les pr?cipitations: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) ddddd <- ggplot(WEATHER,aes(RAIN)) ddddd + geom_density(aes(fill=as.factor(YEAR)), alpha=0.3) + labs(title="Density plot", subtitle="RAIN Grouped by Years", x="RAIN", fill="# YEAR") ``` Dans la plupart des jours de l'ann?e on'a pas des pr?cipitations (le climat sec de Laayoun). pour l'?chelle de beaufort: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) dddddd <- ggplot(WEATHER,aes(BF)) dddddd + geom_density(aes(fill=as.factor(YEAR)), alpha=0.3) + labs(title="Density plot", subtitle="Beaufort Grouped by Years", x="BF", fill="# YEAR") ``` La densit? de l'?chelle de Beaufort est un peu compliqu?e. On remarque que les scores 4 et 5 sont distribu?s d'une mani?re presque uniformes. On suit qui suit le boxplot annuel: STATUS_ORIGIN: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) b <- ggplot(WEATHER, aes(x=as.factor(YEAR) ,y = STATUS_ORIGIN)) b + geom_boxplot(varwidth=T, fill="plum") + labs(title="Box plot", subtitle="STATUS_ORIGIN grouped by Years", caption="Source: WEATHER", x="Les ann?es", y="STATUS_ORIGIN") ``` MEAN_WIND_SPEED: ```{r ,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) bb <- ggplot(WEATHER, aes(x=as.factor(YEAR),y=MEAN_WIND_SPEED)) bb + geom_boxplot(varwidth=T, fill="plum") + labs(title="Box plot", subtitle="MEAN_WIND_SPEED grouped by Years", x="Les ann?es", y="MEAN_WIND_SPEED") ``` MEAN_SWELL_HEIGHT: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) bbb <- ggplot(WEATHER, aes(x=as.factor(YEAR),MEAN_SWELL_HEIGHT)) bbb + geom_boxplot(varwidth=T, fill="plum") + labs(title="Box plot", subtitle="MEAN_SWELL_HEIGHT grouped by Years", x="Les ann?es", y="MEAN_SWELL_HEIGHT") ``` DAYTIME_TEMPERATURE: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) bbbb <- ggplot(WEATHER, aes(x=as.factor(YEAR),DAYTIME_TEMPERATURE)) bbbb + geom_boxplot(varwidth=T, fill="plum") + labs(title="Box plot", subtitle="DAYTIME_TEMPERATURE grouped by Years", x="Les ann?es", y="DAYTIME_TEMPERATURE") ``` RAIN : ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) bbbbb <- ggplot(WEATHER, aes(x=as.factor(YEAR),RAIN)) bbbbb + geom_boxplot(varwidth=T, fill="plum") + labs(title="Box plot", subtitle="RAIN grouped by Years", x="Les ann?es", y="RAIN") ``` Beaufort: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER) bbbbbb <- ggplot(WEATHER, aes(x=as.factor(YEAR),BF)) bbbbbb + geom_boxplot(varwidth=T, fill="plum") + labs(title="Box plot", subtitle="Beaufort grouped by Years", x="Les ann?es", y="Beaufort") ``` Visualisons maintenant les séries chrnologiques pour l'ann?es 2017 : STATUS_ORIGIN: ###STATUS_ORIGIN pour l'ann?e 2017: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER17) ggplot(WEATHER17, aes(x=DAY)) + geom_line(aes(y=STATUS_ORIGIN)) + labs(title="Time Series Chart", subtitle="STATUS_ORIGIN pour l'ann?e 2017", y="STATUS_ORIGIN") theme_set(theme_classic()) attach(WEATHER16) ggplot(WEATHER16, aes(x=DAY)) + geom_line(aes(y=STATUS_ORIGIN)) + labs(title="Time Series Chart", subtitle="STATUS_ORIGIN pour l'ann?e 2016", y="STATUS_ORIGIN") ``` ###MEAN_WIND_SPEED pour l'ann?e 2017: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER17) ggplot(WEATHER17, aes(x=DAY)) + geom_line(aes(y=MEAN_WIND_SPEED)) + labs(title="Time Series Chart", subtitle="MEAN_WIND_SPEED pour l'ann?e 2017", y="MEAN_WIND_SPEED") theme_set(theme_classic()) attach(WEATHER16) ggplot(WEATHER16, aes(x=DAY)) + geom_line(aes(y=MEAN_WIND_SPEED)) + labs(title="Time Series Chart", subtitle="MEAN_WIND_SPEED pour l'ann?e 2016", y="MEAN_WIND_SPEED") ``` ###MEAN_SWELL_HEIGHT pour l'ann?e 2017: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER17) ggplot(WEATHER17, aes(x=DAY)) + geom_line(aes(y=MEAN_SWELL_HEIGHT)) + labs(title="Time Series Chart", subtitle="MEAN_SWELL_HEIGHT pour l'ann?e 2017", y="MEAN_SWELL_HEIGHT") theme_set(theme_classic()) attach(WEATHER16) ggplot(WEATHER16, aes(x=DAY)) + geom_line(aes(y=MEAN_SWELL_HEIGHT)) + labs(title="Time Series Chart", subtitle="MEAN_SWELL_HEIGHT pour l'ann?e 2016", y="MEAN_SWELL_HEIGHT") ``` ###DAYTIME_TEMPERATURE pour l'ann?e 2017: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER17) ggplot(WEATHER17, aes(x=DAY)) + geom_line(aes(y=DAYTIME_TEMPERATURE)) + labs(title="Time Series Chart", subtitle="DAYTIME_TEMPERATURE pour l'ann?e 2017", y="DAYTIME_TEMPERATURE") ``` ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER16) ggplot(WEATHER16, aes(x=DAY)) + geom_line(aes(y=DAYTIME_TEMPERATURE)) + labs(title="Time Series Chart", subtitle="DAYTIME_TEMPERATURE pour l'ann?e 2016", y="DAYTIME_TEMPERATURE") ``` ###Pr?cipitation pour l'ann?e 2017 - 2016: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER17) ggplot(WEATHER17, aes(x=DAY)) + geom_line(aes(y=RAIN)) + labs(title="Time Series Chart", subtitle="Pr?cipitation pour l'ann?e 2017", y="RAIN") theme_set(theme_classic()) attach(WEATHER16) ggplot(WEATHER16, aes(x=DAY)) + geom_line(aes(y=RAIN)) + labs(title="Time Series Chart", subtitle="Pr?cipitation pour l'ann?e 2016", y="RAIN") ``` ###Beaufort pour l'ann?e 2017 - 2016: ```{r,message=FALSE,warning=FALSE } theme_set(theme_classic()) attach(WEATHER17) ggplot(WEATHER17, aes(x=DAY)) + geom_line(aes(y=BF)) + labs(title="Time Series Chart", subtitle="Beaufort pour l'ann?e 2017", y="BF") attach(WEATHER16) ggplot(WEATHER16, aes(x=DAY)) + geom_line(aes(y=BF)) + labs(title="Time Series Chart", subtitle="Beaufort pour l'ann?e 2016", y="BF") ``` ###Visualisation de l'?tat de port Pour visualiser la r?partition de l'?tat de port pendant les 11 derni?res ann?es, voil? le script suivant : ```{r,message=FALSE,warning=FALSE } library(ggplot2) theme_set(theme_classic()) # Source: Frequency table df <- as.data.frame(table(WEATHER$STATUS_ORIGIN)) colnames(df) <- c("STATUS_ORIGIN", "freq") pie <- ggplot(df, aes(x = "", y=freq, fill = factor(STATUS_ORIGIN))) + geom_bar(width = 1, stat = "identity") + theme(axis.line = element_blank(), plot.title = element_text(hjust=0.5)) + labs(fill="STATUS_ORIGIN", x=NULL, y=NULL, title="Pie Chart of STATUS_ORIGIN", caption="Source: WEATHER") pie + coord_polar(theta = "y", start=0) ``` ###Arbre de d?cision Voil? l'arbre de d?cision qui classifie l'?tat de port en fonction des variables m?t?orologique: N.B : Voire la capacit? limit?e de nos machines, on a travaill? seulement pour les donn?es des ann?es 2017 - 2016 - 2015 - 2014 - 2013 - 2007 (data train), apr?s on va tester le mod?le sur les autres ann?es. ```{r,message=FALSE,warning=FALSE } #decision tree: WEATHER17=read_excel("Weather-2017.xlsx") WEATHER16=read_excel("Weather-2016.xlsx") WEATHER15=read_excel("Weather-2015.xlsx") WEATHER14=read_excel("Weather-2014.xlsx") WEATHER13=read_excel("Weather-2013.xlsx") WEATHER12=read_excel("Weather-2012.xlsx") WEATHER11=read_excel("Weather-2011.xlsx") WEATHER10=read_excel("Weather-2010.xlsx") WEATHER9=read_excel("Weather-2009.xlsx") WEATHER8=read_excel("Weather-2008.xlsx") WEATHER7=read_excel("Weather-2007.xlsx") names(WEATHER17)=names(WEATHER16)=names(WEATHER15)=names(WEATHER14)=names(WEATHER13)=names(WEATHER12)=names(WEATHER11)=names(WEATHER10)=names(WEATHER9)=names(WEATHER8) = names(WEATHER7) WEATHER.TRAIN=data.frame(rbind(WEATHER17,WEATHER16,WEATHER15,WEATHER14,WEATHER13,WEATHER7)) str(WEATHER.TRAIN) WEATHER.TRAIN=WEATHER.TRAIN[, c(1,3:17)] str(WEATHER.TRAIN) library(rpart) library(rpart.plot) names(WEATHER.TRAIN) attach(WEATHER.TRAIN) na.omit(WEATHER.TRAIN) summary(WEATHER.TRAIN) rpart.WEATHER=rpart(PORT_STATUS~WIND_DIR+MEAN_WIND_SPEED+SWELL_DIR+MEAN_SWELL_HEIGHT+DAYTIME_TEMPERATURE+NIGHTTIME_TEMPERTAURE+PERIOD_SWELL+RAIN+CLOUD_COVER+BF, WEATHER.TRAIN) rpart.plot(rpart.WEATHER) ``` On remarque que les variables qui sont significatives pour le mod?le de classification construit sont les : la direction de vent - la direction de la houle - la hauteur de la houle - la vitesse de vent. (Les autres variables m?t?orologiques sont n?gligeables par rapport aux variables d?ja cit?es). L'accuracy de notre mod?le pour le data train : ```{r,message=FALSE,warning=FALSE } library(tidyverse) na.omit(WEATHER.TRAIN) PREDICT=predict(rpart.WEATHER,WEATHER.TRAIN,type="class") t = WEATHER.TRAIN[,16] accuracy1 = sum(PREDICT == t)/length(t) print(accuracy1) ``` On obtient 0.87 comme accuracy, c'est d?ja pas mal comme mod?le. Pour ?valuer la performance de notre mod?le, on va le tester sur des donn?es qui ne pr?sentent pas dans les donn?es d'apprentissage (les ann?es 2012 - 2011 - 2010 - 2009 - 2008). ###test mod?le sur des nouvelles donn?es : ```{r,message=FALSE,warning=FALSE } library(tidyverse) WEATHER.TEST=read_excel("WEATHER.TEST.xlsx") WEATHER.TEST=data.frame(rbind(WEATHER.TEST)) na.omit(WEATHER.TEST) PREDICT=predict(rpart.WEATHER,WEATHER.TEST,type="class") names(WEATHER.TEST) t = WEATHER.TEST[,17] accuracy2 = sum(PREDICT == t)/length(t) print(accuracy2) ``` 0.78 est la performance de notre mod?le sur des donn?es test. On peut dire que c'est un bon mod?le. randomForset ```{r } WEATHER.T=data.frame(rbind(WEATHER7)) WEATHER.T=WEATHER.T[,c(1,2,4:6,8:16,18)] str(WEATHER.T) rf.pred=predict(rff,WEATHER.T) RSS=sum((rf.pred-WEATHER.T$STATUS_ORIGIN)^2) TSS=sum((WEATHER.T$STATUS_ORIGIN-mean(WEATHER.T$STATUS_ORIGIN))^2) R.squared=1-RSS/TSS R.squared ``` Stochastic gradient boosting. ```{r,message=FALSE,warning=FALSE } library(dplyr) data=data%>% mutate_if(is.character, as.factor) dataRF=data[,c(2:5,12)] attach(dataRF) attach(WEATHER17) set.seed(1) ControlParamteres=trainControl(method = "cv", number = 5, savePredictions = TRUE, classProbs = TRUE) parameterGrid=expand.grid(mtry=c(1,2,3,4)) modelgbm <- train(Sejour_Quai~., data = trainDF, method = "gbm", trControl = ControlParamteres, preProcess = c('center', 'scale') ) modelgbm summary(modelgbm) ``` ```{r } rf.pred=predict(modelgbm,testDF) RSS=sum((rf.pred-testDF$Sejour_Quai)^2) TSS=sum((testDF$Sejour_Quai-mean(testDF$Sejour_Quai))^2) R.squared=1-RSS/TSS R.squared ``` Extreme gradient booosting. ```{r,message=FALSE,warning=FALSE } data=data%>% mutate_if(is.character, as.factor) dataRF=data[,c(2:5,12)] attach(dataRF) set.seed(1) ind = createDataPartition(dataRF$Sejour_Quai, p = 2/3, list = FALSE) trainDF=dataRF[ind,] testDF=dataRF[-ind,] ControlParamteres=trainControl(method = "cv", number = 5, savePredictions = TRUE, classProbs = TRUE) parameterGrid=expand.grid(mtry=c(1,2,3,4)) modelxgbTree <- train(Sejour_Quai~., data = trainDF, method = "xgbTree", trControl = ControlParamteres, preProcess = c('center', 'scale') ) modelxgbTree summary(modelxgbTree) ``` ```{r } rf.pred=predict(modelxgbTree,testDF) RSS=sum((rf.pred-testDF$Sejour_Quai)^2) TSS=sum((testDF$Sejour_Quai-mean(testDF$Sejour_Quai))^2) R.squared=1-RSS/TSS R.squared ``` ```{r,message=FALSE,warning=FALSE } # install.packages("ggdendro") WEATHER17=read_excel("Weather-2017.xlsx") WEATHER16=read_excel("Weather-2016.xlsx") WEATHER15=read_excel("Weather-2015.xlsx") WEATHER14=read_excel("Weather-2014.xlsx") WEATHER13=read_excel("Weather-2013.xlsx") WEATHER12=read_excel("Weather-2012.xlsx") WEATHER11=read_excel("Weather-2011.xlsx") WEATHER10=read_excel("Weather-2010.xlsx") WEATHER9=read_excel("Weather-2009.xlsx") WEATHER8=read_excel("Weather-2008.xlsx") WEATHER7=read_excel("Weather-2007.xlsx") library(ggplot2) library(ggdendro) theme_set(theme_bw()) dim(WEATHER17) WEATHER2017=WEATHER17[, 2:18] dim(WEATHER2017) WEATHER2017.dist=dist(WEATHER2017, method = "euclidean") hclust(WEATHER2017.dist, method = "ward.D") WEATHER2017.hclust=hclust(WEATHER.dist, method = "ward.D") plot(WEATHER2017.hclust) WEATHER.dist <- WEATHER.NUM(dist(USArrests), "ave") # hierarchical clustering # plot ggdendrogram(WEATHER, rotate = TRUE, size = 2) ``` ```{r,message=FALSE,warning=FALSE } # install.packages("ggdendro") library(ggplot2) library(ggdendro) theme_set(theme_bw()) WEATHER17 WEATHER17.NUM=WEATHER17[,c(2,6,10,12)] WEATHER17.NUM=na.omit(WEATHER17.NUM) WEATHER17.dist=dist(WEATHER17.NUM, method = "euclidean") hclust(WEATHER.dist, method = "ward.D") WEATHER.hclust=hclust(WEATHER.dist, method = "ward.D") plot(WEATHER.hclust) WEATHER.dist <- WEATHER.NUM(dist(USArrests), "ave") # hierarchical clustering # plot ggdendrogram(WEATHER, rotate = TRUE, size = 2) ```