Cours 2 : Introduction à R

Introduction aux mégadonnées en sciences sociales

Laurence-Olivier M. Foisy

Université de Montréal

Objectifs du cours

  • Introduire R pour l’analyse de données.
    • Les dataframes
    • Les fonctions
    • Les packages
    • Les graphiques
    • Les statistiques

Le but est que vous puissiez sortir d’ici avec une compréhension de base de R et que vous soyez capable d’aller chercher des ressources pour continuer à apprendre.

Qu’est-ce que l’analyse de données?

L’analyse de données vise à explorer, décrire et interpréter des informations recueillies sur les comportements humains, les relations sociales et les phénomènes sociétaux. Ce processus peut inclure des données quantitatives (comme des données issus de sondages) et des données qualitatives (comme des entretiens ou des observations).

Principales étapes de l’analyse de données :

  1. Acquisition des données
  2. Préparation des données
  3. Analyse des données
  4. Communication des résultats

Les outils d’analyse de données

Pourquoi R?



Open source

  • Gratuit
  • Collaboratif
  • Communauté active
    • StackExchange
    • stackoverflow
    • reddit.com/r/Rlanguage
  • Adapté aux besoins des utilisateurs

Pourquoi R?



Packages

  • Offre une extension des fonctionnalités de base presque infinie
  • Peux répondre à des besoins très spécifiques
  • 21,744 packages sur CRAN (Comprehensive R Archive Network)
    • Principal dépôt où sont hébergés les packages R
  • Beaucoup plus sur GitHub
    • En plus de CRAN, de nombreux chercheurs publient leurs packages sur GitHub, une plateforme de partage de code

Pourquoi R?



Packages CLESSN

  • sondr
    • Permet l’automatisation de plusieurs aspects de l’analyse de données. Nous permet de faire des analyses factorielles en quelques secondes.
  • clellm
    • Permet d’utiliser des LLM open-source directement en R et permet d’utiliser des fonctions disponibles seulement en Python, en R.
  • clessnize
    • Permet de standardiser le style de nos graphiques rapidement sans avoir à répéter les mêmes étapes à chaque fois.

Pourquoi R?



Tidyverse

  • Collection de packages pour la manipulation de données

  • dplyr : manipulation de données

  • ggplot2 : graphiques

  • tidyr : nettoyage de données

  • readr : importation de données

  • stringr : manipulation de chaînes de caractères

Pourquoi R?



Reproductibilité

  • Rendre les analyses reproductibles
  • Permet de partager les analyses
    • Les scripts R permettent de partager facilement le travail
  • Permet de retracer les erreurs
  • Partager le code
    • Encourage la transparence et la collaboration dans la recherche

Pourquoi R?



Très utilisé en science sociale

  • Beaucoup de ressources
  • Beaucoup de tutoriels orientés vers les sciences sociales
    • Datacamp
    • swirl()
    • Coursera

Bref… important d’utiliser les mêmes outils que les chercheurs dans votre domaine

Pourquoi R?



Exemples d’utilisation par des organisations

Pourquoi R?

La CLESSN

Chaire de leadership en enseignement des sciences sociales numériques (CLESSN)

  • Titulaire: Yannick Dufresne
  • Objectif: Développer des compétences en science des données pour les étudiants en sciences sociales à travers des projets de recherche et des formations

Datagotchi

  • Application utilisant des variables lifestyles pour prédire le vote
  • Utiliser R et l’analyse de données à travers ce projet:
    • Prototypage en Shiny
    • Nettoyage des données
    • Analyse factorielle
    • Régressions et modèles
    • Visualisation

Analyse textuelle

  • Analyse de ton
    • Est-ce que le texte est positif ou négatif?

Mais aussi …

  • Catégorisation de texte
    • Est-ce que le texte parle de politique, de santé, de sport?
  • Analyse d’image
  • Transcription audio

R : Au-delà de l’analyse de données

Après R

Apprendre R vous permet de comprendre d’autres langages de programmation

  • Python
  • Julia
  • SQL
  • JavaScript
  • HTML/CSS
  • Bash

Installer R et RStudio

  • C’est quoi la différence entre R et RStudio?
  • R est le moteur, RStudio est le véhicule
  • R est le langage, RStudio est la feuille de papier
  • RStudio facilite l’utilisation de R
  • RStudio est un IDE (Integrated Development Environment)
  • Personnalisation de l’environnement de travail



À télécharger :

Avant de commencer : Concept important

Le chemin d’arborescence

  • À tout moment vous devez savoir où vous êtes dans votre ordinateur pour pouvoir importer des données, exporter des graphiques ou mettre des fichiers en relation
  • Votre R pointe toujours vers un endroit spécifique dans votre ordinateur. Vous devez savoir où pour pouvoir importer des données
  • La fonction getwd() dans R permet de savoir où vous êtes

Avant de commencer : Concept important

Planifier avant de coder

La plus grosse erreur est de commencer à coder sans savoir ce que vous voulez faire


  • Clarifer vos objectifs: Qu’est-ce que vous voulez faire?
    • Nettoyer des données?
    • Faire un graphique?

Les possibilités sont infinies, donc il est important de savoir où vous voulez aller

Avant de commencer : Concept important

Décomposer le problème

  • Une fois que vous savez ce que vous voulez faire, il est important de décomposer le problème en petites étapes
  • Un script R pour une seule tâche
    • Bien nommer vos scripts pour savoir ce qu’ils font
    • Exemples:
      • 1_collecte.R
      • 2_nettoyage.R
      • 3_analyse.R
      • 4_graphique.R
  • Chaque script doit être clair et facile à comprendre
  • Commenter votre code avec des #

Importer des données

  • Les données sont souvent dans des fichiers Excel, CSV, ou autres
    • On utilise des fonctions comme read.csv() pour lire les fichiers


df <- read.csv("chemin/vers/data.csv")


  • Dans cette ligne de code il y a plusieurs éléments importants:
    • Le nom de l’objet : df dans ce cas-ci, c’est un dataframe
    • L’opérateur d’assignation : <-
    • La fonction qui permet de lire le fichier : read.csv()
    • Le chemin vers le fichier : "chemin/vers/data.csv"

Chemins d’arborescence

Important de comprendre comment spécifier le chemin vers un fichier

Voici les deux façons de spécifier le chemin :

  • Absolu: /Users/username/Documents/projet/data/data.csv
    • Utile seulement sur votre ordinateur, un autre utilisateur ne pourra pas utiliser le même chemin
  • Relatif: data/data.csv
    • Utile pour partager le code avec d’autres utilisateurs


Différence entre mac et windows

  • Mac: /
  • Windows: \ (il faut s’assurer de changer les \ pour des /)

Importer des données

Autres fonctions pour importer des données dépendamment du format:

  • df <- readxl::read_excel("chemin/vers/data.xlsx")
  • df <- readRDS("chemin/vers/data.rds")

Anatomie d’une ligne de code

Prenons un exemple simple :

resultat <- mean(df$age, na.rm = TRUE)

Décomposons cette ligne :

  • resultat : nom de l’objet où on stocke le résultat
  • <- : opérateur d’assignation
  • mean() : fonction qui calcule la moyenne
  • df$age : variable ‘age’ du dataframe ‘df’
  • na.rm = TRUE : argument de la fonction (ignorer les NA)

Les types de données dans R

Types de base :

  • numeric : nombres (avec ou sans décimales)
age <- 25        # integer
taille <- 1.75   # double
  • character : texte (chaînes de caractères)
nom <- "Pierre"
ville <- 'Montréal'  # simple ou double quotes
  • logical : TRUE ou FALSE
est_etudiant <- TRUE
a_un_emploi <- FALSE

Les types de données dans R

Types spéciaux :

  • factor : catégories
niveau <- factor(c("Débutant", "Intermédiaire", "Avancé"))
  • Date : dates
date <- as.Date("2025-01-14")
  • NA : valeurs manquantes
donnees <- c(1, NA, 3, NA, 5)

Parenthèses, guillemets et virgules

Les parenthèses () :

  • Délimitent les arguments d’une fonction
  • Doivent toujours être fermées
# Correct
moyenne <- mean(donnees)

# Incorrect - parenthèse manquante
moyenne <- mean(donnees

Les virgules :

  • Séparent les arguments d’une fonction
# Correct
resultat <- sum(1, 2, 3, na.rm = TRUE)

# Incorrect - virgule manquante
resultat <- sum(1 2 3, na.rm = TRUE)

Assignation : = vs <-

L’opérateur <- :

  • Recommandé pour l’assignation de variables
  • Plus clair et explicite
  • Standard dans la communauté R
age <- 25
nom <- "Alice"

L’opérateur = :

  • Utilisé principalement pour les arguments de fonctions
  • Peut créer de la confusion
# Pour les arguments de fonction
mean(x = donnees, na.rm = TRUE)

# Éviter pour l'assignation
age = 25  # Fonctionne mais non recommandé

Messages d’erreur courants

Erreur de syntaxe

# Message d'erreur
Error: unexpected symbol in "mon code"

# Cause probable
# Parenthèse ou guillemet manquant

Objet non trouvé

# Message d'erreur
Error: object 'data' not found

# Causes probables
# - Faute de frappe dans le nom
# - Objet non créé
# - Mauvais working directory

Messages d’erreur (suite)

Comment réagir aux erreurs :

  1. Ne pas paniquer ! Les erreurs sont normales
  2. Lire attentivement le message d’erreur
  3. Vérifier la ligne indiquée dans le message
  4. Points à vérifier :
    • Parenthèses fermées ?
    • Guillemets fermés ?
    • Virgules aux bons endroits ?
    • Noms d’objets corrects ?
    • Package chargé (library()) ?

Codons!

Nous allons utiliser le dataframe swiss

# Charger les packages nécessaires
library(dplyr) # Manipulation de données
library(ggplot2) # Graphiques

# Importer les données swiss (jeu de données intégré)
df <- swiss

# Explorer les données
View(df)
summary(df)
names(df)
head(df)
ncol(df)
nrow(df)

Analyse rapide d’une variable

# Voir le nombre de valeurs pour chaque élément d'une variable
table(df$Fertility)

# Histogramme de la variable 'Fertility'
hist(df$Fertility)

# Obtenir la moyenne de la variable 'Fertility'
mean(df$Fertility)
  • $ permet d’accéder à une variable dans un dataframe.
  • On accède à la variable Fertility dans le dataframe df avec df$Fertility

Filter et sélectionner des variables

# Sélectionner des colonnes 
# (par exemple, Fertility, Education et Agriculture)

df_selected <- df %>%
  select(Fertility, Education, Agriculture)

# Filtrer les lignes pour inclure uniquement les cantons 
# avec une fertilité supérieure à la moyenne

mean_fertility <- mean(df_selected$Fertility, na.rm = TRUE)

df_filtered <- df_selected %>%
  filter(Fertility > mean_fertility)

Modifier des variables

# Créer une nouvelle variable binaire "high_agriculture" 
# indiquant si le pourcentage d'agriculture est supérieur à 50

df_mutated <- df_filtered %>%
  mutate(high_agriculture = ifelse(Agriculture > 50, 1, 0))

# Regrouper par "high_agriculture" et calculer la moyenne de l'éducation

df_summarized <- df_mutated %>%
  group_by(high_agriculture) %>%
  summarize(moyenne_education = mean(Education, na.rm = TRUE))

# Afficher le résultat final
print(df_summarized)

Représentation graphique des données

Principes généraux de la visualisation

  • Montrer les données
    • Évitez les distractions inutiles
  • Choisir des visualisations appropriées
    • Quelles informations seront utiles ?
  • Éviter les graphiques « spaghetti »
    • Évitez les lignes trop complexes qui se chevauchent et s’entremêlent
  • Commencer en noir et blanc
    • Utiliser les couleurs de manière efficace

Visualisation avec ggplot2

Initialiser un graphique

ggplot(df, aes(x = Agriculture, y = Fertility, color = Education)) 
  • df est le dataframe
  • aes() est la fonction qui permet de spécifier les variables à utiliser
  • x et y sont les variables à utiliser pour les axes x et y
  • color est la variable à utiliser pour la couleur

Visualisation avec ggplot2

Ajouter un geom_()

ggplot(df, aes(x = Agriculture, y = Fertility, color = Education)) +
  geom_point(alpha = 0.8) # Le alpha est la transparence
  • Il existe plusieurs geom_() pour différents types de graphiques
    • geom_point() est pour un nuage de points
    • geom_line() est pour un graphique en ligne
    • geom_bar() est pour un graphique en barres
    • geom_histogram() est pour un histogramme

Visualisation avec ggplot2

Ajouter une échelle de couleur

ggplot(df, aes(x = Agriculture, y = Fertility, color = Education)) +
  geom_point(alpha = 0.8) + # Le alpha est la transparence
  scale_color_gradient(low = "blue", high = "red", name = "Éducation") 
  • scale_color_gradient() permet de spécifier les couleurs pour la variable Education
  • low et high sont les couleurs pour les valeurs les plus basses et les plus hautes
  • name est le nom de la légende
  • Vous pouvez utiliser les hexcodes pour les couleurs

Visualisation avec ggplot2

Ajouter des titres et des labels

ggplot(df, aes(x = Agriculture, y = Fertility, color = Education)) +
  geom_point(alpha = 0.8) + # Le alpha est la transparence
  scale_color_gradient(low = "blue", high = "red", name = "Éducation") +
  labs(
    title = "Relation entre l'agriculture et la fertilité en Suisse",
    x = "Pourcentage d'agriculture",
    y = "Fertilité"
  ) 

Visualisation avec ggplot2

Ajouter un thème

ggplot(df, aes(x = Agriculture, y = Fertility, color = Education)) +
  geom_point(alpha = 0.8) + # Le alpha est la transparence
  scale_color_gradient(low = "blue", high = "red", name = "Éducation") +
  labs(
    title = "Relation entre l'agriculture et la fertilité en Suisse",
    x = "Pourcentage d'agriculture",
    y = "Fertilité"
  ) +
  theme_minimal()
  • theme_minimal() est un thème minimaliste
  • Il existe plusieurs thèmes prédéfinis dans ggplot2
  • Vous pouvez aussi créer votre propre thème

Visualisation avec ggplot2

Sauvegarder le graphique

ggplot(df, aes(x = Agriculture, y = Fertility, color = Education)) +
  geom_point(alpha = 0.8) + # Le alpha est la transparence
  scale_color_gradient(low = "blue", high = "red", name = "Éducation") +
  labs(
    title = "Relation entre l'agriculture et la fertilité en Suisse",
    x = "Pourcentage d'agriculture",
    y = "Fertilité"
  ) +
  theme_minimal()

ggsave("nom_du_graphique.png", width = 10, height = 6)
  • Vous pouvez spécifier le format du graphique (png, pdf, etc.) ainsi que le chemin pour sauvegarder le graphique

Visualisation avec ggplot2

Un histogramme de la variable Fertility

ggplot(df, aes(x = Fertility)) +
  geom_histogram(fill = "skyblue", color = "white", bins = 5) +
  labs(
    title = "Distribution de la fertilité en Suisse",
    x = "Fertilité",
    y = "Nombre de cantons"
  ) +
  theme_minimal()

Analyse statistique

# Calculer la corrélation entre Fertility et Agriculture

correlation <- cor(df$Fertility, df$Agriculture)
print(paste("Corrélation entre Fertility et Agriculture:", round(correlation, 2)))

# Effectuer une régression linéaire avec Fertility comme variable dépendante

modele <- lm(Fertility ~ Agriculture, data = df)

# Afficher le résumé du modèle de régression

summary(modele)

Bonnes pratiques

style.tidyverse.org

  • Utilisé par la communauté R pour standardiser le style du code
  • Utilisé par Google
  • Utilisé par des packages populaires comme stylr et lintr

Bonnes pratiques

Règles générales :

  • Nommer vos fichiers de manière descriptive
  • Utiliser des minuscules seulement et aucun caractère spécial comme é ou à
  • Si vos fichiers contiennent plusieurs mots, les séparer par des underscores _
  • Exemple: nettoyage_donnees.R
  • Utiliser des chiffres pour ordonner vos scripts
  • Évitez d’écrire des lignes de code trop longues
  • Utiliser la convention snake_case plutôt que camelCase
  • Nommez vous dataframe de façon standard. df_ ou data_

Organiser votre environnement de travail

/votre_projet
├── data
│   ├── processed
│   │   └── data_clean.csv
│   └── raw
│       └── data_raw.csv
├── docs
│   └── article
│       ├── articles.qmd
│       └── references.bib
├── R
│   ├── 2_analysis.R
│   └── 3_graph.R
├── README.md
└── results
    └── graphs
        └── 1_bar_graph.png
 

En apprendre plus

Ressources

Quoi faire quand ça ne fonctionne pas?

  • ChatGPT
    • Être clair et précis dans vos requêtes
    • Expliquer la structure de vos données
    • Copier-coller le message d’erreur
    • Copier-coller la documentation d’un package
  • Réessayer ChatGPT
    • C’est rare que ChatGPT ne trouve pas la réponse
  • La documentation de R (ex: ?mean() dans votre console)
  • Google
    • Stackoverflow
    • Stackexchange

Conclusion