• [^] # R et ggplot2

    Posté par . En réponse au journal le dessous des cartes. Évalué à 1.

    Gazole

    library(XML)
    library(ggplot2)
    library(maps)
    library(scales)
    library(RColorBrewer)
    day <- "20150827"
    baseurl <- "http://donnees.roulez-eco.fr/opendata/jour/"
    # Récupération des données
    temp <- tempfile()
    download.file(paste0(baseurl, day), temp)
    xmlsource <- unzip(temp, paste0("PrixCarburants_quotidien_", day, ".xml"))
    unlink(temp)
    parsed <- xmlParse(xmlsource)
    gazole <- data.frame(
     id = xpathSApply(parsed, "//prix[@nom='Gazole']/../@id"),
     cp = xpathSApply(parsed, "//prix[@nom='Gazole']/../@cp"),
     latitude = as.numeric(xpathSApply(parsed, "//prix[@nom='Gazole']/../@latitude")) / 100000,
     longitude = as.numeric(xpathSApply(parsed, "//prix[@nom='Gazole']/../@longitude")) / 100000,
     prix = as.numeric(xpathSApply(parsed, "//prix[@nom='Gazole']/@valeur")) / 1000,
     date = as.Date(xpathSApply(parsed, "//prix[@nom='Gazole']/@maj"))
    )
    # Ajout départements. Cas particuliers : Corse et COM
    gazole$dep <- ifelse(substr(gazole$cp, 1, 2) == "97" | substr(gazole$cp, 1, 2) == "20",
     substr(gazole$cp, 1, 3),
     substr(gazole$cp, 1, 2)
     )
    gazole$dep[which(gazole$dep == "200" | gazole$dep == "201")] <- "2A"
    gazole$dep[which(gazole$dep == "202" | gazole$dep == "206")] <- "2B"
    gazole$dep <- as.factor(gazole$dep)
    # suppression Réunion (et mauvaises loc ?)
    gazole.metro <- subset(gazole, longitude < 10 & latitude > 40)
    # Moyenne prix et intervalle de confiance
    mean(gazole.metro$prix)
    confint(lm(gazole.metro$prix ~ 1))
    # GLM : différences entre départements
    res <- glm(data = gazole, prix~dep)
    summary(res)
    # Graphiques boxplot par département et par prix
    #+ fig.width=15
    ggplot(gazole, aes(dep, prix)) + 
     geom_boxplot() +
     stat_summary(fun.y = mean, geom = "point") +
     ggtitle(paste("Gazole", day)) +
     xlab("Département") +
     ylab("Prix (€)") +
     theme(axis.text.x=element_text(angle = 90, hjust = 0))
    #+ fig.width=15
    ggplot(gazole, aes(x=reorder(dep, prix, FUN=mean), prix)) + 
     geom_boxplot() +
     stat_summary(fun.y = mean, geom = "point") +
     ggtitle(paste("Gazole", day)) +
     xlab("Département") +
     ylab("Prix (€)") +
     theme(axis.text.x=element_text(angle = 90, hjust = 0))
    # Histogramme
    ggplot(gazole, aes(x = prix)) + 
     geom_histogram() +
     ggtitle(paste("Gazole", day)) +
     xlab("") +
     ylab("") 
    # Carte
    #+ fig.height=10
    france.map <- map_data("france")
    ggplot(france.map, aes(long,lat)) +
     geom_polygon(aes(group = group), fill = NA, colour = "grey60") +
     geom_point(data = gazole.metro, aes(longitude, latitude, color = cut(prix, quantile(prix, seq(0,1,0.2))))) +
     scale_colour_manual("Prix (€)", values=rev(brewer.pal(5, "RdBu")), guide=guide_legend(reverse = TRUE)) +
     coord_fixed(ratio = 1.45) +
     ggtitle(paste("Gazole", day)) +
     xlab("") +
     ylab("")