Retraction Watch
Retraction Watch une plateforme (blogue et base de données bibliographiques) crée par Ivan Oransky et Adam Marcus en 2010.
Elle surveille, rapporte et analyse les rétractations d’articles scientifiques, ainsi que les problèmes d’intégrité dans la recherche (données frauduleuses, plagiat, etc.).
Depuis 2023, elle verse ses données dans CrossRef. CrossRef donne accès à ces données via son API mais surtout dans notre cas aujourd’hui via un dépôt dans la forge logicielle GitLab à https://gitlab.com/crossref/retraction-watch-data
Traitement des données
- Créer un dossier
RW_localsur son ordinateur pour toutes les données du projet. - Telécharger le fichier
retraction_watch.csvet le placer dans le dossierRW_local - Ouvrir le logiciel R Studio
- Create a new R script
- Créer un fichier
main.Rdans le dossierRW_local
Copier-coller ce code dans le fichier main.R :
setwd("C:/Users/martinop/Downloads/RW_local")
# remplacer par l'emplacement de votre dossier
retraction_watch <- read.csv("retraction_watch.csv")
df <- retraction_watch
df_local <- df[
grepl(
"universite de montreal|university of montreal|U de Montreal|U of Montreal|UdeM",
# remplacer par le nom et les alias de votre institution
tolower(iconv(df$Institution, to = "ASCII//TRANSLIT")),
# ignore les majuscules et les accents
ignore.case = TRUE
),
]Cliquer sur Run (ligne par ligne ou tout).
Ce programme va charger les 68 000 enregistrements de la base et ne conserver que ceux dont la colonne Institution (des auteurs) contient les mots que vous avez demandé.
Dans mon cas, il en reste 43. On peut le voir dans le menu Environment à droite (43 obs. of 20 variables).
Visualisations
Afficher la liste de tous les titres
cat(paste(df_local$Title, collapse = "\n"))Graphe de la date de publication originale
# Convert "MM/DD/YYYY 0:00" → Date
df_local$OriginalPaperDate <- as.Date(df_local$OriginalPaperDate,
format = "%m/%d/%Y %H:%M")
# Extraire l'année
df_local$year <- format(df_local$OriginalPaperDate, "%Y")
# Draw a histogram
barplot(
table(df_local$year),
main = "UdeM – Original Paper Dates by Year",
xlab = "Year",
ylab = "Count",
las = 2
)Graphe des raisons de rétractations
# Compter les occurrences des raisons
reason_counts <- sort(table(df_local$Reason), decreasing = FALSE)
# Plus d’espace pour les labels
par(mar = c(5, 30, 4, 2)) # bottom, left, top, right (agrandir surtout à gauche)
# Barplot simple
barplot(
reason_counts,
horiz = TRUE,
main = "Distribution des raisons de rétractations",
xlab = "Nombre",
#ylab = "Raisons",
las = 1,
cex.names = .8
)Graphe des auteurs
# Extraire tous les auteurs, séparer par ";", nettoyer les espaces
all_authors <- unlist(strsplit(df_local$Author, ";")) # sépare tous les auteurs
all_authors <- trimws(all_authors) # retire les espaces
all_authors <- all_authors[all_authors != ""] # enlève les vides
# Compter la fréquence
author_counts <- table(all_authors)
# Trier par fréquence décroissante
author_counts <- sort(author_counts, decreasing = FALSE)
# Ajuster les marges pour avoir de la place pour les noms
par(mar = c(5, 20, 4, 2)) # bottom, left, top, right
# Barplot horizontal
barplot(
author_counts,
horiz = TRUE,
las = 1, # labels horizontaux
cex.names = 0.7, # taille des noms
main = "Distribution des auteurs",
xlab = "Nombre"
)Graphe des revues
# Nettoyer les journaux
all_journals <- trimws(df_UdeM$Journal)
all_journals <- all_journals[all_journals != ""] # enlever vides
# Compter la fréquence
journal_counts <- table(all_journals)
journal_counts <- sort(journal_counts, decreasing = FALSE)
# Ajuster marges pour les labels
par(mar = c(5, 25, 4, 2)) # agrandir la marge gauche pour les noms
# Barplot horizontal
barplot(
journal_counts,
horiz = TRUE,
las = 1, # labels horizontaux
cex.names = 0.7, # taille des noms
main = "Distribution des revues",
xlab = "Nombre"
)Graphe des pays des auteurs
# Extraire tous les pays, séparer par ";", nettoyer les espaces
all_countries <- unlist(strsplit(df_local$Country, ";")) # sépare
all_countries <- trimws(all_countries) # retire les espaces
all_countries <- all_countries[all_countries != ""] # enlève les vides
# Compter la fréquence
country_counts <- table(all_countries)
# Trier par fréquence décroissante
country_counts <- sort(country_counts, decreasing = FALSE)
# Ajuster les marges pour avoir de la place pour les noms
par(mar = c(5, 20, 4, 2)) # bottom, left, top, right
# Barplot horizontal
barplot(
country_counts,
horiz = TRUE,
las = 1, # labels horizontaux
cex.names = 0.7, # taille des noms
main = "Distribution des pays",
xlab = "Nombre"
)