User Tools

Site Tools


medicacion2021

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
medicacion2021 [2021/03/29 16:18]
osotolongo [Reglas]
medicacion2021 [2021/04/03 10:42] (current)
osotolongo [tl;dr]
Line 2: Line 2:
  
 Ver programas en github: https://github.com/asqwerty666/medica Ver programas en github: https://github.com/asqwerty666/medica
 +
 +===== tl;dr =====
 +
 +El formato de la base de datos de input ha de ser:
 +<code>
 +<ID_Subject>;<ID_visita>;<Texto libre>
 +</code>
 +
 +y se ejecutan dos scripts consecutivos,
 +
 +<code bash>
 +$ ./parse.pl medicamentos.db
 +$ ./apply_rules.pl -r med_rules_ed_0219.txt
 +</code>
 +
 +Y los resultados quedan en el archivo //meds_matrix.csv//. ;-)
 ===== Antes de empezar ===== ===== Antes de empezar =====
  
Line 236: Line 252:
  
 **Ahora, las reglas han de revisarse y editarse a mano. Esto no hay manera de evitarlo pero solo ha de hacerse una vez. La proxima vez que se haga el analisis se usara el mismo archivo de reglas.** **Ahora, las reglas han de revisarse y editarse a mano. Esto no hay manera de evitarlo pero solo ha de hacerse una vez. La proxima vez que se haga el analisis se usara el mismo archivo de reglas.**
 +
 +===== Reglas de CIMA =====
 +
 +https://cima.aemps.es/cima/publico/nomenclator.html
 +
 +Me bajo la lista de medicamentos comercializados en España y la convierto a CSV. Luego hago esto:
 +
 +<code bash>
 +[osotolongo@brick03 medicaion_dev]$ awk -F";" '{print $2}' Medicamentos.csv | tail -n +2 | sed 's/\// /g' |awk '{print $1}' | tr '[:upper:]' '[:lower:]' | sort | uniq > medicamentos.list
 +</code>
 +
 +O si quiero tener los principios activos,
 +
 +<code bash>
 +[osotolongo@brick03 medicaion_dev]$ awk -F";" '{print $2";"$8";"$9}' Medicamentos.csv | tail -n +2 | sed 's/\// /g' | tr '[:upper:]' '[:lower:]' | sort | uniq | sed 's/\.//g' > medicamentos_pa.list
 +[osotolongo@brick03 medicaion_dev]$ sed 's/\([^ ]*\).*;\(.*\);\(.*\)/\1;\2;\3/' medicamentos_pa.list | uniq > mpa.list
 +</code>
  
  
 ===== Aplicando las reglas ===== ===== Aplicando las reglas =====
  
-Aqui he de leer dos cosas antes que nada. Primero, las reglas que hemos construido. Estas las voy a asignar a un hash de arrays,+Aqui he de leer tres cosas antes que nada. Primero, las reglas que hemos construido. Estas las voy a asignar a un hash de arrays,
  
 <code perl> <code perl>
Line 253: Line 286:
 close RDF; close RDF;
  
 +</code>
 +
 +Luego, la lista de principios activos de [[https://cima.aemps.es/cima/publico/home.html|CIMA]].
 +
 +<code perl>
 +my %cima;
 +open ADF, "<$mpa";
 +while (<ADF>){
 +        my ($med, $pal, $pan) = /^(.*);(.*);(.*)$/;
 +        my @pas = split /, /, $pal;
 +        for (@pas) {s/\s+/_/g;}
 +        $cima{$med} = [ @pas ];
 +}
 +close ADF;
 </code> </code>
  
Line 282: Line 329:
                                 foreach my $rkey (sort keys %wrules){                                 foreach my $rkey (sort keys %wrules){
                                         if(exists($wrules{$rkey}{$med})){                                         if(exists($wrules{$rkey}{$med})){
-                                                $meds{$rkey} = 1; +                                                foreach my $pa (@{$cima{$rkey}}){ 
-                                                $visits{$pid}{$vid}{$rkey} = 1;+                                                        $meds{$pa} = 1; 
 +                                                        $visits{$pid}{$vid}{$pa} = 1; 
 +                                                }
                                                 last;                                                 last;
                                         }                                         }
Line 291: Line 340:
 </code> </code>
  
-Cuando encuentro este elemento en las reglas, marco el ID de la regla como existente en esa visita y ademas lo sumo a las variables que he de escribir. Si no se encuentraeste termino, se concluye que no es ningun medicamento (pues no esta en ninguna regla) y no se hace nada.+Cuando encuentro este elemento en las reglas, marco tods los ID de principios activos correspondientes a este medicamento como existentes en esa visita y ademas los sumo a las variables que he de escribir. Si no se encuentra este termino, se concluye que no es ningun medicamento (pues no esta en ninguna regla) y no se hace nada.
  
 Una vez llenados los medicamentos de cada visita hemos de escribirlo en forma matricial. Primero escribimos los headers, Una vez llenados los medicamentos de cada visita hemos de escribirlo en forma matricial. Primero escribimos los headers,
Line 323: Line 372:
 </code> </code>
  
-TADA!+**TADA!**
  
medicacion2021.1617034708.txt.gz · Last modified: 2021/03/29 16:18 by osotolongo