Wetterstationsforum.info - Archiv

Allgemein => Wetter-Websites => Thema gestartet von: Fredy am 10.12.2013, 17:46:23

Titel: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 10.12.2013, 17:46:23
Hallo Wetterfreunde

Die Funktionsweise von Datenbanken ist für viele unbekannt. Ich habe daher mal ein "Wetterdaten und Datenbank (MySQL)" Tutorial erstellt.

Zu finden hier: http://wetterbinningen.blogspot.ch/p/tutorials.html (http://wetterbinningen.blogspot.ch/p/tutorials.html)



Für Fragen und Kritik bin ich immer Dankbar.

Grüsse Fredy
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: wneudeck am 10.12.2013, 18:11:51
Hallo Fredy,
habe es mal oben angepinnt, da es mir lesens-und findenswert erscheint.
Dasselbe auch mit dem anderen Tutorial.
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 31.12.2013, 16:09:34
Das Datenbank Tutorial hat ein kleines Update (http://wetterbinningen.blogspot.ch/2013/12/tutorial-wetterdaten-und-datenbanken.html) erhalten. (Die Spalte "dateid" flog raus, war einfach überflüssig) (Besten Dank an den Kommentar)

Falls jemand die Tabelle bereits erstellt und befüllt hat: Einfach spalte dateid löschen, und für datetime "primary" aktivieren. (falls erstellt: index für datetime vorher löschen)

Grüsse Fredy
Titel: Daten von Meteoplug in mysql Datenbank
Beitrag von: Rosi am 23.01.2014, 14:16:22
Dieses Thema wurde geteilt. Die abgetrennten Beiträge befinden sich in Daten von Meteoplug in mysql Datenbank (http://www.wetterstationen.info/forum/index.php?topic=24819.0).
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 12.02.2014, 17:52:39
Hallo Wetterfreunde

Die reine Blogform auf blogspot eignet sich m.M. nicht Optimal für die Tutorials. Daher bin ich mit den Tutorials umgezogen. Die Wetterdaten und Datenbanken Tutorials sind neu hier zu finden:

http://pscl.ch/index.php/wetterdaten-datenbank-mysql

(Die alten Tutorials auf Blogspot bleiben derzeit noch Online)

Grüsse
Fredy
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 30.01.2015, 10:32:10
Das Tutorial hat ein kleines Update erhalten:

- Die Vor- und Nachteile einiger Dateitypen (http://pscl.ch/index.php/2-uncategorised/52-tutorial-wetterdaten-datenbank-5-1-datentypen-fuer-wetterdaten)

- Erstellen und aktualisieren einer zusätzlichen Tabelle mit Tagesdaten (http://pscl.ch/index.php/13-tutorials/database/53-tutorial-wetterdaten-datenbank-5-2-1-tabelle-mit-tagesdaten)

Für Kritik, Fehlermeldungen, sowie Verbesserungsvorschläge bin ich immer sehr Dankbar  :)

Grüsse, Fredy
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 30.01.2015, 11:19:09
Vielen Dank, Fredy. Das Wochenende ist gerettet...  8)

Einen ganz herzlichen Dank für Deine Tutorials!

Sehr lobenswert  :top:

Gruß
Georg
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 01.02.2015, 14:04:15
Hallo Fredy,
ich teste gerade Dein Script.
Der Test-Echo-Befehl gibt mir den Maximum Temp-Wert von heute nicht wieder, sondern den letzten Eintrag aus der wettertabelle.
Wenn ich bei ORDER BY anstatt d tMax eingebe, wird mir die richtige Maximal-Temperatur aus allen vorhandenen Datensätzen angezeigt.

Hast Du eine Idee, woran es liegen kann?

Gruß
Georg
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 01.02.2015, 14:16:56
Hallo Georg, kannst du deine Abfrage mal hier reinstellen?
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 01.02.2015, 14:59:18
Zitat von: Fredy am 01.02.2015, 14:16:56
Hallo Georg, kannst du deine Abfrage mal hier reinstellen?
Voilà:

<?php
//Datenbank Verbindung
$link = mysqli_connect("");
 
//Query 1: Datenbank Abfrage zum Werte Berechnen (max/min/avg/sum etc.)
$query1 = "
SELECT
    Datum AS d,
    MAX(Aussentemperatur) AS tMax
FROM wettertabelle
GROUP BY d
ORDER BY d DESC
LIMIT 1
";

//Query ausführen
$result = mysqli_query($link,$query1);

//Zeilen Ausgeben
while($row = mysqli_fetch_array($result))
{
    echo "Datum: ".$row[d]." Max. Temp: ".$row[tMax]."<br>";
}

//php end
?>
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 01.02.2015, 15:13:03
Hast du in deinem Feld "Datum", ein date oder datetime Wert?

Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 01.02.2015, 16:00:19
Typ ist datetime.



[gelöscht durch Administrator]
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 01.02.2015, 16:08:49
Dann musst du "Datum AS d" in "DATE(Datum) AS d" ändern. Ansonsten gruppierst du nicht nach Tag, sondern nach Einzelwert. Die Funktion DATE(), extrahiert den Datumteil von datetime.

Grüsse Fredy
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 01.02.2015, 16:17:14
Danke!
Jetzt wird der richtige Max-Wert angezeigt. :top:

Gruß
Georg
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 05.02.2015, 15:27:58
Hallo Fredy,
in meiner Wettertabelle befinden sich mittlerweile alle Datensätze seit 04/2013. Die Tabelle Tagesdaten ist entsprechend gefüllt. Genial  :top:

Gestern habe ich mit der Erstellung der Jahres-, Monats- und Wochentabellen begonnen. Bei der Jahrestabelle habe ich den Typ beim Feld Datum auf YEAR umgestellt. Funktioniert.  ;)
Bei der Monatstabelle komme ich allerdings schon ins Stolpern. Sollen (können) die Werte $row[y] und $row[m] zusammen im Datumsfeld stehen? Welcher Feldtyp müsste dann dort angegeben werden?

Hast Du generell ein Empfehlung, welche Länge/Set-Angaben beim Typ float sinnvoll (notwendig) sind?

Danke und Gruß,
Georg

Beiträge zusammengeführt, weil der Autor sich selbst geantwortet hat statt seinen letzten Beitrag zu ändern: 05.02.2015, 20:24:20

Sieht so aus, als hätte ich für die Erstellung der Monatsdaten eine Lösung gefunden. Habe im entsprechenden Script den Date-Select-Befehl so angepasst: DATE_FORMAT(Datum,'%m.%Y') AS ym,

Die Ergebnisse sehen auf den ersten Blick korrekt aus:



[gelöscht durch Administrator]
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 05.02.2015, 21:55:59
Hallo Georg

Ich persönlich habe derzeit nur eine zusätzliche Tagestabelle, und hab mir über den sinnvollsten "Speicherweg" von Monaten/Wochen noch keine grossen Gedanken gemacht. Falls aber Jahr und Monat/Woche in 2 Spalten getrennt sind, kann dies zu Problemen führen, da die Spalten dann nicht mehr eindeutig identifizierbar sind (Primary Key/Unique). Dann gäbe es z.B. auch Probleme mit "ON DUPLICATE KEY UPDATE".

Also Grundsätzlich sinnvoll ist sicher eine Spalte welche das Jahr und Monat zusammenfasst. Je nach "Auswertungsziel" zusätzlich noch getrennt. Es sollten evtl. Klauseln wie z.B. WHERE year = "2014" möglich bleiben. Aber dafür gibt es auch wieder viele Wege  ;)

Die Länge von FLOAT hat auf den Speicherplatzverbrauch keinen Einfluss. Ich würde mich daher nicht einschränken und die volle Länge ausnutzen. Runden kannst du eigentlich zu jedem Zeitpunkt. Grundsätzlich Runde ich aber immer erst vor der eigentlichen Ausgabe, da sich ja (je nach Auswertung), "Rundungsfehler" aufsummieren könnten.

Bedenke auch, dass eine Monatstabelle selbst nach 100 Jahren, lediglich 1200 Datensätze enthalten wird. Speicherplatz und Performance Optimierungen für diese Tabelle, sind also m.M. nicht unbedingt Priorität  ;)

Grüsse Fredy
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 20.07.2015, 15:25:45
Hallo Fredy,
ich möchte gerne aus meiner DB die "besonderen" Tage (Tropennächte, heiße Tage, etc.) abfragen und in einer neuen Tabelle ablegen. Dies müsste doch über die Tagestabelle zu realisieren sein? Hast Du ein paar Tipps, wie ein entsprechendes Script aufgebaut sein sollte?
Bei der Ermittlung der Tropennächte müsste die Abfrage über tMin reichen, oder:

SELECT
    DATE(datetime) AS d,
    MIN(temp) AS tMin,
FROM tagesdaten
WHERE tMin >= 20.0
.....
INSERT INTO tropennaechte
        (`date`,
        `temp_min`,
.....
VALUES
        ('$row[d]',
        '$row[tMin]',

Gruß
Georg
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 20.07.2015, 15:53:35
Hallo Georg

Grundsätzlich wäre die gesuchte Information in der Tagestabelle enthalten. Diese könnte also durchaus für die Suche nach Tagen mit niedrigster Temperatur "nicht kleiner oder gleich 20°C" verwendet werden.

Für den Fall, dass es zwar in der Nacht nicht kälter als 20°C wurde, jedoch während des Tages, wäre die Voraussetzung einer Tropennacht nach Definition nicht gegeben. In diesem (vermutlich unwahrscheinlichen) Fall, müsste man die "Minutenwerte" Tabelle auswerten. Ich denke allerdings, dass dies vernachlässigbar ist.

Beim Aufbau des Scripts, würde ich ähnlich wie in der Tagestabelle (http://pscl.ch/index.php/13-tutorials/database/53-tutorial-wetterdaten-datenbank-5-2-1-tabelle-mit-tagesdaten) vorgehen. Wie in deinem Beispiel, einfach die betreffenden Abfragen anpassen.

Hast du es denn schon versucht, und gibt es Probleme dabei?
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Holli am 20.07.2015, 16:20:23
Zitat von: Fredy am 20.07.2015, 15:53:35
Für den Fall, dass es zwar in der Nacht nicht kälter als 20°C wurde, jedoch während des Tages, wäre die Voraussetzung einer Tropennacht nach Definition nicht gegeben. In diesem (vermutlich unwahrscheinlichen) Fall, müsste man die "Minutenwerte" Tabelle auswerten. Ich denke allerdings, dass dies vernachlässigbar ist.
So unwahrscheinlich ist der Fall nicht. Im letzten Jahr hat mich ein vormittäglicher Regen nach einer Tropennacht veranlaßt, eine Diskussion über die Definition der "Nacht" in diesem Zusammenhang loszutreten, und auch in diesem Jahr hat dieselbe Situation hier die 20°C-Marke nur um 0,2K verpaßt. So selten ist die Möglichkeit also nicht, daß die Temperatur unter 20°C fällt, nachdem die "Nacht" nach üblichen Definitionen klar vorbei ist.
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 20.07.2015, 16:27:25
Wie ist die "Nacht" in der Meteorologie definiert? Zwischen Sonnenaufgang/Untergang? Dann müsste man dies in der Abfrage wohl noch berücksichtigen, und die "Tagestabelle" wäre als Quelle eher ungeeignet.

Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Holli am 20.07.2015, 16:58:01
Zitat von: Fredy am 20.07.2015, 16:27:25
Wie ist die "Nacht" in der Meteorologie definiert?
Tja... http://www.wetterstationen.info/forum/wetter-talk/definition-tropennacht/20/
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 20.07.2015, 17:04:03
Habe nach kurzer Suche auch keine klare Definition einer Tropennacht gefunden. Allerdings auf srfmeteo folgendes gelesen:

"Am Donnerstagmorgen um 5 Uhr zeigte das Thermometer auf der Chrischona, dem Basler Hausberg immer noch 24,9 Grad. Dies liegt weit über der Marke für eine Tropennacht. Auch sonst lagen die Temperaturen in leicht erhöhten Lagen noch deutlich über 20 Grad. Dort steht aber die Tropennacht noch nicht fest, denn mit der aufgehenden Sonne verdunstet der Tau. Dies führt zu einer leichten Abkühlung und so steht nach meteorologischer Definition erst um 8 Uhr Mitteleuropäischer Sommerzeit fest, wo es tatsächlich für eine Tropennacht reichte. In der warmen Luft gab es allerdings in Mittelbünden zwischen 5 und 6 Uhr in der Früh lokal ein Gewitter."
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: wneudeck am 20.07.2015, 17:10:40
Hallo,
ich kann dazu nur sagen, dass auch WSWIN die "Nacht" als Tropennacht berechnet, wenn bis 8 Uhr die Temperatur nicht unter 20 Grad fällt.
Und gerade dadurch kommen oft Tropennächte nicht zustande, weil, wie mein Vorredner sagte, durch Verdunstung des Taus die Temperatur hier eben noch absinkt.
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Holli am 20.07.2015, 17:27:15
Das hat weniger mit der Verdunstung des Taus zu tun und mehr damit, daß die flach einfallende Sonnenstrahlung kurz nach Sonnenaufgang die Abstrahlung in den Weltraum noch nicht überwiegt. Bis zu diesem Punkt muß die Sonne noch ca. eine halbe bis eine ganze Stunde steigen, und so lange fällt die Temperatur noch.

Verdunstung durch Strahlung kann nicht zu einer Abkühlung führen (kann jeder ausprobieren, indem er was nasses mit einem Wärmestrahler trocknet). Das geht nur mit Wind, und der weht typischerweise um diese Zeit noch nicht, sondern erst, wenn die Sonne hoch genug steht, um die thermische Zirkulation anzuregen. Genau das ist aber auch der Zeitpunkt, an dem Temperatur wieder steigt.

Die 8:00 Uhr finde ich auch plausibel, aber es ist schon etwas merkwürdig, daß man nirgendwo eine "offizielle" Definition findet.
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 20.07.2015, 18:18:48
Hallo Fredy,
ZitatHast du es denn schon versucht, und gibt es Probleme dabei?

Noch nicht. Habe mir gerade aber die komplette Tagesdaten-Tabelle angeschaut. Losgelöst von jeder Definition einer Nacht, hätte ich (in Mönchengladbach) 2013 eine, 2014 zwei und 2015 bisher vier Tropennächte zu verzeichnen.

Schon merkwürdig, dass selbst der DWD keine klare Aussage bezüglich der Zeitspanne macht!? Vielleicht ist es ein Indiz dafür, dass die Bezeichnung Tropennacht einfach kein offizieller meteorologischer Begriff ist. Bei allen anderen Werten (Eistage, Sommertage, etc.) scheint dies ja keine Rolle zu spielen.

Könnte mich aber persönlich mit der Zeitspanne von 20 Uhr (MESZ) bis 08 Uhr (MESZ) anfreunden. Doch wie grenze ich diese Zeit bei der wettertabelle für jeden Tag ein?

Select Date,
where datetime between Zeit and Zeit
and Temp <= 20.0° Grad

Und dann auch wieder eine neue Tabelle anlegen?

Gruß
Georg
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 21.07.2015, 00:02:41
Hallo Georg

Ich versuche daraus mal eine "schöne Abfrage" zusammenzubasteln. Brauche aber vermutlich 1-2 Tage. (Hab grad viel um die Ohren)

grüsse, Fredy
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 21.07.2015, 13:15:14
Hallo Fredy,
ZitatBrauche aber vermutlich 1-2 Tage.
Keinen Stress aufkommen lassen. Ich würde wahrscheinlich 3 Wochen brauchen, ohne Erfolgsgarantie...  :oops:
Habe heute morgen mal die Tabelle Tagesdaten nach Excel exportiert. Über die Filterfunktionen können eigentlich alle gewünschten Sondertage angezeigt werden. Bei den Tropentagen wäre es halt ohne zeitliche Begrenzung und man müsste immer alles händisch nachtragen...

Gruß
Georg
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Bernd aus Köln am 21.07.2015, 20:03:00
Als Nacht gilt 18:00 bis 06:00 UTC, was den hier erwähnten 20:00 bis 08:00 MESZ entspricht
(zur Winterzeit kommen Tropennächte hier eher nicht vor ;)).

Quelle: http://www.deutscher-wetterdienst.de/lexikon/index.htm?ID=T&DAT=Tropennacht

Das mit der Zeitangabe im Lexikon scheint neu zu sein, war früher nicht.
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: cyclonemystery am 21.07.2015, 20:41:20
Zitat von: Bernd aus Köln am 21.07.2015, 20:03:00

Das mit der Zeitangabe im Lexikon scheint neu zu sein, war früher nicht.

Jepp seit heute neu. Die Zeiten haben mit den synoptischen Hauptterminen zu tun an deren es vier gibt (00, 06, 12, 18 UTC). In den Zeiten von BUFR Meldungen finde ich das sehr interessant (Synop Code ist tot  :( )
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: Fredy am 22.07.2015, 11:10:53
Hier mal eine Abfrage, welche "fast" perfekt funktioniert:

SELECT date(datetime), MIN(temp)
FROM wettertabelle
WHERE TIME(datetime - INTERVAL 12 HOUR) BETWEEN '08:00:00' AND '20:00:00'
GROUP BY DATE(datetime - INTERVAL 12 HOUR)
HAVING MIN(temp) >=20


Ein Problem besteht noch, wenn diese Abfrage nach 20:00 ausgeführt wird. Dann wird die letzte Nacht mit einbezogen, obwohl diese noch nicht beendet ist. Ich versuche das noch zu optimieren. Aber du kannst es ja schon mal ausprobieren.

Grüsse, Fredy
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 22.07.2015, 17:41:39
Funktioniert  :top:

Im Vergleich zu der Tagestabelle werden für 2013 jetzt vier Tropennächte mehr angezeigt.




[gelöscht durch Administrator]
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 25.07.2015, 12:12:53
Hallo Fredy,

ich habe der letzten Zeile in Deiner Anfrage mal testweise <>Curdate() eingefügt:

SELECT date(datetime) As Tag.....
.....
HAVING Tag <> CURDATE() AND MinT >=20

Mit aktuellen Tageswerten funktioniert es; werde es heute Abend nach 20 Uhr weiter testen.
Auf jeden Fall  vielen Dank für Deine erneute Unterstützung :top: Habe nun eine Tabelle Kenntage mit mehreren Parametern erstellen können...

Gruß
Georg
Titel: Re: Tutorial - Wetterdaten und Datenbanken (MySQL)
Beitrag von: GS63 am 02.08.2015, 13:38:33
ZitatEin Problem besteht noch, wenn diese Abfrage nach 20:00 ausgeführt wird. Dann wird die letzte Nacht mit einbezogen, obwohl diese noch nicht beendet ist.
Es funktioniert bei mir definitiv mit <> curdate.  :)