Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:daten_sca:maps_python [2023-06-12 16:00] – [Aufgabe 3] sca | gf_informatik:daten_sca:maps_python [2023-06-20 18:39] (aktuell) – [Aufgabe 6: Abstimmungsresultate] sca | ||
|---|---|---|---|
| Zeile 35: | Zeile 35: | ||
| Ein geschlossenes **Polygon** (Vieleckt) notiert man so: | Ein geschlossenes **Polygon** (Vieleckt) notiert man so: | ||
| < | < | ||
| - | " | + | " |
| </ | </ | ||
| In diesem Falle erhält man natürlich ein Dreieck. Beachte hier die Verwendung von **doppelten Klammern**. | In diesem Falle erhält man natürlich ein Dreieck. Beachte hier die Verwendung von **doppelten Klammern**. | ||
| Zeile 43: | Zeile 43: | ||
| " | " | ||
| " | " | ||
| - | " | + | " |
| </ | </ | ||
| - | ==== WKR in Google Maps ==== | + | ==== WKT in Google Maps ==== |
| Um Punkte, Linien und Polygone in Google Maps einzuzeichnen, | Um Punkte, Linien und Polygone in Google Maps einzuzeichnen, | ||
| Zeile 74: | Zeile 74: | ||
| ===== Aufgaben ===== | ===== Aufgaben ===== | ||
| + | Arbeite *nicht* mit Excel / Google Sheets, sondern mit einem reinen **Texteditor** wie **Visual Studio Code**. | ||
| === Aufgabe 1: Big 4 im TG === | === Aufgabe 1: Big 4 im TG === | ||
| - | Erstelle ein leeres CSV-File mit Header " | + | Erstelle ein leeres CSV-File mit Header " |
| - | + | ||
| - | * Vier Punkte für die Gemeinden Frauenfeld, Weinfelden, Romanshorn, Kreuzlingen | + | |
| - | * Linie von Weinfelden nach Kreuzlingen | + | |
| - | * Viereck, welches | + | |
| Importiere das File dann in Google Maps und stelle sicher, dass alles stimmt. | Importiere das File dann in Google Maps und stelle sicher, dass alles stimmt. | ||
| Zeile 94: | Zeile 91: | ||
| Spielregel: Es müssen mind. zwei unterschiedliche Kontinenten vorkommen. | Spielregel: Es müssen mind. zwei unterschiedliche Kontinenten vorkommen. | ||
| - | === Aufgabe 3 === | + | === Aufgabe 3: WKT mit Python |
| Von nun arbeiten wir wieder mit Python und dem folgenden Datensatz, der die Koordinaten aller Bahnhöfe in der Schweiz beinhaltet: {{ : | Von nun arbeiten wir wieder mit Python und dem folgenden Datensatz, der die Koordinaten aller Bahnhöfe in der Schweiz beinhaltet: {{ : | ||
| - | **Ziel:** Generiere mithilfe von Python ein CSV-File für Google Maps, welches die Koordinaten einiger Ortschaften beinhaltet. Verwende den SBB-Datensatz, | + | **Auftrag:** |
| - | Ortschaften: | + | * Generiere mithilfe von Python ein CSV-File für Google Maps, welches die Koordinaten einiger Ortschaften |
| - | + | | |
| - | * St. Gallen | + | |
| - | | + | |
| - | | + | |
| ++++Tipps| | ++++Tipps| | ||
| Zeile 117: | Zeile 112: | ||
| ++++ | ++++ | ||
| + | |||
| + | === Aufgabe 4: Gemeinden mit Anfangsbuchstaben === | ||
| + | |||
| + | 1. Wähle einen Anfangsbuchstaben, | ||
| + | 1. Ermittle nun alle Bahnhöfe, die mit diesem Buchstaben beginnen ... | ||
| + | 1. und generiere das entsprechende CSV-File. | ||
| + | 1. Importiere es in Google Maps, um diese anzuzeigen. | ||
| + | |||
| + | === Aufgabe 5: Städte mit vielen Einwohnern === | ||
| + | |||
| + | Identifiziere (möglichst) alle Städte mit $10' | ||
| + | |||
| + | Das Problem ist, dass der SBB-Datensatz die Anzahl Einwohner nicht beinhaltet. Deshalb greifen wir auf den Gemeinden-Datensatz vom Thema [[gf_informatik: | ||
| + | |||
| + | 1. Gehe jede Gemeinde im Gemeinden-Datensatz durch und finde heraus, ob sie mehr als $10' | ||
| + | 1. Falls ja versuchst du im SBB-Datensatz die Koordinaten dieser Gemeinde zu ermitteln. | ||
| + | 1. **Achtung: | ||
| + | 1. Falls du einen passenden Eintrag gefunden hast im SBB-Datensatz, | ||
| + | 1. Optional kann man als " | ||
| + | |||
| + | |||
| + | |||
| + | === Aufgabe 5+ (Optional) === | ||
| + | |||
| + | Erweitere die letzte Aufgabe: Es fehlen noch einige Ortschaften, | ||
| + | |||
| + | === Aufgabe 6: Abstimmungsresultate === | ||
| + | |||
| + | Zu Abstimmungen kann man jeweils die detaillierten Daten im JSON-Format herunterladen. Hier der Link zu den | ||
| + | [[https:// | ||
| + | |||
| + | Hier direkt zur | ||
| + | [[https:// | ||
| + | |||
| + | 1. Lade den Datensatz zur aktuellsten eidgenössischen Abstimmung herunter. | ||
| + | 1. Verschaffe dir einen Überblick: Wie ist der Datensatz aufgebaut? Tipps: | ||
| + | 1. Mit `.keys()` kannst du sehen, welches die Schlüssel eines Dicts sind. | ||
| + | 1. Mit `type(...)` kannst du ermitteln, um was für einen Typ es sich handelt. | ||
| + | 1. Achtung: Der Datensatz beinhaltet ein Dict, welches Listen enthält, welches wiederum Dicts enthält u.s.w. | ||
| + | 1. Falls du überfordert bist damit, findest du unten die Antwort | ||
| + | 1. Finde in diesem Datensatz die Anzahl Ja-Stimmen zu allen Vorlagen in *deinem* Wohnort. | ||
| + | 1. Finde die extremsten Gemeinden zu den jeweiligen Vorgaben: Höchste und tiefste Anzahl Ja- resp. Nein-Stimmen | ||
| + | 1. **Zusatzaufgabe: | ||
| + | |||
| + | ++++Tipps: Aufbau Datensatz inkl. Beispiel| | ||
| + | <code python> | ||
| + | # lade Datensatz (JSON) in ein dict mit Name data | ||
| + | |||
| + | vorlagen = data[' | ||
| + | vorlage = vorlagen[0] # vorlage beinhaltet alle Infos zur ersten Vorlage (erstes Element der Liste vorlagen | ||
| + | print(vorlage[' | ||
| + | |||
| + | kantone = vorlage[' | ||
| + | kanton = kantone[3] # Infos zu einem Kanton (Zahl 0 - 25, weil 26 Kantone) | ||
| + | print(kanton[' | ||
| + | |||
| + | gemeinden = kanton[' | ||
| + | gemeinde = gemeinden[7] # Alle Infos zu einer Gemeinde | ||
| + | |||
| + | resultat = gemeinde[' | ||
| + | jaStimmenInProzent = resultat[' | ||
| + | """ | ||
| + | </ | ||
| + | ++++ | ||
| + | |||
| + | |||
| ===== Lösungen ===== | ===== Lösungen ===== | ||
| Zeile 136: | Zeile 197: | ||
| for town in towns: | for town in towns: | ||
| out_file.write(town + ',' | out_file.write(town + ',' | ||
| + | </ | ||
| + | ++++ | ||
| + | |||
| + | ++++Aufgabe 5| | ||
| + | |||
| + | Reguläre Lösung | ||
| + | <code python> | ||
| + | import json | ||
| + | |||
| + | INHABITANTS_MIN = 10000 | ||
| + | |||
| + | with open(" | ||
| + | sbb = json.load(json_file) | ||
| + | | ||
| + | with open(" | ||
| + | gemeinden = json.load(json_file) | ||
| + | |||
| + | with open(' | ||
| + | out_file.write(' | ||
| + | |||
| + | for town in gemeinden: | ||
| + | if gemeinden[town][' | ||
| + | try: | ||
| + | out_file.write(town + ',' | ||
| + | except: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | Mit optionalem Part: | ||
| + | <code python> | ||
| + | import json | ||
| + | |||
| + | INHABITANTS_MIN = 50000 | ||
| + | |||
| + | with open(" | ||
| + | sbb = json.load(json_file) | ||
| + | | ||
| + | with open(" | ||
| + | gemeinden = json.load(json_file) | ||
| + | |||
| + | def generate_wkt_point(town): | ||
| + | return '"' | ||
| + | |||
| + | with open(' | ||
| + | out_file.write(' | ||
| + | |||
| + | for town in gemeinden: | ||
| + | if gemeinden[town][' | ||
| + | success = False | ||
| + | for ext in ['',' | ||
| + | try: | ||
| + | out_file.write(generate_wkt_point(town + ext)) | ||
| + | success = True | ||
| + | break | ||
| + | except: | ||
| + | continue | ||
| + | if not success: | ||
| + | for t in sbb: # if not found yet, split and try to match first part | ||
| + | if t.split()[0] == town: | ||
| + | out_file.write('"' | ||
| + | print(town) | ||
| + | break | ||
| </ | </ | ||
| ++++ | ++++ | ||
| + | |||
| </ | </ | ||