Introduction

Présentation HAL

Extraction à partir de l’API

Reprendre la méthodo de Abir Gabriel en la modifiant ?

https://gitlab.huma-num.fr/bchauvel/biblioalzheimer/-/blob/main/1_Extraction/FicheMethode_requeteHAL.Rmd?ref_type=heads

library(readr)
library(labelled)
library(questionr)
library(stringr)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ purrr     1.0.2
## ✔ forcats   1.0.0     ✔ tibble    3.2.1
## ✔ ggplot2   3.4.4     ✔ tidyr     1.3.1
## ✔ lubridate 1.9.3     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Import des données dans R à partir de l'API HAL
url <- "https://api.archives-ouvertes.fr/search/hal/?q=alzheimer&rows=7000&wt=csv&indent=true&fl=docid,publicationDateY_i,docType_s,language_s,domain_s,primaryDomain_s,openAccess_bool,submitType_s,journalTitle_s,journalPublisher_s,authFullName_s,title_s,subTitle_s,citationRef_s,doiId_s,issue_s,journalIssn_s,volume_s,source_s,licence_s,files_s,journalTitleAbbr_s,title_st,submitType_s,type_s,page_s,publicationDate_s,keyword_s,en_keyword_s,fr_keyword_s,abstract_s,en_abstract_s,fr_abstract_s&sort=publicationDateY_i%20desc"

options(timeout=600) # pour forcer le temps limite de chargement (si faible connexion internet)
download.file(url, destfile = "AlzheimerHAL.csv")

url <- "https://api.archives-ouvertes.fr/search/hal/?q=alzheimer&rows=7000&wt=bibtex&indent=true&fl=docid,publicationDateY_i,docType_s,language_s,domain_s,primaryDomain_s,openAccess_bool,submitType_s,journalTitle_s,journalPublisher_s,authFullName_s,title_s,subTitle_s,citationRef_s,doiId_s,issue_s,journalIssn_s,volume_s,source_s,licence_s,files_s,journalTitleAbbr_s,title_st,submitType_s,type_s,page_s,publicationDate_s,keyword_s,en_keyword_s,fr_keyword_s,abstract_s,en_abstract_s,fr_abstract_s&sort=publicationDateY_i%20desc"

options(timeout=600) # pour forcer le temps limite de chargement (si faible connexion internet)
download.file(url, destfile = "AlzheimerHAL.bib")

# Le fichier csv est ensuite importé dans la session R sous forme de tableau de données (le fichier bibtext sera utilisé ultérieurement).
dataset_alzheimer <- read.csv("AlzheimerHAL.csv")

Nettoyage des données

Étiquetage des variables

Les variables portent les mêmes noms que les champs sélectionnés dans le lien d’export dans l’API : noms des variables du dataframe

names(dataset_alzheimer)
##  [1] "docid"              "publicationDateY_i" "docType_s"         
##  [4] "language_s"         "domain_s"           "primaryDomain_s"   
##  [7] "openAccess_bool"    "submitType_s"       "journalTitle_s"    
## [10] "journalPublisher_s" "authFullName_s"     "title_s"           
## [13] "subTitle_s"         "citationRef_s"      "doiId_s"           
## [16] "issue_s"            "journalIssn_s"      "volume_s"          
## [19] "source_s"           "licence_s"          "files_s"           
## [22] "journalTitleAbbr_s" "title_st"           "type_s"            
## [25] "page_s"             "publicationDate_s"  "keyword_s"         
## [28] "en_keyword_s"       "fr_keyword_s"       "abstract_s"        
## [31] "en_abstract_s"      "fr_abstract_s"

On ajoute des étiquettes aux noms de variables (avec le package labelled), pour les documenter et limiter les risques de mauvaises interprétations.

var_label(dataset_alzheimer) <- list(
  docid = "Identifiant HAL du dépôt", 
  publicationDateY_i = "Date de publication : année", 
  docType_s = "Type de document", 
  language_s = "Langue du document (code ISO 639-1 (alpha-2))", 
  domain_s = "Codes domaines du document", 
  primaryDomain_s = "Domaine primaire", 
  openAccess_bool = "publication en open access", 
  submitType_s = "Type de dépôt", 
  journalTitle_s = "Revue : Titre", 
  journalPublisher_s = "Revue : Editeur", 
  authFullName_s = "Auteur : Nom complet", 
  title_s = "Titres", 
  subTitle_s = "Sous-titre", 
  citationRef_s = "Citation abrégée", 
  doiId_s = "Identifiant DOI", 
  issue_s = "Numéro de revue", 
  journalIssn_s = "Revue : ISSN", 
  volume_s= "Volume", 
  source_s= "Source", 
  licence_s= "Droit d'auteur associé au document", 
  files_s= "URL des fichiers", 
  journalTitleAbbr_s= "Revue : Titre abrégé", 
  title_st= "Titres (sans les mots vides)", 
  type_s= "Type", page_s= "Pagination", 
  publicationDate_s= "Date de publication", 
  keyword_s = "Mots-clés", 
  en_keyword_s = "Mots-clés en anglais", 
  fr_keyword_s = "Mots-clés en français", 
  abstract_s = "Résumé", 
  en_abstract_s = "Résumé en anglais", 
  fr_abstract_s = "Résumé en français")

Étiquetage des modalités

De même pour rendre les modalités plus explicites, par exemple, le type et la langue du document :

val_labels(dataset_alzheimer$docType_s) <- c(
  "Article dans une revue" = "ART", 
  "Article de blog scientifique" = "BLOG", 
  "Communication dans un congrès" = "COMM", 
  "Chapitre d'ouvrage" = "COUV", 
  "N°spécial de revue/special issue" = "ISSUE", 
  "Cours" = "LECTURE", 
  "Autre publication scientifique" = "OTHER", 
  "Ouvrages" = "OUV", 
  "Brevet" = "PATENT", 
  "Poster de conférence" = "POSTER", 
  "Rapport" = "REPORT", 
  "Thèse" = "THESE", 
  "Vidéo" = "VIDEO")
freq(dataset_alzheimer$docType_s, sort = "dec", valid = FALSE, total = TRUE) %>% knitr::kable(caption = "Types de documents présents dans le corpus")
Types de documents présents dans le corpus
n %
[ART] Article dans une revue 4292 68.5
[THESE] Thèse 730 11.7
[COMM] Communication dans un congrès 688 11.0
[COUV] Chapitre d’ouvrage 193 3.1
[POSTER] Poster de conférence 145 2.3
[UNDEFINED] UNDEFINED 73 1.2
[OUV] Ouvrages 40 0.6
[REPORT] Rapport 37 0.6
[OTHER] Autre publication scientifique 34 0.5
[HDR] HDR 11 0.2
[PATENT] Brevet 7 0.1
[ISSUE] N°spécial de revue/special issue 4 0.1
[VIDEO] Vidéo 3 0.0
[BLOG] Article de blog scientifique 2 0.0
[PROCEEDINGS] PROCEEDINGS 2 0.0
[LECTURE] Cours 1 0.0
[TRAD] TRAD 1 0.0
Total 6263 100.0

Langue

val_labels(dataset_alzheimer$language_s) <- c(
  "Allemand" = "de", 
  "Anglais" = "en", 
  "Espagnol" = "es", 
  "Français" = "fr", 
  "Portugais" = "pt", 
  "Ukrainien" = "uk")
freq(dataset_alzheimer$language_s, sort = "dec", valid = TRUE, total = TRUE) %>% 
  knitr::kable(caption = "Langue du document")
Langue du document
n % val%
[en] Anglais 4892 78.1 78.1
[fr] Français 1364 21.8 21.8
[es] Espagnol 3 0.0 0.0
[pt] Portugais 2 0.0 0.0
[de] Allemand 1 0.0 0.0
[uk] Ukrainien 1 0.0 0.0
Total 6263 100.0 100.0

Les codes domaines sont particulièrement détaillés:

freq(dataset_alzheimer$primaryDomain_s, sort = "dec", valid = FALSE, total = TRUE) %>% 
  head(20) %>% 
  knitr::kable(caption = "Domaines primaires détaillés (les 20 plus fréquents)")
Domaines primaires détaillés (les 20 plus fréquents)
n %
sdv 1024 16.3
sdv.neu 567 9.1
sdv.neu.nb 330 5.3
sdv.mhep 320 5.1
sdv.spee 288 4.6
scco.neur 249 4.0
scco 228 3.6
shs 221 3.5
shs.psy 186 3.0
info.info-im 164 2.6
scco.psyc 150 2.4
135 2.2
chim 134 2.1
shs.socio 121 1.9
sdv.bbm 111 1.8
sdv.mhep.geg 95 1.5
sdv.bc 86 1.4
chim.coor 85 1.4
chim.orga 83 1.3
chim.ther 65 1.0

On créé une variable domaine_gpepour les regrouper.

extraire les débuts de chaînes de caractères dans une nouvelle variable

termes recherchés : commence par (^) chim ou (|) commence par,….

mots <- "^chim|^info|^math|^phys|^scco|^sde|^sdu|^sdv|^shs|^spi|^stat"

domaine_gpe prend les modalités extraites de primaryDomains

dataset_alzheimer$domaine_gpe <- str_extract(dataset_alzheimer$primaryDomain_s, pattern = mots)

ajoute des étiquettes aux modalités de domaine_gpe

val_labels(dataset_alzheimer$domaine_gpe) <- c( 
  "Chimie" = "chim", 
  "Informatique [cs]" = "info", 
  "Mathématiques [math]" = "math", 
  "Physique [physics]" = "phys", 
  "Économie et finance quantitative [q-fin]" = "qfin", 
  "Sciences cognitives" = "scco", 
  "Sciences de l'environnement" = "sde", 
  "Planète et Univers [physics]" = "sdu", 
  "Sciences du Vivant [q-bio]" = "sdv", 
  "Sciences de l'Homme et Société" = "shs", 
  "Sciences de l'ingénieur [physics]" = "spi", 
  "Statistiques [stat]" = "stat")

Tableau de fréquence

freq(dataset_alzheimer$domaine_gpe, sort = "dec", valid = TRUE) %>% 
  knitr::kable(caption = "Domaines primaires regroupés")
Domaines primaires regroupés
n % val%
[sdv] Sciences du Vivant [q-bio] 3459 55.2 56.5
[shs] Sciences de l’Homme et Société 752 12.0 12.3
[scco] Sciences cognitives 650 10.4 10.6
[info] Informatique [cs] 502 8.0 8.2
[chim] Chimie 478 7.6 7.8
[spi] Sciences de l’ingénieur [physics] 117 1.9 1.9
[math] Mathématiques [math] 63 1.0 1.0
[phys] Physique [physics] 54 0.9 0.9
[stat] Statistiques [stat] 32 0.5 0.5
[sde] Sciences de l’environnement 15 0.2 0.2
[sdu] Planète et Univers [physics] 5 0.1 0.1
[qfin] Économie et finance quantitative [q-fin] 0 0.0 0.0
NA 136 2.2 NA

TODO On crée aussi une variable domaine_shs, pour identifier les articles dont au moins un des domaines est shs.

dataset_alzheimer$language_gpe <- as.character(dataset_alzheimer$language_s)

dataset_alzheimer$language_gpe[dataset_alzheimer$language_s != "en" & dataset_alzheimer$language_s != "fr"] <- "autre"

val_labels(dataset_alzheimer$language_gpe) <- c( "Anglais" = "en", "Français" = "fr", "Autres" = "autre" )

freq(dataset_alzheimer$language_gpe) %>% 
  knitr::kable(caption = "Langues du corpus")
Langues du corpus
n % val%
[en] Anglais 4892 78.1 78.1
[fr] Français 1364 21.8 21.8
[autre] Autres 7 0.1 0.1

Sauvegarde des données et de leurs étiquettes

On sauvegarde les données et leur configuration dans le fichier “AlzheimerHAL.Rda” qui sera utilisé pour faire les analyses.

save(dataset_alzheimer, file = "AlzheimerHAL.Rda")

Préparation des dataset avant de faire des analyses

  • Étape 1 : Préparation du dataset général

Dans cette étape, nous procéderons à la préparation du dataset général pour faire des visualisations sur les tendances générales.

  • Étape 2 : Création d’un sub-dataset spécialisé pour les revues

Dans cette étape, nous créerons un sub-dataset spécifique qui se concentre exclusivement sur les publications de type “revues”. Cela permettra une analyse plus approfondie et ciblée sur ce sous-ensemble de données, facilitant ainsi l’extraction d’informations spécifiques liées aux revues.

Étape 1

Préparation du dataset général : Création d’un sous-ensemble de données “dataset_shs_alzheimer”

Utilisation de l’opérateur de pipe (%>%) pour chaîner des opérations avec dplyr

Filtrage des lignes basé sur des conditions spécifiques Utilisation de str_detect pour rechercher le motif “shs” ou “ssh” dans la colonne domain_s # ou la colonne primaryDomain_s, avec la conversion en minuscules pour rendre la recherche insensible à la casse

dataset_shs_alzheimer <- dataset_alzheimer %>%
  
  # Filtrage des lignes basé sur des conditions spécifiques
  filter(
    # Utilisation de str_detect pour rechercher le motif "shs" ou "ssh" dans la colonne domain_s
    # ou la colonne primaryDomain_s, avec la conversion en minuscules pour rendre la recherche insensible à la casse
    str_detect(tolower(domain_s), "shs|ssh") |
      str_detect(tolower(primaryDomain_s), "shs|ssh")
  )

Étape 2

Création d’un dataset pour analyser les données liées aux revues

Affichage des données liées aux types de documents

Vu que nous souhaitons nous concentrer sur les revues SHS, nous allons donc créer un nouveau dataset qui prend seulement les données liées aux revues : ART(Article dans une revue) et ISSUE (N°spécial de revue/special issue)

Filtrer le jeu de données pour inclure uniquement les lignes où docType_s est “ISSUE” ou “ART” et où la colonne journalTitle_s contient les mots “Revue”, “revue”, “review” ou “Review” car il se peut que quelques revues ne soient pas indiquées comme étant des revues dans le type du document (undefined)

Convertir publicationDateY_i en type numérique (nous allons supprimer les données de 2024 car nous souhaitons arrêter avant le 1er janvier 2024)

dataset_alzheimer$publicationDateY_i <- as.numeric(trimws(dataset_alzheimer$publicationDateY_i))

Filtrer le jeu de données pour inclure uniquement les lignes où docType_s est “ISSUE” ou “ART” et où la colonne journalTitle_s contient les mots “Revue”, “revue”, “review” ou “Review” et où publicationDateY_i n’est pas égal à 2024

revues_shs_alzheimer <- dataset_alzheimer %>%
  filter(
    docType_s %in% c("ISSUE", "ART") |
      str_detect(tolower(journalTitle_s), "revue|review")
  )

Nous allons encore nettoyer notre jeu de données, en nous concentrant plutôt sur les revues SHS.

Filtrer le jeu de données pour inclure uniquement les lignes où docType_s est “ISSUE” ou “ART” et où domain_s et primaryDomain_s contiennent le mot “shs”

revues_shs_alzheimer <- revues_shs_alzheimer %>%
  filter(
    str_detect(tolower(domain_s), "shs|ssh") |
      str_detect(tolower(primaryDomain_s), "shs|ssh"))

Nous avons donc 393 publications de revues.

Nettoyage des données liées à la langue :

Nous allons tout d’abord créer une nouvelle colonne de vérification de langue

Nous allons sélectionner les mots les plus utilisés dans les titres francophones et anglophones pour filtrer et extraire la langue des publications

revues_shs_alzheimer <- revues_shs_alzheimer %>%
  mutate(language_title = ifelse(
    grepl("\\b(?:an|and|as|by|for|in|is|of|on|the|to|with)\\b", title_s, ignore.case = TRUE),
    "en",
    ifelse(
      grepl("\\b(?:le|la|et|a-t-il|a-t-elle)\\b", title_s, ignore.case = TRUE),
      "fr",
      NA
    )
  ))

Nous allons comparer ces données à celles déjà saisies sur HAL (donc language_s)

Filtrer les lignes où language_title n’est pas égal à language_s

lignes_langue_différente <- revues_shs_alzheimer %>%
  filter(language_title != language_s)

Afficher les lignes

Maintenant que nous avons les lignes qui ne correspondent pas, nous allons vérifier manuellement

Nettoyer les données liées à la langue à partir de l’identifiant docid

revues_shs_alzheimer <- revues_shs_alzheimer %>%
  mutate(language_s = case_when(
    docid %in% c(3158921, 1584518, 1240621, 1806639) ~ "fr",
    TRUE ~ language_s
  ))
view(revues_shs_alzheimer)

Après avoir observé quelques incohérences dans les lignes concernant les éditeurs, nous allons mettre à jour la colonne journalPublisher_s :

revues_shs_alzheimer <- revues_shs_alzheimer %>%   
  mutate(     journalPublisher_s = if_else(journalPublisher_s == "Elsevier", "Elsevier Masson", journalPublisher_s)   )

Nous allons également enrichir nos données en incluant les répartitions géographiques des éditeurs. Après avoir effectué des recherches sur Internet, nous avons identifié la localisation de chaque éditeur :

# Définir la correspondance entre les éditeurs et leur localisation géographique
localisation_mapping <- c(
  "Elsevier Masson" = "Paris (France)",
  "Sirey ; Dalloz [1980-....]" = "Paris (France)",
  "Association française de musicothérapie" = "Paris (France)",
  "SER" = "Paris (France)",
  "MF" = "Paris (France)",
  "Cambridge University Press (CUP)" = "Cambridge (Royaume-Uni)",
  "Adrsc" = "Marseille (France)",
  "Association pour la Recherche en Education (ARED)" = "Villeneuve-d'Ascq (France)",
  "Association pour la connaissance de l'Allemagne d'aujourd'hui (ACAA) / Presses Universitaires du Septentrion" = "Paris (France)",
  "Dalhousie University. Department of French" = "Nova Scotia (Canada)",
  "De Boeck Supérieur" = "Louvain-la-Neuve (Belgique)",
  "Dilecta" = "Paris (France)",
  "ENS Éditions" = "Lyon (France)",
  "Editions Esprit" = "Paris (France)",
  "Editions érès" = "Toulouse (France)",
  "ILCEA / ELLUG" = "Grenoble (France)",
  "Interrogations" = "Paris (France)",
  "Les Études hospitalières éditions (LEH)" = "Bordeaux (France)",
  "Paris : Fédération hospitalière de France" = "Paris (France)",
  "Paris : Publications linguistiques" = "Paris (France)",
  "Presses de Sciences Po / Centre National de la Recherche Scientifique" = "Paris (France)",
  "Presses universitaires de Louvain (Louvain-la-Neuve, Belgique) [2008-....]" = "Louvain-la-Neuve (Belgique)",
  "Société d'études économiques et sociales — SEES" = "Lausanne (Suisse)",
  "SpringerOpen" = "London (Royaume-Uni)",
  "Université Toulouse 1 Capitole, Département des Langues et Civilisations" = "Toulouse (France)",
  "Université de Sherbrooke" = "Québec (Canada)",
  "École doctorale 519 « Sciences humaines et sociales – Perspectives européennes » - Presses Université de Strasbourg" = "Strasbourg (France)"
)

Nous allons ajouter une colonne de localisation géographique à revues_shs_alzheimer :

revues_shs_alzheimer <- revues_shs_alzheimer %>%
  mutate(localisation_geographique_editeur = localisation_mapping[as.character(journalPublisher_s)])

Nous allons également créer une nouvelle colonne pays_editeur :

revues_shs_alzheimer <- revues_shs_alzheimer %>%
  mutate(
    pays_editeur = str_extract(localisation_geographique_editeur, "\\((.*?)\\)")
  )

# Supprimer les parenthèses de la colonne pays_editeur
revues_shs_alzheimer <- revues_shs_alzheimer %>%
  mutate(
    pays_editeur = str_remove_all(pays_editeur, "[()]")
  )

Analyse pour répondre à nos questions

nouveau - revues

rev_actif <- table(revues_shs_alzheimer$journalTitle_s)
rev_actif_df <- data.frame(rev = names(rev_actif), frequentation = as.numeric(rev_actif)) 
top_rev <- rev_actif_df[order(rev_actif_df$frequentation, decreasing = TRUE), ]
view(rev_actif_df)
top_5_rev <- head(top_rev, 5)
view(top_5_rev)
rev_abb <- c("J Alzheimers Dis", "NPG", "Gériatr. psychol. Neuropsychiatr. vieil.", "Psychol Neuropsychiatr Vieil", "Retraite et société")

rev_abb <- c("JAD", "NPG", "GPNV", "PNV", "RS")


top_5_rev$abbreviation <- rev_abb   

ggplot(top_5_rev, aes(x = reorder(abbreviation, -frequentation), y = frequentation)) + 
  geom_bar(stat = "identity",fill="skyblue") + 
  labs(title = "Cinq revues les plus actifs", x = "Revues", y = "Nombre de publications") +
  theme(axis.text.x = element_text(angle=45,hjust = 1),
        axis.title.x = element_text(hjust = 0.5))

  #scale_x_discrete(labels=function(x) strwrap(x, width = 10, simplify = FALSE))

JAD : Journal of Alzheimer’s Disease NPG : Neurologie - Psychiatrie - Gériatrie GP & NV : Gériatrie et psychologie & neuropsychiatrie du vieillissement P & NV : Psychologie & NeuroPsychiatrie du vieillissement RS : Retraite et société

journal <- revues_shs_alzheimer %>% select(9,10,17,22)
view(journal)

Analyse 1 - Auteurs actifs

  1. Analyse des auteurs les plus actifs dans les revues SHS : Identification des auteurs avec le plus grand nombre de publications sur Alzheimer.
library(tidyverse) 
library(questionr) 
library(skimr) 
library(igraph)
## 
## Attachement du package : 'igraph'
## Les objets suivants sont masqués depuis 'package:lubridate':
## 
##     %--%, union
## Les objets suivants sont masqués depuis 'package:dplyr':
## 
##     as_data_frame, groups, union
## Les objets suivants sont masqués depuis 'package:purrr':
## 
##     compose, simplify
## L'objet suivant est masqué depuis 'package:tidyr':
## 
##     crossing
## L'objet suivant est masqué depuis 'package:tibble':
## 
##     as_data_frame
## Les objets suivants sont masqués depuis 'package:stats':
## 
##     decompose, spectrum
## L'objet suivant est masqué depuis 'package:base':
## 
##     union
view(revues_shs_alzheimer)

revues_shs_auteur <- revues_shs_alzheimer %>% select(1:14,26) 

skim(revues_shs_auteur) 
Data summary
Name revues_shs_auteur
Number of rows 394
Number of columns 15
_______________________
Column type frequency:
character 13
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
docType_s 0 1 3 5 0 2 0
language_s 0 1 2 2 0 3 0
domain_s 0 1 5 131 0 99 0
primaryDomain_s 0 1 3 14 0 35 0
openAccess_bool 0 1 4 5 0 2 0
submitType_s 0 1 4 6 0 2 0
journalTitle_s 0 1 0 113 1 225 0
journalPublisher_s 0 1 0 115 24 129 0
authFullName_s 0 1 11 669 0 351 0
title_s 0 1 21 329 0 391 0
subTitle_s 0 1 0 143 383 12 0
citationRef_s 0 1 4 283 0 383 0
publicationDate_s 0 1 4 10 0 199 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
docid 0 1 2862787.44 1185043.00 121427 1632390 3298426 3827076 4457542 ▂▅▂▇▇
publicationDateY_i 0 1 2016.21 4.43 2001 2013 2017 2020 2023 ▁▂▆▇▇
view(revues_shs_auteur)

distinguer les auteurs de chaque publication

revues_shs_auteur$AutList <- strsplit(revues_shs_auteur$authFullName_s, ",")

index : combien d auteurs par publications?

revues_shs_auteur$nbAut <- NA

for(i in 1:length(revues_shs_auteur$AutList)){
  revues_shs_auteur$nbAut[[i]] <- length(revues_shs_auteur$AutList[[i]])}

format long : une ligne par collection

revues_shs_auteur <- revues_shs_auteur[rep(1:nrow(revues_shs_auteur), 
                                           revues_shs_auteur$nbAut),]

une collection par ligne par ordre de citation, si l’id HAL est identique à la ligne précédente, ajouter 1

revues_shs_auteur$ordre <- NA

revues_shs_auteur$ordre[1] <- 1

for(i in 2:length(revues_shs_auteur$ordre)){
  {if(revues_shs_auteur$docid[i]==revues_shs_auteur$docid[i-1]){ revues_shs_auteur$ordre[i] <- revues_shs_auteur$ordre[i-1]+1 } else (revues_shs_auteur$ordre[i] <- 1)}

}

auteurs

revues_shs_auteur$Auteur <- NA

for(i in 1:length(revues_shs_auteur$ordre)){
  revues_shs_auteur$Auteur[i] <- revues_shs_auteur$AutList[[i]][revues_shs_auteur$ordre[i]]}

view(revues_shs_auteur)

auteurs actifs

aut_actif <- table(revues_shs_auteur$Auteur)
aut_actif_df <- data.frame(aut = names(aut_actif), frequentation = as.numeric(aut_actif)) 
top_aut <- aut_actif_df[order(aut_actif_df$frequentation, decreasing = TRUE), ]
view(aut_actif_df)
top_10 <- head(top_aut, 10)
view(top_10)

aut_discipline <- c("Psychologie", "Psychologie", "Gérontologie", "Gérontologie", "Gérontologie", "Gérontologie", "Psychologie", "Philosophie", "Psychologie", "Psychologie")

top_10$discipline <- aut_discipline   

ggplot(top_10, aes(x = reorder(aut, -frequentation), y = frequentation, fill = discipline)) + 
  geom_bar(stat = "identity") + 
  scale_fill_brewer(palette = "Dark2") +
  labs(title = "Dix auteurs les plus actifs", x = "Auteur", y = "Nombre de publications") + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

nouveau auteurs actifs - revue

aut_rev <- revues_shs_auteur %>% 
  filter(Auteur == "Mohamad El Haj" | 
           Auteur == "Philippe Allain" |
           Auteur == "Cédric Annweiler" |
           Auteur == "Jean-Pierre Jacus" |
           Auteur == "Karim Gallouj")

aut_rev <- revues_shs_auteur %>%
  filter(Auteur %in% c("Mohamad El Haj", "Philippe Allain", "Cédric Annweiler", "Jean-Pierre Jacus", "Karim Gallouj")) %>%
  distinct(Auteur, journalTitle_s) %>%
  group_by(Auteur) %>%
  summarize(Journals = paste(journalTitle_s, collapse = ", "))


view(aut_rev)

library(kableExtra)
## 
## Attachement du package : 'kableExtra'
## L'objet suivant est masqué depuis 'package:dplyr':
## 
##     group_rows
# Create a table with kableExtra and apply styling
kbl(aut_rev, caption = "Journals Written by Authors") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "skyblue")
Journals Written by Authors
Auteur Journals
Cédric Annweiler Journal of Alzheimer’s Disease, Current Alzheimer Research, Dementia and Geriatric Cognitive Disorders, PLoS ONE, Investigative Ophthalmology & Visual Science, Molecular Nutrition and Food Research, Journal of Nutrition, Health & Aging, Journal of Hypertension, American Journal of Alzheimer’s Disease and Other Dementias, Journal Français d’Ophtalmologie, European Journal of Neurology, Journals of Gerontology Series A: Biological Sciences and Medical Sciences, Drugs and Aging
Jean-Pierre Jacus Revue Neurologique, Journal of Alzheimer’s Disease, Brain and Behavior, Alzheimer Disease and Associated Disorders, L’Encéphale, Behavioural Neurology, Psychologie & NeuroPsychiatrie du vieillissement, Gériatrie et psychologie & neuropsychiatrie du vieillissement
Karim Gallouj Journal of Alzheimer’s Disease Reports, Alzheimer Disease and Associated Disorders, Medicine, Applied Neuropsychology: Adult, Journal of Alzheimer’s Disease, Current Psychology, Archives of Clinical Neuropsychology, Archives of Gerontology and Geriatrics, Cognitive Neuropsychiatry, Geriatrics and Gerontology International, Neuropsychology, Consciousness and Cognition, Aphasiology
Mohamad El Haj Aging Clinical and Experimental Research, Neuropsychological Rehabilitation, Journal of Alzheimer’s Disease Reports, Alzheimer Disease and Associated Disorders, Medicine, Applied Neuropsychology: Adult, Journal of Alzheimer’s Disease, Journal of Geriatric Psychiatry and Neurology, Cognitive Neuropsychiatry, Current Psychology, Acta Neuropsychiatrica, Archives of Clinical Neuropsychology, Archives of Gerontology and Geriatrics, Geriatrics and Gerontology International, Neuropsychology, Consciousness and Cognition, Aphasiology, Current Alzheimer Research, Translational Neuroscience, Journal of Clinical and Experimental Neuropsychology, Cortex, Brain and Cognition, Journal of Neurolinguistics, Behavioural Neurology, Educational Gerontology
Philippe Allain Alzheimer Disease and Associated Disorders, Medicine, Applied Neuropsychology: Adult, Journal of Alzheimer’s Disease, Archives of Clinical Neuropsychology, Archives of Gerontology and Geriatrics, Cognitive Neuropsychiatry, Glossa, Gériatrie et psychologie & neuropsychiatrie du vieillissement, Psychologie & NeuroPsychiatrie du vieillissement, Revue française de musicothérapie, Translational Neuroscience, Journal of Clinical and Experimental Neuropsychology, Cortex, Revue Neurologique, Brain and Cognition, Journal of Neurolinguistics, Consciousness and Cognition, Presence, Behavioural Neurology, Educational Gerontology

Analyse 2 - Réseau de collaboration

  1. Analyse du réseau de collaborations des auteurs des revues SHS: Construction d’un réseau de collaborations entre auteurs, identification des groupes fréquemment actifs.

collaboration (igraph)

aut_collab <- revues_shs_auteur %>% 
  select(docid,Auteur) %>% 
  filter(Auteur %in% c("Mohamad El Haj","Philippe Allain","Cédric Annweiler","Jean-Pierre Jacus","Karim Gallouj","Olivier Beauchet","Pascal Antoine","Fabrice Gzil","Ahmed Moustafa","Marie-Christine Gély-Nargeot"))

aut_collab_graph <- graph_from_data_frame(aut_collab, directed = TRUE)

Plot 1

plot(aut_collab_graph, main = "Collab d'auteurs",vertex.label.cex=0.7, vertex.label.color="black")

bipartite.mapping(aut_collab_graph)$res
## Warning: `bipartite.mapping()` was deprecated in igraph 2.0.0.
## ℹ Please use `bipartite_mapping()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## [1] TRUE
V(aut_collab_graph)$type <- bipartite_mapping(aut_collab_graph)$type

Plot 2

gg <- graph.data.frame(aut_collab,directed=FALSE) 
## Warning: `graph.data.frame()` was deprecated in igraph 2.0.0.
## ℹ Please use `graph_from_data_frame()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
plot(gg, vertex.color = "orange", edge.label=aut_collab$value, vertex.size=2, edge.color="orange", vertex.label.font=1, edge.label.font =1, edge.label.cex = 1, vertex.label.cex = 0.68,vertex.label.color="black")

Analyse 3 - Nuage de mots (titres)

3. Nuage de mots des titres des revues SHS : Création d’un nuage de mots basé sur les titres des publications pour visualiser les termes les plus fréquents.

il y a quelques groupes plus actifs, mais le nombre de fois qu’ils ont travaillé ensemble est petit (2 fois)

library(wordcloud) 
## Le chargement a nécessité le package : RColorBrewer
library(tm) 
## Le chargement a nécessité le package : NLP
## 
## Attachement du package : 'NLP'
## L'objet suivant est masqué depuis 'package:ggplot2':
## 
##     annotate
library(SnowballC) 
library(RColorBrewer)
library(viridis)
## Le chargement a nécessité le package : viridisLite

Nouveau - fr (161)

revues_shs_alzheimer_fr <- revues_shs_alzheimer %>% filter(language_s == "fr")

nuage_corpus_fr <- Corpus(VectorSource(revues_shs_alzheimer_fr$title_s))

nuage_corpus_clean_fr<-tm_map(nuage_corpus_fr,tolower)
## Warning in tm_map.SimpleCorpus(nuage_corpus_fr, tolower): transformation drops
## documents
nuage_corpus_clean_fr<-tm_map(nuage_corpus_clean_fr,removeNumbers)
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_fr, removeNumbers):
## transformation drops documents
nuage_corpus_clean_fr<-tm_map(nuage_corpus_clean_fr,removeWords,stopwords("english"))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_fr, removeWords,
## stopwords("english")): transformation drops documents
nuage_corpus_clean_fr<-tm_map(nuage_corpus_clean_fr,removeWords,stopwords("fr"))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_fr, removeWords,
## stopwords("fr")): transformation drops documents
nuage_corpus_clean_fr<-tm_map(nuage_corpus_clean_fr,removeWords, c("alzheimer", "maladie", "disease"))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_fr, removeWords,
## c("alzheimer", : transformation drops documents
nuage_corpus_clean_fr <- tm_map(nuage_corpus_clean_fr, content_transformer(function(x) gsub("[[:punct:]]", "", x)))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_fr,
## content_transformer(function(x) gsub("[[:punct:]]", : transformation drops
## documents
nuage_corpus_clean_fr<-tm_map(nuage_corpus_clean_fr,removePunctuation)
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_fr, removePunctuation):
## transformation drops documents
nuage_corpus_clean_fr<-tm_map(nuage_corpus_clean_fr,stripWhitespace)
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_fr, stripWhitespace):
## transformation drops documents
wordcloud(nuage_corpus_clean_fr,max.words = 50, min.freq =1, colors = brewer.pal(8, "Dark2"), rot.per=0.35)
## Warning in wordcloud(nuage_corpus_clean_fr, max.words = 50, min.freq = 1, :
## troubles could not be fit on page. It will not be plotted.
## Warning in wordcloud(nuage_corpus_clean_fr, max.words = 50, min.freq = 1, :
## impairment could not be fit on page. It will not be plotted.

nouveau - en

revues_shs_alzheimer_en <- revues_shs_alzheimer %>% filter(language_s == "en")

nuage_corpus_en <- Corpus(VectorSource(revues_shs_alzheimer_en$title_s))

nuage_corpus_clean_en<-tm_map(nuage_corpus_en,tolower)
## Warning in tm_map.SimpleCorpus(nuage_corpus_en, tolower): transformation drops
## documents
nuage_corpus_clean_en<-tm_map(nuage_corpus_clean_en,removeNumbers)
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_en, removeNumbers):
## transformation drops documents
nuage_corpus_clean_en<-tm_map(nuage_corpus_clean_en,removeWords,stopwords("english"))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_en, removeWords,
## stopwords("english")): transformation drops documents
nuage_corpus_clean_en<-tm_map(nuage_corpus_clean_en,removeWords,stopwords("fr"))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_en, removeWords,
## stopwords("fr")): transformation drops documents
nuage_corpus_clean_en<-tm_map(nuage_corpus_clean_en,removeWords, c("alzheimer", "maladie", "disease"))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_en, removeWords,
## c("alzheimer", : transformation drops documents
nuage_corpus_clean_en <- tm_map(nuage_corpus_clean_en, content_transformer(function(x) gsub("[[:punct:]]", "", x)))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_en,
## content_transformer(function(x) gsub("[[:punct:]]", : transformation drops
## documents
nuage_corpus_clean_en<-tm_map(nuage_corpus_clean_en,removePunctuation)
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_en, removePunctuation):
## transformation drops documents
nuage_corpus_clean_en<-tm_map(nuage_corpus_clean_en,stripWhitespace)
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean_en, stripWhitespace):
## transformation drops documents
wordcloud(nuage_corpus_clean_en,max.words = 30, min.freq =1, colors = brewer.pal(8, "Dark2"), rot.per=0.35)

#nuage <- data.frame(revues_shs_alzheimer) 
nuage_corpus <- Corpus(VectorSource(revues_shs_alzheimer$title_s))

nuage_corpus_clean<-tm_map(nuage_corpus,tolower)
## Warning in tm_map.SimpleCorpus(nuage_corpus, tolower): transformation drops
## documents
nuage_corpus_clean<-tm_map(nuage_corpus_clean,removeNumbers)
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean, removeNumbers):
## transformation drops documents
nuage_corpus_clean<-tm_map(nuage_corpus_clean,removeWords,stopwords("english"))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean, removeWords,
## stopwords("english")): transformation drops documents
nuage_corpus_clean<-tm_map(nuage_corpus_clean,removeWords,stopwords("fr"))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean, removeWords,
## stopwords("fr")): transformation drops documents
nuage_corpus_clean<-tm_map(nuage_corpus_clean,removeWords, c("alzheimer", "maladie", "disease"))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean, removeWords, c("alzheimer",
## : transformation drops documents
nuage_corpus_clean <- tm_map(nuage_corpus_clean, content_transformer(function(x) gsub("[[:punct:]]", "", x)))
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean,
## content_transformer(function(x) gsub("[[:punct:]]", : transformation drops
## documents
nuage_corpus_clean<-tm_map(nuage_corpus_clean,removePunctuation)
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean, removePunctuation):
## transformation drops documents
nuage_corpus_clean<-tm_map(nuage_corpus_clean,stripWhitespace)
## Warning in tm_map.SimpleCorpus(nuage_corpus_clean, stripWhitespace):
## transformation drops documents
wordcloud(nuage_corpus_clean,max.words = 100, min.freq =1, colors = viridis_pal()(6), rot.per=0.35)
## Warning in wordcloud(nuage_corpus_clean, max.words = 100, min.freq = 1, :
## patients could not be fit on page. It will not be plotted.
## Warning in wordcloud(nuage_corpus_clean, max.words = 100, min.freq = 1, :
## personnes could not be fit on page. It will not be plotted.

Analyse 4 - Tendances de publications

Visualisations :

1. Analyse des tendances de publication au fil des années : Identification des tendances globales et par type de publication

Chargement des bibliothèques nécessaires :

library(ggplot2) 
library(dplyr) 
library(viridis)

Analyse des données :

Nous allons tout d’abord renommer les valeurs dans la colonne docType_s du dataset

Nous allons créer un tableau ou un data frame de résumé

dataset_shs_alzheimer <- dataset_shs_alzheimer %>%
  mutate(docType_s = case_when(
    docType_s == "ART" ~ "Article dans une revue",
    docType_s == "BLOG" ~ "Article de blog scientifique",
    docType_s == "COMM" ~ "Communication dans un congrès",
    docType_s == "COUV" ~ "Chapitre d'ouvrage",
    docType_s == "ISSUE" ~ "N°spécial de revue/special issue",
    docType_s == "LECTURE" ~ "Cours",
    docType_s == "OTHER" ~ "Autre publication scientifique",
    docType_s == "OUV" ~ "Ouvrages",
    docType_s == "PATENT" ~ "Brevet",
    docType_s == "POSTER" ~ "Poster de conférence",
    docType_s == "REPORT" ~ "Rapport",
    docType_s == "THESE" ~ "Thèse",
    docType_s == "VIDEO" ~ "Vidéo",
    TRUE ~ as.character(docType_s)  # Pour toutes les autres valeurs, laissez inchangé
  ))

Nous allons maintenant calculer le nombre de publications pour chaque année et type de document en créant un data frame de résumé

tendances_publication <- dataset_shs_alzheimer %>%
  group_by(publicationDateY_i, docType_s) %>%
  summarise(count = n()) %>%
  filter(!(docType_s %in% c("UNDEFINED")))
## `summarise()` has grouped output by 'publicationDateY_i'. You can override
## using the `.groups` argument.

Visualisation des données avec la palette de couleurs viridis :

ggplot(tendances_publication, aes(x = publicationDateY_i, y = count, color = docType_s)) +
  geom_line(size = 1) +  # Ajuster l'épaisseur de la ligne selon vos préférences
  scale_color_viridis_d() +  # Utiliser la palette de couleurs viridis
  labs(
    title = "Tendances des publications SHS sur la maladie d'Alzheimer au fil des années",
    x = "Année de publication",
    y = "Nombre de publications",
    color = "Type de document"
  ) +  # Ajouter des étiquettes au titre et aux axes
  theme_minimal() +  # Utiliser un thème minimal pour un aspect propre
  scale_x_continuous(breaks = unique(tendances_publication$publicationDateY_i), labels = unique(tendances_publication$publicationDateY_i))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

# Ajuster les étiquettes de l'axe des x en fonction des valeurs uniques dans la variable publicationDateY_i

Commentaire perso : Supprimer proceedings/hdr/trad ?

Analyse 5 - Analyse de la répartition des publications SHS

Tout d’abord, il faut installer et charger le package ggrepel s’il n’est pas déjà installé

library(ggrepel)

Nous allons créer un résumé des comptes et pourcentages pour chaque catégorie docType_s :

count_data <- dataset_shs_alzheimer %>%
  count(docType_s) %>%
  mutate(percentage = prop.table(n) * 100)

Nous allons créer un camembert avec des étiquettes de pourcentage à l’extérieur et des flèches :

mycols <- c("#0073C2FF", "#0073C2CF", "#EFC000FF", "#868686FF", "#CD534CFF", "#CAB2D6FF", "#D0D0D0FF", "#CAAEFF", "#EDBB43FF", "#7B848EFF", "#7D85B1FF", "#5B5B5BFF", "#D35E60FF", "#54A4A4FF")
ggplot(count_data, aes(x = "", y = n, fill = docType_s)) +
  geom_bar(width = 1, stat = "identity", color = "white") +
  
  # Utiliser geom_label_repel pour positionner les étiquettes de pourcentage à l'extérieur avec des flèches
  geom_label_repel(aes(
    label = scales::percent(percentage / 100),  # Transformer les pourcentages en texte
    fill = docType_s
  ),
  position = position_stack(vjust = 0.5),  # Positionner les étiquettes
  box.padding = 0.5,  # Ajuster la marge autour des étiquettes
  point.padding = 0.3,  # Ajuster l'espace entre les étiquettes et les flèches
  arrow = arrow(length = unit(0.02, 'npc')),  # Ajouter des flèches
  show.legend = FALSE) +  # Ne pas afficher la légende
  
  coord_polar("y", start = 0) +  # Utiliser des coordonnées polaires pour le camembert
  scale_fill_manual(values = mycols) +  # Définir les couleurs manuellement
  theme_void() +  # Utiliser un thème void pour un fond blanc
  theme(axis.text = element_blank()) +  # Supprimer les étiquettes des axes
  labs(title = "Répartition des types de publications sur la maladie d'Alzheimer")  # Ajouter un titre
## Warning: ggrepel: 4 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

Analyse 6 - Analyse des institutions les plus actives

top_institutions <- revues_shs_alzheimer %>%
  count(journalPublisher_s) %>%  # Compter le nombre de publications par éditeur de revue
  arrange(desc(n)) %>%  # Trier par ordre décroissant du nombre de publications
  head(7)  # Sélectionner les 7 éditeurs de revue les plus actifs

Ce choix de seulement sept (07) éditeurs s’explique par le fait que le reste des éditeurs ont publié seulement une publication. Nous avons donc choisi de prendre seulement ceux qui ont publié plus de deux fois sur la maladie en question :

ggplot(top_institutions, aes(x = n, y = fct_reorder(journalPublisher_s, n))) +
  geom_bar(stat = "identity", fill = "#0073C2FF") +  # Créer un graphique à barres
  labs(
    title = "Institutions les plus actives dans les revues SHS sur la maladie d'Alzheimer",
    x = "Nombre de publications",
    y = "Institution"
  ) +
  scale_x_continuous(breaks = seq(0, max(top_institutions$n), by = 1)) +  # Définir des ruptures pour afficher uniquement les valeurs entières sur l'axe X
  theme_minimal()

7 - Évolution Temporelle des Publications de l’Éditeur de Revues le Plus Actif dans le Domaine de la Maladie d’Alzheimer : Une Analyse de ’Elsevier Masson :

Comme nous avons pu voir dans la visualisation précédente, Elservier Masson est le premier éditeur dans le top 7.

L’objectif de la visualisation que nous allons créer maintenant est d’examiner comment le nombre de publications de l’institution Elsevier Masson a évolué au fil des années

En choisissant un éditeur parmi les plus actifs, nous pouvons obtenir des informations plus détaillées sur la tendance temporelle de ses contributions dans le domaine de la maladie d’Alzheimer :

# Filtrer les données pour l'institution "Elsevier Masson"
elsevier_masson_data <- revues_shs_alzheimer %>%
  filter(journalPublisher_s == "Elsevier Masson")

# Grouper par année et compter le nombre de publications
elsevier_masson_trends <- elsevier_masson_data %>%
  group_by(publicationDateY_i) %>%
  summarise(count = n())

# Créer la visualisation en utilisant un graphique à barres
ggplot(elsevier_masson_trends, aes(x = publicationDateY_i, y = count)) +
  geom_bar(stat = "identity", color = "white") +
  labs(
    title = "Nombre de publications par an pour Elsevier Masson",
    x = "Année de publication",
    y = "Nombre de publications"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = unique(elsevier_masson_trends$publicationDateY_i))

8 - Analyse de la répartition géographique des éditeurs

# Créer une table des éditeurs et de leurs pays
editeurs_pays <- revues_shs_alzheimer %>%
  filter(!is.na(pays_editeur)) %>%
  count(journalPublisher_s, pays_editeur) %>%
  arrange(pays_editeur)

# Créer la visualisation avec un graphique à barres
ggplot(editeurs_pays, aes(x = pays_editeur, y = n)) +
  geom_bar(stat = "identity", fill = "#0073C2FF") +
  labs(
    title = "Répartition géographique des éditeurs des revues SHS",
    x = "Pays",
    y = "Nombre d'éditeurs"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Filtrer les données pour inclure uniquement celles avec le pays de l'éditeur en France
publications_france <- revues_shs_alzheimer %>%
  filter(pays_editeur == "France")

# Créer un graphique de barres avec le nombre de publications comme texte
ggplot(publications_france, aes(x = localisation_geographique_editeur)) +
  geom_bar() +
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +  # Ajouter le texte avec le nombre de publications
  labs(
    title = "Répartition du nombre de publications en France par localisation géographique de l'éditeur",
    x = "Localisation géographique de l'éditeur",
    y = "Nombre de publications"
  ) +
  theme_minimal()
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

9 - Analyse de la répartition des langues des publications en fonction du pays de l’éditeur

# Créer une table des langues, du pays de l'éditeur et de leur fréquence
langue_pays_freq <- revues_shs_alzheimer %>%
  filter(!is.na(pays_editeur)) %>%
  count(language_s, pays_editeur) %>%
  arrange(desc(n))

# Créer la visualisation avec un graphique à barres empilées
ggplot(langue_pays_freq, aes(x = fct_reorder(language_s, n), y = n, fill = pays_editeur)) +
  geom_bar(stat = "identity") +
  labs(
    title = "Répartition des langues des publications SHS sur la maladie d'Alzheimer en fonction du pays de l'éditeur",
    x = "Langue",
    y = "Nombre de publications",
    fill = "Pays de l'éditeur"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Interprétations des résultats

Création d’un taggage via Zotero

Création d’une bibliographie sur Zotero

Conclusion