Intégrer les données pmsi dans une base monetdb.

Ce post présente comment intégrer les données mco et rsf dans une base de données monetdb. Ces fonctionnalités sont désormais disponibles dans le package

Après avoir créé le répertoire '~/Documents/data/monetdb' (voir le post précédent) :

Se connecter à la base dans le répertoire monetdb

library(MonetDBLite)
library(DBI)

library(dbplyr)
library(dplyr, warn.conflicts = F)

dbdir <- "~/Documents/data/monetdb"
con <- src_monetdblite(dbdir)

Voici le code pour effacer toutes les tables de la base :

#Clean-up
#lapply(dbListTables(con$con), function(x){dbRemoveTable(con$con, x)})

Noyau de paramètres

Pour tester que tout fonctionne on ajoute le paramètre n_max = 10000 pour n’importer que les 10 000 premières lignes.

library(pmeasyr)
p <- noyau_pmeasyr(
  finess   = '750712184',
  annee = 2016,
  mois     = 12,
  path     = '~/Documents/data/mco',
  progress = F, 
  tolower_names = T, # choix de noms de colonnes minuscules : T / F
  n_max = 1e4, # on limite la lecture a un petit nombre de lignes pour tester d'abord
  lib = F)

Intégrer les tables mco out dans la base :

La fonction db_mco_out permet d’intégrer les données niveau séjour du out (rsa, actes, diagnostics, table anohosp). Les tra sont ajoutés à ces tables.

On met dans l’objet statuts tout ce que retourne la fonction db_mco_out, et on l’analyse ensuite. Entre chaque import dans la base de données, on lance un garbage collection (ramasse-miettes) pour bien mettre à zéro la mémoire vive.

On utilise la fonction purrr::quielty pour cela, pour garder les messages, output, warning résultant de l’exécution. L’idée est d’exécuter la fonction année par année et de vérifier l’objet statuts est ok.

purrr::quietly(db_mco_out)(con,  p, annee = 2016) -> statuts ; gc(); #ok
purrr::quietly(db_mco_out)(con,  p, annee = 2015) -> statuts ; gc();

Intégrer les tables mco in dans la base :

La fonction db_mco_in permet d’intégrer les données niveau rum du in (rum, actes, diagnostics, dad).

purrr::quietly(db_mco_in)(con,  p, annee = 2016) -> statuts ; gc();

Intégrer les bases rsf out par année

La fonction db_rsf_out permet d’intégrer les données des rafael (une table par lettre A, B, C, … et les données anohosp).

purrr::quietly(db_rsf_out)(con,  p, annee = 2016) -> statuts ; gc();

Lister les tables de la base de données

listable <- function(con){
dbListTables(con) -> liste
 
 suppressWarnings(matrix(c(sort(liste), rep('',16 - length(liste) %% 16)),
                         nrow = 16)) %>% as_tibble() %>%
   knitr::kable(col.names = paste0('16 tables, n°',
                                   1:(floor((length(liste)/ 16) )+1)))
}
listable(con)
|16 tables, n°1   |16 tables, n°2   |16 tables, n°3   |16 tables, n°4    |16 tables, n°5    |16 tables, n°6    |
|:----------------|:----------------|:----------------|:-----------------|:-----------------|:-----------------|
|mco_11_rsa_actes |mco_13_rsa_actes |mco_15_rsa_actes |mco_17_rsa_actes  |rsf_13_rafael_a   |rsf_15_rafael_a   |
|mco_11_rsa_ano   |mco_13_rsa_ano   |mco_15_rsa_ano   |mco_17_rsa_ano    |rsf_13_rafael_ano |rsf_15_rafael_ano |
|mco_11_rsa_diags |mco_13_rsa_diags |mco_15_rsa_diags |mco_17_rsa_diags  |rsf_13_rafael_b   |rsf_15_rafael_b   |
|mco_11_rsa_rsa   |mco_13_rsa_rsa   |mco_15_rsa_rsa   |mco_17_rsa_rsa    |rsf_13_rafael_c   |rsf_15_rafael_c   |
|mco_11_rsa_um    |mco_13_rsa_um    |mco_15_rsa_um    |mco_17_rsa_um     |rsf_13_rafael_h   |rsf_15_rafael_h   |
|mco_11_rum_actes |mco_13_rum_actes |mco_15_rum_actes |mco_17_rum_actes  |rsf_13_rafael_l   |rsf_15_rafael_l   |
|mco_11_rum_diags |mco_13_rum_diags |mco_15_rum_diags |mco_17_rum_diags  |rsf_13_rafael_m   |rsf_15_rafael_m   |
|mco_11_rum_rum   |mco_13_rum_rum   |mco_15_rum_rum   |mco_17_rum_rum    |rsf_13_rafael_p   |rsf_15_rafael_p   |
|mco_12_rsa_actes |mco_14_rsa_actes |mco_16_rsa_actes |rsf_12_rafael_a   |rsf_14_rafael_a   |rsf_16_rafael_a   |
|mco_12_rsa_ano   |mco_14_rsa_ano   |mco_16_rsa_ano   |rsf_12_rafael_ano |rsf_14_rafael_ano |rsf_16_rafael_ano |
|mco_12_rsa_diags |mco_14_rsa_diags |mco_16_rsa_diags |rsf_12_rafael_b   |rsf_14_rafael_b   |rsf_16_rafael_b   |
|mco_12_rsa_rsa   |mco_14_rsa_rsa   |mco_16_rsa_rsa   |rsf_12_rafael_c   |rsf_14_rafael_c   |rsf_16_rafael_c   |
|mco_12_rsa_um    |mco_14_rsa_um    |mco_16_rsa_um    |rsf_12_rafael_h   |rsf_14_rafael_h   |rsf_16_rafael_h   |
|mco_12_rum_actes |mco_14_rum_actes |mco_16_rum_actes |rsf_12_rafael_l   |rsf_14_rafael_l   |rsf_16_rafael_l   |
|mco_12_rum_diags |mco_14_rum_diags |mco_16_rum_diags |rsf_12_rafael_m   |rsf_14_rafael_m   |rsf_16_rafael_m   |
|mco_12_rum_rum   |mco_14_rum_rum   |mco_16_rum_rum   |rsf_12_rafael_p   |rsf_14_rafael_p   |rsf_16_rafael_p   |

fonctionne aussi pour d’autres db

S’appuyant sur dbplyr et DBI, ce code fonctionne également pour d’autres bases de données PostgreSQL, MariaDB, SQLite… Il suffit pour cela de changer au départ l’objet connection par une connection à la base souhaitée : voir package dbplyr.

Intégration au package pmeasyr

Le package pmeasyr intègre ces nouvelles fonctionnalités, voir :

Les fonctions du package permettent également d’ajouter des index aux tables pour optimiser les requêtes dans la base.