Accéder au contenu principal

40 questions et réponses d'entretien sur la programmation R pour tous les niveaux

Apprenez les 40 questions d'entretien fondamentales sur la programmation R et leurs réponses pour tous les niveaux d'ancienneté : débutants, intermédiaires et avancés.
Actualisé 14 nov. 2024  · 17 min de lecture

Pour augmenter vos chances de réussite lors d'un entretien R, il est toujours utile de connaître à l'avance les questions potentielles qui peuvent vous être posées si vous êtes à la recherche d'un emploi - ou les questions que vous pouvez poser à un candidat si vous êtes un responsable de l'embauche ou un recruteur.

Cet article présente 40 questions fondamentales d'entretien en programmation R et leurs réponses pour tous les niveaux d'ancienneté, ainsi que quelques questions générales d'entretien. Par souci de commodité, toutes les questions techniques sont divisées en trois niveaux : questions d'entrée, questions intermédiaires et questions avancées.

Comme ressources supplémentaires pour la préparation de votre entretien de programmation R, vous pouvez consulter les blogs et les cours suivants :

Questions générales d'entretien sur la programmation R

Au début d'un entretien avec R, l'interviewer peut poser au candidat des questions générales, non techniques, sur son expérience globale avec R. Par exemple :

  • Depuis combien de temps travaillez-vous dans le domaine de la recherche et du développement ?
  • Quel type de tâches effectuez-vous avec R ?
  • Comment estimez-vous votre niveau de compétence en R ?

Si vous êtes à la recherche d'un emploi, vous devez réfléchir à l'avance à ces questions et à d'autres questions similaires et préparer vos réponses. Ne vous inquiétez pas si vous n'avez pas encore d'expérience professionnelle réelle en R : la description de votre stage en programmation R ou des projets R individuels ou de groupe que vous avez réalisés au cours de vos études convient parfaitement.

En outre, si vous passez un entretien pour un poste de débutant, votre interlocuteur ne s'attend pas nécessairement à ce que vous ayez une expérience professionnelle étendue (ou même une expérience quelconque) dans le domaine de la recherche et du développement.

Questions d'entretien sur la programmation R pour débutants

Commençons par quelques-unes des questions techniques de base que votre employeur potentiel pourrait vous poser lors d'un entretien d'embauche. Pour cela, vous devez maîtriser les bases et avoir une certaine expérience pratique de l'utilisation de R.

1. Qu'est-ce que R et quelles sont ses principales caractéristiques ?

R est un langage de programmation et un environnement largement utilisé pour résoudre les problèmes de science des données et particulièrement conçu pour le calcul statistique et la visualisation des données. Ses principales caractéristiques sont les suivantes

  • Source ouverte
  • Interprétée (c'est-à-dire qu'elle supporte à la fois la programmation fonctionnelle et la programmation orientée objet)
  • Hautement extensible grâce à sa large collection de paquets de science des données
  • Fonctionnel et flexible (les utilisateurs peuvent définir leurs propres fonctions, ainsi que régler divers paramètres des fonctions existantes)
  • Compatible avec de nombreux systèmes d'exploitation
  • Peut être facilement intégré à d'autres langages de programmation et à d'autres cadres de travail.
  • Permet des calculs statistiques puissants
  • Offre une variété d'outils de visualisation de données pour créer des graphiques de qualité professionnelle.
  • Équipé d'une interface de ligne de commande
  • Soutenu par une forte communauté en ligne

2. Quels sont les inconvénients de l'utilisation de R ?

  • Syntaxe non intuitive et donc courbe d'apprentissage abrupte, en particulier pour les débutants en programmation.
  • Relativement lent
  • Utilisation inefficace de la mémoire
  • Documentation incohérente et souvent difficile à lire sur les paquets
  • Certains paquets sont de mauvaise qualité ou mal entretenus
  • Problèmes de sécurité potentiels en raison de sa nature open-source

3. Listez et définissez quelques types de données de base dans R.

Il existe quelques types de données dans R, notamment : 

  1. Numérique-décimal.
  2. Nombres entiers.
  3. Caractère -lettre, chiffre ou symbole, ou toute combinaison de ceux-ci, entre guillemets simples ou réguliers.
  4. Catégories de facteurs àpartir d'un ensemble prédéfini de valeurs possibles, souvent avec un ordre intrinsèque.
  5. Logique - lesvaleurs booléennes TRUE et FALSE, représentées sous le capot par 1 et 0, respectivement.

4. Listez et définissez quelques structures de données de base dans R.

  1. Vecteur :structure de données unidimensionnelle utilisée pour stocker des valeurs du même type de données.
  2. Liste :structure de données multidimensionnelle utilisée pour stocker des valeurs de n'importe quel type de données et/ou d'autres structures de données.
  3. Matrice :structure de données bidimensionnelle utilisée pour stocker des valeurs du même type de données.
  4. Cadre de données :structure de données bidimensionnelle utilisée pour stocker des valeurs de n'importe quel type de données, mais chaque colonne doit stocker des valeurs du même type de données.

5. Comment importer des données dans R ?

La base R fournit les fonctions essentielles pour l'importation de données :

  • read.table()-La fonction la plus générale de la base R pour l'importation de données, prend en charge les données tabulaires avec n'importe quel type de séparateur de champ, y compris des séparateurs spécifiques, tels que |.

  • read.csv()fichiers de valeurs séparées par des virgules (CSV) avec . comme séparateur décimal.

  • read.csv2()Fichiers de valeurs séparées par des points cardinaux avec , comme séparateur décimal.

  • read.delim()fichiers de valeurs séparées par un tableau (TSV) avec . comme séparateur décimal.

  • read.delim2()fichiers de valeurs séparées par un tableau (TSV) avec , comme séparateur décimal.

En pratique, toutes ces fonctions peuvent être utilisées pour importer des données tabulaires avec n'importe quel type de champ et de séparateur décimal : leur utilisation pour les formats de fichiers spécifiés n'est qu'une question de convention et de paramètres par défaut. Par exemple, voici la syntaxe de la première fonction : read.table(file, header = FALSE, sep = "", dec = "."). Les autres fonctions ont les mêmes paramètres mais avec des réglages par défaut différents qui peuvent toujours être remplacés explicitement.

Les paquets readr et readxl de tidyverse fournissent d'autres fonctions pour importer des formats de fichiers spécifiques. Chacune de ces fonctions peut être affinée par le réglage de divers paramètres optionnels.

lecteur

  • read_tsv()-les fichiers de valeurs séparées par des tableaux (TSV).

  • read_fwf()-Fichiers à largeur fixe.

  • read_log()-les fichiers journaux Web.

  • read_table(), read_csv(), read_csv2(), et read_delim()- équivalentes aux fonctions R de base.

readxl

  • read_excel()-Fichiers Excel.

  • read_csv()-équivalente à la fonction des fonctions de base de R.

Pour approfondir le chargement de données dans R, vous pouvez consulter le didacticiel intitulé Comment importer des données dans R.

6. Qu'est-ce qu'un paquet dans R, et comment installer et charger des paquets ?

Un package R est un ensemble de fonctions, de code, de données et de documentation, représentant une extension du langage de programmation R et conçu pour résoudre des types de tâches spécifiques. R est livré avec un certain nombre de paquets préinstallés, et d'autres paquets peuvent être installés par les utilisateurs à partir de dépôts. Le dépôt centralisé le plus populaire, qui stocke des milliers de paquets R, est appelé Comprehensive R Archive Network (CRAN).

Pour installer un paquetage R directement à partir du CRAN, nous devons transmettre le nom du paquetage entre guillemets à la fonction install.packages(), comme suit : install.packages("package_name"). Pour installer plusieurs paquets du CRAN en une seule fois, nous devons utiliser un vecteur de caractères contenant les noms des paquets entre guillemets, comme suit : install.packages(c("package_name_1", "package_name_2"). Pour installer manuellement un paquetage R, nous devons d'abord télécharger le paquetage sous forme de fichier zip sur notre ordinateur, puis lancer le programme install.packages() function:

install.packages("path_to_the_locally_stored_zipped_package_file", repos=NULL, type="source")

Pour charger un paquetage R installé dans l'environnement de travail R, vous pouvez utiliser les fonctions library() ou require(). Chacun d'entre eux prend le nom du paquet sans les guillemets et charge le paquet, par exemple, library(caret). Toutefois, le comportement de ces fonctions est différent lorsqu'elles ne trouvent pas le paquet nécessaire : library() envoie une erreur et arrête l'exécution du programme, tandis que require() envoie un avertissement et poursuit l'exécution du programme.

7. Comment créer un cadre de données dans R ?

1. À partir d'un ou plusieurs vecteurs de même longueur, en utilisant la fonction data.frame():

df <- data.frame(vector_1, vector_2)

2. À partir d'une matrice, enutilisant la fonction data.frame():

df <- data.frame(my_matrix)

3. À partir d'une liste de vecteurs de même longueur, en utilisant la fonction data.frame():

df <- data.frame(list_of_vectors)

4. A partir d'autres cadres de données:

  • Pour combiner les cadres de données horizontalement(uniquement si les cadres de données ont le même nombre de lignes et que les enregistrements sont identiques et dans le même ordre) - en utilisant la fonction cbind():

df <- cbind(df1, df2)
  • Pour combiner les cadres de données verticalement(uniquement s'ils ont un nombre égal de colonnes nommées de manière identique, du même type de données et apparaissant dans le même ordre) - en utilisant la fonction rbind():

df <- rbind(df1, df2)

8. Comment ajouter une nouvelle colonne à une base de données dans R ?

  1. Utilisation du symbole $:
df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
​
df$col_3 <- c(5, 1, 18, 16)
print(df)

Sortie :

  col_1 col_2
1    10     a
2    11     b
3    12     c
4    13     d
  col_1 col_2 col_3
1    10     a     5
2    11     b     1
3    12     c    18
4    13     d    16
  1. Utilisation de crochets :
df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
​
df["col_3"] <- c(5, 1, 18, 16)
print(df)

Sortie :

  col_1 col_2
1    10     a
2    11     b
3    12     c
4    13     d
  col_1 col_2 col_3
1    10     a     5
2    11     b     1
3    12     c    18
4    13     d    16
  1. Utilisation de la fonction cbind():

df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
​
df <- cbind(df, col_3=c(5, 1, 18, 16))
print(df)

Sortie :

 col_1 col_2
1    10     a
2    11     b
3    12     c
4    13     d
  col_1 col_2 col_3
1    10     a     5
2    11     b     1
3    12     c    18
4    13     d    16

Dans chacun des trois cas, nous pouvons attribuer une valeur unique ou un vecteur ou calculer la nouvelle colonne sur la base des colonnes existantes de ce cadre de données ou d'autres cadres de données.

9. Comment supprimer des colonnes d'une base de données dans R ?

1. En utilisant la fonction select() du package dplyr de la collection tidyverse. Le nom de chaque colonne à supprimer est transmis avec un signe moins avant :

df <- select(df, -col_1, -col_3)

Si, au contraire, nous avons trop de colonnes à supprimer, il est plus logique de conserver le reste des colonnes plutôt que de supprimer celles qui nous intéressent. Dans ce cas, la syntaxe est similaire, mais les noms des colonnes à conserver ne sont pas précédés du signe moins :

df <- select(df, col_2, col_4)

2. En utilisant la fonction intégrée subset() de la base R. Si nous devons supprimer une seule colonne, nous assignons au paramètre select de la fonction le nom de la colonne précédé d'un signe moins. Pour supprimer plus d'une colonne, nous attribuons à ce paramètre un vecteur contenant les noms de colonnes nécessaires précédés d'un signe moins :

df <- subset(df, select=-col_1)
df <- subset(df, select=-c(col_1, col_3))

Si, au contraire, nous avons trop de colonnes à supprimer, il est plus logique de conserver le reste des colonnes plutôt que de supprimer celles qui nous intéressent. Dans ce cas, la syntaxe est similaire, mais le signe moins n'est pas ajouté :

df <- subset(df, select=col_2)
df <- subset(df, select=c(col_2, col_4))

10. Qu'est-ce qu'un facteur dans R ?

Dans R, un facteur est un type de données spécifique qui accepte des catégories (également appelées niveaux) à partir d'un ensemble prédéfini de valeurs possibles. Ces catégories ressemblent à des caractères, mais sous le capot, elles sont stockées sous forme d'entiers. Souvent, ces catégories ont un ordre intrinsèque. Par exemple, une colonne dans un cadre de données qui contient les options de l'échelle de Likert pour évaluer les opinions ("tout à fait d'accord", "d'accord", "plutôt d'accord", "ni d'accord ni en désaccord", "plutôt en désaccord", "en désaccord", "tout à fait en désaccord") devrait être de type factoriel pour capturer cet ordre intrinsèque et le refléter adéquatement sur les types de graphiques catégoriels. Par exemple, une colonne dans une base de données qui contient les options de l'échelle de Likert pour évaluer les opinions ("tout à fait d'accord", "d'accord", "plutôt d'accord", "ni d'accord ni en désaccord", "plutôt en désaccord", "en désaccord", "tout à fait en désaccord") devrait être de type factoriel pour capturer cet ordre intrinsèque et le refléter de manière adéquate sur les types catégoriels de graphiques.

11. Qu'est-ce que RStudio ?

RStudio est un IDE (environnement de développement intégré) open-source qui est largement utilisé comme interface graphique pour travailler avec le langage de programmation R à partir de la version 3.0.1. Il possède de nombreuses fonctionnalités utiles qui le rendent très populaire parmi les utilisateurs de R :

  • Convivialité
  • Flexible
  • Multifonctionnel
  • Permet de créer des scripts réutilisables
  • Cursus de l'historique des opérations
  • Complète automatiquement le code
  • Offre une aide détaillée et complète sur n'importe quel objet
  • Permet d'accéder facilement à toutes les données importées et à tous les objets construits.
  • Facilite le passage entre le terminal et la console
  • Permet la prévisualisation du tracé
  • Permet de créer et de partager des projets de manière efficace
  • Peut être utilisé avec d'autres langages de programmation (Python, SQL, etc.)

Pour en savoir plus sur ce qu'est RStudio et comment l'installer et commencer à l'utiliser, vous pouvez suivre le tutoriel RStudio.

12. Qu'est-ce que R Markdown ?

R Markdown est un paquetage R gratuit et open-source qui fournit un cadre de création pour la construction de projets de science des données. Il nous permet d'écrire un seul fichier .rmd qui combine la narration, le code et les tracés de données, puis de rendre ce fichier dans un format de sortie sélectionné. Les principales caractéristiques de R Markdown sont les suivantes

  • Les documents qui en résultent sont partageables, entièrement reproductibles et d'une qualité digne d'une publication.
  • Un large éventail de sorties et de formats statiques et dynamiques, tels que HTML, PDF, Microsoft Word, des documents interactifs, des tableaux de bord, des rapports, des articles, des livres, des présentations, des applications, des sites web, des modèles réutilisables, etc.
  • Suivi facile du contrôle des versions.
  • Plusieurs langages de programmation sont pris en charge, notamment R, Python et SQL.

13. Comment créer une fonction définie par l'utilisateur dans R ?

Pour créer une fonction définie par l'utilisateur dans R, nous utilisons le mot-clé function et la syntaxe suivante :

function_name <- function(parameters){
    function body 
}
  1. Nom de la fonction -nom de l'objet fonction qui sera utilisé pour appeler la fonction après sa définition.
  2. Paramètres de la fonction -variables séparées par une virgule et placées entre parenthèses qui seront définies comme valeurs d'argument réelles chaque fois que nous appelons la fonction.
  3. Corps de la fonction -morceau de code entre crochets contenant les opérations à effectuer dans un ordre prédéfini sur les arguments d'entrée chaque fois que nous appelons la fonction. En général, le corps de la fonction contient la (ou les) instruction(s) return() qui renvoie(nt) la sortie de la fonction, ou la (ou les) instruction(s) print() qui imprime(nt) la sortie.

Exemple de fonction simple définie par l'utilisateur dans R :

my_function <- function(x, y){
    return(x + y)
}

14. Citez quelques logiciels de visualisation de données populaires en R.

  • ggplot2 - lepaquetage de visualisation de données R le plus populaire permettant la création d'une grande variété de graphiques.
  • Lattice - pourafficher des données multivariées sous la forme d'un panneau carrelé (treillis) de plusieurs tracés.
  • Plotly - pourcréer des graphiques interactifs de qualité professionnelle.
  • highcharter - pour untracé dynamique facile, offre de nombreuses fonctionnalités flexibles, des plugins et des thèmes ; permet de tracer différents objets R à l'aide d'une seule fonction.
  • Dépliant pour lacréation de cartes interactives.
  • ggvis - pourcréer des graphiques interactifs et hautement personnalisables accessibles dans n'importe quel navigateur en utilisant l'infrastructure de Shiny.
  • patchwork -combinaison de plusieurs parcelles, généralement de différents types, sur un même graphique.

Questions d'entretien sur la programmation R intermédiaire

Pour les praticiens plus expérimentés, il est probable que l'examinateur posera des questions nécessitant une connaissance plus détaillée de R. Voici quelques exemples auxquels vous pouvez vous préparer :

15. Comment assigner une valeur à une variable dans R ?

  1. L'utilisation de l'opérateur d'affectation <-, par exemple my_var <- 1—est la façon la plus courante d'affecter une valeur à une variable dans R.

  2. Utilisation de l'opérateur égal =, par exemple my_var = 1- pour attribuer des valeurs aux arguments dans une définition de fonction.

  3. L'opérateur d'affectation vers la droite ->, par exemple my_var -> 1- peut être utilisé dans les tuyaux.

  4. Utilisation des opérateurs d'affectation globale, soit vers la gauche (<<-), soit vers la droite (->>), par exemple my_var <<- 1- pour créer une variable globale à l'intérieur d'une définition de fonction.

16. Quelles sont les conditions requises pour nommer les variables dans R ?

  • Le nom d'une variable peut être une combinaison de lettres, de chiffres, de points et de traits de soulignement. Il ne peut pas contenir d'autres symboles, y compris des espaces blancs.

  • Le nom d'une variable doit commencer par une lettre ou un point.

  • Si le nom d'une variable commence par un point, ce point ne peut pas être suivi d'un chiffre.

  • Les mots réservés dans R (TRUE, for, NULL, etc.) ne peuvent pas être utilisés comme noms de variables.

  • Les noms de variables sont sensibles à la casse.

Dans le cours Writing Efficient R Code, vous trouverez d'autres bonnes pratiques pour écrire du code en R.

17. Quels sont les types de boucles existant dans R, et quelle est la syntaxe de chaque type ?

1. Boucle For - elle itèresur une séquence un nombre de fois égal à sa longueur (sauf si les instructions break et/ou next sont utilisées) et effectue le même ensemble d'opérations sur chaque élément de cette séquence. Il s'agit du type de boucle le plus courant. La syntaxe d'une boucle for en R est la suivante :

for (variable in sequence) {
    operations
}

2. La boucle While exécute lemême ensemble d'opérations jusqu'à ce qu'une condition logique prédéfinie (ou plusieurs conditions logiques) soit remplie, à moins que les instructions break et/ou next ne soient utilisées. Contrairement aux boucles for, nous ne connaissons pas à l'avance le nombre d'itérations qu'une boucle while va exécuter. Avant d'exécuter une boucle while, nous devons assigner une variable (ou plusieurs variables) et mettre à jour sa valeur dans le corps de la boucle à chaque itération. La syntaxe d'une boucle while en R est la suivante :

variable assignment

while (logical condition) {
    operations
    variable update
}

3. Boucle de répétition -exécute de manière répétéela même série d'opérations jusqu'à ce qu'une (ou plusieurs) condition(s) d'interruption prédéfinie(s) soit(ent) remplie(s). Pour introduire une telle condition, une boucle répétitive doit contenir un bloc de code if-statement qui, à son tour, doit inclure l'instruction break dans son corps. Comme pour les boucles while, nous ne connaissons pas à l'avance le nombre d'itérations qu'une boucle répétitive va exécuter. La syntaxe d'une boucle de répétition dans R est la suivante :

repeat { 
    operations 
    if(break condition) {
        break
    }
}

Vous pouvez en savoir plus sur les boucles dans R grâce à notre tutoriel séparé.

18. Comment agréger des données dans R ?

Pour agréger les données dans R, nous utilisons la fonction aggregate(). Cette fonction comporte les paramètres essentiels suivants, dans l'ordre :

  • x-le cadre de données à agréger.

  • by-une liste des facteurs à regrouper.

  • FUNune fonction d'agrégation pour calculer les statistiques sommaires pour chaque groupe (par exemple, mean, max, min, count, sum).

19. Comment fusionner des données dans R ?

1. Utilisation de la fonction cbind() uniquement si les cadres de données ont le même nombre de lignes et si les enregistrements sont identiques et dans le même ordre :

df <- cbind(df1, df2)

2. Utilisation de la fonction rbind() pour combiner les cadres de données verticalement uniquement s'ils ont un nombre égal de colonnes nommées de la même manière, du même type de données et apparaissant dans le même ordre :

df <- rbind(df1, df2)

3. La fonction merge() permet de fusionner des cadres de données en fonction d'une colonne commune, généralement une colonne d'identification :

  • Joint intérieur :
df <- merge(df1, df2, by="ID")
  • Joint à gauche :
df <- merge(df1, df2, by="ID", all.x=TRUE)
  • Joint à droite :
df <- merge(df1, df2, by="ID", all.y=TRUE)
  • Joint extérieur :
df <- merge(df1, df2, by="ID", all=TRUE)

4. Utilisez la fonction join() du package dplyr pour fusionner des bases de données en fonction d'une colonne commune, généralement une colonne d'identification :

df <- join(df1, df2, by="ID", type="type_of_join")

Le paramètre type prend l'une des valeurs suivantes : inner, left, right, ou full.

20. Comment concaténer des chaînes de caractères dans R ?

Nous pouvons concaténer deux ou plusieurs chaînes de caractères dans R en utilisant les fonctions paste() ou cat(). La première approche est la plus répandue. Les deux fonctions prennent en compte un nombre quelconque de chaînes à concaténer et peuvent également prendre en compte un paramètre facultatif sep (ainsi que d'autres paramètres facultatifs) - un caractère ou une séquence de caractères qui séparera les chaînes attachées dans la chaîne résultante (un espace blanc par défaut).

21. Comment transposer des données bidimensionnelles dans R ?

Nous pouvons transposer une base de données ou une matrice dans R de manière à ce que les colonnes deviennent les lignes et vice versa. Pour ce faire, nous devons utiliser la fonction t() de la base R. Par exemple :

df <- data.frame(col_1=c(10, 20, 30), col_2=c(11, 22, 33))
print(df)
​
transposed_df <- t(df)
print(transposed_df)

Sortie :

 col_1 col_2
1    10    11
2    20    22
3    30    33
      [,1] [,2] [,3]
col_1   10   20   30
col_2   11   22   33

22. Comment enchaîner plusieurs opérations dans R ?

Nous pouvons enchaîner plusieurs opérations dans R en utilisant l'opérateur pipe (%>%) fourni par la collection tidyverse. L'utilisation de cet opérateur permet de créer un pipeline de fonctions dans lequel la sortie de la première fonction est transmise comme entrée à la deuxième fonction et ainsi de suite jusqu'à la fin du pipeline. Il n'est donc plus nécessaire de créer des variables supplémentaires et la lisibilité globale du code s'en trouve considérablement améliorée.

Exemple d'utilisation de l'opérateur pipe sur une base de données :

df <- data.frame(a=1:4, b=11:14, c=21:24)
print(df)
​
df_new <- df %>% select(a, b) %>% filter(a > 2)
print(df_new)

Sortie :

 a  b  c
1 1 11 21
2 2 12 22
3 3 13 23
4 4 14 24
  a  b
1 3 12
2 4 13

23. Quels types de graphiques de données peuvent être créés dans R ?

La visualisation de données étant l'un des points forts des langages de programmation R, nous pouvons créer tous les types de graphiques de données dans R :

  • Types courants de graphiques de données :
    • Diagramme en barres : il montreles valeurs numériques des données catégorielles.
    • Graphique linéaire - montrela progression d'une variable, généralement dans le temps.
    • Diagramme de dispersion - montreles relations entre deux variables.
    • Tracé de surface basésur un tracé linéaire, la zone située sous la ligne étant colorée ou remplie d'un motif.
    • Diagramme circulaire : montrela proportion de chaque catégorie de données catégorielles par rapport à l'ensemble.
    • Diagramme en boîte : présenteun ensemble de statistiques descriptives des données.
  • Types avancés de graphiques de données :
    • Graphique en forme de violon - montre àla fois un ensemble de statistiques descriptives des données et la forme de la distribution de ces données.
    • Carte thermique : montrel'ampleur de chaque point de données numériques dans l'ensemble de données.
    • Treemap : montreles valeurs numériques des données catégorielles, souvent comme une partie de l'ensemble.
    • Dendrogramme - montreune hiérarchie interne et un regroupement des données.
    • Graphique à bulles - montreles relations entre trois variables.
    • Graphique hexagonal - montreles relations entre deux variables numériques dans un ensemble de données relativement important.
    • Nuage de mots : montrela fréquence des mots dans un texte d'entrée.
    • Carte choroplèthe : affiche desstatistiques thématiques agrégées de géodonnées.
    • Graphique d'empaquetage circulaire - montreune hiérarchie interne des données et des valeurs des points de données.
    • etc.

Le cursus de compétences Data Visualization with R vous permettra d'élargir vos horizons dans le domaine des graphiques R. Si vous préférez apprendre la visualisation de données en R dans un contexte plus large, explorez un parcours approfondi et adapté aux débutants Data Scientist with R.

24. Qu'est-ce que le recyclage de vecteurs dans R ?

Si nous essayons d'effectuer une opération sur deux vecteurs R de longueurs différentes, l'interpréteur R détecte sous le capot le vecteur le plus court, recycle ses éléments dans le même ordre jusqu'à ce que les longueurs des deux vecteurs correspondent, et effectue alors seulement l'opération nécessaire sur ces vecteurs. Cependant, avant de commencer le recyclage des vecteurs, l'interpréteur R envoie un message d'avertissement concernant la non-concordance initiale des longueurs des vecteurs.

Par exemple, si nous essayons d'exécuter l'addition suivante :

c(1, 2, 3, 4, 5) + c(1, 2, 3)

Le second vecteur, en raison du recyclage des vecteurs, sera en fait converti en c(1, 2, 3, 1, 2). Le résultat final de cette opération sera donc c(2, 4, 6, 5, 7).

Si le recyclage de vecteurs peut parfois être bénéfique (par exemple, lorsque nous nous attendons à une cyclicité des valeurs dans les vecteurs), il est le plus souvent inapproprié et trompeur. Il convient donc d'être prudent et de tenir compte de la longueur des vecteurs avant d'effectuer des opérations sur ceux-ci.

25. Quelle est l'utilité des instructions next et break dans R ?

L'instruction next est utilisée pour sauter une itération particulière et passer à la suivante si une certaine condition est remplie. L'instruction break est utilisée pour arrêter et quitter la boucle à une itération particulière si une certaine condition est remplie. Lorsqu'elle est utilisée dans l'une des boucles internes d'une boucle imbriquée, cette instruction ne quitte que cette boucle interne.

Les instructions next et break peuvent être utilisées dans tous les types de boucles de R : boucles for, boucles while et boucles de répétition. Ils peuvent également être utilisés dans la même boucle, par exemple :

for(i in 1:10) {
    if(i < 5)
        next
    if(i == 8)
        break
    print(i)}

Sortie :

[1] 5
[1] 6
[1] 7

26. Quelle est la différence entre les fonctions str() et summary() dans R ?

La fonction str() renvoie la structure d'un objet R et les informations générales le concernant, dont le contenu exact dépend de la structure de données de cet objet. Par exemple, pour un vecteur, il renvoie le type de données de ses éléments, la plage des indices des éléments et les valeurs des éléments (ou plusieurs premières valeurs, si le vecteur est trop long). Pour un cadre de données, il renvoie sa classe (data.frame), le nombre d'observations et de variables, le nom des colonnes, le type de données de chaque colonne et plusieurs premières valeurs de chaque colonne.

La fonction summary() renvoie les statistiques sommaires d'un objet R. Il est principalement appliqué aux cadres de données et aux matrices, pour lesquels il renvoie les valeurs minimale, maximale, moyenne et médiane, ainsi que les 1er et 3e quartiles pour chaque colonne numérique, tandis que pour les colonnes factorielles, il renvoie le nombre de chaque niveau.

27. Quelle est la différence entre les fonctions subset() et sample() dans R ?

La fonction subset() de R est utilisée pour extraire des lignes et des colonnes d'une base de données ou d'une matrice, ou des éléments d'un vecteur, en fonction de certaines conditions, par exemple : subset(my_vector, my_vector > 10).

En revanche, la fonction sample() de R ne peut être appliquée qu'aux vecteurs. Il extrait un échantillon aléatoire de la taille prédéfinie des éléments d'un vecteur, avec ou sans remplacement. Par exemple, sample(my_vector, size=5, replace=TRUE)

Questions d'entretien sur la programmation R avancée

28. Comment créer une nouvelle colonne dans un cadre de données dans R en se basant sur d'autres colonnes ?

1. En utilisant les fonctions transform() et ifelse() de la base R :

df <- data.frame(col_1 = c(1, 3, 5, 7),  col_2 = c(8, 6, 4, 2))
print(df)
​
# Adding the column col_3 to the data frame df
df <- transform(df, col_3 = ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)

Sortie :

  col_1 col_2
1     1     8
2     3     6
3     5     4
4     7     2
  col_1 col_2 col_3
1     1     8     9
2     3     6     9
3     5     4    20
4     7     2    14

2. En utilisant les fonctions with() et ifelse() de la base R :

df <- data.frame(col_1 = c(1, 3, 5, 7),  col_2 = c(8, 6, 4, 2))
print(df)
​
# Adding the column col_3 to the data frame df
df["col_3"] <- with(df, ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)

Sortie :

  col_1 col_2
1     1     8
2     3     6
3     5     4
4     7     2
  col_1 col_2 col_3
1     1     8     9
2     3     6     9
3     5     4    20
4     7     2    14

3. En utilisant la fonction apply() de la base R :

df <- data.frame(col_1 = c(1, 3, 5, 7),  col_2 = c(8, 6, 4, 2))
print(df)
​
# Adding the column col_3 to the data frame df
df["col_3"] <- apply(df, 1, FUN = function(x) if(x[1] < x[2]) x[1] + x[2] else x[1] * x[2])
print(df) 

Sortie :

  col_1 col_2
1     1     8
2     3     6
3     5     4
4     7     2
  col_1 col_2 col_3
1     1     8     9
2     3     6     9
3     5     4    20
4     7     2    14

4. En utilisant la fonction mutate() du package dplyr et la fonction ifelse() de la base R :

df <- data.frame(col_1 = c(1, 3, 5, 7),  col_2 = c(8, 6, 4, 2))
print(df)
​
# Adding the column col_3 to the data frame df
df <- mutate(df, col_3 = ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)

Sortie :

  col_1 col_2
1     1     8
2     3     6
3     5     4
4     7     2
  col_1 col_2 col_3
1     1     8     9
2     3     6     9
3     5     4    20
4     7     2    14

29. Comment analyser une date à partir de sa représentation sous forme de chaîne de caractères dans R ?

Pour analyser une date à partir de sa représentation sous forme de chaîne de caractères dans R, nous devons utiliser le paquet lubridate de la collection tidyverse. Ce paquet propose diverses fonctions pour analyser une chaîne et en extraire la date standard en fonction du modèle de date initial dans cette chaîne. Ces fonctions sont ymd(), ymd_hm(), ymd_hms(), dmy(), dmy_hm(), dmy_hms(), mdy(), mdy_hm(), mdy_hms(), etc., où y, m, d, h, m et s correspondent respectivement à l'année, au mois, au jour, aux heures, aux minutes et aux secondes.

Par exemple, si nous exécutons la fonction dmy() en lui passant n'importe laquelle des chaînes de caractères "05-11-2023", "05/11/2023" ou "05.11.2023", représentant la même date, nous obtiendrons le même résultat : 2023-11-05. En effet, dans les trois cas, bien que les symboles de division soient différents, nous avons en fait le même schéma : le jour suivi du mois suivi de l'année.

30. Quelle est l'utilité de la fonction switch() dans R ?

La fonction switch() de R est une instruction de contrôle de branche à plusieurs voies qui évalue une expression par rapport aux éléments d'une liste. La syntaxe est la suivante :

switch(expression, case_1, case_2, case_3....)

L'expression transmise à la fonction switch() peut prendre la forme d'un nombre ou d'une chaîne de caractères, ce qui modifie le comportement de la fonction.

1. Si l'expression est un nombre, la fonction switch() renvoie l'élément de la liste sur la base de la correspondance positionnelle (c'est-à-dire que son index est égal au nombre auquel l'expression est évaluée). Si le nombre est supérieur au nombre d'éléments de la liste, la fonction switch() renvoie NULL. Par exemple :

switch(2, "circle", "triangle", "square")

Sortie :

"triangle"

2. Si l'expression est une chaîne de caractères, la fonction switch() renvoie la valeur basée sur son nom :

switch("red", "green"="apple", "orange"="carot", "red"="tomato", "yellow"="lemon")

Sortie :

"tomato"

S'il y a plusieurs correspondances, la première valeur correspondante est renvoyée. Il est également possible d'ajouter un élément sans nom comme dernier argument de la fonction switch() qui sera une option de repli par défaut dans le cas où il n'y a pas de correspondance. Si cette option par défaut n'est pas définie et s'il n'y a pas de correspondance, la fonction renvoie NULL.

La fonction switch() est une alternative efficace aux longues instructions if-else, car elle rend le code moins répétitif et plus lisible. Il est généralement utilisé pour évaluer une seule expression. Nous pouvons encore écrire des constructions de commutateurs imbriqués plus complexes pour évaluer plusieurs expressions. Cependant, sous cette forme, la fonction switch() devient rapidement difficile à lire et perd ainsi son principal avantage par rapport aux constructions if-else.

31. Quelle est la différence entre les fonctions apply(), lapply(), sapply() et tapply() ?

Bien que toutes ces fonctions permettent d'itérer sur une structure de données sans utiliser de boucles et d'effectuer la même opération sur chaque élément de cette structure, elles sont différentes en termes de type d'entrée et de sortie et de fonction qu'elles exécutent.

  • apply()-prend en charge un cadre de données, une matrice ou un tableau et renvoie un vecteur, une liste, une matrice ou un tableau. Cette fonction peut être appliquée à la ligne, à la colonne ou aux deux.

  • lapply()-prend en charge un vecteur, une liste ou une base de données et renvoie toujours une liste. Dans le cas d'un cadre de données en entrée, cette fonction n'est appliquée que dans le sens des colonnes.

  • sapply()reçoit un vecteur, une liste ou un cadre de données et renvoie la structure de données la plus simplifiée, c'est-à-dire un vecteur pour un vecteur d'entrée, une liste pour une liste d'entrée et une matrice pour un cadre de données d'entrée.

  • tapply()calcule des statistiques sommaires pour différents facteurs (c'est-à-dire des données catégorielles).

32. Listez et définissez les instructions de contrôle dans R.

Il existe trois groupes d'instructions de contrôle dans R : les instructions conditionnelles, les instructions de boucle et les instructions de saut.

Déclarations conditionnelles :

  • if-teste si une condition donnée est vraie et fournit les opérations à effectuer si c'est le cas.

  • if-else-tester si une condition donnée est vraie, fournir les opérations à effectuer si c'est le cas et une autre série d'opérations à effectuer dans le cas contraire.

  • if... else if... else-teste une série de conditions une par une, fournit les opérations à effectuer pour chaque condition si elle est vraie, et un ensemble d'opérations de repli à effectuer si aucune de ces conditions n'est vraie.

  • switch-évalue une expression par rapport aux éléments d'une liste et renvoie une valeur de la liste en fonction des résultats de cette évaluation.

Déclarations en boucle :

  • for-dans les boucles for, itère sur une séquence.

  • while-Dans les boucles while, vérifie si une condition logique prédéfinie (ou plusieurs conditions logiques) est remplie à l'itération en cours.

  • repeat-dans les boucles répétitives, continue à effectuer la même série d'opérations jusqu'à ce qu'une (ou plusieurs) condition(s) d'interruption prédéfinie(s) soit (soient) remplie(s).

Sauter des déclarations :

  • next-Sauter une itération particulière d'une boucle et passer à la suivante si une certaine condition est remplie.

  • break-arrête et quitte la boucle à une itération particulière si une certaine condition est remplie.

  • return-quitte une fonction et renvoie le résultat.

33. Que sont les expressions régulières et comment les utiliser dans R ?

Une expression régulière, ou regex, en R ou dans d'autres langages de programmation, est un caractère ou une séquence de caractères qui décrit un certain modèle de texte et qui est utilisé pour l'exploration de données textuelles. Dans R, il y a deux façons principales de travailler avec les expressions régulières :

  1. Utilisation de la base R et de ses fonctions (telles que grep(), regexpr(), gsub(), regmatches(), etc.) pour localiser, faire correspondre, extraire et remplacer des expressions rationnelles.
  2. Utilisation d'un paquetage stringr spécialisé de la collection tidyverse. Il s'agit d'une manière plus pratique de travailler avec les expressions rationnelles de R, car les fonctions de stringr ont des noms et une syntaxe beaucoup plus intuitifs et offrent des fonctionnalités plus étendues.

Un guide sur les expressions régulières en R fournit plus de détails sur la façon de travailler avec les expressions régulières en R.

34. Quels sont les paquets utilisés pour l'apprentissage automatique dans R ?

  • pourdivers algorithmes de classification et de régression.
  • e1071-pour lesmachines à vecteurs de support (SVM), le classificateur de Bayes naïf, le regroupement en sac, le regroupement flou et les voisins les plus proches (KNN).
  • kernlab - fournit desméthodes basées sur le noyau pour les algorithmes de classification, de régression et de regroupement.
  • randomForest pour lesalgorithmes de classification et de régression par forêt aléatoire.
  • xgboost pour lesalgorithmes d'amplification du gradient, de régression linéaire et d'arbre de décision.
  • rpart-forrecursive partitioning in classification, regression, and survival trees (partitionnement récursif dans les arbres de classification, de régression et de survie).
  • glmnet pour lesméthodes de régularisation lasso et elastic-net appliquées aux algorithmes de régression linéaire, de régression logistique et de régression multinomiale.
  • nnet pour lesréseaux neuronaux et les algorithmes log-linéaires multinomiaux.
  • tensorflow - l'interface R de TensorFlow, pour les réseaux neuronaux profonds et le calcul numérique à l'aide de graphiques de flux de données.
  • Keras - l'interface R de Keras, pour les réseaux neuronaux profonds.

35. Comment sélectionner des caractéristiques pour l'apprentissage automatique dans R ?

Examinons trois approches différentes et la manière de les mettre en œuvre dans le paquet caret.

  1. En détectant et en supprimant les caractéristiques fortement corrélées de l'ensemble des données.

Nous devons créer une matrice de corrélation de toutes les caractéristiques, puis identifier celles qui sont fortement corrélées, généralement celles dont le coefficient de corrélation est supérieur à 0,75 :

corr_matrix <- cor(features)
highly_correlated <- findCorrelation(corr_matrix, cutoff=0.75)
print(highly_correlated)
  1. En classant les caractéristiques de la base de données en fonction de leur importance.

Nous devons créer un schéma de formation pour contrôler les paramètres de la formation, l'utiliser pour construire un modèle sélectionné, puis estimer l'importance de la variable pour ce modèle :

control <- trainControl(method="repeatedcv", number=10, repeats=5)
model <- train(response_variable~., data=df, method="lvq", preProcess="scale", trControl=control)
importance <- varImp(model)
print(importance)
  1. En sélectionnant automatiquement les caractéristiques optimales.

L'une des méthodes les plus populaires proposées par caret pour sélectionner automatiquement les caractéristiques optimales est un algorithme de sélection à rebours appelé Recursive Feature Elimination (RFE).

Nous devons calculer le contrôle à l'aide d'une méthode de rééchantillonnage sélectionnée et d'une liste prédéfinie de fonctions, appliquer l'algorithme RFE en lui transmettant les caractéristiques, la variable cible, le nombre de caractéristiques à retenir et le contrôle, puis extraire les prédicteurs sélectionnés :

control <- rfeControl(functions=caretFuncs, method="cv", number=10)
results <- rfe(features, target_variable, sizes=c(1:8), rfeControl=control)
print(predictors(results))

Si vous avez besoin de renforcer vos compétences en apprentissage automatique dans R, voici une ressource solide et complète : Scientifique en apprentissage automatique avec R.

36. Que sont la corrélation et la covariance, et comment les calculer dans R ?

La corrélation est une mesure de la force et de la direction des relations linéaires entre deux variables. Il prend des valeurs allant de -1 (corrélation négative parfaite) à 1 (corrélation positive parfaite). La covariance est une mesure du degré de variation de deux variables l'une par rapport à l'autre et de la direction des relations linéaires entre elles. Contrairement à la corrélation, la covariance n'a pas de limite de portée.

Dans R, pour calculer la corrélation, nous devons utiliser la fonction cor(), pour calculer la covariance, la fonction cov(). La syntaxe des deux fonctions est identique : nous devons passer deux variables (vecteurs) pour lesquelles nous voulons calculer la mesure (par exemple, cor(vector_1, vector_2) ou cov(vector_1, vector_2)), ou la base de données entière, si nous voulons calculer la corrélation ou la covariance entre toutes les variables de cette base de données (par exemple, cor(df) or cov(df)). Dans le cas de deux vecteurs, le résultat sera une valeur unique, dans le cas d'une base de données, le résultat sera une matrice de corrélation (ou de covariance).

37. Listez et définissez les différentes approches permettant d'estimer la précision d'un modèle dans R.

Vous trouverez ci-dessous plusieurs approches et la manière de les mettre en œuvre dans le paquetage caret de R.

  • Fractionnement des données - l'ensemble des données est divisé en un ensemble de données de formation et un ensemble de données de test. La première est utilisée pour ajuster le modèle, la seconde pour tester ses performances sur des données inédites. Cette approche est particulièrement efficace pour les données volumineuses (big data). Pour mettre en œuvre la division des données dans R, nous devons utiliser la fonction createDataPartition() et régler le paramètre p sur la proportion nécessaire de données destinées à la formation.
  • Rééchantillonnage Bootstrap - extraction d'échantillons aléatoires de données à partir de l'ensemble de données et estimation du modèle sur ces échantillons. Ces itérations de rééchantillonnage sont exécutées plusieurs fois et avec remplacement. Pour mettre en œuvre le rééchantillonnage bootstrap dans R, nous devons définir le paramètre method de la fonction trainControl() sur "boot" lorsque nous définissons le contrôle d'apprentissage du modèle.
  • Méthodes de validation croisée
    • Validation croisée k-fold - l'ensemble de données est divisé en k sous-ensembles. Le modèle est formé sur k-1 sous-ensembles et testé sur le sous-ensemble restant. Le même processus est répété pour tous les sous-ensembles, puis la précision finale du modèle est estimée.
    • Validation croisée k-fold répétée - le principe est le même que pour la validation croisée k-fold, mais l'ensemble de données est divisé en k sous-ensembles plus d'une fois. Pour chaque répétition, la précision du modèle est estimée, puis la précision finale du modèle est calculée comme la moyenne des valeurs de précision du modèle pour toutes les répétitions.
    • La validation croisée sans exclusion (LOOCV) - une observation de données est mise de côté et le modèle est formé sur toutes les autres observations de données. Le même processus est répété pour toutes les observations de données.

Pour mettre en œuvre ces méthodes de validation croisée dans R, nous devons définir le paramètre method de la fonction trainControl() à "cv", "repeatedcv", ou "LOOCV" respectivement, lors de la définition du contrôle d'apprentissage du modèle.

38. Qu'est-ce que le test du chi-carré et comment l'exécutez-vous dans R ?

Le test d'hypothèse statistique du chi carré est une technique utilisée pour déterminer si deux variables catégorielles sont indépendantes ou s'il existe une corrélation entre elles. Pour effectuer le test du chi-carré dans R, nous devons utiliser la fonction chisq.test() du progiciel stats. Les étapes sont les suivantes :

1. Créez un tableau de contingence avec les variables catégorielles qui vous intéressent à l'aide de la fonction table() de la base R :

table = table(df["var_1"], df["var_2"]) 

2. Transmettez le tableau de contingence à la fonction chisq.test():

chisq.test(table) 

Vous pouvez rafraîchir vos connaissances sur les tests du chi-carré et autres tests d'hypothèses dans notre cours Hypothesis Testing in R.

39. Qu'est-ce que Shiny en R ?

Shiny est un paquetage R open-source qui permet de construire facilement et rapidement des applications web et des pages web entièrement interactives pour la science des données en utilisant uniquement R, sans aucune connaissance en HTML, CSS ou JavaScript. Shiny in R offre de nombreuses fonctionnalités de base et avancées, des widgets, des mises en page, des exemples d'applications web et leur code sous-jacent sur lesquels s'appuyer et qu'il est possible de personnaliser, ainsi que des présentations d'utilisateurs dans divers domaines (technologie, sport, banque, éducation, etc.) rassemblées et classées par la communauté des développeurs d'applications Shiny.

40. Quelle est la différence entre les fonctions with() et within() ?

La fonction with() évalue une expression R sur une ou plusieurs variables d'un cadre de données et produit le résultat sans modifier le cadre de données. La fonction within() évalue une expression R sur une ou plusieurs variables d'un cadre de données, modifie le cadre de données et affiche le résultat. Vous pouvez voir ci-dessous comment ces fonctions fonctionnent à l'aide d'un exemple de base de données :

df <- data.frame(a = c(1, 2, 3),  b = c(10, 20, 30))
print(df)

with(df, a * b)

print(within(df, c <- a * b))

Sortie :

  a  b
1 1 10
2 2 20
3 3 30

10  40  90
  a  b  c
1 1 10 10
2 2 20 40
3 3 30 90

Lorsque vous utilisez la fonction within(), pour enregistrer les modifications, vous devez assigner la sortie de la fonction à une variable.

Conclusion

Pour conclure, dans cet article, nous avons examiné les 40 questions d'entretien les plus courantes concernant la programmation R et les réponses attendues pour chacune d'entre elles. Nous espérons qu'avec ces informations en main, vous vous sentirez plus confiant et prêt à réussir un entretien R, que vous soyez à la recherche d'un emploi en R ou du candidat idéal pour un poste à pourvoir dans votre entreprise.

Pour acquérir une expérience pratique en matière de réponse aux questions, consultez notre cours Praticing Statistics Interview Questions in R (Questions d'entretien en statistiques en R).


Photo of Elena Kosourova
Author
Elena Kosourova
LinkedIn

IBM Certified Data Scientist (2020), auparavant géologue pétrolier/géomodélisateur de champs pétroliers et gaziers dans le monde entier avec plus de 12 ans d'expérience professionnelle internationale. Maîtrise de Python, R et SQL. Domaines d'expertise : nettoyage de données, manipulation de données, visualisation de données, analyse de données, modélisation de données, statistiques, narration, apprentissage automatique. Vaste expérience de la gestion des communautés de science des données et de la rédaction/révision d'articles et de tutoriels sur la science des données et les sujets de carrière.

Sujets

Commencez votre voyage R dès aujourd'hui !

cursus

R Développeur

52 heures hr
De la manipulation des données au développement de progiciels, acquérez les compétences professionnelles dont vous avez besoin pour réussir en tant que développeur R. Aucune expérience préalable de codage n'est nécessaire.
Afficher les détailsRight Arrow
Commencer Le Cours
Certification disponible

cours

Introduction à R

4 hr
2.8M
Maîtrisez les bases de l'analyse de données en R, y compris les vecteurs, les listes et les cadres de données, et pratiquez R avec des ensembles de données réels.
Voir plusRight Arrow