Skip to content

Commit 35a69c4

Browse files
committed
Übung zu Bibliotheken hinzugefügt.
1 parent e9c76df commit 35a69c4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+674
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
content:
2+
- task1
3+
- task2
4+
- task3

Mit Bibliotheken arbeiten/Bibliotheken/task1/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
type: choice
2+
is_multiple_choice: true
3+
options:
4+
- text: Der Funktionsumfang von Python kann nicht mit Bibliotheken erweitert werden.
5+
is_correct: false
6+
- text: Bibliotheken sparen Zeit, weil man Code daraus mehrfach verwenden kann.
7+
is_correct: true
8+
- text: Bibliotheken gibt es ausschließlich für Data Science und Machine Learning.
9+
is_correct: false
10+
- text: Bibliotheken werden bei Bedarf installiert.
11+
is_correct: true
12+
quiz_header: Welche Aussagen stimmen? Kreuze die richtigen Aussagen an!
13+
files:
14+
- name: __init__.py
15+
visible: false
16+
- name: task.py
17+
visible: true
18+
custom_name: Was ist eine Bibliothek?
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Was ist eine Bibliothek?
2+
3+
Eine Python-Bibliothek ist eine Sammlung zusammengehöriger Module.
4+
Sie besteht aus Code-Fragmenten, die oftmals in verschiedenen Programmen verwendet werden können.
5+
Dadurch machen sie die Programmierung mit Python einfacher und bequemer für den Programmierer.
6+
7+
Wir haben Bibliotheken schon kurz kennengelernt, doch wir wollen uns noch einmal tiefgehender damit beschäftigen, da
8+
sie einem viel Arbeit abnehmen können, wenn man sie korrekt einsetzt.
9+
10+
In dieser Übung wollen wir uns insbesondere mit einer Bibliothek auseinandersetzen, mit der wir Daten analysieren und
11+
auswerten können:
12+
[Pandas](https://pandas.pydata.org/).
13+
14+
Python liefert bereits eine Menge an Funktionen mit, doch spezialisierte Anwendungsfälle wie Data Science und Machine
15+
Learning, aber auch völlig andere Bereiche, erfordern spezialisierte Software.
16+
Python selbst ist wenige Megabytes groß, würden wir alle erdenklichen Bibliotheken dazu installieren, dann würde
17+
wahrscheinlich keine Festplatte der Welt sie speichern können.
18+
19+
Deswegen werden Funktionalitäten in Bibliotheken ausgelagert und können bei Bedarf heruntergeladen und dann verwendet
20+
werden.
21+
Damit spart man Speicherplatz und Python bleibt weiterhin leichtgewichtig und schnell.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# todo: replace this with an actual task
2+
def sum(a, b):
3+
return a + b

Mit Bibliotheken arbeiten/Bibliotheken/task2/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
type: choice
2+
is_multiple_choice: true
3+
options:
4+
- text: Man kann sofort erkennen, ob eine Bibliothek von Python zur Verfügung gestellt
5+
wird.
6+
is_correct: false
7+
- text: Ein Counter zählt, wie oft ein Element (z.B. ein Wort) in einer Liste vorkommt.
8+
is_correct: true
9+
- text: Zwei Bibliotheken dürfen nicht die selbe Funktion beinhalten.
10+
is_correct: false
11+
- text: Das Schlüsselwort, um eine Bibliothek zu verwenden, ist import.
12+
is_correct: true
13+
quiz_header: 'Wähle die richtigen Antworten aus:'
14+
files:
15+
- name: __init__.py
16+
visible: false
17+
- name: task.py
18+
visible: true
19+
custom_name: Eine Bibliothek einbinden
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Eine Bibliothek einbinden
2+
3+
Wenn wir nun auf eine Bibliothek oder auf eine Funktion daraus zugreifen wollen, dann müssen wir in unserem Programm
4+
darauf verweisen.
5+
Nur so kann Python die Bibliothek laden.
6+
7+
Es könnte eine Bibliothek geben, die eine Funktion `berechne_summe(liste_von_zahlen)` anbietet, gleichzeitig kann es
8+
aber auch eine andere Bibliothek geben, die dieselbe Funktion anbietet.
9+
Hier wüsste Python nicht, welche Funktion gemeint ist, weswegen wir diese explizit angeben müssen.
10+
11+
Funktionalitäten können auf verschiedene Arten eingebunden werden, die gängigsten werden wir uns ansehen.
12+
Hier kommt es immer auch auf die Bibliothek an, in den meisten Fällen wird dies in der Installationsanleitung oder
13+
anhand eines Beispiels erklärt.
14+
15+
Im nebenstehenden Beispiel wird ein sogenannter `Counter` importiert.
16+
Dieser befindet sich in der Bibliothek `collections`, die Python selbst bereits mitbringt.
17+
Dafür verwenden wir die Schlüsselwörter `from` und `import`:
18+
19+
```python
20+
from collections import Counter
21+
```
22+
23+
`from` gibt an, aus welcher Bibliothek die nachfolgende Funktion importiert werden soll.
24+
`import` gibt dann an, welche Funktionalität in diesem Fall importiert werden soll.
25+
26+
Diese Schreibweise hilft uns dabei, unseren Code kürzer zu fassen.
27+
Eine andere Möglichkeit wäre zum Beispiel, folgende Zeile zu schreiben:
28+
29+
```python
30+
import collections
31+
```
32+
33+
Dann müssten wir aber immer, wenn wir einen Counter verwenden wollen, z.B. `counter = collections.Counter()` schreiben.
34+
Um uns die Schreibarbeit zu sparen, schreiben wir daher explizit auf, welche Funktionalität wir aus dieser Bibliothek
35+
verwenden wollen und können unseren Code dann kürzer fassen.
36+
37+
**Wichtig:** Auf den ersten Blick im Code kann man nicht erkennen, ob eine Bibliothek zu Python selbst gehört oder ob
38+
diese manuell installiert werden muss.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Importiere den Counter
2+
from collections import Counter
3+
4+
5+
# Zähle, wie oft einzelne Worte in einem Satz vorkommen
6+
def zaehle_wortvorkommen(satz):
7+
# Zerlege den Satz in einzelne Worte
8+
# satz.split() trennt den Text dabei immer bei einem Leerzeichen, Tab oder auch Zeilenumbrüchen!
9+
worte = satz.split()
10+
11+
# Erzeuge einen Zähler, der ermittelt, welche Worte und wie oft diese in dem Satz vorkommen
12+
counter = Counter(worte)
13+
14+
# Gib den Counter zurück, damit wir damit weiterarbeiten können
15+
return counter
16+
17+
18+
# Zähle die Wortvorkommen in den beiden Sätzen und gib aus, wie oft welches Wort vorkommt:
19+
print(zaehle_wortvorkommen("Das ist ein langer langer langer Satz mit vielen Wortvorkommen"))
20+
print(zaehle_wortvorkommen("Das ist ein Satz mit wenigen Wortvorkommen"))

Mit Bibliotheken arbeiten/Bibliotheken/task3/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
type: edu
2+
custom_name: Neue Bibliotheken installieren
3+
files:
4+
- name: __init__.py
5+
visible: false
6+
- name: tests/__init__.py
7+
visible: false
8+
- name: tests/test_task.py
9+
visible: false
10+
- name: task.py
11+
visible: true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Neue Bibliotheken installieren
2+
3+
Neue Bibliotheken können über die Kommandozeile installiert werden.
4+
Das ist in vielen Fällen sinnvoll, zum Beispiel wenn man ein Projekt nur verwenden will, das jemand anderes bereits
5+
programmiert hat.
6+
7+
Die meisten Projekte liefern eine Datei mit, die `requirements.txt` heißt.
8+
Ist eine solche Datei vorhanden, dann lassen sich die notwendigen Bibliotheken mittels des Programms `pip`
9+
(**P**ip **I**nstalls **P**ackages) herunterladen und installieren.
10+
Dazu navigiert man zu dem Ordner, in dem die Datei liegt und ruft dann folgenden Befehl auf:
11+
12+
```bash
13+
pip install -r requirements.txt
14+
```
15+
16+
Da wir in PyCharm arbeiten und diese Datei (noch) nicht besitzen, werden wir vorerst auf die Funktionalität unserer IDE
17+
zurückgreifen:
18+
19+
Im nebenstehenden Beispiel wird ein sogenannter `DataFrame` erzeugt.
20+
Dieser stammt aus der Bibliothek `pandas`.
21+
`pandas` ist eine Bibliothek, die nicht zur Grundausstattung von Python gehört – sie muss nachträglich installiert
22+
werden.
23+
Dies wollen wir nun tun, indem wir sie importieren:
24+
25+
Schreibe dazu die Zeile
26+
27+
```python
28+
import pandas
29+
```
30+
31+
in die erste Zeile der Datei.
32+
PyCharm wird dir nun `pandas` rot unterschlängeln und dich somit darauf hinweisen, dass hier etwas nicht stimmt.
33+
Du kannst mittels Klick auf die rote Glühbirne und dann im sich öffnenden Kontextmenü "Install pandas" auswählen.
34+
Oder du öffnest das Menü mittels Tastendruck auf Strg-Enter bzw. Alt-Enter und wählst dann dieselbe Option aus.
35+
36+
Nun siehst du am unteren Rand von PyCharm eine Fortschrittsanzeige, die dich darüber informiert, was gerade getan wird.
37+
PyCharm installiert jetzt mehrere Dinge:
38+
Zum einen die Bibliothek `pandas` und zum anderen auch `numpy` (eine weitere Bibliothek zur Berechnung von
39+
verschiedenen Dingen) sowie weitere Abhängigkeiten.
40+
Du merkst schon:
41+
Eine Bibliothek kommt selten allein!
42+
43+
Wenn du dir den Code nun noch einmal anschaust, dann dürfte dir auffallen, dass wir statt `pandas` `pd` schreiben.
44+
Das ist gängige Praxis, denn Programmierer sind faul und kürzen Dinge ab, wo es irgend möglich ist.
45+
Deswegen können wir die Zeile `import pandas` oben um den Zusatz `as pd` ergänzen:
46+
47+
```python
48+
import pandas as pd
49+
```
50+
51+
Damit definieren wir, dass wir die Bibliothek `pandas` verwenden wollen, aber statt `pandas` zu schreiben, wollen wir
52+
sie mit `pd` abkürzen.
53+
54+
Hast du die Bibliothek `pandas` erfolgreich importiert und den Alias `pd` verwendet, dann kannst du nun auf "Check"
55+
klicken und deine Eingabe überprüfen lassen.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import pandas as pd
2+
3+
4+
def create_dataframe():
5+
df = pd.DataFrame([
6+
[1, 2, 3],
7+
[4, 5, 6],
8+
[7, 8, 9]
9+
], ["A", "B", "C"], ["D", "E", "F"])
10+
11+
return df
12+
13+
14+
print(create_dataframe())

Mit Bibliotheken arbeiten/Bibliotheken/task3/tests/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import unittest
2+
3+
from task import create_dataframe
4+
5+
6+
# todo: replace this with an actual test
7+
class TestCase(unittest.TestCase):
8+
def test_add(self):
9+
self.assertIsNotNone(create_dataframe())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
content:
2+
- task1
3+
- task2
4+
- task3
5+
- task4

Mit Bibliotheken arbeiten/Pandas/task1/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
firstname,lastname
2+
Kiya,Leblanc
3+
Kerry,Martin
4+
Tyrell,Koch
5+
Simeon,Cannon
6+
Firat,Spooner
7+
Mikail,Hess
8+
Riley,Ryan
9+
Issa,Ahmed
10+
Rayan,Melton
11+
Charly,Wong
12+
Alessandro,Mata
13+
Kaison,Todd
14+
Emerson,Dawe
15+
Hudson,Whitley
16+
Max,Mullen
17+
Neo,Cortes
18+
Ritik,Kirkland
19+
Asif,Ramos
20+
Kymani,Sherman
21+
Amin,Olsen
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
type: edu
2+
custom_name: Daten mit Pandas einlesen
3+
files:
4+
- name: __init__.py
5+
visible: false
6+
- name: tests/__init__.py
7+
visible: false
8+
- name: names.csv
9+
visible: true
10+
- name: task.py
11+
visible: true
12+
placeholders:
13+
- offset: 0
14+
length: 19
15+
placeholder_text: '# Pandas importieren und zu pd umbenennen'
16+
- offset: 52
17+
length: 33
18+
placeholder_text: '# DataFrame aus CSV-Datei einlesen'
19+
- offset: 90
20+
length: 16
21+
placeholder_text: '# DataFrame zurückgeben'
22+
- name: tests/test_task.py
23+
visible: false
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Daten mit Pandas einlesen
2+
3+
"Pandas" steht für "Python Data Analysis Library" – nicht so offensichtlich, aber umso treffender, wenn man den
4+
Funktionsumfang betrachtet, den die Bibliothek bietet.
5+
6+
Wie du in der letzten Aufgabe aus dem vorigen Abschnitt schon gesehen hast, geht es bei Pandas ganz oft um sogenannte
7+
`DataFrames`.
8+
`DataFrames` kannst du verstehen wie Tabellen, in denen Daten zeilen- und spaltenweise angezeigt, ausgewertet und
9+
manipuliert werden können.
10+
11+
Wir wollen mit Pandas einige kleine Übungen machen, um ein Gefühl dafür zu bekommen, wie man damit umgeht und welche
12+
Möglichkeiten es gibt, um mit Daten umzugehen.
13+
14+
In diesem Beispiel soll es darum gehen, die Datei `names.csv` einzulesen.
15+
Hierbei handelt es sich wieder um eine CSV-Datei – den Umgang damit hast du in der letzten Übung kennengelernt.
16+
Dieses Mal verwenden wir allerdings Pandas und nicht den CSV-Reader, den Python standardmäßig mitliefert.
17+
18+
Um eine CSV-Datei zu laden, können wir die Funktion `read_csv` verwenden, die `pandas` oder `pd` anbietet:
19+
20+
```python
21+
dataframe = pd.read_csv(filename)
22+
```
23+
24+
Damit erledigen wir innerhalb von einer Zeile das, was mit dem CSV-Reader viele Zeilen benötigt hat – vom Öffnen der
25+
Datei, das Erzeugen des Readers, das zeilenweise Einlesen der Datei...
26+
27+
Die Funktion `load_names` soll diesen `DataFrame` nun zurückgeben, damit wir damit weiterarbeiten können.
28+
Beispielsweise gibt uns die Methode `head` des `DataFrame` den "Kopf" der Tabelle aus, die er repräsentiert.
29+
Im Normalfall sind das die Titel der Spalten und die ersten fünf Zeilen, jedoch kann man als Parameter angeben, wie
30+
viele Zeilen man anzeigen lassen möchte.
31+
Da die Datei 20 Zeilen hat, lassen wir uns alle 20 anzeigen.
32+
33+
Versuche nun eigenständig, die Platzhalter im Code zu füllen:
34+
35+
- importiere die Bibliothek Pandas und benenne sie zu `pd`
36+
- lade in der Funktion `load_names` die CSV-Datei, deren Dateiname als Parameter übergeben wird
37+
- speichere den `DataFrame` in einer Variablen
38+
- gib diesen mittels `return` zurück
39+
40+
Wenn du alles richtig gemacht hast, solltest du in der Konsole, wenn du das Programm über den grünen Pfeil neben Zeile
41+
1 ausführst, eine Liste von Namen sehen.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import pandas as pd
2+
3+
4+
def load_names(filename):
5+
dataframe = pd.read_csv(filename)
6+
return dataframe
7+
8+
9+
print(load_names("names.csv").head(20))

Mit Bibliotheken arbeiten/Pandas/task1/tests/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import unittest
2+
import pandas as pd
3+
4+
from task import load_names
5+
6+
7+
class TestCase(unittest.TestCase):
8+
def test_add(self):
9+
self.assertTrue(isinstance(load_names("names.csv"), pd.DataFrame), msg="load_names gibt einen DataFrame zurück")

Mit Bibliotheken arbeiten/Pandas/task2/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
firstname,lastname
2+
Kiya,Leblanc
3+
Kerry,Martin
4+
Tyrell,Koch
5+
Simeon,Cannon
6+
Firat,Spooner
7+
Mikail,Hess
8+
Riley,Ryan
9+
Issa,Ahmed
10+
Rayan,Melton
11+
Charly,Wong
12+
Alessandro,Mata
13+
Kaison,Todd
14+
Emerson,Dawe
15+
Hudson,Whitley
16+
Max,Mullen
17+
Neo,Cortes
18+
Ritik,Kirkland
19+
Asif,Ramos
20+
Kymani,Sherman
21+
Amin,Olsen
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
type: edu
2+
custom_name: Daten verändern und hinzufügen
3+
files:
4+
- name: __init__.py
5+
visible: false
6+
- name: tests/__init__.py
7+
visible: false
8+
- name: names.csv
9+
visible: true
10+
- name: task.py
11+
visible: true
12+
placeholders:
13+
- offset: 83
14+
length: 31
15+
placeholder_text: '# korrigiere den Namen von Simeon Cannon zu Simon Cannon'
16+
- offset: 119
17+
length: 16
18+
placeholder_text: '# Entferne Asif Ramos von der Liste'
19+
- offset: 140
20+
length: 55
21+
placeholder_text: '# Füge die Spalte "fullname" hinzu, in der der Vor- und Nachname
22+
der Person, getrennt mit einem Leerzeichen, steht'
23+
- offset: 200
24+
length: 39
25+
placeholder_text: '# Berechne die Länge des Namens der Person'
26+
- name: tests/test_task.py
27+
visible: false

0 commit comments

Comments
 (0)