Gehen sie auf https://github.com/ und erstellen sie sich ein Account sowie ein Reposetory.
Benennen wir das Repo als "wmd"
- Das Repo muss aud Public stehen
- Das Repo muss mit einer README initialisiert werden
Nachfolgend ist in die Einstellungen des Repos zu sehen
Gehen sie auf http://mybinder.org/ und initialisieren sie ihr Reposetory. Geben sie hierzu den Pfad ihres Gits ein
Nachfolgend öffnet der Binder Server eine Jupyter Notebook Fenster in dem sie den Ihr Aotebook online ohne offline Installation von Jupyter Notebook benötigen
In diesem Beispiel betrachten wir jedoch die Verwendung mit einem offline am PC intsalliertn Jupyter Notebook
Hierzu sollten sie zunächst ihr Reposetory local clonen. Öffnen sie ein Terminal (z.B. Anaconda Prompt Shell).
Hinweis: Sollten sie noch nie mit Git gearbeitet haben sollten sie zunächst Git im Terminal installieren.
Im Fall von Anaconda:
terminal
conda install -c anaconda git
Nachfolgenden können Sie die das Repo in ihren gewünschten Ordner clonen
terminal
# Clone the repo
{your folder}: git clone https://github.com/{username}/wmd
# Move into the repo directory
cd wmd
# Start Jupyter
jupyter notebook
Gehen sie wieder in das locale Terminal. Hier ab besten das Terminal in Jupyter drirekt
Installieren sie nbinteract:
pip install nbinteract
Gehen sie im Terminal nun in den Ordner in dem sich auch das Repo befindet (über cd {yourpath})
Initialisieren sie nun ihr Verzeichnismit folgender Eingabe:
nbinteract init
git add -A git commit -m "Setup nbinteract" git push origin master
Nun sollte sich in ihrem localen Verzeichnis eine requirements.txt erstellt haben in dieser sollten sie alle benutzen pakete eintragen z.b. numpy
Zunächst erstellen wir eine Notebook was interaktiv auf die Eingabe der Benutzer reagiert. Hierzu gibt es ein generelles vorgehen.
- Import aller benötigten Pakete
- Erstellung von Funktionen die später interaktiv in der Html Seite aus-geführt werden sollen
- Aufruf der geeigneten Eingabemethode
from ipywidgets import interact
import nbinteract as nbi
def square(a,b):
return 'Die Fläche A beträgt {} m^2'.format(a * float(b))
# nbi:left
interact(square, a=(0,100,5),b='1.5');
# nbi:right
interact(square, a=(0,100,5),b={'One': 1, 'Five': 5, 'Ten': 10});
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
def lin(a,b,x):
return a*x+b
def quad(a,b,c,x):
return a*x**2+b*x+c
def funk_plot(Bereich,Funktion,a,b,c=0):
x=np.zeros(int(Bereich)*100)
y=np.zeros(int(Bereich)*100)
for i in range(0,int(Bereich)*100):
x[i]=i/100
if Funktion =='Linear':
y[i]=lin(a,b,x[i])
title='Lineare'
label='$f(x)=$'+str(a)+'$\cdot x+$'+str(b)
if Funktion =='Quadratisch':
y[i]=quad(a,b,c,x[i])
title='Quadratische'
label='$f(x)=$'+str(a)+'$\cdot x^2+$'+str(b)+'$\cdot x+$'+str(c)
plt.plot(x,y, label=r'Funktion: '+label)
plt.title(title+'-Funktion')
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.legend()
plt.grid()
plt.show()
funk_plot(10,'Linear',1,2)
funk_plot(10,'Quadratisch',1,2,3)
interact(funk_plot,a=(0,100,5),b=(0,100,5),c=(0,100,5),Bereich='10',Funktion={'Quadratisch','Linear'})
Um eine übersuchtliche Seite zu erstellen gliedern wir Funktionben aus und speichern Sie in eine gesonderte .py Datei ab um sie später für interaktive felder zu nutzen.
Die Idee:
Wir möchen Nachfolgenden Code (Funktion und Sinn irrelevant) komplett auserhalb des Notebooks laufen lassen aber die Ausgabe mit variabel einzustellenden Werten innerhallb des Notebooks haben.
import random as rd
from numpy import sqrt,zeros
from matplotlib.pyplot import plot,close
close
def huge_plot(E=70000,SIG_Y=300 ,v=0.3,eta_min=-0.005,eta_max=0.005,NC=500):
eta_min=float(eta_min)
eta_max=float(eta_max)
G=float(E)/(2.*(1+v))
SIG_R_1=zeros(NC)
SIG_G_1=zeros(NC)
SIG_R_2=zeros(NC)
SIG_G_2=zeros(NC)
for i in range(1,NC):
EPS_XX=rd.uniform(eta_min,eta_max)
EPS_YY=rd.uniform(eta_min,eta_max)
GAM_XY=rd.uniform(eta_min,eta_max)
SIG_XX=(E/(1-v**2))*(EPS_XX+v*EPS_YY)
SIG_YY=(E/(1-v**2))*(EPS_YY+v*EPS_XX)
TAU_XY=G*GAM_XY
SIG_1=((SIG_XX+SIG_YY)/2)+sqrt(((SIG_XX-SIG_YY)/2)**2+TAU_XY**2)
SIG_2=((SIG_XX+SIG_YY)/2)-sqrt(((SIG_XX-SIG_YY)/2)**2+TAU_XY**2)
SIG_v3=sqrt(0.5*((SIG_1-SIG_2)**2+SIG_1**2+SIG_2**2))
f=SIG_v3-SIG_Y
if f<0:
SIG_G_1[i]=SIG_1
SIG_G_2[i]=SIG_2
elif f>0:
SIG_R_1[i]=SIG_1
SIG_R_2[i]=SIG_2
plot(SIG_G_1,SIG_G_2,'go')
plot(SIG_R_1,SIG_R_2,'ro')
plot(-SIG_G_1,-SIG_G_2,'go')
plot(-SIG_R_1,-SIG_R_2,'ro')
interact(huge_plot,eta_min='-0.005',eta_max='0.005')
Importieren einer verstekten Funktion aus einem gesonderten Notebook und gleichzeitiges ausführen durch "if name =='main':" Zeile
%run wmdfunctions.ipynb #Jupyternotebook Datei
Sind mehrer Funktionen zu versteken sollte ein Python Skript angelegt werden und dieses als Modul importiert werden. Nun kann die in der verstekten Datei vorhandene Funktion huge_plot_2 ausgeführt werden. Diese ist exakt die gleiche wie in dem vorherigen Code-Abschnitt
import hiddencode as hd#Python Skript
# Aufrufen der Funktion
hd.huge_plot_2(E=800)
Sobald sich jedoch der Code nicht in dem Notebook befindet das später in eine HTML umgewandelt werden soll können wir keine interaktiven Module einbauen. Dies ist geschuldet dadurch das der dezedierte Code nur einmalig ausgeführt wird. Hierzu können jedoch die Metadaten der einzelnen Zellen beeinflusst werde. Nbinteract bietet hierzu den Befehl:
# nbi:hide_in
#some code
import ... as ..
a=b
Dieser wird einfach vor den code gesetzt
# nbi:hide_in
import random as rd
from numpy import sqrt,zeros
from matplotlib.pyplot import plot,close
close
def huge_plot_3(E=70000,SIG_Y=300 ,v=0.3,eta_min=-0.005,eta_max=0.005,NC=500):
eta_min=float(eta_min)
eta_max=float(eta_max)
G=float(E)/(2.*(1+v))
SIG_R_1=zeros(NC)
SIG_G_1=zeros(NC)
SIG_R_2=zeros(NC)
SIG_G_2=zeros(NC)
for i in range(1,NC):
EPS_XX=rd.uniform(eta_min,eta_max)
EPS_YY=rd.uniform(eta_min,eta_max)
GAM_XY=rd.uniform(eta_min,eta_max)
SIG_XX=(E/(1-v**2))*(EPS_XX+v*EPS_YY)
SIG_YY=(E/(1-v**2))*(EPS_YY+v*EPS_XX)
TAU_XY=G*GAM_XY
SIG_1=((SIG_XX+SIG_YY)/2)+sqrt(((SIG_XX-SIG_YY)/2)**2+TAU_XY**2)
SIG_2=((SIG_XX+SIG_YY)/2)-sqrt(((SIG_XX-SIG_YY)/2)**2+TAU_XY**2)
SIG_v3=sqrt(0.5*((SIG_1-SIG_2)**2+SIG_1**2+SIG_2**2))
f=SIG_v3-SIG_Y
if f<0:
SIG_G_1[i]=SIG_1
SIG_G_2[i]=SIG_2
elif f>0:
SIG_R_1[i]=SIG_1
SIG_R_2[i]=SIG_2
plot(SIG_G_1,SIG_G_2,'go')
plot(SIG_R_1,SIG_R_2,'ro')
plot(-SIG_G_1,-SIG_G_2,'go')
plot(-SIG_R_1,-SIG_R_2,'ro')
interact(huge_plot_3,E=600,eta_min='-0.005',eta_max='0.005')
Und wir sehen nur noch die Ausgabe.
So kann z.B. eine Interaktive Seite wie folgt aussehen