Jupyter Notebook Beispiele
Das installierte JupyterLab stellt jedem Nutzer jeweils ein Notebook zur Verfügung. Über die Startseite nach dem Einloggen wird dem Nutzer ein Filesystem (links), sein eigenes Home-Verzeichnis, angezeigt. Es können z.B. Ordner angelegt und Dateien hochgeladen werden.
Wählt der Nutzer ein Notebook aus, z.B. ‚Python 3‘, wird automatisch ein File mit der Dateiendung .ipynb angelegt und geöffnet. Für die anderen Notebook-Icons liegen andere Kernels zugrunde, also separate Prozesse, die vom Server gestartet werden und den Code in verschiedenen Programmiersprachen mit verschiedenen Versionen und mit verschiedenen Bibliotheken ausführen.
In so einem Notebook, einer Datei .ipynb, können für eine Präsentation oder für die eigene Übersicht Zellen mit dem Modus Markdown eingeben, wie z.B.
Nach einem Klick auf ‚Run‘ oder der Tastenkombination strg+enter wird dies sofort übersetzt und dargestellt:
In anderen Zellen kann hier auch direkt Python Code eingegeben werden. Dieser kann ebenfalls direkt mit einem Klick auf ‚Run‘ oder der Tastenkombination strg+enter ausgeführt und angezeigt werden:
Es lassen sich selbstverständlich auch komplexere Dinge durchführen, wie z.B. Daten hochladen, daraus Daten extrahieren und darstellen. Dabei können Funktionen in andere z.B. reine Python-Dateien ausgelagert und benutzt werden etc. Dafür stehen in den verschiedenen Kernels verschiedene Bibliotheken zur Verfügung, die vom Administrator zentral installiert wurden und jetzt mit einem Befehl importiert werden können, wie z.B. import math
für die Python-Bibliothek für mathematische Funktionen.
Beispiel zur Globalstrahlung und Elevationswinkel
Gemeinsame Darstellung der Globalstrahlung beobachtet/gemessen über der Zeit in Köln, Wetterstation Grüngürtel, anhand der Daten vom 9.September 2023 in 1 min Auflösung (siehe https://geomet.uni-koeln.de/forschung/aktuelle-beobachtungen/wetterstation-gruenguertel) und des entsprechenden berechneten lokalen Elevationswinkels der Sonne über den gleichen Zeitraum:
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.pyplot as pp
import math
#Observations --------------------------------------------------------------------
columns=["TIMESTAMP","SWUpper_Avg"]
df = pd.read_csv('/data_old/ekp1/20230909_msgg01m.dat',usecols=columns)
df.drop(0, inplace = True) #remove first row
df.drop(1, inplace = True) #remove second row
arrt = np.array(df.TIMESTAMP, dtype='M') #the values convert into data type datetime
arrSR = np.array(df.SWUpper_Avg, dtype='f') #the values convert into data type float
# to get 2 different y axis you need subplots
fig, ax = pp.subplots()
# Plot Observations ----------------------
p1, = ax.plot(arrt, arrSR,c='b',label='Globale Strahlung') #plot of global radiation
#Calculations --------------------------------------------------------------------
lat=50.93 # latitude
long=6.93 # longitude
lat_rad=lat*math.pi/180
long_rad=long*math.pi/180
d=31+28+31+30+31+30+31+31+9 # day of the year
delta_s = 23.45 * math.cos(((360*(d-173))/365)*math.pi/180) # solar declination angle
delta_s_rad=delta_s*math.pi/180
t_arr = np.arange(0,24,1) # over 24 hours
psi_arr = np.zeros(24,dtype=float) # initial empty array for the local elevation angle
cnt=0
for t in t_arr:
psi_arr[cnt]=(math.asin((math.sin(lat_rad)*math.sin(delta_s_rad)) - (math.cos(lat_rad)*math.cos(delta_s_rad)*math.cos(((15*t) - long)*math.pi/180)))*180/math.pi)
if psi_arr[cnt]<0:
psi_arr[cnt]=0 # if the angle is negative set the value to zero
cnt=cnt+1
t_datetime_arr=np.arange(np.datetime64('2023-09-08 23'), np.datetime64('2023-09-09 23')) # replace the t_arr by a 24 values in the datetime format like in the observation file
# Plot Calculations -----------------------------------
twin = ax.twinx() # define 2nd y-axis over the same x-axis
p2, = twin.plot(t_datetime_arr, psi_arr,c='r',label='Lokaler Elevationswinkel') #plot of elevation angle
ax.set(xlim=(19609.1,19609.9),ylim=(4, 850), xlabel="9.September 2023 (UTC)", ylabel="Globale Strahlung [W/m^2]") # set the limits and lables of the first plot p1
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H-%M'))
ax.xaxis.grid(True)
twin.set(ylim=(4, 55), ylabel="Lokaler Elevationswinkel in °") # set of y_min, y_max for the elevation angle second y-axis
pp.title("Globale Strahlung und Elevationswinkel bei 50.93°N, 6.93°O")
ax.legend(handles=[p1, p2],loc='center', bbox_to_anchor=(0.5, 0.9),
ncol=2, fancybox=True, shadow=True)
# save the plot as png file
pp.savefig('plots/obs_calc_Radiation_0909.png',bbox_inches='tight',pad_inches=0.5) #must be executed before the show-command
# show the plot
pp.show