Sorta creepy skripta za iskanje profesorjev

Navodila:

  1. Izberi prvo celico
  2. S funkcijo "Run All Below" zaženi vse naslednje celice
  3. Če se pojavi obrazec
    1. ga izpolni
    2. izberi naslednjo celico
    3. GOTO 2.
  4. Zdaj pa laufaj do učilnice predn ga zamudiš

!!: Napaka AssertionError ni napaka, ampak le opozarja, da obrazec ni zpolnjen

In [27]:
import ipywidgets as widgets
from easistent import urnik as eurnik
from easistent import util
import pandas as pd
In [28]:
datum = widgets.DatePicker(
    description='Datum',
    disabled=False
)
display(datum)
assert datum.value != None
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-28-bb4336535ef8> in <module>
      4 )
      5 display(datum)
----> 6 assert datum.value != None

AssertionError: 
In [11]:
%run Metadata.ipynb
{'4.ar': 323914, '1.ap': 324052, '2.ag': 323992, '4.bt': 323932, '3.bt': 323980, '3.cr': 323986, '4.at': 323920, '2.dr': 330526, '1.at': 324064, '4.cr': 323938, '1.d': 324094, '3.ag': 323944, '2.br': 324022, '2.d': 324040, '3.br': 323974, '1.ar': 324058, '3.bp': 323968, '2.ar': 324004, '2.at': 324010, '1.ag': 324046, '2.ap': 323998, '1.br': 324076, '1.bt': 324082, '3.ar': 323956, '3.at': 323962, '1.cr': 324088, '4.br': 323926, '3.ap': 323950, '2.cr': 324034, '2.bp': 324016, '4.ag': 323908, '2.bt': 324028, '1.bp': 324070, '1.dr': 324100}
Srednja elektro-računalniška šola Maribor
438
In [13]:
teden = util.teden(datum.value)
teden -= 1  # TODO: Zakaj so tedni narobe?
In [14]:
%%time
urnik = []
for razred, id_razred in razredi.items():
    print(razred, end=" ")
    u = eurnik.get(šola=438, razred=id_razred, teden=teden)
    for ura in u:
        ura["razred"] = razred
    urnik += u
print()
4.ar 1.ap 2.ag 4.bt 3.bt 3.cr 4.at 2.dr 1.at 4.cr 1.d 3.ag 2.br 2.d 3.br 1.ar 3.bp 2.ar 2.at 1.ag 2.ap 1.br 1.bt 3.ar 3.at 1.cr 4.br 3.ap 2.cr 2.bp 4.ag 2.bt 1.bp 1.dr 
CPU times: user 4.25 s, sys: 212 ms, total: 4.46 s
Wall time: 2min 59s
In [15]:
for ura in urnik:
    ura["konec"] = ura["konec"].replace(tzinfo=None)
    ura["začetek"] = ura["začetek"].replace(tzinfo=None)
In [16]:
df = pd.DataFrame(urnik)
In [17]:
profesorji = list(df["profesor"].unique())
from numpy import nan
profesorji.remove(nan)
In [18]:
urnik[84]
Out[18]:
{'konec': datetime.datetime(2018, 10, 8, 11, 55),
 'predmet': 'SLO',
 'predmet_polno': 'Slovenščina',
 'profesor': 'J. Golob',
 'razred': '1.ap',
 'učilnica': 'E02',
 'vrsta': None,
 'začetek': datetime.datetime(2018, 10, 8, 11, 10)}
In [19]:
df[84:85]
Out[19]:
konec predmet predmet_polno profesor razred učilnica vrsta začetek
84 2018-10-08 11:55:00 SLO Slovenščina J. Golob 1.ap E02 None 2018-10-08 11:10:00
In [20]:
len(profesorji)
Out[20]:
65
In [24]:
profesorji.sort(key=lambda s: s.split(". ")[1])
In [25]:
profesorji.insert(0, None)
profesor = widgets.Dropdown(
    options=profesorji,
    description='Profesor:',
    disabled=False,
)
display(profesor)
assert profesor.value != None
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-25-e1e32a53fda8> in <module>
      6 )
      7 display(profesor)
----> 8 assert profesor.value != None

AssertionError: 
In [26]:
df[ (df["začetek"].dt.day == datum.value.day) & (df["profesor"] == profesor.value) ].sort_values(by="začetek")
Out[26]:
konec predmet predmet_polno profesor razred učilnica vrsta začetek
1335 2018-10-10 09:25:00 LAV Laboratorijske vaje B. Potisk 4.ag K01 None 2018-10-10 08:40:00
1341 2018-10-10 10:15:00 RSOv Računalnški sistemi in omrežja - vaje B. Potisk 4.ag K01 None 2018-10-10 09:30:00
1009 2018-10-10 11:05:00 NRSp Načrtovanje in razvoj spletnih aplikacij - praksa B. Potisk 3.ar K01 None 2018-10-10 10:20:00
1013 2018-10-10 11:55:00 NRSp Načrtovanje in razvoj spletnih aplikacij - praksa B. Potisk 3.ar K01 None 2018-10-10 11:10:00
1353 2018-10-10 12:45:00 RSOt Računalnški sistemi in omrežja - teorija B. Potisk 4.ag K03 None 2018-10-10 12:00:00