Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Datensätze anonymisieren mit k-Anonymität

Nach dieser Lektion: Ich kann einen Datensatz so verändern, dass er weniger über einzelne Personen verrät.

Lektion, 55 Min.1 BefehlJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Namen löschen reicht nicht

Daten anonymisieren heißt, einen Datensatz so zu verändern, dass sich keine Zeile mehr einer einzelnen Person zuordnen lässt. Namen zu löschen reicht dafür oft nicht.

Eine Hochschule veröffentlicht eine Liste ohne Namen: Alter, Wohnbezirk, Studienfach und eine Note. Nur eine Person ist 19, wohnt im Bezirk Nord und studiert Physik. Wer das weiß, kennt ihre Note.

Am Ende dieser Lektion

Notiz

Ich kann einen Datensatz so verändern, dass er weniger über einzelne Personen verrät.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Quasi-Identifikatorein Merkmal, das erst in Kombination eine Person verrätWohnbezirk
Gleichheitsgruppealle Zeilen mit denselben Werten in den gewählten Spalten
k-Anonymitätjede Gleichheitsgruppe hat mindestens k Zeilenk = 3
Seltene KombinationWerte, die nur ganz wenige Zeilen gemeinsam haben
Verallgemeinerneinen Wert gröber machen19 wird 15 bis 19

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ohne Namen ist ein Datensatz noch nicht anonym

Ein Quasi-Identifikator ist ein Merkmal, das allein harmlos wirkt und erst in der Kombination eine Person verrät. Alter, Wohnbezirk und Studienfach sind drei solche Merkmale.

Wer die Liste und eine zweite Quelle hat, etwa ein Foto des Kurses, findet die Person. Am größten ist die Gefahr bei einer seltenen Kombination: Nur wenige Zeilen haben dieselben Werte.

Beispiel: eine Kursliste ohne Namen

AlterBezirkFachNoteZeilen mit derselben Kombination
19NordPhysik21
20NordChemie32
20NordChemie12
21OstPhysik22
21OstPhysik42
22OstChemie21

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

k-Anonymität zählt die Zeilen jeder Kombination

Bilden Sie aus den gewählten Spalten Gleichheitsgruppen: alle Zeilen mit denselben Werten. Die kleinste Gruppe bestimmt das k. Ein Datensatz ist k-anonym, wenn jede Gruppe mindestens k Zeilen hat.

Bei k = 1 gibt es eine Person, die man findet. Je größer k, desto besser versteckt sich jede Person in einer Menge.

Gleichheitsgruppen zählen

Code: python
# Eine Kursliste ohne Namen: Alter und Bezirk
zeilen = [[19, "Nord"], [19, "Nord"], [20, "Nord"], [20, "Ost"], [21, "Ost"], [21, "Ost"]]
gruppen = {}
for zeile in zeilen:
    schluessel = str(zeile[0]) + " " + zeile[1]
    if schluessel in gruppen:
        gruppen[schluessel] = gruppen[schluessel] + 1
    else:
        gruppen[schluessel] = 1
for schluessel in gruppen:
    print(schluessel, gruppen[schluessel])
# Welche Gruppen haben nur eine Zeile? Die kleinste Zahl ist das k dieser Liste.

Dieselbe Zählung an den Tagen des Verleihs

Auch hires.csv lässt sich so zählen. Die Zeilen sind Tage, keine Menschen, aber das Zählen ist dasselbe.

Der Befehl unten bildet Gruppen aus Monat, Wochentag und Wetter. Er gibt vier Zahlen aus: wie viele Gruppen es gibt und wie groß die kleinste ist. Dazu, wie viele nur einen Tag haben und wie viele weniger als drei.

Kleine Gruppen in hires.csv zählen

Befehl
docker exec jupyter python3 -c "import csv; z = list(csv.DictReader(open('hires.csv'))); n = {}; [n.update({(x['month'], x['weekday'], x['weather']): n.get((x['month'], x['weekday'], x['weather']), 0) + 1}) for x in z]; print('Gruppen:', len(n), 'kleinste:', min(n.values()), 'mit nur 1 Tag:', list(n.values()).count(1), 'unter 3 Tagen:', sum(1 for v in n.values() if v < 3))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Gröbere Werte verstecken mehr Personen

Haben zu viele Gruppen zu wenige Zeilen, machen Sie ein Merkmal gröber. Das heißt Verallgemeinern: Das Alter 19 wird zu „15 bis 19“, ein Bezirk wird zu einer Region.

Das hat einen Preis. Je gröber die Werte, desto weniger kann man mit den Daten anfangen. Wählen Sie die gröbste Stufe, die k erreicht, und keine gröbere.

Beispiel: acht Studierende, Alter allein

VersionGruppenKleinste Gruppe
Alter genau: 18, 18, 19, 19, 19, 22, 23, 2341
In Fünferstufen: 15 bis 19 und 20 bis 2423

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele denken, k-Anonymität schütze vor allem. Haben aber alle Zeilen einer Gruppe dieselbe Note, kennt man die Note jeder Person der Gruppe, auch ohne sie zu finden. Prüfen Sie darum auch, ob die Werte in einer Gruppe verschieden sind.

Weiterführend: Gröbere Gruppen in hires.csv

Bilden Sie in einem Notebook mit pandas Gruppen aus Wochentag und Wetter. Zählen Sie die Tage je Gruppe und nennen Sie das k der Tabelle. Wiederholen Sie es mit Monat, Wochentag und Wetter.

Wie verändert sich k, und warum? Schreiben Sie zwei Sätze zum Preis einer gröberen Tabelle.

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.