EGI Services
https://www.egi.eu/services/

Přihlášení do EGI:
Vytvoření EGI účtu
Přihlášení do vo.notebooks.egi.eu VO
Příhlášení do EGI notebooks
1) Vytvoření EGI účtu
https://aai.egi.eu/signup



Check-in pošle email pro ověření požadavku a emailu (EGI Check-in Notifications)
Pokud nastane problém během celého procesu: support@egi.eu
2) Přihlášení do vo.notebooks.egi.eu VO

RT: 17237 [EGI-20210430-01] [TLP:AMBER] Security incident suspected at CESNET stále otevřené: update?

3) Příhlášení do EGI notebooks:
https://notebooks.egi.eu



Celá přihlašovací procedura do EGI notebooků je zde: https://docs.egi.eu/users/notebooks/
Základní notebook:
Limit na uživatele: 2 CPU, 4GB RAM, 20GB storage
Python
Dirac/Python 2 (EGI Workload Manager)
Julia
R
Octave

MATLAB:
1. Individuální nebo akademické licence
2. Síťová licence
3. Zkušební licence (bez toolboxů)
V tuto chvíli musí mít každý svou MATLAB licenci – máme tam implementovat CESNET licenci?
Co v takovém notebooku může být? A k čemu je dobrý?
Může v něm být nadpis - to už víme
a ten se může zmenšovat
a zmenšovat
a zmenšovat
a zmenšovat
a zmenšovat, až už ho nikdo nepřečtě
Když je potřeba něco tučně, tak to jde udělat tučně
Nebo to může být kurzívou
Anebo to může být kurzívou a tučně
Můžeme nahrát data a zpracovat je:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv('data/datatest.txt')
Dx = data["date"]
data['date'] = data.date.astype('datetime64[ns]')
data = data.set_index('date')
data.tail()
Temperature | Humidity | Light | CO2 | HumidityRatio | Occupancy | |
---|---|---|---|---|---|---|
date | ||||||
2015-02-04 10:38:59 | 24.290000 | 25.700000 | 808.0 | 1150.25 | 0.004829 | 1 |
2015-02-04 10:40:00 | 24.330000 | 25.736000 | 809.8 | 1129.20 | 0.004848 | 1 |
2015-02-04 10:40:59 | 24.330000 | 25.700000 | 817.0 | 1125.80 | 0.004841 | 1 |
2015-02-04 10:41:59 | 24.356667 | 25.700000 | 813.0 | 1123.00 | 0.004849 | 1 |
2015-02-04 10:43:00 | 24.408333 | 25.681667 | 798.0 | 1124.00 | 0.004860 | 1 |
Data obsahují měření v konferenční místnosti v čase
from matplotlib.figure import Figure
from matplotlib.backends.backend_agg import FigureCanvas
%matplotlib inline
#data['Occupancy'] = 100*data['Occupancy']
plt.figure(figsize=(10,5));
plt.plot(data.CO2);
plt.xticks(rotation=45);
#plt.ylabel('Temperature',fontsize = 20)
plt.show()

T = (data.Temperature-min(data.Temperature))
T = T/max(T)
H = (data.Humidity-min(data.Humidity))
H = H/max(H)
L = (data.Light-min(data.Light))
L = L/max(L)
C = (data.CO2-min(data.CO2))
C = C/max(C)
plt.figure(figsize=(10,5))
#Temp = plt.plot(T,'b',label = 'Temperature')
Humid = plt.plot(H,'r',label = 'Humidity')
Light = plt.plot(L,'g',label = 'Light')
CO = plt.plot(C,'c',label = 'CO2')
Occup = plt.scatter(Dx,data.Occupancy,c = 'y',label = 'Occupancy')
plt.legend(fontsize = 'xx-large',bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
plt.show()

Závěr nebo hypotéza:
1. datatest2 je divnej
2. někdo se tam vloupal
3. datatest je dobrej - sedí
…
Můžu použít nějakou statistiku - třeba rolling mean:
\[ \tau = \frac{\varpi - \omega}{\sqrt{\frac{\sum \varpi - \omega}{N(N-1)}}} \]
Tohle sice není rolling mean, ale aspoň vidíte, že se sem dá dát i LaTeX
def mpl_plot(avg, highlight):
fig = Figure()
FigureCanvas(fig)
ax = fig.add_subplot()
avg.plot(ax=ax)
if len(highlight): highlight.plot(style='o', ax=ax)
return fig
def find_outliers(variable='Temperature', window=50, sigma=10, view_fn=mpl_plot):
avg = data[variable].rolling(window=window).mean()
residual = data[variable] - avg
std = residual.rolling(window=window).std()
outliers = (np.abs(residual) > std * sigma)
return view_fn(avg, avg[outliers])
find_outliers(variable='CO2', window=50, sigma=10)

Udělejme to víc interaktivní za pomoci Panelu (ať se nemusíme pořád hrabat v kódu):
import panel as pn
pn.extension()
pn.interact(find_outliers)
kw = dict(window=(1, 60), variable=sorted(list(data.columns)), sigma=(1, 20))
i = pn.interact(find_outliers, **kw)
#i.pprint()
text = "<br>\n# Room measurements\nSelect the variable, and the time window for smoothing"
p = pn.Column(pn.Column(text, i[0][0], i[0][1]), i[1][0])
p
i[0][2]
import panel.widgets as pnw
variable = pnw.RadioButtonGroup(name='variable', value='Temperature',
options=list(data.columns))
window = pnw.IntSlider(name='window', value=10, start=1, end=60)
reactive_outliers = pn.bind(find_outliers, variable, window, 10)
widgets = pn.Column("<br>\n# Room measurements", variable, window)
occupancy = pn.Column(widgets,reactive_outliers)
occupancy
import param
class RoomOccupancy(param.Parameterized):
variable = param.Selector(objects=list(data.columns))
window = param.Integer(default=10, bounds=(1, 20))
sigma = param.Number(default=10, bounds=(0, 20))
def view(self):
return find_outliers(self.variable, self.window, self.sigma)
obj = RoomOccupancy()
obj
RoomOccupancy(name='RoomOccupancy00147', sigma=10, variable='Temperature', window=10)
pn.Column(obj.param, obj.view)
import hvplot.pandas
def hvplot(avg, highlight):
line = avg.hvplot(height=300, width=550)
avg.hvplot(height=300) * highlight.hvplot.scatter(color='orange', padding=0.1)
outliers = highlight.hvplot.scatter(color='orange', padding=0.1)
return (line * outliers).opts(legend_position='top_right')
text2 = "## Room Occupancy\nSelect the variable and the smoothing values"
hvp = pn.interact(find_outliers, view_fn=hvplot, **kw)
pn.Column(pn.Row(pn.panel(text2, width=200), hvp[0]), hvp[1]).servable("Occupancy")