Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:daten:processing [2023-05-26 14:27] hofgf_informatik:daten:processing [2025-06-06 08:29] (aktuell) – [Aufgabe 6] hof
Zeile 1: Zeile 1:
 # Data Processing in Python # Data Processing in Python
 +<html><script type="module" src="https://bottom.ch/ksr/ed/bottom-editor.js"></script></html>
  
 {{ :gf_informatik:daten:dataprocessing.pptx | Präsentation}} {{ :gf_informatik:daten:dataprocessing.pptx | Präsentation}}
Zeile 6: Zeile 7:
  
 Wieviel ist viel? 1000?  Wieviel ist viel? 1000? 
 +
 #### Aufgabe 1 #### Aufgabe 1
  
Zeile 25: Zeile 27:
  
    * Wenn Dateien gelesen oder geschrieben werden, müssen sie beim Betriebssystem reserviert werden. Mit `with` wird sichergestellt, dass die Datei nicht offen bleibt sondern nach dem Lesevorgang wieder geschlossen wird.    * Wenn Dateien gelesen oder geschrieben werden, müssen sie beim Betriebssystem reserviert werden. Mit `with` wird sichergestellt, dass die Datei nicht offen bleibt sondern nach dem Lesevorgang wieder geschlossen wird.
-   * Die Datei (hier 'dateiname.txt') muss sich im gleichen Ordner befinden wie die Python-Datei.+   * Die Datei (hier 'dateiname.txt') muss sich im Ordner befinden, wo Python ausgeführt wird. 
 +   * Der Typ einer Datei wird über die Dateierweiterung (`.txt`, en. _extension_) bestimmt. Windows versteckt die Endungen standardmässig, es ist empfehlenswert, [[https://support.microsoft.com/de-de/windows/allgemeine-dateierweiterungen-in-windows-da4a4430-8e76-89c5-59f7-1cdbbc75cb01|diese anzuzeigen]].
    * `'r'` bedeutet *read*, dass die Textdatei nur gelesen und nicht verändert wird.    * `'r'` bedeutet *read*, dass die Textdatei nur gelesen und nicht verändert wird.
  
 #### Aufgabe 2 #### Aufgabe 2
  
-Lade die Datei [[https://kantonsschuleromanshorn.sharepoint.com/:f:/s/FSInformatik/Ek-Hi_stH2RMjDa-wQN9jekBMeF_YD6rvhmibDlNglGWxw?e=Y3AX65|gemeinden.csv]] herunter und speichere sie im Ordner, wo du dein Python-Programm abspeicherst. Verwende obigen Python-Code, um herauszufinden, wieviel Zeilen die Datei hat +Lade die Datei [[https://kantonsschuleromanshorn.sharepoint.com/:f:/s/FSInformatik/Ek-Hi_stH2RMjDa-wQN9jekBMeF_YD6rvhmibDlNglGWxw?e=Y3AX65|gemeinden.csv]] herunter und speichere sie im Ordner, wo du dein Python-Programm abspeicherst. Verwende obigen Python-Code, um herauszufinden, wieviel Zeilen die Datei hat. 
-.+ 
 +##### Encoding 
 +Achtung, Mac-Users: Die Datei verwendet die Latin1-Codierung, einer Erweiterung von [[gf_informatik:verschluesselung:codierung|ASCII]], um auch Umlaute anzeigen zu könnenDiese ist in Windows voreingestellt. MacOS hingegen verwendet standardmässig die universelle Unicode (UTF-8) Codierung. Beim Öffnen der Datei kann die Abweichung korrigiert werden: 
 + 
 +<code python> 
 +# Specify text encoding when opening a file. 
 +with open('dateiname.txt', 'r', encoding='latin1') as infile: 
 +</code> 
 ## Dateien schreiben ## Dateien schreiben
 Schreiben funktioniert ganz ähnlich wie lesen, aber als zweites Argument muss `'w'` (für _write_) angegeben werden: Schreiben funktioniert ganz ähnlich wie lesen, aber als zweites Argument muss `'w'` (für _write_) angegeben werden:
Zeile 64: Zeile 75:
   * `split(char)` erzeugt aus einem String eine Liste von Werten, die mit dem angegebenen Trennzeichen abgetrennt sind:   * `split(char)` erzeugt aus einem String eine Liste von Werten, die mit dem angegebenen Trennzeichen abgetrennt sind:
     * `"Aarau,AG,21726,12.36".split(',')` erzeugt die Liste `["Aarau","AG","21726","12.36"]`     * `"Aarau,AG,21726,12.36".split(',')` erzeugt die Liste `["Aarau","AG","21726","12.36"]`
-  * `strip()` gibt den selben String zurück, aber ohne Leerschläge an beiden Enden.+  * `strip()` gibt den selben String zurück, aber ohne Leerschläge an beiden Enden
 +    * `"  Romans Horn  ".strip()` gibt `"Romans Horn"` zurück.
  
  
Zeile 73: Zeile 85:
   * Mit `print(values[1])` wird der Kanton (die zweite Spalte) ausgegeben.   * Mit `print(values[1])` wird der Kanton (die zweite Spalte) ausgegeben.
   * Wieviele Gemeinden gibt es im Kanton Thurgau? Wieviele im Kanton Bern?   * Wieviele Gemeinden gibt es im Kanton Thurgau? Wieviele im Kanton Bern?
 +
 +<nodisp 1>
 +++++Lösung:|
 +<html><bottom-editor zip='https://bottom.ch/ksr/py/files/2m.zip'>with open('gemeinden.csv', 'r') as infile:
 +    be = 0
 +    tg = 0
 +    for line in infile:
 +        tokens = line.split(',')
 +        canton = tokens[1]
 +        if canton == 'TG':
 +            tg = tg + 1
 +        elif canton == 'BE':
 +            be = be + 1
 +    print("Bern", be)
 +    print("Thurgau", tg)
 +</bottom-editor></html>
 +
 +++++
 +</nodisp>
  
  
Zeile 83: Zeile 114:
 Allerdings funktioniert das nur, wenn der String auch wirklich eine Zahl darstellt. Sonst wird eine *Exception* geworfen; wir können sie mit `try...except` auffangen: Allerdings funktioniert das nur, wenn der String auch wirklich eine Zahl darstellt. Sonst wird eine *Exception* geworfen; wir können sie mit `try...except` auffangen:
  
-<code python>+<html><bottom-editor>
 try: try:
     my_number = int("abc" # may throw an exception     my_number = int("abc" # may throw an exception
Zeile 89: Zeile 120:
 except ValueError: except ValueError:
     pass                    # executed if an exception was thrown     pass                    # executed if an exception was thrown
-</code>+</bottom-editor></html>
  
 #### Aufgabe 5 #### Aufgabe 5
Zeile 95: Zeile 126:
    * welche Spalten (Indices) gehören zu diesen Werten?    * welche Spalten (Indices) gehören zu diesen Werten?
    * verwendest du `int()` oder `float()`?    * verwendest du `int()` oder `float()`?
- 
  
 #### Aufgabe 6 #### Aufgabe 6
Zeile 109: Zeile 139:
 ++++ ++++
  
-<nodisp 2>+<nodisp 1>
 ++++Code:| ++++Code:|
-<code python>+<html><bottom-editor zip='https://bottom.ch/ksr/py/files/2m.zip'>
 def find_smallest_population(): def find_smallest_population():
     with open('gemeinden.csv') as towns:     with open('gemeinden.csv') as towns:
 +        # Search for the smallest, so start out with a value larger than any expected.
         min_pop = 1000000         min_pop = 1000000
         town = None         town = None
Zeile 119: Zeile 150:
             cells = line.split(',')             cells = line.split(',')
             try:             try:
 +                # Population is in the third column, and it is an integer.
                 population = int(cells[2])                 population = int(cells[2])
                 if population < min_pop:                 if population < min_pop:
 +                    # We found a town smaller than the currently known smallest.
                     min_pop = population                     min_pop = population
                     town = cells[0]                     town = cells[0]
Zeile 128: Zeile 161:
  
 print("Smallest town: ", find_smallest_population()) print("Smallest town: ", find_smallest_population())
 +</bottom-editor></html>
 +++++
 +</nodisp>
  
 +<nodisp 1>
 +++++Code:|
 +<html><bottom-editor zip='https://bottom.ch/ksr/py/files/2m.zip'>
 def find_largest_area(): def find_largest_area():
     with open('gemeinden.csv') as towns:     with open('gemeinden.csv') as towns:
 +        # We search for the largest, so start with a small value.
         max_area = 0         max_area = 0
         town = None         town = None
Zeile 136: Zeile 176:
             cells = line.split(',')             cells = line.split(',')
             try:             try:
 +                # Area is in the fourth column, and it is a floating point number.
                 area = float(cells[3])                 area = float(cells[3])
                 if area > max_area:                 if area > max_area:
 +                    # Found a town with larger area than the largest known so far.
                     max_area = area                     max_area = area
                     town = cells[0]                     town = cells[0]
Zeile 145: Zeile 187:
  
 print("Largest area", find_largest_area()) print("Largest area", find_largest_area())
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 155: Zeile 197:
   * Wieviele Gemeinden hat der Kanton Glarus?   * Wieviele Gemeinden hat der Kanton Glarus?
  
-<nodisp 2>+<nodisp 1>
 ++++Code:| ++++Code:|
-<code python>+<html><bottom-editor zip='https://bottom.ch/ksr/py/files/2m.zip'>
 def summarize_canton(canton): def summarize_canton(canton):
     with open('gemeinden.csv', 'r') as infile:     with open('gemeinden.csv', 'r') as infile:
Zeile 211: Zeile 253:
 summarize_canton('TI') summarize_canton('TI')
 summarize_canton('GL') summarize_canton('GL')
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
  • gf_informatik/daten/processing.1685111254.txt.gz
  • Zuletzt geändert: 2023-05-26 14:27
  • von hof