Woche 11 Bsp. Prüfungsplan#
Ergebnissicherung der Übung 2025-01-09, besprochen in der Vl 2025-01-10. Vorgestellt als praxisrelevantes Spielfeld für allerlei selbstgebaute Challenges.
Gegeben der Prüfungsplan der Fak. IF als Tabelle (Auszug, Zahlen stimmen nicht): pplan.ods
, pplan.csv
Nachlesen: https://www.jbusse.de/python-101/woche_06.html#csv-einlesen
import pandas as pd
csv_Datei = "pplan.csv"
# df ... data frame
df = pd.read_csv(csv_Datei, sep=";")
df
ID | Tag | Datum | Beginn | Dauer | Stg. | Fach | Raum | Kürzel | Prüfer | Aufsicht | Zweitprüfer | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1001 | Mo | 27.01.25 | 13:00:00 | 60 min. | DVM/ WI Pr | Programmieren I (1. Gruppe) | C1 13/ D1 04 | BUJ | Busse, Prof. Dr. | BUJ,SLS | OSN |
1 | 1002 | Mo | 27.01.25 | 15:00:00 | 60 min. | DVM/ WI Pr | Programmieren I (2.Gruppe) | C1 13/ D1 04 | BUJ | Busse, Prof. Dr. | BUJ , SLS | OSN |
2 | 1003 | Di | 12.02.25 | 08:00:00 | 60 min. | KI | Programmieren I | G0 12/13 | OSN | Oserbergen, Prof. Dr. | OSN,BUJ | WAR |
3 | 1004 | Di | 12.02.25 | 08:00:00 | 60 min. | WIF | Seminar | J 107 | BUJ | Prof. Busse | WAR | OSN |
df_index = df.to_dict(orient="index")
df_index
{0: {'ID': 1001,
'Tag': 'Mo',
'Datum': '27.01.25',
'Beginn': '13:00:00',
'Dauer': '60 min. ',
'Stg.': 'DVM/ WI Pr',
'Fach': 'Programmieren I (1. Gruppe)',
'Raum': 'C1 13/ D1 04 ',
'Kürzel': 'BUJ',
'Prüfer': 'Busse, Prof. Dr. ',
'Aufsicht': 'BUJ,SLS',
'Zweitprüfer': 'OSN'},
1: {'ID': 1002,
'Tag': 'Mo',
'Datum': '27.01.25',
'Beginn': '15:00:00',
'Dauer': '60 min. ',
'Stg.': 'DVM/ WI Pr',
'Fach': 'Programmieren I (2.Gruppe)',
'Raum': 'C1 13/ D1 04 ',
'Kürzel': 'BUJ',
'Prüfer': 'Busse, Prof. Dr. ',
'Aufsicht': 'BUJ , SLS',
'Zweitprüfer': 'OSN'},
2: {'ID': 1003,
'Tag': 'Di',
'Datum': '12.02.25',
'Beginn': '08:00:00',
'Dauer': '60 min. ',
'Stg.': 'KI ',
'Fach': 'Programmieren I ',
'Raum': 'G0 12/13',
'Kürzel': 'OSN',
'Prüfer': 'Oserbergen, Prof. Dr.',
'Aufsicht': 'OSN,BUJ ',
'Zweitprüfer': 'WAR '},
3: {'ID': 1004,
'Tag': 'Di',
'Datum': '12.02.25',
'Beginn': '08:00:00',
'Dauer': '60 min. ',
'Stg.': 'WIF',
'Fach': 'Seminar',
'Raum': 'J 107',
'Kürzel': 'BUJ',
'Prüfer': 'Prof. Busse',
'Aufsicht': 'WAR ',
'Zweitprüfer': 'OSN'}}
Aufgabe: Namen zu Kürzeln#
gesucht ist ein Dict, das zu den Kürzeln aus der Spalte Kürzel
die zugehörigen Namen aus Prüfer
extrahiert.
erste einfach Lösung:
# hier die Lösung
kuerzel_namen = {}
for zeile in df_index.values():
k = zeile["Kürzel"]
p = zeile["Prüfer"]
kuerzel_namen[k] = p
kuerzel_namen
{'BUJ': 'Prof. Busse', 'OSN': 'Oserbergen, Prof. Dr.'}
# Test
kuerzel_namen == {'BUJ': 'Prof. Busse', 'OSN': 'Oserbergen, Prof. Dr.'}
True
Aufgabe: Namens-Variationen#
Problem: für das Kürzel “BUJ” sind in der Spalte “Prüfer” verschiedene (!) Formen des Prüfernamens eingetragen. In obiger Zeile gewinnt die letzte Zuweisung.
Weil wir damit rechnen, dass so etwas typisch ist in unserer Datenhaltung, wollen wir ein etwas komplexeres Dict haben: zu jedem Kürzel eine Menge aller für diesen Prüfer verzeichneten Prüfernamen. Im Idealfall hat die Menge genau ein Element, aber man weiß ja nie …
# hier die Lösung
kuerzel_namen_2 = {}
for zeile in df_index.values():
k = zeile["Kürzel"]
p = zeile["Prüfer"]
if k not in kuerzel_namen_2:
kuerzel_namen_2[k] = set() # key anlegen, mit leerer Menge initialisieren
kuerzel_namen_2[k].add(p)
kuerzel_namen_2
{'BUJ': {'Busse, Prof. Dr. ', 'Prof. Busse'}, 'OSN': {'Oserbergen, Prof. Dr.'}}
# Test
kuerzel_namen_2 == {'BUJ': {'Busse, Prof. Dr. ', 'Prof. Busse'}, 'OSN': {'Oserbergen, Prof. Dr.'}}
True
Aufgabe: Alle Namens-Kürzel#
insbesondere in den Spalten Aufsicht
und Zweitprüfer
.
Um uns die Arbeit einfacher zu machen, exportieren wir unser DataFrame in eine andere Datenstruktur, mämlich orient="list"
:
df_list = df.to_dict(orient="list")
df_list
{'ID': [1001, 1002, 1003, 1004],
'Tag': ['Mo', 'Mo', 'Di', 'Di'],
'Datum': ['27.01.25', '27.01.25', '12.02.25', '12.02.25'],
'Beginn': ['13:00:00', '15:00:00', '08:00:00', '08:00:00'],
'Dauer': ['60 min. ', '60 min. ', '60 min. ', '60 min. '],
'Stg.': ['DVM/ WI Pr', 'DVM/ WI Pr', 'KI ', 'WIF'],
'Fach': ['Programmieren I (1. Gruppe)',
'Programmieren I (2.Gruppe)',
'Programmieren I ',
'Seminar'],
'Raum': ['C1 13/ D1 04 ', 'C1 13/ D1 04 ', 'G0 12/13', 'J 107'],
'Kürzel': ['BUJ', 'BUJ', 'OSN', 'BUJ'],
'Prüfer': ['Busse, Prof. Dr. ',
'Busse, Prof. Dr. ',
'Oserbergen, Prof. Dr.',
'Prof. Busse'],
'Aufsicht': ['BUJ,SLS', 'BUJ , SLS', 'OSN,BUJ ', 'WAR '],
'Zweitprüfer': ['OSN', 'OSN', 'WAR ', 'OSN']}
Prüfer-Kürzel befinden sich nun in den Spalten Kürzel
und Zweitprüfer
.
Kürzel in der Spalte Kürzel:
k_pruefer = set(df_list["Kürzel"])
k_pruefer
{'BUJ', 'OSN'}
Kürzel in der Spalte Zweitprüfer:
k_zweitpruefer = set(df_list["Zweitprüfer"])
k_zweitpruefer
{'OSN', 'WAR '}
oder mehr fancy:
k_alle = set()
for spaltenkopf in ["Kürzel", "Zweitprüfer"]:
k_alle = k_alle.union( set( df_list[spaltenkopf]))
k_alle
{'BUJ', 'OSN', 'WAR '}