Lire les fichiers du PMSI avec python / pola.rs
git clone https://github.com/GuillaumePressiat/pypmsi.git
poetry install
avec pip
pip install https://github.com/GuillaumePressiat/pypmsi/releases/latest/download/pypmsi-0.2.6-py3-none-any.whl
import polars
import pypmsi as pm
rsa = pm.irsa(290000017, 2021, 5, '~/Documents/data/mco', typi = 4)
rsa
p = pm.noyau_pmsi(finess = 290000017, annee = 2021, mois = 5, path = '~/Documents/data/mco')
rsa = p.irsa()
rsa
mon_rsa = pm.chemin_pmsi(filepath = '~/Documents/data/mco/290000017.2021.5.rsa', annee = 2021)
rsa = mon_rsa.read_rsa()
rsa
(du coup le nom du fichier peut-être formaté différement).
On peut modifier en ligne les paramètres, exemple :
p = pm.noyau_pmsi(finess = 290000017, annee = 2021, mois = 12, path = '~/Documents/data/mco')
# lire les données 2022
rsa = p.irsa(annee = 2022)
rsa
rsa
{'rsa': shape: (57140, 88)
┌───────────┬────────┬────────────┬────────┬─────┬───────┬──────┬─────┬─────────┐
│ nofiness ┆ novrsa ┆ cle_rsa ┆ novrss ┆ ... ┆ dr ┆ ndas ┆ na ┆ filler6 │
│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str ┆ str ┆ ┆ str ┆ i32 ┆ i32 ┆ str │
╞═══════════╪════════╪════════════╪════════╪═════╪═══════╪══════╪═════╪═════════╡
│ 290000017 ┆ 226 ┆ 00000xxxxx ┆ 120 ┆ ... ┆ R5210 ┆ 0 ┆ 0 ┆ │
│ 290000017 ┆ 226 ┆ 00000xxxxx ┆ 120 ┆ ... ┆ G628 ┆ 0 ┆ 0 ┆ │
│ 290000017 ┆ 226 ┆ 00000xxxxx ┆ 120 ┆ ... ┆ M341 ┆ 0 ┆ 5 ┆ │
│ 290000017 ┆ 226 ┆ 00000xxxxx ┆ 120 ┆ ... ┆ ┆ 16 ┆ 27 ┆ │
│ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... │
│ 290000017 ┆ 226 ┆ 00000xxxxx ┆ 120 ┆ ... ┆ ┆ 0 ┆ 4 ┆ │
│ 290000017 ┆ 226 ┆ 00000xxxxx ┆ 120 ┆ ... ┆ N185 ┆ 0 ┆ 1 ┆ │
│ 290000017 ┆ 226 ┆ 00000xxxxx ┆ 120 ┆ ... ┆ C504 ┆ 0 ┆ 1 ┆ │
│ 290000017 ┆ 226 ┆ 00000xxxxx ┆ 120 ┆ ... ┆ ┆ 6 ┆ 25 ┆ │
└───────────┴────────┴────────────┴────────┴─────┴───────┴──────┴─────┴─────────┘,
'actes': shape: (166028, 13)
┌────────────┬───────┬─────────┬────────┬─────┬────────┬────────┬────────┬─────────┐
│ cle_rsa ┆ delai ┆ cdccam ┆ descri ┆ ... ┆ assonp ┆ nbexec ┆ indval ┆ nseqrum │
│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i32 ┆ str ┆ str ┆ ┆ str ┆ i32 ┆ str ┆ str │
╞════════════╪═══════╪═════════╪════════╪═════╪════════╪════════╪════════╪═════════╡
│ 00000xxxxx ┆ 0 ┆ GLQP002 ┆ ┆ ... ┆ 1 ┆ 1 ┆ 1 ┆ 01 │
│ 00000xxxxx ┆ 0 ┆ PBQM003 ┆ ┆ ... ┆ ┆ 1 ┆ 1 ┆ 01 │
│ 00000xxxxx ┆ 0 ┆ YYYY076 ┆ ┆ ... ┆ 2 ┆ 1 ┆ 1 ┆ 01 │
│ 00000xxxxx ┆ 0 ┆ ZZQX069 ┆ ┆ ... ┆ 4 ┆ 1 ┆ 1 ┆ 01 │
│ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... │
│ 00000xxxxx ┆ 4 ┆ DEQP004 ┆ ┆ ... ┆ ┆ 1 ┆ 1 ┆ 02 │
│ 00000xxxxx ┆ 4 ┆ YYYY020 ┆ ┆ ... ┆ ┆ 1 ┆ 1 ┆ 02 │
│ 00000xxxxx ┆ 4 ┆ YYYY020 ┆ ┆ ... ┆ ┆ 1 ┆ 1 ┆ 02 │
│ 00000xxxxx ┆ 4 ┆ YYYY020 ┆ ┆ ... ┆ ┆ 1 ┆ 1 ┆ 02 │
└────────────┴───────┴─────────┴────────┴─────┴────────┴────────┴────────┴─────────┘,
'diags': shape: (177176, 4)
┌────────────┬─────────┬───────┬──────────┐
│ cle_rsa ┆ nseqrum ┆ diag ┆ position │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str ┆ i32 │
╞════════════╪═════════╪═══════╪══════════╡
│ 00000xxxxx ┆ 01 ┆ Z4180 ┆ 1 │
│ 00000xxxxx ┆ 01 ┆ Z512 ┆ 1 │
│ 00000xxxxx ┆ 01 ┆ Z092 ┆ 1 │
│ 00000xxxxx ┆ 01 ┆ D462 ┆ 1 │
│ ... ┆ ... ┆ ... ┆ ... │
│ 00000xxxxx ┆ 01 ┆ M0699 ┆ 4 │
│ 00000xxxxx ┆ 01 ┆ C629 ┆ 4 │
│ 00000xxxxx ┆ 01 ┆ N185 ┆ 4 │
│ 00000xxxxx ┆ 01 ┆ C504 ┆ 4 │
└────────────┴─────────┴───────┴──────────┘,
'rsa_um': shape: (63199, 17)
┌────────────┬─────────┬────────┬───────────┬─────┬─────────┬─────────┬──────────┬─────────┐
│ cle_rsa ┆ nseqrum ┆ nsequm ┆ nohop1 ┆ ... ┆ nbsupp1 ┆ typaut2 ┆ natsupp2 ┆ nbsupp2 │
│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str ┆ str ┆ ┆ i32 ┆ str ┆ str ┆ str │
╞════════════╪═════════╪════════╪═══════════╪═════╪═════════╪═════════╪══════════╪═════════╡
│ 00000xxxxx ┆ 01 ┆ 0028 ┆ 29000xxxx ┆ ... ┆ 0 ┆ ┆ ┆ │
│ 00000xxxxx ┆ 01 ┆ 0021 ┆ 29000xxxx ┆ ... ┆ 0 ┆ ┆ ┆ │
│ 00000xxxxx ┆ 01 ┆ 0022 ┆ 29000xxxx ┆ ... ┆ 0 ┆ ┆ ┆ │
│ 00000xxxxx ┆ 01 ┆ 0076 ┆ 29000xxxx ┆ ... ┆ 109 ┆ ┆ ┆ │
│ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... ┆ ... │
│ 00000xxxxx ┆ 02 ┆ 0039 ┆ 29000xxxx ┆ ... ┆ 0 ┆ ┆ ┆ │
│ 00000xxxxx ┆ 03 ┆ 0039 ┆ 29000xxxx ┆ ... ┆ 0 ┆ ┆ ┆ │
│ 00000xxxxx ┆ 04 ┆ 0085 ┆ 29000xxxx ┆ ... ┆ 0 ┆ ┆ ┆ │
│ 00000xxxxx ┆ 05 ┆ 0085 ┆ 29000xxxx ┆ ... ┆ 0 ┆ ┆ ┆ │
└────────────┴─────────┴────────┴───────────┴─────┴─────────┴─────────┴──────────┴─────────┘}
(rsa['actes']
.filter(pl.col('cdccam').str.contains('EBLA'))
.group_by(['cdccam', 'nbexec'])
.agg(pl.col('act').len().alias('nb'))
)
shape: (2, 3)
┌─────────┬────────┬─────┐
│ cdccam ┆ nbexec ┆ nb │
│ --- ┆ --- ┆ --- │
│ str ┆ i32 ┆ u32 │
╞═════════╪════════╪═════╡
│ EBLA002 ┆ 1 ┆ 2 │
│ EBLA003 ┆ 1 ┆ 703 │
└─────────┴────────┴─────┘
(rsa['actes']
.filter(pl.col('cdccam').str.contains('EBLA'))
.join(rsa['rsa'], on = 'cle_rsa', how = 'inner')
.pivot(index = 'cdccam', values = 'nbexec', on = 'rsatype', aggregate_function = 'sum')
.fill_null(0)
)
shape: (2, 5)
┌─────────┬─────┬─────┬─────┬─────┐
│ cdccam ┆ C ┆ M ┆ K ┆ Z │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i32 ┆ i32 ┆ i32 ┆ i32 │
╞═════════╪═════╪═════╪═════╪═════╡
│ EBLA003 ┆ 52 ┆ 146 ┆ 501 ┆ 4 │
│ EBLA002 ┆ 1 ┆ 0 ┆ 1 ┆ 0 │
└─────────┴─────┴─────┴─────┴─────┘
(rsa['actes']
.filter(pl.col('cdccam').str.contains('EBLA'))
.join(rsa['rsa'], on = 'cle_rsa', how = 'inner')
.pivot(index = ['rsacmd', 'rsatype'], values = 'nbexec', on = 'cdccam',
separator = '-', aggregate_function = 'sum')
.fill_null(0)
)
shape: (39, 4)
┌────────┬─────────┬─────────┬─────────┐
│ rsacmd ┆ rsatype ┆ EBLA003 ┆ EBLA002 │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i32 ┆ i32 │
╞════════╪═════════╪═════════╪═════════╡
│ 15 ┆ C ┆ 1 ┆ 0 │
│ 01 ┆ M ┆ 6 ┆ 0 │
│ 17 ┆ M ┆ 39 ┆ 0 │
│ 16 ┆ M ┆ 5 ┆ 0 │
│ 17 ┆ K ┆ 1 ┆ 0 │
│ … ┆ … ┆ … ┆ … │
│ 18 ┆ M ┆ 1 ┆ 0 │
│ 19 ┆ M ┆ 1 ┆ 0 │
│ 21 ┆ C ┆ 1 ┆ 0 │
│ 11 ┆ C ┆ 1 ┆ 1 │
│ 21 ┆ M ┆ 1 ┆ 0 │
└────────┴─────────┴─────────┴─────────┘