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")
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()
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
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
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
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()
x = np.linspace(-10,10, num = 100)
y = x*x
plt.plot(x,y)
plt.show()