Data Science · Klinik Klinische Datenanalyse & Machine Learning
Ansicht
Lerntiefe
Codeansicht
Farbschema

05 · Datenbank-Abfragen mit SQL

join_typen.svg

Abbildung · Quellcode

join_typen

Erzeugt von join_typen() in lib/diagrams.py, Zeile 145–187.

Python
def join_typen() -> str:
    pats = [("Pat. 1", "Sepsis", "2.1"), ("Pat. 2", "Pneumonie", None),
            ("Pat. 3", "Herzinsuff.", "1.8"), ("Pat. 4", "Sepsis", "3.4"),
            ("Pat. 5", "COPD", None)]
    rw, rh, gap = 336, 40, 8
    y0 = 70

    def panel(x, kw, kwcolor, sub, mode):
        p = [txt(x, 40, kw, size=14, fill=kwcolor, w=700, mono=True),
             txt(x + (128 if mode == "inner" else 118), 40, sub, size=11.5, fill=T["mut"])]
        for i, (name, diag, lak) in enumerate(pats):
            y = y0 + i * (rh + gap)
            has = lak is not None
            if mode == "inner" and not has:
                p.append(rect(x, y, rw, rh, r=10, fill=T["deatht"]))
                p.append(txt(x + 16, y + 25, f"{name}", size=12.5, fill=T["death"], w=600, deco="line-through"))
                p.append(txt(x + 74, y + 25, f{diag}", size=12.5, fill=T["death"], deco="line-through", opacity=0.8))
                p.append(txt(x + rw - 16, y + 25, "fällt weg", size=12, fill=T["death"], w=600, anchor="end"))
            elif mode == "left" and not has:
                p.append(rect(x, y, rw, rh, r=10, fill=T["warnt"]))
                p.append(txt(x + 16, y + 25, name, size=12.5, fill=T["ink"], w=600))
                p.append(txt(x + 74, y + 25, f{diag}", size=12.5, fill=T["mut"]))
                p.append(txt(x + rw - 16, y + 25, "laktat = NULL", size=11.5, fill=T["warn"], w=700, anchor="end", mono=True))
            else:
                p.append(rect(x, y, rw, rh, r=10, fill=T["card"], stroke=T["rule"]))
                p.append(txt(x + 16, y + 25, name, size=12.5, fill=T["ink"], w=600))
                p.append(txt(x + 74, y + 25, f{diag}", size=12.5, fill=T["mut"]))
                p.append(txt(x + rw - 16, y + 25, f"laktat {lak}", size=12, fill=T["acc2"], w=600, anchor="end", mono=True))
        fy = y0 + len(pats) * (rh + gap) + 16
        p.append(line(x, fy, x + rw, fy, stroke=T["rule"]))
        return "".join(p), fy

    left, fy = panel(24, "INNER JOIN", T["death"], "nur mit Laborwert", "inner")
    right, _ = panel(400, "LEFT JOIN", T["acc"], "alle bleiben", "left")
    b = [left, right,
         line(380, 24, 380, fy - 6, stroke=T["rule"], dash="2 5"),
         txt(24, fy + 26, "3 von 5 Zeilen", size=13, fill=T["ink"], w=600),
         txt(24, fy + 45, "2 Patient:innen fehlen, unbemerkt.", size=11.5, fill=T["mut"]),
         txt(400, fy + 26, "5 von 5 Zeilen", size=13, fill=T["ink"], w=600),
         txt(400, fy + 45, "Fehlende Werte sichtbar als NULL.", size=11.5, fill=T["mut"])]
    return canvas(760, fy + 60, "".join(b),
                  "INNER JOIN gegen LEFT JOIN: Der INNER JOIN behält nur die drei Patient:innen mit Laborwert "
                  "(zwei fallen unbemerkt weg); der LEFT JOIN behält alle fünf, fehlende Werte erscheinen als NULL.")

← zurück zu Modul 05 · vollständige Datei ansehen