EGI Services

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

Drawing

Přihlášení do EGI:

  1. Vytvoření EGI účtu

  2. Přihlášení do vo.notebooks.egi.eu VO

  3. Příhlášení do EGI notebooks


1) Vytvoření EGI účtu

https://aai.egi.eu/signup

Drawing Drawing Drawing

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

Drawing

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

Drawing

3) Příhlášení do EGI notebooks:

https://notebooks.egi.eu

Drawing Drawing Drawing

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

Drawing

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()
../_images/EGI_ntb_readthedocs_91_0.png
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()
../_images/EGI_ntb_readthedocs_93_0.png

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)
../_images/EGI_ntb_readthedocs_99_0.png

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")
import holoviews as hv

tap = hv.streams.PointerX(x=data.index.min())

def hvplot2(avg, highlight):
    line = avg.hvplot(height=300, width=500)
    outliers = highlight.hvplot.scatter(color='orange', padding=0.1)
    tap.source = line
    return (line * outliers).opts(legend_position='top_right')

@pn.depends(tap.param.x)
def table(x):
    index = np.abs((data.index - x).astype(int)).argmin()
    return data.iloc[index]

app = pn.interact(find_outliers, view_fn=hvplot2, **kw)

pn.Column(
    pn.Column("## Room Occupancy\nHover over the plot for more information.", app[0]),
    pn.Column(app[1], table)
)

from IPython.display import Audio, YouTubeVideo
Audio('audio/simpleLoop.wav')
T = 0.05    # seconds
fs = 44100   # sampling frequency
t = np.linspace(0, T, int(T*fs), endpoint=False) # time variable
x = np.sin(2*np.pi*440*t)     
plt.plot(t, x)
plt.xlabel('Time (seconds)')
plt.show()
../_images/EGI_ntb_readthedocs_121_0.png
fs = 44100 # sampling frequency
T = 1.5    # seconds
t = np.linspace(0, T, int(T*fs), endpoint=False) # time variable
x = np.sin(2*np.pi*440*t)                # pure sine wave at 440 Hz
Audio(x, rate=fs)

id = 'ER4WhBxM8DY'
YouTubeVideo(id=id, width = 700, height = 400)

Dokonce se sem dá dát i gif

Drawing

K čemu tedy ty notebooky jsou, nebo mohou být:

1. Interaktivní učební pomůcka nebo interaktivní tutorial

2. Vytváření reportů nebo manuscriptů

3. Workflow od dat až po interpretaci výsledků


Co když někdo Jupyter nemá? Nebo nemá přístup do EGI nebo Metacentra?

Nevadí, dáme to do Binderu

Drawing

Rychlý odkaz


EGI DataHub – OneData

https://datahub.egi.eu/ozw/onezone/i#/login

Běží zatím jen na training notebooks - https://training.notebooks.egi.eu

Připojení DataHubu automaticky i pro https://notebooks.egi.eu

https://jira.egi.eu/browse/ACETA-52

Drawing
plt.figure(figsize=(15,10))
plt.subplot(211)
plt.plot(data.Temperature)
plt.ylabel('degrees',fontsize = 20)

plt.title('Temperature',fontsize = 25)

plt.xticks(fontsize = 20)
plt.yticks(fontsize = 20)

plt.subplot(212)
plt.plot(data.Occupancy)
plt.ylabel('%',fontsize = 20)

plt.title('Occupancy',fontsize = 25)

plt.yticks(fontsize = 20)
plt.xticks(fontsize = 20)

plt.show()
../_images/EGI_ntb_readthedocs_159_0.png
x = np.linspace(-10,10, num = 100)
y = x*x
plt.plot(x,y)
plt.show()
../_images/EGI_ntb_readthedocs_160_0.png