La console de LinkR vous permet d'exécuter des requêtes en R, Python ou en ligne de commande (Bash).
Nous allons voir comment :
- Utiliser la console dans LinkR
- Requêter des données OMOP
- Requêter les autres variables de l'application
Version imprimable multipages. Cliquer ici pour imprimer.
La console de LinkR vous permet d'exécuter des requêtes en R, Python ou en ligne de commande (Bash).
Nous allons voir comment :
La page Console est accessible depuis n’importe quelle page de l’application, en cliquant sur le lien correspondant en haut de l’écran.
Vous arrivez sur une page avec :
Commencez par choisir le langage de programmation et la sortie à utiliser.
Nous allons commencer par voir les différentes sorties disponibles en R :
figureOutput
de ShinytableOutput
de ShinyDT::DTOutput
de DT et ShinyuiOutput
de ShinyNous allons voir les sorties avec des exemples. Pour cela, chargez le projet Démo LinkR, afin de charger les données de la MIMIC-IV.
Raccourcis
Vous pouvez utiliser ces raccourcis, lorsque votre curseur est dans l'éditeur de code :
Sélectionnez la sortie “Console”, écrivez d$person
dans l’éditeur de texte et exécutez le code (avec le bouton Exécuter ou avec le raccourci).
Voici un exemple permettant de créer un histogramme affichant l’âge des patients du set de données associé au projet.
Sélectionnez la sortie “Figure” et exécutez ce code. Notez que vous pouvez configurer les dimensions et la résolution de l’image.
d$visit_occurrence %>%
dplyr::left_join(
d$person %>% dplyr::select(person_id, birth_datetime),
by = "person_id"
) %>%
dplyr::collect() %>%
dplyr::mutate(
age = round(
as.numeric(
difftime(visit_start_datetime, birth_datetime, units = "days")
) / 365.25, 1
)
) %>%
ggplot2::ggplot(ggplot2::aes(x = age)) +
ggplot2::geom_histogram(binwidth = 5, fill = "#0084D8", color = "white") +
ggplot2::labs(
x = "Age (années)",
y = "Fréquence"
) +
ggplot2::theme_minimal() +
ggplot2::theme(
plot.title = ggplot2::element_text(size = 16, face = "bold"),
axis.title = ggplot2::element_text(size = 14)
)
La sortie “Table” affiche le dataframe en entier, avec la fonction tableOutput
de Shiny.
La sortie “DataTable” utilie la librairie DT pour afficher les résultats, qui permet un meilleur affichage que “Table”, avec un système de pages.
A noter que les données doivent être en mémoire pour être affichées.
Il faudra donc écrire :
d$person %>% dplyr::collect()
La sortie “RMarkdown” interprète le code comme un fichier .Rmd.
Le Markdown sera converti en HTML et le code R sera interprété.
Un exemple simple d’utilisation de la console en Python :
import numpy as np
# Générer des données aléatoires
data = np.random.normal(loc=50, scale=10, size=1000)
print(data)
Il est également possible d’utiliser la librariie Matplotlib pour créer des figures :
import matplotlib.pyplot as plt
import numpy as np
# Générer des données aléatoires
data = np.random.normal(loc=50, scale=10, size=1000)
# Créer l'histogramme
plt.hist(data, bins=20, color="#0084D8", edgecolor="white")
# Ajouter des labels et un titre
plt.title("Distribution des valeurs")
plt.xlabel("Valeurs")
plt.ylabel("Fréquence")
# Afficher le graphique
plt
Une fois des données chargées (en chargeant un projet associé à un set de données ou en chargeant un set de données directement), les données deviennent accessibles depuis la console, par deux moyens :
d$
(d pour data)get_query
Toutes les tables OMOP sont disponibles par ces deux méthodes.
Nous avons vu dans les exemples ci-dessus l’utilisation des variables préfixées d$
(d$person, d$measurement etc).
Ces données sont chargées au format lazy, ce qui veut dire qu’elles ne sont pas chargées en mémoire (ce qui permet d’afficher rapidement la variable, même si elle contient plusieurs milliards de lignes). Une fois les opérations de filtre réalisées, il est possible de collecter ces données en mémoire avec la fonction dplyr::collect()
.
Dans l’exemple suivant, on filtre les données de la table Measurement
sur le person_id
2562658 et sur le measurement_concept_id
3027018 (correspondant au concept LOINC - Heart rate).
d$measurement %>%
dplyr::filter(
person_id == 2562658,
measurement_concept_id == 3027018
) %>%
dplyr::collect()
A noter que ces tables sont également disponibles pour le groupe de patients (ou subset) sélectionné, avec la liste d$data_subset
.
Ceci affichera la liste des patients du groupe sélectionné :
d$data_subset$person
Par souci d’interopérabilité, il est nécessaire de pouvoir requêter les tables OMOP en SQL.
Lorsque vous importez des données dans LinkR, il s’agit toujours d’une connexion à une base de donnnées (même lorsque vous importez des fichiers SQL ou Parquet, qui sont lus sous forme d’une connexion DuckDB).
Il est possible de requêter les données en SQL, via la fonction R get_query
.
Ce code vous permet donc d’afficher toutes les données de la table patient :
get_query("SELECT * FROM person")
Vous pouvez également utiliser les requêtes SQL du tutoriel requêtes OMOP usuelles.
Cette requête, extraite de ce tutoriel, vous permet d’obtenir l’âge des patients :
get_query("
SELECT
v.visit_occurrence_id,
v.person_id,
ROUND(
EXTRACT(EPOCH FROM (
CAST(v.visit_start_datetime AS TIMESTAMP) -
CAST(p.birth_datetime AS TIMESTAMP)
)) / (365.25 * 86400),
1
) AS age
FROM
visit_occurrence v
LEFT JOIN
(SELECT person_id, birth_datetime FROM person) p
ON
v.person_id = p.person_id;
")
D’autres variables, préfixées m$
, peuvent être requêtées depuis la console. Ces variables ont pour objectif d’être utilisées dans les plugins.
En voici la liste :
m$selected_subset
: affiche l’ID du groupe de patients sélectionné via le menu déroulantm$selected_person
: ID du patient sélectionné via le menu déroulantm$selected_visit_detail
: ID du séjour hospitalier sélectionné via le menu déroulantm$subsets
: liste des groupes de patients disponibles pour le projet ouvertm$subset_persons
: liste des patients appartenant au groupe de patients (subset) sélectionnéNous avons vu comment la console de LinkR nous permet d'exécuter des requêtes en R ou Python, en choisissant le format de sortie (console, figure, tableua de données etc).
Nous avons également vu comment manier les données d'un projet chargé, ce qui nous sera utile pour créer notre premier plugin dans la section suivante.