Python 101 Übungsblatt 2#

Übungsblatt 2, Punkte: 2

Anliegen dieses LN: Ergebnissicherung zur Übung der ersten beiden Wochen, insbesondere zu

Diese Übungsblatt wird ausgegeben und erklärt am Mi 2023-10-25 in der Vorlesung.

Bearbeitung und Abgabe:

Quelle der Aufgaben: http://jbusse.de/jvdp-jb/f_f1_AUTO.html | http://jbusse.de/jvdp-jb/f_f2_AUTO.html | http://jbusse.de/jvdp-jb/e_r1b.html

Aufgabe 1: Listen#

Gegeben: Eine Liste Z von Zahlen

Z = [1, 7, 3, -6, 7, 12 ]

Gesucht: Eine Liste der Zahlen in Z, die durch 3 teilbar sind.

Z_3 = None
... # 
assert Z_3 == [ 3, -6, 12 ]
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In [3], line 1
----> 1 assert Z_3 == [ 3, -6, 12 ]

AssertionError: 

Aufgabe 2: Dicts#

Sei gegeben:

shopping_dict = {"apple": 5, "banana": 4, "milk": 2}
shopping_dict_len = len(shopping_dict)

print(shopping_dict) 
{'apple': 5, 'banana': 4, 'milk': 2}

Anzahl der Keys

... # 
assert Anzahl_der_Keys == shopping_dict_len
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In [5], line 2
      1 ... # 
----> 2 assert Anzahl_der_Keys == shopping_dict_len

NameError: name 'Anzahl_der_Keys' is not defined

Ist der key “ham” enthalten? Verschiedene Lösungen, incl. get()

... # 
... # 
assert ham_in_shopping_dict == False
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In [7], line 1
----> 1 assert ham_in_shopping_dict == False

NameError: name 'ham_in_shopping_dict' is not defined

Liste aller keys; Liste aller values:

... # 
... # 
assert set(shopping_dict_keys) == { 'apple', 'banana', 'milk' }
assert set(shopping_dict_values) == { 2, 4, 5 }
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In [9], line 1
----> 1 assert set(shopping_dict_keys) == { 'apple', 'banana', 'milk' }
      2 assert set(shopping_dict_values) == { 2, 4, 5 }

NameError: name 'shopping_dict_keys' is not defined

Erhöhe die Anzahl der “apple” um 2

... # 
Ellipsis
assert shopping_dict["apple"] == 7
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In [11], line 1
----> 1 assert shopping_dict["apple"] == 7

AssertionError: 

Füge hinzu:

  • “ham”: 1

  • “apple”: 999 (“apple” gibt es schon: Aussagekräftige Warnung ausgeben!)

# ham: 1
... # 

# apple: 999
key = "apple"
... # 
... # 
shopping_dict
{'apple': 5, 'banana': 4, 'milk': 2}

Lösche aus dem dict:

  • “milk”

  • “steak”

Gib als Ergebnis der Löschoperation den Wert des gelöschten Elementes zurück. Falls es das Element nicht gibt, gib ersatzweise None zurück.

key = "milk"
... # 

key = "steak"
... # 

Aufgabe 3#

Grundlage der Aufgabe: Runde 1a: grundlagende Datentypen und Datenstrukturen .

Gegeben:

Gesucht:

  • Price_avg: berechne das arithmetisches Mittel („Durchschnitt“) des Preises aller Häuser.

  • Lege Price_centered an: Subtrahiere vom jeweiligen Preis den Durchschnittspreis.

  • Bestimme zu Price_centered die https://de.wikipedia.org/wiki/Empirische_Varianz.

  • Lege Price_standardized an: Dividiere jeden Wert aus Price_centered durch die Standardabweichung (Wurzel der Varianz).

In Runde 1a: grundlagende Datentypen und Datenstrukturen lösen wir diese Aufgabe auf Basis von orient='list'.

Aufgabe hier:

  • Lösung auf Basis der Variablen melb_orient_dict, also auf Basis von orient='dict'.

Das ist eine kleine Transfer-Aufgabe. Gerne dürfen Sie den existierenden Code aus der Vorlesung etc. wiederverwenden.

Wir lesen die ersten n Zeilen des Datensatze Melbourne Housing Pandas Dataframe ein. Download Datensatz:

  • melb_data.csv

  • Wohin speichern? Am einfachsten in das selbe Verzeichnis legen, in dem dieses Notebook liegt.

import pandas as pd

nrows = 3
usecols = [ 'Landsize', 'Rooms', 'Price', 'Date', 'Address', 'Type']
melb_df = pd.read_csv( "./melb_data.csv", 
            usecols = usecols,
            nrows = nrows  )
melb_df
Address Rooms Type Price Date Landsize
0 85 Turner St 2 h 1480000.0 3/12/2016 202.0
1 25 Bloomburg St 2 h 1035000.0 4/02/2016 156.0
2 5 Charles St 3 h 1465000.0 4/03/2017 134.0
# jede Spalte ein Dict
melb_orient_dict = melb_df.to_dict(orient='dict') # orient='dict': default
melb_orient_dict
{'Address': {0: '85 Turner St', 1: '25 Bloomburg St', 2: '5 Charles St'},
 'Rooms': {0: 2, 1: 2, 2: 3},
 'Type': {0: 'h', 1: 'h', 2: 'h'},
 'Price': {0: 1480000.0, 1: 1035000.0, 2: 1465000.0},
 'Date': {0: '3/12/2016', 1: '4/02/2016', 2: '4/03/2017'},
 'Landsize': {0: 202.0, 1: 156.0, 2: 134.0}}
# hier die Lösung, typischerweise in mehr als nur einer Jupyter-Zelle
# ggf. noch mehr Code
# u.s.w.

Zur Kontrolle kann man das so entstandene dict auch wieder in ein DataFrame umwandeln, Doku:

melb2_index_df = pd.DataFrame.from_dict(melb_orient_dict)
melb2_index_df
Address Rooms Type Price Date Landsize
0 85 Turner St 2 h 1480000.0 3/12/2016 202.0
1 25 Bloomburg St 2 h 1035000.0 4/02/2016 156.0
2 5 Charles St 3 h 1465000.0 4/03/2017 134.0