Zum Inhalt

Noten berechnen mit python

Als Hilfestellung bei der Berechnung der Noten wird im Rahmen der Notentransparenz ein python-Modul zur Verfügung gestellt. Dieses kann über die "launch binder"-Buttons im Browser und ohne lokale Installation genutzt werden.

Installation

pip install git+https://github.com/tna76874/notentransparenz.git@fd59e5a922dc92b74e947b7fdf44eb4182f23c79

badge

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Beispiel
"""

from notenbildung.notenbildung import *

noten = Notenberechnung(w_s0=1, w_sm=3, system = SystemN, v_enabled=True, w_th = 0.4)
noten.note_hinzufuegen(art='KA', date = '2024-04-10', note=2, status='fertig')
noten.note_hinzufuegen(art='KA', date = '2024-04-15', note=2.5, status='fertig')
noten.note_hinzufuegen(art='KA', date = '2024-03-01', note=3, status='fertig')
noten.note_hinzufuegen(art='KA', date = '2024-03-15', note=5, status='fertig')
noten.note_hinzufuegen(art='KT', date = '2024-02-01', note=4, status='fertig')
noten.note_hinzufuegen(art='KT', date = '2024-01-01', note=2.75, status='fertig')
noten.note_hinzufuegen(art='m', date = '2023-09-01', note=3.0)
noten.note_hinzufuegen(art='m', date = '2023-10-01', note=3.25)
noten.note_hinzufuegen(art='m', date = '2023-11-01', note=3.5)

gesamtnote = noten.berechne_gesamtnote()
print(gesamtnote)
noten.plot_time_series()

Excel Import

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Beispiel Excel
"""

from notenbildung.notenbildung import *

noten = Notenberechnung(w_s0=1, w_sm=3, system = SystemN, v_enabled=True)
noten.add_from_excel('data.xlsx')

gesamtnote = noten.berechne_gesamtnote()
print(gesamtnote)
noten.plot_time_series()

Lerngruppe verwalten

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Beispiel: Noten mit Lerngruppen
"""
from notenbildung.models import *

# es gibt die Fächer FachM, FachPH und FachINF
# eine fachpraktische Leistung P wird als Kurztest gezählt, zählt jedoch nicht in die Anzahl der schriftlichen Leistungen mit hinein.

meinfach = FachM
note = Notenberechnung(w_s0=1, w_sm=3, system = SystemN, v_enabled=True, w_th = 0.4, fach=meinfach)
# note = NotenberechnungSimple(w_s0=1, w_sm=3, system = SystemN, v_enabled=True, w_th = 0.4, fach=meinfach)
note.note_hinzufuegen(art='KA', date = '2024-04-10', note=3, status='---')
note.note_hinzufuegen(art='KA', date = '2024-04-15', note=2.5, status='uv')
note.note_hinzufuegen(art='KA', date = '2024-03-01', note=4, status='fertig')
note.note_hinzufuegen(art='P', date = '2024-03-15', note=5)
note.note_hinzufuegen(art='KT', date = '2024-02-01', note=4, status='offen', due = '2024-05-05')
note.note_hinzufuegen(art='S', date = '2024-01-01', note=2.75)
note.note_hinzufuegen(art='m', date = '2023-09-01', note=3.0)
note.note_hinzufuegen(art='m', date = '2023-10-01', note=3.25)
note.note_hinzufuegen(art='m', date = '2023-11-01', note=3.5)

gesamtnote = note.berechne_gesamtnote()
print(gesamtnote)

schueler1 = SchuelerEntity(sid=1, vorname='Max', nachname='Mustermann')
schueler1.setze_note(note)

schueler2 = SchuelerEntity(sid='abc', vorname='Mini', nachname='Musterfrau')
schueler2.setze_note(note)

lerngruppe1 = LerngruppeEntity(stufe=7, fach=meinfach, zug='A')

lerngruppe1.update_sid(schueler1)
lerngruppe1.update_sid(schueler2)

lerngruppe1.plot_sid(1)
lerngruppe1.plot_sid('abc')

print(lerngruppe1.get_dataframe())
print(schueler1.get_dataframe())

Lerngruppe aus Excel importieren und Ergebnisse exportieren

Bei dem Import werden zuerst verschiedene Randbedingungen validiert. Wenn alle Angaben in der richtigen Form sind, dann wird gemäß den Parametern die Note berechnet und in einen Unterordner exportiert.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Beispiel Excel Export
"""

from notenbildung.excel import *

ExcelFileLoader("meine_notenliste.xlsx").export()

badge

Unter der Kommandozeile lässt sich dieser Export mit z.B. notenbildung meine_excelliste.xlsx durchführen.

Notebooks

Noten berechnen in einem Notebook

!pip uninstall notenbildung -y > /dev/null 2>&1
!pip install git+https://github.com/tna76874/notentransparenz.git@92def6cf4d986082cd5a4e82dbdba007e2f7fcd9 > /dev/null 2>&1

from notenbildung.models import *

Noten zwischen den Notensystemen N und NP umgerechnet werden.

eine_note = NoteEntity(15,system = SystemNP)
print(eine_note)
eine_note.to(SystemNPS)
print(eine_note)
eine_note.to(SystemN)
print(eine_note)
eine_note.to(SystemNORM)
eine_note.to(SystemNP)
print(eine_note)
15.0
0.666666666666667
WARNING: Inkonsistent System conversion
1.0
15.0

Das Verrechnen von Noten wird direkt über das '+'-Zeichen erledigt. Dabei wird die Gewichtung mitgerechnet.

ka = Weight(NoteEntity(3), NoteEntity(4), NoteEntity(3.5)).normalize()
kt = Weight(NoteEntity(3), NoteEntity(1), NoteEntity(2.5)).set_weight(1)
mündlich = Weight(NoteEntity(2), NoteEntity(1), NoteEntity(3)).set_weight(1)

print(f'KA: {ka}, KT: {kt}, mündlich: {mündlich}')

schriftlich = ka + kt

gesamt = schriftlich.set_weight(3) + mündlich

print(f'schriftlich: {schriftlich}, gesamt: {gesamt}')
KA: 3*3.5, KT: 1*2.1666666666666665, mündlich: 1*2.0
schriftlich: 3*3.1666666666666665, gesamt: 4*2.875

Die Gesamtnote lässt sich auch im zeitlichen Verlauf visualisieren.

noten = Notenberechnung(w_s0=1, w_sm=3, system = SystemN)
noten.note_hinzufuegen(art='KA', date = '2024-04-10', note=2, status='fertig')
noten.note_hinzufuegen(art='KA', date = '2024-04-15', note=2.5, status='fertig')
noten.note_hinzufuegen(art='KA', date = '2024-03-01', note=4.5, status='fertig')
noten.note_hinzufuegen(art='KA', date = '2024-03-15', note=5, status='fertig')
noten.note_hinzufuegen(art='KT', date = '2024-02-01', note=4, status='fehlt')
noten.note_hinzufuegen(art='KT', date = '2024-01-01', note=2.75, status='fehlt')
noten.note_hinzufuegen(art='m', date = '2023-09-01', note=3.0)
noten.note_hinzufuegen(art='m', date = '2023-10-01', note=3.25)
noten.note_hinzufuegen(art='m', date = '2023-11-01', note=3.5)

gesamtnote = noten.berechne_gesamtnote()
print(gesamtnote)
noten.plot_time_series()
m_s1=3.4821428571428568, m_s=3.4290540540540535, m_m=3.25, gesamtnote=3.3842905405405403, datum=15.04.2024

png

Es können alle Noten angezeigt werden, die erteilt wurden.

noten._get_full_dataframe()
date art status note nr von bis due
0 2023-09-01 m --- 3.0 1.0 2023-09-01 2023-09-01 None
1 2023-10-01 m --- 3.25 2.0 2023-10-01 2023-10-01 None
2 2023-11-01 m --- 3.5 3.0 2023-11-01 2023-11-01 None
3 2024-01-01 KT fehlt 2.75 1.0 NaT NaT None
4 NaT V --- 3.75 NaN NaT NaT None
5 2024-02-01 KT fehlt 4.0 2.0 NaT NaT None
6 NaT V --- 3.75 NaN NaT NaT None
7 2024-03-01 KA fertig 4.5 1.0 NaT NaT None
8 NaT V --- 3.25 NaN NaT NaT None
9 2024-03-15 KA fertig 5.0 2.0 NaT NaT None
10 NaT V --- 3.25 NaN NaT NaT None
11 2024-04-10 KA fertig 2.0 3.0 NaT NaT None
12 NaT V --- 3.25 NaN NaT NaT None
13 2024-04-15 KA fertig 2.5 4.0 NaT NaT None
14 NaT V --- 3.25 NaN NaT NaT None

Noten berechnen aus einer Excel-Tabelle

!pip uninstall notenbildung -y > /dev/null 2>&1
!pip install git+https://github.com/tna76874/notentransparenz.git@92def6cf4d986082cd5a4e82dbdba007e2f7fcd9 > /dev/null 2>&1

from notenbildung.excel import *
ExcelFileLoader("meine_notenliste.xlsx").export()
sid: 1
vorname: Max
nachname: Mustermann
Warnung: Zu wenige Leistungen: [<class 'notenbildung.nvo.LeistungKA'>]: Anzahl der Leistungen 1<4
sid: 2
vorname: Mini
nachname: Musterfrau
Warnung: Zu wenige Leistungen: [<class 'notenbildung.nvo.LeistungKA'>]: Anzahl der Leistungen 1<4
sid: 3
vorname: Peter
nachname: Pan
Warnung: Zu wenige Leistungen: [<class 'notenbildung.nvo.LeistungKA'>]: Anzahl der Leistungen 1<4