{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Was kann ein Jupyter Notebook?\n", "\n", "In diesem Jupyter Notebook werden ein paar Features von Jupyter Notebooks präsentiert.\n", "Jedes Dokument (wie auch dieses) besteht aus Zellen.\n", "Die zwei typischen Zell-Arten sind `Markdown` und `Code`.\n", "Diese werden im Folgenden vorgestellt." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dies ist eine `Markdown-Zelle`.\n", "Hier kann Markdown-Code stehen.\n", "Der Feature-Umfang wird in diesem\n", "[Handbuch-Eintrag von Jupyter Notebook](https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Working%20With%20Markdown%20Cells.html)\n", "erklärt.\n", "Klicken Sie doppelt auf diese Zelle, um in den Editier-Modus zu wechseln.\n", "Sobald Sie fertig sind, klicken Sie auf `▶`, um in den Darstellungsmodus zurück zu wechseln." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Statt Markdown kann so eine Zelle auch\n", "\n", "HTML-Code enthalten\n", " \n", "und es gibt eine Unterstützung für $\\LaTeX$:\n", "So können Formeln wie\n", "$\\frac{n!}{k!(n-k)!} = \\binom{n}{k}$\n", "geschrieben werden." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hier verwende ich Markdown, um ein Bild von einer externen Webseite einzubetten\n", "\n", "![](https://imgs.xkcd.com/comics/common_cold_2x.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Markdown und HTML kommen an manchen Stellen an ihre Grenzen, z. B. stoßen IFrames manchmal an die Grenzen des Machbaren.\n", "Allerdings kann man auch über eine Code-Zelle dieses Problem lösen." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Youtube-Videos sind auch möglich\n", "from IPython.display import YouTubeVideo\n", "YouTubeVideo(\"ctOM-Gza04Y\", 560, 315)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Hier steht valider Python-Code\n", "4 + 2" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Im Code können Visualisierungen erstellt werden\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "data = {\n", " 'apples': 10,\n", " 'oranges': 15,\n", " 'lemons': 5,\n", " 'limes': 20\n", "}\n", "\n", "names = list(data.keys())\n", "values = list(data.values())\n", "\n", "plt.bar(names, values)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Fehlermeldungen werden ebenfalls direkt unter der Code-Zelle angezeigt.\n", "3 / 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Jupyter-Notebook-spezifische Funktionalitäten" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wir können ebenfalls einsehen, was wir bislang in welcher Reihenfolge ausgeführt haben.\n", "Dabei werden nur Code-Zellen berücksichtigt.\n", "Eine ausführliche Einleitung gibt es im \n", "[Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/01.04-input-output-history.html)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for i, in_i in enumerate(In): # In der Liste \"In\" werden alle Inputs gespeichert\n", " print(f\"In[{i}]:\\n{in_i}\") # Betrachten Sie im Jupyter Notebook oben die In[x]-Bezeichner, das sollte übereinstimmen\n", " print(\"-\" * 80) # Erzeuge eine visuelle Trennung der Eingaben" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Die Zellen eines Jupyter Notebooks werden immer in der Reihenfolge ausgeführt, wie Sie sie ausführen.\n", "Es werden *nie* Zellen für Sie im Hintergrund ausgeführt.\n", "Sie können also Zellen in einer beliebigen Reihenfolge ausführen - also hypothetisch gesprochen auch von der untersten Zelle eines Dokuments rückwärts bis zur obersten Zelle.\n", "Vermutlich passt dies aber nicht zur intendierten Reihenfolge des Autors des Notebooks.\n", "\n", "Achten Sie besonders auf die Reihenfolge der Ausführung, wenn Sie Objekte modifizieren oder Variablen überschreiben, die in mehreren Zellen vorkommen.\n", "Dann führt das wiederholte Ausführen einer Zelle u. U. zu Fehlern oder einem unerwünschten Verhalten.\n", "Hier ein kurzes Beispiel:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Führen Sie zuerst diese Zelle aus\n", "x = 7" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Überspringen Sie zunächst diese Zelle\n", "x + 5" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Führen Sie als zweites diese Zeile aus\n", "x = None\n", "# Nun führen Sie erst die Zelle in der Mitte aus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wie Sie erkennen können, ist es nur wichtig, in welcher Reihenfolge Sie als ausführende Person die Zellen ausführen.\n", "Die Reihenfolge im Dokument hilft dabei, die Zellen in der richtigen Reihenfolge von oben nach unten auszuführen.\n", "Gut designte Jupyter Notebooks erlauben es, jederzeit auch zurückzuspringen und Code erneut auszuführen.\n", "Wenn Sie Variablen überschreiben, kann das Verhalten bei einer ungeordneten Ausführung unvorhersagbar sein." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Creative     Dieses Werk von Marvin Kastner ist lizenziert unter einer Creative Commons Namensnennung 4.0 International Lizenz.\n", "Dies betrifft nur diese Komposition und nicht die inkludierten Werke anderer Künstler." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.1" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }