mirror of
https://github.com/Vale54321/BigData.git
synced 2025-12-11 09:59:33 +01:00
239 lines
6.0 KiB
Python
239 lines
6.0 KiB
Python
import math
|
|
import time
|
|
from typing import Iterable, List, Tuple, Dict
|
|
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
def stats_min_max_avg_count_sum(numbers: Iterable[float]) -> Tuple[float, float, float, int, float]:
|
|
nums = list(numbers)
|
|
count = len(nums)
|
|
if count == 0:
|
|
raise ValueError("Leere Eingabeliste nicht erlaubt")
|
|
s = sum(nums)
|
|
return (min(nums), max(nums), s / count, count, s)
|
|
|
|
|
|
def catalan_list(n: int) -> List[int]:
|
|
if n < 0:
|
|
raise ValueError("n muss >= 0 sein")
|
|
c = [0] * (n + 1)
|
|
c[0] = 1
|
|
for i in range(1, n + 1):
|
|
acc = 0
|
|
for k in range(i):
|
|
acc += c[k] * c[i - 1 - k]
|
|
c[i] = acc
|
|
return c
|
|
|
|
|
|
def read_adsb_lonlat_by_aircraft(path: str) -> Dict[str, Tuple[List[float], List[float]]]:
|
|
flights: Dict[str, Tuple[List[float], List[float]]] = {}
|
|
with open(path, "r", encoding="utf-8") as f:
|
|
for line in f:
|
|
parts = line.strip().split()
|
|
if len(parts) < 6:
|
|
continue
|
|
ac_id = parts[0]
|
|
# parts[4] = lat, parts[5] = lon (laut Aufgabenbeschreibung)
|
|
try:
|
|
lat = float(parts[4])
|
|
lon = float(parts[5])
|
|
except ValueError:
|
|
continue
|
|
if ac_id not in flights:
|
|
flights[ac_id] = ([], [])
|
|
flights[ac_id][0].append(lon)
|
|
flights[ac_id][1].append(lat)
|
|
return flights
|
|
|
|
|
|
# ------------------------------
|
|
# Aufgaben
|
|
# ------------------------------
|
|
|
|
def aufgabe2_a() -> None:
|
|
print("a) Arithmetik")
|
|
vals = [
|
|
7 + 5,
|
|
7 - 5,
|
|
7 * 5,
|
|
7 / 5,
|
|
7 % 5,
|
|
7 ** 5,
|
|
]
|
|
print(vals)
|
|
|
|
|
|
def aufgabe2_b() -> None:
|
|
print("b) Listen")
|
|
lst = [10, 20, 30, 40, 50]
|
|
print("Start:", lst)
|
|
print("Index 0:", lst[0], "Index -1:", lst[-1])
|
|
print("Slice [1:4]:", lst[1:4])
|
|
print("Slice [:3]:", lst[:3])
|
|
print("Slice [2:]:", lst[2:])
|
|
lst.insert(2, 999)
|
|
print("Nach insert(2,999):", lst)
|
|
del lst[3]
|
|
print("Nach del lst[3]:", lst)
|
|
lst.append(777)
|
|
print("Nach append(777):", lst)
|
|
|
|
|
|
def aufgabe2_c() -> None:
|
|
print("c) range-Objekt")
|
|
total = 0
|
|
for x in range(1000):
|
|
total += x
|
|
print("Summe 0..999:", total)
|
|
|
|
|
|
def aufgabe2_d() -> None:
|
|
print("d) Dictionary")
|
|
d = {"name": "Valentin", "semester": 1}
|
|
print("Start:", d)
|
|
print("name ->", d["name"])
|
|
d["semester"] = d["semester"] + 1
|
|
d["projekt"] = "Big Data"
|
|
print("Geändert:", d)
|
|
|
|
|
|
def aufgabe2_e() -> None:
|
|
print("e) Funktion min max avg count sum")
|
|
res = stats_min_max_avg_count_sum(range(1000))
|
|
print("(min, max, avg, count, sum) =", res)
|
|
|
|
|
|
def aufgabe2_f() -> None:
|
|
print("f) List comprehension")
|
|
nums = [x for x in range(1, 10001) if (x % 3 == 0 and x % 5 == 0 and x % 7 == 0)]
|
|
print("Anzahl:", len(nums))
|
|
print("Beispiele:", nums[:10])
|
|
|
|
res = stats_min_max_avg_count_sum(nums)
|
|
print("Stats:", res)
|
|
|
|
|
|
def aufgabe2_g() -> None:
|
|
print("g) Sinus Cosinus Funktion")
|
|
deg = np.linspace(0.0, 720.0, 5000)
|
|
rad = np.deg2rad(deg)
|
|
y_sin = np.sin(rad) + np.sin(2 * rad) / 2 + np.sin(4 * rad) / 4 + np.sin(8 * rad) / 8
|
|
y_cos = np.cos(rad) + np.cos(2 * rad) / 2 + np.cos(4 * rad) / 4 + np.cos(8 * rad) / 8
|
|
|
|
plt.figure()
|
|
plt.plot(deg, y_sin, label="sin-Kombination")
|
|
plt.plot(deg, y_cos, label="cos-Kombination")
|
|
plt.xlabel("Winkel (Grad)")
|
|
plt.ylabel("Funktionswert")
|
|
plt.title("Sinus Cosinus Funktion")
|
|
plt.legend()
|
|
plt.grid(True)
|
|
plt.tight_layout()
|
|
plt.show()
|
|
|
|
|
|
def aufgabe2_h() -> None:
|
|
print("h) Catalansche Zahlen")
|
|
n = 20
|
|
c = catalan_list(n)
|
|
print(f"C0..C{n}:", c)
|
|
|
|
|
|
def aufgabe2_i() -> None:
|
|
print("i) Laufzeitmessung Catalan(n) für n = 50..1500 (Schritt 50)")
|
|
ns = list(range(50, 1501, 50))
|
|
times_sec = []
|
|
for n in ns:
|
|
t0 = time.perf_counter()
|
|
_ = catalan_list(n)
|
|
t1 = time.perf_counter()
|
|
times_sec.append(t1 - t0)
|
|
|
|
# Scatterplot
|
|
plt.figure()
|
|
plt.scatter(ns, times_sec)
|
|
plt.xlabel("n")
|
|
plt.ylabel("Zeit [s]")
|
|
plt.title("Catalan(n) Laufzeit (Scatter)")
|
|
plt.grid(True)
|
|
plt.tight_layout()
|
|
plt.show()
|
|
|
|
# Lineplot
|
|
plt.figure()
|
|
plt.plot(ns, times_sec)
|
|
plt.xlabel("n")
|
|
plt.ylabel("Zeit [s]")
|
|
plt.title("Catalan(n) Laufzeit (Linie)")
|
|
plt.grid(True)
|
|
plt.tight_layout()
|
|
plt.show()
|
|
|
|
|
|
def aufgabe2_j(path_adsb: str = "adsbprak.txt",
|
|
path_adsb2: str = "adsbprak2.txt") -> None:
|
|
print("j) ADSB-Daten: Pfade:", path_adsb, "und", path_adsb2)
|
|
|
|
def plot_file(p: str) -> None:
|
|
flights = read_adsb_lonlat_by_aircraft(p)
|
|
if not flights:
|
|
print(f"Keine gültigen Daten in: {p}")
|
|
return
|
|
# Kombinierter Plot: Linie + Punkte
|
|
plt.figure()
|
|
for ac_id, (lons, lats) in flights.items():
|
|
plt.plot(lons, lats, linewidth=1.0)
|
|
plt.scatter(lons, lats, s=6)
|
|
plt.xlabel("Länge (deg)")
|
|
plt.ylabel("Breite (deg)")
|
|
plt.title(f"ADSB-Flugbahnen (Linie + Punkte): {p}")
|
|
plt.grid(True)
|
|
plt.axis("equal")
|
|
plt.tight_layout()
|
|
plt.show()
|
|
|
|
# Datei 1
|
|
try:
|
|
plot_file(path_adsb)
|
|
except FileNotFoundError:
|
|
print(f"Datei nicht gefunden: {path_adsb} bitte Pfad prüfen.")
|
|
|
|
# Datei 2
|
|
try:
|
|
plot_file(path_adsb2)
|
|
except FileNotFoundError:
|
|
print(f"Datei nicht gefunden: {path_adsb2} bitte Pfad prüfen.")
|
|
|
|
|
|
# ------------------------------
|
|
# Bequemer Gesamtaufruf
|
|
# ------------------------------
|
|
|
|
def run_all() -> None:
|
|
aufgabe2_a()
|
|
print()
|
|
aufgabe2_b()
|
|
print()
|
|
aufgabe2_c()
|
|
print()
|
|
aufgabe2_d()
|
|
print()
|
|
aufgabe2_e()
|
|
print()
|
|
aufgabe2_f()
|
|
print()
|
|
aufgabe2_g()
|
|
print()
|
|
aufgabe2_h()
|
|
print()
|
|
aufgabe2_i()
|
|
# Pfade ggf. anpassen, falls du lokal testest
|
|
aufgabe2_j()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# In Spyder kannst du alternativ einzelne Funktionen mit F9 ausführen.
|
|
run_all()
|