Le langage R

J’ai trouvé un sujet pour ma première contribution à ce forum ! :grin:

Vous m’avez mis le doute hier en me disant que R c’était pas connu et que j’avais l’air d’une groupie (hihi c’est pas vrai, mais avouez, vous l’avez un peu pensé).

Bon, je ne sais pas quelles sont les sources fiables pour ce genre de choses alors je mets plusieurs liens :

Loin de moi de vouloir comparer aux autres langages et tout, je suis moi-même surprise qu’il ressortent dans le top 10 et même avant certains de vos langages préférés !

C’est marrant du coup parce que je pense que les communautés informaticien(ne)s/programmeur(se)s/A♥/etc. et statisticien(ne)s/data scientists ne recoupent que très peu. Mais comme j’adore tisser des ponts entre les gens et disciplines, ça me rend encore plus heureuse de vous connaître.

Aux futurs partages ! :clinking_glasses:

Signé Anna, la R-groupie

4 J'aimes

Pour la prochaine Instalali, on t’invite à nous présenter ce langage dans le cadre d’une mini-conf.
Du peu que j’ai vu, R semble être un langage très expressif et en peu de lignes, on peut réaliser des choses formidables. Bref, je suis intéressé… :slight_smile:

1 J'aime

Pas du tout, R c’est super connu, la preuve, il est dans le top 3 des langages que j’utilise le plus (avec Bash et C).

Et puis tout le monde sait que R est le langage préféré des esthéticiennes, ce qui n’est pas rien quand même…

5 J'aimes

Oh que oui !! :laughing:

Langage préféré, … langage popul’R (j’ai pas Résisté) :slight_smile: Dans le TIOBE index, il se place #8 avec une belle progression! (https://www.tiobe.com/tiobe-index/r/). Dans le stackoverflow survey 2020, il est un peu plus loin, mais se positionne honorablement (https://insights.stackoverflow.com/survey/2020#most-loved-dreaded-and-wanted).

S’il n’est pas si populaire parmis les libriste, c’est peut-etre parce qu’il y a encore peu d’applications libres connues qui l’emploient? Ou peut-etre parce qu’il est assez difficile à maitriser?

Quoi qu’il en soit, il semble que nous ayons encore beaucoup à apprendre sur le sujet. Je +1 la proposition de @pvincent. Il faudrait combler nos lacunes!

1 J'aime

C’est même étonnant qu’un langage aussi spécialisé se place avant Go ou Ruby…

Pas du tout il est même assez intuitif. Il n’est pas très connu comme langage généraliste car (à ma connaissance) il n’a pas de librairie d’environnement graphique donc on ne peut pas utiliser de widgets (fenêtres, boutons, etc…). C’est tout en texte. Par contre on peut produire de beaux graphiques :

Capture d’écran_2021-01-10_22-38-25

Le code qui fait ça tient sur 4 lignes :

library(lattice)
y <- x <- seq(-5, 5, length= 100)
z <- outer(x, y, function(x,y){return(cos(x^2+y^2)/(1+x^2+y^2))})
wireframe(z, drape=T, col.regions=rainbow(100),xlab="x",ylab="y",lwd=0.5)
1 J'aime

Que veux-tu dire par là @harlock ?

Créer des widgets je voulais dire, c’est à dire donner une interface graphique à ton programme R avec fenêtre, liste déroulante, champ de saisie, entrée, etc… comme les librairies GTK et Qt pour les autres langages de programmation.

Mais oups j’aurais peut-être du tourner sept fois ma langue sur mon clavier car il semble que ça existe :

Si on va plus loin que la présentation, on pourrait l’appliquer dans un projet libre et collectif de visualisation de data. Je rêverais d’organiser un hackaton à la raffinerie :slight_smile:
Pour le projet, ca serait bien de trouver un naf’R qui serve l’intérêt commun

1 J'aime

Ah oui d’accord !
Je ne sais pas si R-commander ça te parle aussi ?
Et puis avec shiny, on peut faire des interfaces interactives pour les utilisateurs, par exemple https://dreamrs.github.io/esquisse/index.html pour débuter avec dplyr et ggplot2 :wink:

J’ai une de ces images de ton clavier en tête maintenant !! :laughing:

Hello Guillaume,
Je n’ai jamais fait ça, mais ça peut être marrant oui :slight_smile:
C’est quoi un naf’R ??

Ça doit être un naffair sur R :rofl:

Pour le fun ma dernière courbe hospitalisation Covid à La Réunion faite avec R :

Capture d’écran_2021-01-12_08-25-02

Question : faut-il supprimer les vacances scolaires ?

3 J'aimes

Ah ben oui, c’est évident maintenant que tu le dis :sweat_smile:

Où as-tu trouvé les données ? Tu as fait avec la fonction plot() de base ? J’ai le droit de faire ma version de la courbe ? Dis oui dis oui dis oui :slight_smile:

Et la courbe rouge correspond à quoi exactement ?

La vraie question est : est-ce que ça vient des enfants asymptomatiques qui contaminent le reste de leur famille ou bien des gens qui viennent de l’extérieur en avion (ou même encore une autre raison) ? Dans le deuxième cas, c’est les avions qu’il faudrait supprimer, pas les vacances :wink:

logement , tramsport , alimentation des données a manipuler … y’en a

Sur https://www.data.gouv.fr/fr/datasets/donnees-hospitalieres-relatives-a-lepidemie-de-covid-19/

Prendre la 2ème : donnees-hospitalieres-covid19-2021-xxxx

Oui je ne sais pas utiliser ggplot, j’attends la formation :wink:

oui :joy:

Voici mon vilain code : https://framadrive.org/s/w4ye9A7sjMJMFxN

J’ai du mal avec les dates en général et dans les graphiques (formation !)

C’est une courbe de lissage.

Oui c’est vrai. Les avions sont provoqués par les vacances, donc autant ne supprimer que les avions :slight_smile:

1 J'aime

Allez pour toi @harlock, une mini formation accélérée de ggplot !

# devtools::install_github("ATFutures/ical") # installer le package calendar, il n'est pas dans le CRAN

library(tidyverse)
library(calendar) # importer des fichier .ics (calendriers)

# import des données COVID
# source : "https://www.data.gouv.fr/fr/datasets/r/63352e38-d353-4b54-bfd1-f1b3ee1cabd7"

fichier <- "donnees-hospitalieres-covid19-2021-01-11-19h03.csv"

covid_974 <- read_csv2(fichier) %>% # importe (avec les dates comme il faut)
  filter(dep == "974", sexe == 0) # sélectionne la RUN tout sexes confondus

# import des données des vacances scolaires à la Réunion
# source : "https://data.education.gouv.fr/explore/dataset/fr-en-calendrier-scolaire/download/?format=ics&disjunctive.description=true&disjunctive.location=true&disjunctive.zones=true&disjunctive.annee_scolaire=true&refine.location=R%C3%A9union&timezone=Europe/Paris&lang=fr"

vacances <- ic_read("fr-en-calendrier-scolaire.ics") %>% 
  filter(DTEND >= min(covid_974$jour), DTSTART <= max(covid_974$jour)) %>%  # sélectionne les vacances correspondant aux dates du jeu de données covid_974
  distinct(DTSTART, .keep_all = TRUE) # garde lignes avec des valeurs de DTSTART uniques (2 périodes se chevauchent - rentrée des profs vs. élèves)


# graphique

ggplot(covid_974) + # initialise le graphique
  aes(x = jour, y = hosp) + # attribue un rôle aux variables de covid_974
  geom_rect( # ajoute des rectangles bleus pour les vacances scolaires
    data = vacances, 
    mapping = aes( # définit les rôles des variables du jeu de données vacances
      xmin = as.Date(DTSTART), ymin = -Inf, # coins inférieurs gauches
      xmax = as.Date(DTEND), ymax = Inf, # coins supérieurs droits
      fill = "Vacances scolaires" # légende
      ), 
    inherit.aes = FALSE, # ne garde pas les rôles des variables de covid_974
    alpha = 0.3
  ) +
  geom_line(color = "darkgrey") + #  ajoute la ligne grise avec les données brutes
  geom_smooth( # ajoute la ligne rouge lissée
    color = "red", 
    method = "loess", 
    formula = "y ~ x",
    span = 0.05, # étendue du lissage
    se = FALSE # pas de "ruban" de confiance
  ) +
  scale_x_date( # modifie les paramètres par défaut de l'axe des x qui est de nature "date"
    date_breaks = "month", # une graduation tous les mois
    date_labels = "%b" # le label est le nom du mois en lettres abbrégé
    ) +
  scale_fill_manual(values = "steelblue") + # choisi manuellement la couleur de remplissage
  labs(
    title = str_replace_all(fichier, pattern = "(-)|(.csv)", " "), # ajoute un titre (automatisé avec le nom du .csv)
    x = NULL, # enlève le nom de l'axe x
    y = "Nombre d'hospitalisations journalières", # modifie le nom de l'axe y
    fill = NULL # enlève le titre de la légende pour le remplissage (fill)
  ) +
  theme(legend.position = "bottom") # place la légence en bas du graphique

Je suis assez contente car j’ai réussi à automatiser pas mal de choses, notamment l’import des dates de vacances scolaires, le titre du graphique, la légende.

Ça donne ça :

3 J'aimes

Je vais le mettre sur mon site, tiens, pour décorer :slight_smile:

1 J'aime

Pffff, trop fort, surtout le coup des vacances scolaires… :+1:

1 J'aime

Et voilà le travail :grin:

2 J'aimes

Cool! J’ai pas résisté, j’ai voulu regarder de plus près et faire joujou.

Alors sur Fedora, j’ai installé le paquet ‘R’, tout simplement, mais 600mb à telecharger tout de meme. Apres, j’ai adapté ma conf emacs avec ESS. Ensuite faire un nécessaire install.packages() de tidyverse & devtools: Ca, ca a prit 2 plombes (et 342mb)! Entre temps, il a fallu installer libgit2-devel pour satisfaire devtools.

Maintenant j’evalue jusqu’a:

> vacances <- ic_read("fr-en-calendrier-scolaire.ics") %>% 
+   filter(DTEND >= min(covid_974$jour), DTSTART <= max(covid_974$jour)) %>%  # sélectionne les vacances correspondant aux dates du jeu de données covid_974
+   distinct(DTSTART, .keep_all = TRUE) # garde lignes avec des valeurs de DTSTART uniques (2 périodes se chevauchent - rentrée des profs vs. élèves)
Error in 1:(line_first_event - 1) : NA/NaN argument

Une idee? C’est quoi DTEND/DTSTART?