# Einstieg
## Vorstellungsrunde und Erwartungen
Zeitplan -------- - 6 Blöcke - kürzere Pausen - eine lange Pause
Warum sollten Historiker\*Innen programmieren? ----------------------------------------------
Ziele ----- - Einstiegsschwelle überwinden - neugierig machen - Einblicke in Python geben - eigene Skripte schreiben
Grenzen ------- - knapper Zeitplan - Grundlagen! Nicht alles kann angesprochen werden - kein vollständiger Programmierkurs
Fragen sind jederzeit erwünscht! --------------------------------
Vorgehen -------- - Inputs - gemeinsam Skripte schreiben - Vorlage der Skripte im Ausdruck
Zwei 'Lern-Stränge' ------------------- 1. Coden 2. Benutzen der Tools zum Programmieren * Kommandozeile * Anaconda * IPython * Editor (VS Code) * Jupyter Notebooks
# Block 1: ## Historie, Konzepte, Einsatz
Warum Python? ------------- - einfach zu lernen - einfach zu lesen - riesige Community - laut TIOBE auf [Platz 3](https://www.zdnet.com/article/python-now-a-top-3-programming-language-as-julias-rise-speeds-up/#ftag=RSSbaffb68) - Open Source Software
Entwicklung ----------- - zu Beginn der 1990er Jahre von Guido van Rossum entwickelt - 1994 erschien die Version 1.0 - ursprünglicher Zweck: Programmieren beibringen - Name geht nicht auf die Schlange, sondern auf Monty Python zurück - Dezember 2008: Version 3.0 -\> vollständig auf Unicode umgestellt - Juli 2018: Guido van Rossum tritt als "Benevolent Dictator for Life" (BDFL)

Python als Skriptsprache

Skript Programm
z.B. Python z.B. Java oder C++
Interpreter Compiler
höhere Programmiersprache maschinennahe Programmiersprache
anpassungsfähig aufwenider anzupasser, schwer zu debuggen

Python als Skriptsprache

Skript Programm
dynamische Typisierung feste Typisierung
leichter zu erlernen schwerer zu erlernen
## Python als Skriptsprache Python-Skripte erkennbar an der Endung: `skript_name.py`
Einsatzgebiete I ---------------- - Universitäten und Forschungseinrichtungen - Technologie-Branche - Industrie - Data Science
Einsatzgebiete II ----------------- - Data and Text Mining - Daten-Analyse - Visualisierung - Web Entwicklung - System-Administration - Rapid Prototyping
Arbeitsumgebung ---------------
Das Terminal ------------ - `cd [Verzeichnis]` - wechselt das Verzeichnis - `cd ~` - wechselt in das Heimat-Verzeichnis - `mkdir [Verzeichnis]` - erstellt das \[Verzeichnis\] - `touch [Datei]` / `New-Item [Datei] -type file` -- erstellt die \[Datei\] - `rm [Datei]` - löscht (unwiederbringlich!) die \[Datei\] - `rm -r [Verzeichnis]` - löscht (unwiederbringlich!) das \[Verzeichnis\]
Das Terminal ------------ - `ls` - listet den Inhalt des aktuellen Verzeichnisses auf - `ls -lah` -- wie `ls`, nur ausführlicher - `pwd` - gibt den Namen des aktuellen Verzeichnisses an - `man [Befehl]` - Hilfeseite zum \[Befehl\] - `pydoc [keyword]` - Python-Dokumentation für \[keyword\]
Arbeitsumgebung schaffen ------------------------ ```{.shell} cd ~ mkdir Skripte cd Skripte ```
Anaconda --------
`conda` - Package-Manager ------------------------- - `conda search [Paket]` -- sucht das \[Paket\] auf dem Server - `conda install [Paket1] [Paket2] etc.` -- installiert die Pakete - `conda install -c conda-forge [Paket1] etc.` -- installiert die Pakete von dem Server conda-forge - `conda install -n [env] [Paket]` -- installiert das Paket in die Umgebung \[env\] - `conda list` -- listet die Pakete auf
`conda` - Package-Manager ------------------------- - `conda update [Paket]/python/conda` -- updatet \[Paket\], Python oder conda - `conda remove [Paket]` -- entfernt das \[Paket\] - `pip3 install [Paket]` -- installiert mit Pip das \[Paket\]
Virtuelle Umgebungen -------------------- - `conda create -n [env]` -- erschafft die Umgebung \[env\] - `conda create -n [env] python=3.7` -- wie oben, aber mit bestimmter Python-Version - `conda info --envs` -- Informationen zu die Umgebungen - `conda list --explicit > spec-file.txt` -- speichert die Pakete der Umgebung in \[spec-file.txt\]
## Virtuelle Umgebungen - `conda install -n [env] -f spec-file.txt` – installiert genau diese Umgebung - `activate [env]` – aktiviert die [Umgebung] auf Windows - `source activate [env]` – aktiviert die [Umgebung] auf MacOS und Linux - `deactivate` – deaktiviert die [Umgebung] auf Windows - `source deactivate` – deaktiviert die [Umgebung] auf MacOS und Linux
## Editor oder IDE - Editor: Bearbeiten von Text (Notepad++, Sublime Text, Atom, Vim, Emacs) - IDE: Integrated Development Environment (VSCode, Eclipse, PyCharm)
Hilfe zur Selbsthilfe --------------------- * [Python Dokumentation](https://www.python.org/doc/) * [Python Tutorials](https://docs.python.org/3/tutorial/) * [Programming Historian](https://programminghistorian.org/lessons/?topic=python) * [Python Community](https://www.python.org/community/) * [Python Forum](https://www.python-forum.de/) * [Stack Overflow](https://stackoverflow.com/)
# Block 2: ## Erste Schritte
Python Interpreter öffnen ------------------------- Anaconda Prompt starten - Windows-Startmenu aufrufen - unter 'A': Anaconda auswählen - Anaconda-Prompt anklicken
Python Version checken ---------------------- `(base) C:/User/Username/>python --version`
IPython-REPL ------------ `(base) C:/User/Username/>ipython`
Hallo Welt ---------- `In[1]: print("Hallo Welt!")`
Addieren -------- 5 + 2 3 + 6 42 + 1337
Substrahieren ------------- 5 - 2 7 - 4 1337 - 42
Multiplizieren -------------- 7 \* 5 6 \* 3 6 \* 7
Dividieren ---------- 15 / 3 42 / 7 1337 / 12
Ganzzahl und Gleitkommazahl --------------------------- **Ganzzahl** > Integer, int(): 8, 42, 1337 **Gleitkommazahl** > Float, float(): 1.5, 8.7, 123.45
# Block 3: ## Datentypen
IPython-REPL II --------------- - Windows-Startmenu aufrufen - unter 'A': Anaconda auswählen - IPython anklicken
Navigieren im Dateiensystem --------------------------- ```{.python} In [1]: pwd Out[1]: 'C:/Users/Martin/Documents' In [2]: cd .. C:/Users/Martin In [3]: cd Documents C:/Users/Martin/Documents ```
Magische Befehle ---------------- `%magic` `%cpaste`
Zeichenketten / Strings ----------------------- ``` {.python} print("Hallo Welt!") ```
Konkatenieren ------------- ``` {.python} print("Hallo " + "Welt!") print("Historikertag " + "2018") print("Hallo " * 2 + "Historikertag") ```
Variablen --------- ``` {.python} event = "Historikertag" year = 2018 ```
Interpolieren ------------- ``` {.python} print(f"Der {event} findet {year} statt.") print("Der {} findet {} statt.".format(event, year)) ```
Funktionen und Methoden bei Strings ----------------------------------- ``` {.python} len(event) len("Historikertag") event.lower() "Historikertag".upper() ```
Listen / Lists -------------- ``` {.python} list_1 = [1, 2, 3, 4] list_2 = ["Banane", "Apfel", "Birne"] list_3 = [17, "Obst", 23, "Ball"] list_4 = [[1, 2, 3,], ["a", "b", "c"], ["Hallo", "Welt"]] ```
Zuordnungen / Dictionaries -------------------------- ``` {.python} dict_1 = {"Banane": 5, "Apfel": 7, "Birne": 9} dict_2 = {"Vorname": "Jan", "Nachname": "Meier", "Alter": 48} ```
Mengen / Sets ------------- ``` {.python} menge = {1,2,3,4,4,5,5,5} print(menge) type(menge) ```
Tuple ----- ``` {.python} word_freq = ("Wort A", 42) type(word_freq) ```
Indexieren von Strings ---------------------- ``` {.python} "Historikertag"[1] "Historikertag"[0] "Historikertag"[8] ```
Slicing ------- ``` {.python} "Historikertag"[0:10] "Historikertag"[3:6] ```
Indexieren von Listen --------------------- ``` {.python} list_2 = ["Banane", "Apfel", "Birne"] list_2[2] list_2[0] ```
Funktionen und Methoden bei Listen ---------------------------------- ``` {.python} len(list_2) list_2.append("Ananas") list_2.pop() ```
Zugriff auf Dictionaries ------------------------ ``` {.python} dict_1 = {"Banane": 5, "Apfel": 7, "Birne": 9} dict_1["Banane"] dict_1.keys() dict_1.values() sum(dict_1.values()) ```
Logische Ausdrücke ------------------ ``` {.python} 5 > 3 5 > 7 "Mauer" == "Haus" "Mauer" != "Haus" ```
Logische Ausdrücke: and, or --------------------------- ``` {.python} 5 > 3 and "Mauer" != "Haus" 5 > 3 and "Mauer" == "Haus" 5 > 3 or "Mauer" == "Haus" 5 > 7 or "Mauer" == "Haus" ```
Block 4: ======== Kleine Skripte --------------
VS Code einrichten ------------------ - Windows-Startmenu aufrufen - unter 'A': Anaconda auswählen - Anaconda Navigator anklicken - VS Code installieren
VS Code starten --------------- - Windows-Startmenu aufrufen - unter 'A': Anaconda auswählen - Anaconda-Prompt anklicken - 'code' eingeben
Python Extension einbinden -------------------------- - ganz links viertes Symbol von oben klicken - im Suchfeld 'Python' eingeben - ersten Treffer auswählen und installieren - Code neu starten
Python-Datei anlegen -------------------- - speichern unter: Dateiname eingeben - Dateiendung: .py anhängen
User-Input Skript ----------------- ``` {.python} # Eingabe Name name = input("Wie heißt du? >>>") # Eingabe Alter alter = input("Wie alt bist du? >>>") # Eingabe Wohnort ort = input("Wo wohnst du? >>>") jahr = 2018 - int(alter) # Ausgabe print(f""" \nHallo {name}, schön, dass du da bist!\n Du bist {jahr} geboren.\n {ort} ist der beste Ort auf dem Planeten.""") ```
Skript aufrufen --------------- - STRG + ö - ins Verzeichnis navigieren - python DATEINAME.py
Anweisungsaufbau und Blöcke --------------------------- ANWEISUNGSKOPF:**DOPPELPUNKT** **EINRÜCKUNG** ANWEISUNG
Fehlerbehandlung / error handling --------------------------------- ``` {.python} for x in range File "\<ipython-input-1-a89b35aad551\>", line 1 for x in range ^ SyntaxError: invalid syntax ```
help() Function --------------- ``` {.python} help(len) Help on built-in function len in module builtins: len(obj, /) Return the number of items in a container. ```
Juypter Notebooks einrichten ---------------------------- - Windows-Startmenu aufrufen - unter 'A': Anaconda auswählen - Anaconda Navigator anklicken - Jupyter Lab installieren
Jupyter Lab starten ------------------- - Windows-Startmenu aufrufen - unter 'A': Anaconda auswählen - Anaconda-Prompt anklicken - 'juypter lab' eingeben
Jupyter Notebook starten ------------------------ - ganz links 'Files' klicken - in das Arbeitsverzeichnis navigieren - im Launcher Notebook Python 3 auswählen
Jupyter Notebook Short Cuts --------------------------- - STRG + Eingabe: = Zelle ausführen - B = neue Zelle unten einfügen
Kontrollstrukturen ------------------
For-Schleife ------------ ``` {.python} for x in range(10): print(x) ```
While-Schleife -------------- ``` {.python} x = 10 while x > 0: print(x) x -= 1 ```
If-Anweisung ------------ ``` {.python} for x in range(1, 11): if x % 2 == 0: print(f"{x} ist eine gerade Zahl.") else: print(f"{x} ist eine ungerade Zahl.") ```
Dateien lesen 1 --------------- ``` {.python} f = open("DATEI.txt", "r", encoding="utf-8") grundgesetz = f.read() f.close() ```
Dateien lesen 2 --------------- ``` {.python} with open("DATEI.txt", "w", encoding="utf-8") as f: f.read() ```
I/O Parameter ------------- - "r" = read / lesen - "w" = write / schreiben - "a" = append / anhängen
# Block 5: ## Ein Anwendungsbeispiel: Web Scraping von Hsozkult
Alle Schritte sind im [Jupyter Notebook](https://github.com/martindroege/python-ws-historikertag/blob/master/block5-hsozkult.ipynb) hinterlegt.
# Block 6: ## Hilfe zur Selbsthilfe
Algorithmisches Denken ---------------------- - Problem in einzelne Schritte zerlegen - Schritte ausformulieren - einzelne Bauteile zusammenstellen
Pseudo Code ----------- ``` TEXT = "text" LOOP OVER TEXT IF ELEMENT IS VOWEL PRINT ELEMENT ```
Vorteil ------- - Vorgehen wird klarer - Konzepte verstehen - Übertragbar auf andere Programmiersprachen
## Tutorials [https://realpython.com/](https://realpython.com/) [https://docs.python.org/3/tutorial/](https://docs.python.org/3/tutorial/) [https://www.python-kurs.eu/](https://www.python-kurs.eu/) [https://programminghistorian.org/lessons/?topic=python](https://programminghistorian.org/lessons/?topic=python)
## Links [https://www.python.org/doc/](https://www.python.org/doc/) [https://www.python.org/community/](https://www.python.org/community/) [https://www.python-forum.de/](https://www.python-forum.de/) [https://stackoverflow.com/](https://stackoverflow.com/)
## Bücher: Online [https://automatetheboringstuff.com/](https://automatetheboringstuff.com/) [https://www.nltk.org/book/](https://www.nltk.org/book/)
## Bücher Siehe Büchertisch!
Offene Fragen -------------
Feedback-Runde --------------
## Zum Abschluss What people think programming is vs. how it actually is [https://www.youtube.com/watch?v=HluANRwPyNo](https://www.youtube.com/watch?v=HluANRwPyNo)