Faites les étapes suivantes:
- lire les données à partir de l'url donnes_demo (3 pts)
- réer une fonction qui calcule l'âge de chaque client en date du premier jours du mois courant dans une nouvelle variable d'aun
- Créer un graphique du type Bar Chart sur le âge des clients. Par ce graphique, on verra facilement le nombre d'assurés par catégorie d'âge (3 pts)
Votre graphique contient les éléments suivants:
* Un titre (1 pts)
* Une étiquette de l'axe des $x$ (âge des assurés) (1 pts)
* Une étiquette de l'axe des $y$ (nombre d'assurés) (1 pts)
a<-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/1000_HF.csv")
head(a)
library(lubridate)
dt <- Sys.Date()
day(dt) <- 01
a$age<-round(as.numeric(dt-as.Date(a$birth_date))/365.25,0)
library(ggplot2)
lectu_graph<-function(data, variable, ...){
ret <- ggplot(data, aes_string(x=variable), ...) + geom_bar()
return(ret)
}
lectu_graph(a, "age")
À partir de la base de données suivante, reproduisez le graphique suivant*:
Ignorez la variable freq_pmt
. Considérez que les paiements sont reçus une fois par année et c'est au même mois que le mois de la date d'expiration.
*chaque détail compte (titre, xlab, ordre des mois ...etc)
# install.packages("httr")
library(httr)
url<-"https://raw.githubusercontent.com/nmeraihi/data/master/pmt_details.csv"
http_error(url) #veerifaction que ma variable url est bien un url sans erreur
Donc on peut faire un if
pour valider le url
if (http_error(url)==F){
pmt_det<-read.csv(url)
}
head(pmt_det)
ou le faire comme d'habitude;
pmt_det<-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/pmt_details.csv")
head(pmt_det)
l'avantage de vérifier l'url et de valider le tout dans une fonction avant l'exécution:
require("lubridate")
require("zoo")
# detach("package:zoo", unload=TRUE) # juste pour unload le package afin de vous
# montrer l'utilité de ce package dans la ligne qui suit
Puisque le format de la date d'éxpiration de la carte de crédit a un format date inhabituel, on utilisera le pckage zoo
afin de pouvoir extraire le mois de cette date.
Remarquez qu'on aurait pu utiliser les fonction substr
pour extraire le mois seulement, toutefois il faut retransformer le charctère extrait en int64
mois<-as.yearmon(pmt_det$credit_card_expire, "%m/%y")
Maintenant on peut finalement utiliser la fonction month
pour avoir le mois;
month.abb[head(as.numeric(format(mois, "%m")))]
insérons le tout dans une nouvelle variable (colonne)
pmt_det$mois_pmt<-month.abb[as.numeric(format(mois, "%m"))]
Suite à la question de un de vos collègues, voici la fonction qui permet d'ordonner sort
sort(factor(head(pmt_det$mois_pmt), levels = month.abb))
head(pmt_det$mois_pmt)
Jetons un coup d'oeil à notre nouveau df
head(pmt_det)
Et maintenant utilisons ggplot
pour tracer le graph demandé;
library(ggplot2)
ggplot(data = pmt_det,
aes(sort(factor(pmt_det$mois_pmt, levels = month.abb)), cout_prime)) +
stat_summary(fun.y = sum,
geom = "bar", )+
xlab("Mois")+
ylab("Mensualité")+
labs(title = "Somme des primes reçues par mois", subtitle="ZAZA Assurance")
a)
Faites un graphique qui permet de voir l'évolution des coûts de sinistre dans le temps. Sur l'axe des $x$, on devrait voir les mois et l'année (1999-01, 1999-02 ...). À des fins de l'exercice, imaginez que s'il y'a un sinistre, il se passe toujours la même date que le debut_pol
dans les données suivantes. Vous pouvez utiliser la fonction aggregate
pour regrouper les sinistres par mois.
donnes_demo<-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/donnes_demo.csv")
head(donnes_demo)
tail(donnes_demo)
police_assurance<-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/police_assurance.csv")
head(police_assurance)
Creéons une nouvelle variable ann_mois_sinistre
où nous conservons seulement le mois et l'année de la date debut_pol
police_assurance$ann_mois_sinistre<-format(as.Date(police_assurance$debut_pol), "%Y-%m")
Ensuite nous faisons une somme sur toutes les variables (cout1@cout7). Il est important d'ajouter l'argument na.rm=T
afin de prendre en considération les na
police_assurance$somme_couts<-apply(police_assurance[,4:10],1 ,sum, na.rm=TRUE)
Ensuite nous faisons un sommaire (somme) de tous les coûts totaux groupé par mois ET année
df_q6<-aggregate(police_assurance$somme_couts,
by=list(ann_mois_sinistre=police_assurance$ann_mois_sinistre), FUN=sum)
head(df_q6)
On voit que maintenant nos données vont du 1995-01 au 2004-05
max(police_assurance$ann_mois_sinistre)
library(scales)
# detach("package:scales", unload=TRUE)
ggplot(data=df_q6, aes(x=ann_mois_sinistre, y=x, group=1)) +
geom_line() +
xlab("Temps") + ylab("Montant des couts des sinistre") +
scale_y_continuous(labels = dollar)+ # c'est là que sert le package scale
ggtitle("Évolution des coûts des \nsinistres dans le temps")+
theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank())
police_assurance$sinistre_ann<-format(as.Date(police_assurance$debut_pol), "%Y")
df_q6_b<-aggregate(police_assurance$somme_couts, by=list(sinistre_ann=police_assurance$sinistre_ann), FUN=sum)
ggplot(data=df_q6_b, aes(x=sinistre_ann, y=x, group=1)) +
geom_line() +
xlab("Temps") + ylab("Montant des couts des sinistre") +
scale_y_continuous(labels = dollar)+
ggtitle("Évolution des coûts des \nsinistres dans le temps")
Faite un graphique qui contient deux lignes, une première qui représente les coûts de sinistre sur le temps pour les francophones, et l'autre ligne pour les anglophones.
df_q4<-aggregate(police_assurance$somme_couts, by=list(sinistre_ann=police_assurance$sinistre_ann, numeropol=police_assurance$numeropol), FUN=sum)
head(df_q4)
head(police_assurance)
head(donnes_demo)
library(dplyr)
df_join<-left_join(df_q4,donnes_demo[, c("numeropol","langue")],by = "numeropol")
head(df_join)
Ensuite nous regroupons le tout par année de sinistre et langue parlée en faisant une somme sur la variable x
de l'ancien data frame df_join
df_join_sum<-aggregate(df_join$x,
by=list(sinistre_ann=df_join$sinistre_ann,
langue=df_join$langue), FUN=sum)
Remarquez la nouvelle variable x
avec le total par année et par langue
df_join_sum
Maintenant nous pouvons faire notre graphique ou notyre variable d'intérêt x
est assignée aux deux groupes de langue group=langue
. Nous distinguons ces deux groupes par couleur colour=langue
ggplot(data=df_join_sum, aes(x=sinistre_ann, y=x, group=langue, colour=langue)) +
geom_line() +
geom_point()+ xlab("Temps") + ylab("Montant des couts des sinistre") +
ggtitle("Évolution des coûts des \nsinistres dans le temps pour \npour Bonjour! et Hi!")+
scale_y_continuous(labels = dollar)
On peut réduire le nombre de 0
sur notre axe des $y$
million<-1000000
ggplot(data=df_join_sum, aes(x=sinistre_ann, y=x/million, group=langue, colour=langue)) +
geom_line() +
geom_point()+ xlab("Temps") + ylab("Coûts des sinistres (millions de $)") +
ggtitle("Évolution des coûts des \nsinistres dans le temps pour \npour Bonjour! et Hi!")+
scale_y_continuous(labels = dollar)
Q5
On vous dit que la compagnie Discover, émettrice de cartes de crédit, a été achetée par le groupe Ironman. Faites la mise à jour de ces informations dans votre base de données. Mais n'oubliez pas de créer un backup de votre ancienne BD sous le format suivant yyyy_mm_dd_HH_MM_SS.csv
(année, mois, jour, heure, minute et seconde).
pmt_det<-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/pmt_details.csv")
head(pmt_det)
date_heure<-Sys.time()
date_heure
date_heure<-gsub(":", "_", date_heure)
date_heure<-gsub(" ", "_", date_heure)
date_heure<-gsub("-", "_", date_heure)
date_heure
nom_fichier<-paste("", date_heure, ".csv", sep = "")
nom_fichier
write.csv(pmt_det, nom_fichier)
pmt_det$credit_card_provider <- replace(as.character(pmt_det$credit_card_provider),
pmt_det$credit_card_provider == "Discover", "Ironman")
head(pmt_det)
On vérifie qu'on a bien une valeur Ironman
head(pmt_det[which(pmt_det$credit_card_provider=="Ironman"),])
et que la valeur Discover
n'éxiste plus
pmt_det[which(pmt_det$credit_card_provider=="Discover"),]
Q6
a)
Faites un graphique du prix du bitcoin sur la période allant du 2016-12-04 au 2017-12-04. Vous pouvez lire ces données ici.
bitCoin<-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/bitcoin_price.csv")
head(bitCoin)
tail(bitCoin)
ggplot(data=bitCoin, aes(x=Date, y=Close.Price, group=1)) +
geom_line() +
xlab("Temps") + ylab("Prix du bitcoin") +
scale_y_continuous(labels = dollar)+
ggtitle("Évolution du prix du bitcoin \ndu 2016-12-04 au 2017-12-04")+
theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank())
ggsave("bitcoinProce.png",width = 5, height = 3)
head(bitCoin)
head(diff(bitCoin$Close.Price)/bitCoin$Close.Price[-length(bitCoin$Close.Price)])
Remarquez que si l'on voulait insérer ce qu'on vient de faire diff(...)
dans une nouvelle colonne de notre df bitCoin
, ça n'aurait pas pu fonctionner car nous avons calculer 365 valleurs alors que notre df possède 366 observations. Puisqu'au temps $t=0$, nous n'avons aucun rendement encore.
Alors il faut mettre le rendemnet au tempos $t=0$ à null
bitCoin$rate_return<-c(NA, diff(bitCoin$Close.Price)/bitCoin$Close.Price[-length(bitCoin$Close.Price)])
Le package Quantmod contient une fonction built in qui calcul le rendement. Cette fonction est appelée Delt
require(quantmod)
bitCoin$rate_return<-Delt(bitCoin$Close.Price)
head(bitCoin)
Remarquez qu'elle insère un rendement=na au temps $t=0$
bitCoin_2<-bitCoin[-1,] # on se débarasse de la première observation
head(bitCoin_2)
Et on fait notre graphique
ggplot(bitCoin_2, aes(x=bitCoin_2$Date, group=1)) +
geom_line(aes(y=bitCoin_2$rate_return*100)) +
labs(title="ACT3035 Exercices",
subtitle="Rendement quotidien du bitcoin \ndu 2016-12-04 au 2017-12-04",
y="Rendement en %")+ xlab("Temps")+
theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank())
Q7
Faites un graphique sur la corrélation entre les prix d'action venant des données suivantes
library(ggcorrplot)
df_app <-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/stocks_correlation.csv", header = T)[ ,2:9]
mat_corr<-cor(df_app)
ggcorrplot(mat_corr, hc.order = TRUE,
lab = TRUE)