Strings in Dataframe nach Unterthemen durchsuchen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Dörk
Beiträge: 10
Registriert: Sa Aug 29, 2020 7:06 pm

Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von Dörk »

Hallo,

ich bin neu hier und bin ein R Newbie. Im Rahmen meiner Doktorarbeit muss ich ein Preprocessing von großen Datensätzen durchführen. Medizinische Daten gespeichert in csv-Dateien 59.000 Patientendaten von 3 intensivstationen einer amerikanischen Klinik. Diese Tabelle enthält Ein String-Datenfeld in dem der Entlassungsbericht der Patienten als Text durch verschiedenen Unterthemen (siehe unten) unterteilt sind. Ich möchte gerne bestimmte Themen und den folgenden Text bis zum nächsten Thema in ein Datenfeld pro Thema extrahieren. Für mich sind nur einige wenige relevant. Leider haben die diktierenden nicht immer die Reihenfolge eingehalten, so dass z.B. Allergies z.B. mal nach Chief Complaint und mal davor usw. auftaucht.

Ich hab schon einen Code zur String Extraktion für eine andere sehr viel eindeutigere Tabellen geschrieben, aber im konkreten Fall hab ich keine Idee, wie ich die einzelnen Themen mit Detailtext extrahieren kann bei Variabler Reihenfolge?

Ziel ist es die extrahierten Detaildaten dann einer Stringanalyse zu unterziehen und nach Problemen, Symptomen und Befunden zu untersuchen.

Themen im String:
CHIEF COMPLAINT:
Major Surgical or Invasive Procedure:
HISTORY OF PRESENT ILLNESS:
PAST MEDICAL HISTORY:
ALLERGIES:
MEDICATIONS ON ADMISSION:
SOCIAL HISTORY:
FAMILY HISTORY:
PHYSICAL EXAMINATION:
Medicine Consult:
Pertinent Results:
LABORATORY DATA:
LABS AT DISCHARGE:
HOSPITAL COURSE:
DISPOSITION:
CONDITION ON DISCHARGE:
DISCHARGE DIAGNOSIS:
DISCHARGE STATUS:
Primary:
Secondary:
DISCHARGE MEDICATIONS:
FOLLOW-UP:
Discharge Disposition:
Discharge Instructions:

Beispieldatei unten angehängt.

Danke schon mal im Voraus.
Dateianhänge
DischSumm_example.csv
(496.76 KiB) 28-mal heruntergeladen
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von Athomas »

Wenn ich mir Deine Beispieldaten anschaue (ein Patient - sehe ich das richtig?) scheint die Schreibweise - anders als von Dir durch die Aufzählung der Kategorien suggeriert - wurscht zu sein ("DISCHARGE DIAGNOSIS:" vs. "Discharge Diagnosis:").

So, wie es jetzt aussieht, würde der Text von nicht relevanten Rubriken (etwa "Discharge Condition:") der letzten gefundenen relevanten Rubrik - in deinem Beispiel "Discharge Diagnosis:" zugeschlagen!?
Dörk
Beiträge: 10
Registriert: Sa Aug 29, 2020 7:06 pm

Re: Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von Dörk »

Es handelt sich um 49 Aufnahmen (HADM_ID) von Patienten, mancher Patient (SUBJECT_ID) kommt mehrmals darin vor. Die Begriffe sind leider mal alles groß, mal groß und klein usw. geschrieben. Zumindest zeigten das meine Stichproben. Es ist also wurscht ob groß oder klein Entscheidend ist der Begriff und der anschließende Doppelpunkt ":". Die Reihenfolge der Begriffe oder Flags variert gelegentlich. Manchmal tauchen auch ganze Flags überhaupt nicht auf.
zugeschlagen im Sinne von beendet?
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von EDi »

Idee:

0. alles kleinschreiben - tolower()

1. große regex bauen, die alle themen matched:
paste(themen, collapse='|'). | ist regex für oder.

2. diese regex an strsplit() übergeben um den text aufzutrennen. (vermutlich willst du die delimiter behalten: https://www.google.com/amp/s/www.r-blog ... miter/amp/


3. die interessanten themen aus der liste rausfiltern z.b. mit grepl().
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von Athomas »

Dörk hat geschrieben: Sa Aug 29, 2020 9:09 pm zugeschlagen im Sinne von beendet?
Nein, im Sinne von drangehängt :) !
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von bigben »

Hallo!

Der Ansatz mit regulären Ausdrücken und strsplit erscheint für vieles die erste Wahl, es wäre aber schon irgendwie gut zu wissen, wie die weitere Analyse aussehen soll, bevor man sich festlegt, wie man die Daten aufbereitet.

Das folgende Codebeispiel liest alle Zeilen ein und erstellt eine Liste, in welchen Zeilen welche der relevanten Überschriften steht. Nur um zu zeigen, dass es durchaus verschiedene Ansätze geben kann.

Code: Alles auswählen

patients <- readLines("http://forum.r-statistik.de/download/file.php?id=1112")
patients.lower <- trimws(tolower(patients))
relevant <- c("CHIEF COMPLAINT:", "Major Surgical or Invasive Procedure:", "HISTORY OF PRESENT ILLNESS:",
              "PAST MEDICAL HISTORY:", "ALLERGIES:", "MEDICATIONS ON ADMISSION:", "SOCIAL HISTORY:",
              "FAMILY HISTORY:", "PHYSICAL EXAMINATION:", "Medicine Consult:", "Pertinent Results:",
              "LABORATORY DATA:", "LABS AT DISCHARGE:", "HOSPITAL COURSE:", "DISPOSITION:", 
              "CONDITION ON DISCHARGE:", "DISCHARGE DIAGNOSIS:", "DISCHARGE STATUS:", "Primary:", "Secondary:",
              "DISCHARGE MEDICATIONS:", "FOLLOW-UP:", "Discharge Disposition:", "Discharge Instructions:")
relevant.lower <- trimws(tolower(relevant))

occur = list()
for(i in seq(length(relevant))){
  cat(i); cat(" = "); cat(relevant[i]);cat("\n")
  found <- which(patients.lower %in% relevant.lower[i])
  if( length(found) == 0 ) 
    occur[[i]] <-  NA_integer_
  else
    occur[[i]] <- found
  print(occur[[i]]); cat("\n")
}


Für 59000 Einträge könnte es eventuell schon sinnvoll sein, das %in% durch %fin% aus dem Paket "fastmatch" zu ersetzen.

Vielleicht hilft es ja was,

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von Athomas »

Ist die Frage noch "heiß" - oder hat es sich bereits erledigt?
Dörk
Beiträge: 10
Registriert: Sa Aug 29, 2020 7:06 pm

Re: Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von Dörk »

Danke für die beiden Antworten, wie gesagt, ich bin neu hier und im Reich der R-Programmierung. Mein weiteres vVrgehen ist die Stringanalyse der Felder Chief compliant, History of Present illness, Past medical history, Physical examination, Allergies und Discharge Diagnosis. Ich gehe da vielleicht zu unbedarft ran.

Ich skizziere einfach mal was ich machen möchte und hole kurz aus. Ich bin von Haus aus Arzt und mache meine Promotion in Anästhesie und Intensivmedizin. Unser Ziel ist es aus den Daten ein Bayes'sches Netz zu erstellen um einen Diagnoseassistenten für die Intensivmedizin zu erstellen. Die Daten wurden uns kostenlos zur Verfügung gestellt. Viele Daten wie Laborwerte, Herzfrequenz, Blutdruck usw. stehen in gut verarbeitbaren csv-Dateien zur Verfügung. Einige Befunde während einer körperlichen Untersuchung lassen sich theoretisch über vorhanden oder nicht einbinden. Also formal Bool.
Meine Idee war es jetzt in dem Discharge summary diese Daten auszulesen mit Tidytext nach ngrams oder nur einfachen Wörtern zu suchen nach Häufigkeit aufzusplitten, sie zu analysieren, was medizinisch Sinn macht und dann das Dataframe auf im Text oder nicht im Text zu durchsuchen. Und dann zum jeweiligen Symptom/Befund true oder false zu setzen. Also bei denen entweder vorhanden oder nicht gilt.

Wenn ich da einen Denkfehler mache bin ich für Ideen offen.

Ich habe andere Ideen durch gespielt, das ich Erst Symptome und Befunde verschriftliche und dann danach suche. Das ist aber wenig hilfreich, da in der csv sehr menschliche Dokumentation erfolgte mit einer gewissen Variabilität, so dass es in der vorhanden Form eines gewissen Preprocessing Bedarf und da stehe ich nun und guck auf meinen Bildschirm und frage mich wie.

@Athomas: Ich kann dir auf die PN nicht antworten. Das Forum lässt mich nicht, ich habe mich noch nicht ausreichend an Diskussionen beteiligt.

Ich danke euch allen und bin für Tipps sehr dankbar.

Ich hoffe ich konnte etwas licht ins dunkle bringen.

Grüße Dörk
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von Athomas »

@Athomas: Ich kann dir auf die PN nicht antworten.
Da bin ich ja beruhigt - ich war kurz davor, Kipptaucher-Alarm zu geben :lol: (nicht wundern, das ist so eine Art "running gag" hier im Forum).

Die gute Nachricht ist, dass ich glaube, das Problem inzwischen ordentlich und auch einigermaßen performant (?) im Griff zu haben.
Ich schreibe was zusammen und melde mich morgen nochmal...
Dörk
Beiträge: 10
Registriert: Sa Aug 29, 2020 7:06 pm

Re: Strings in Dataframe nach Unterthemen durchsuchen

Beitrag von Dörk »

Athomas hat geschrieben: Di Sep 01, 2020 9:11 pm
@Athomas: Ich kann dir auf die PN nicht antworten.
Da bin ich ja beruhigt - ich war kurz davor, Kipptaucher-Alarm zu geben :lol: (nicht wundern, das ist so eine Art "running gag" hier im Forum).
Das mit dem Kipptaucher habe ich nach einer kurzen Suchanfrage verstanden. Und nein, ich bin kein Kipptaucher.

@Bigben: Danke für deinen Code. Ich habe nach einem Testlauf in RStudio verstanden, was der Code macht und habe es Zeile für Zeile nachvollzogen. Interessanter Ansatz, ich bin mir aber unsicher, ob es für mein Problem eine Lösung ist. Ich habe es ja in einem Post oben etwas versucht zu erklären, wie ich die Daten aufbereiten möchte.

Herzlichen Dank für eure Unterstützung.

Grüße
Dörk
Antworten