• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

Tutorial - Diagramme mit Amcharts

Begonnen von Fredy, 04.12.2013, 17:05:38

⏪ vorheriges - nächstes ⏩

WernerWetter

Auch ich bin gerade in Gedanken dabei eine neue Statistik Seite aufzubauen.

Aktuell gehe ich jeden Werte des alten Monats durch und berechne & speichere die Daten.
Ich hätte es auch gerne "dynamischer". Mein neuer Gedanke wäre ein "group by"

http://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL:_Gruppierungen

Es wäre toll wenn es hier viele Code-Bsp. geben würde, dann könnte ich (hoffentlich erlaubt) hemmungslos kopieren  :D

Ich fang mal an mit dem alten Code - ggf. kann der Code als schlechtes Bsp. dienen ...

MfG
Werner

[gelöscht durch Administrator]

Fredy

#71
Hallo Joachim, du kannst alles in die while Schlaufe der db-Abfrage packen.

Betreffend der Abfrage der letzten 24 Stunden würde ich nicht über die Anzahl Datensätze machen. Falls mal nicht alle Datensätze ankommen (Datenlücke), stimmt die Abfrage nicht mehr. Ich würde das Datum 'berrechnen'. Schick dir später meine Lösung dazu.

Grüsse, Fredy

Beiträge zusammengeführt, weil der Autor sich selbst geantwortet hat statt seinen letzten Beitrag zu ändern: 18.01.2015, 18:18:17

Hallo Werner

GroupBy ist bei mir das Mittel der Wahl.
Siehe hier, Punkt 7: DB Abfragen

Ich verwende als Basis für alle meine Auswertungen immer nur die eine Tabelle mit allen Wetterdaten.

Grüsse, Fredy
--
www.wetterbinningen.ch

Holli

Zitat von: joachimF am 18.01.2015, 17:40:12
Zitat
Normalerweise ändern sich Werte in der Vergangenheit nicht mehr ...
wenn der Auswertezeitraum bzw. Darstellungszeitraum auch konstant bleibt, bleiben auch die MIN- MAX-Wert 'konstant'. Ändert sich der Auswertezeitraum :  Monat Jan. vom 1-31 oder Monat Jan. vom 1-20 ; können sich folglich auch die MIN- MAX-Werte ändern und müssen deshalb neu berechnet werden.
Gerade die Min- und Max-Werte müssen aber nicht jedes Mal mit allen Werten verglichen werden, sondern nur mit den aktuellen Min- und Max-Werten. Und auch für Durchschnittswerte eines laufenden Zeitraums müssen nicht jedes Mal alle Werte eingelesen werden, sondern nur der aktuelle Mittelwert und die Anzahl der Werte. Das senkt die Zahl der DB-Zugriffe enorm.

Für solche Sachen würde ich immer eine Hilfstabelle mitführen und nicht alle Werte bei jedem Durchlauf komplett neu ermitteln.
Dietmar

Eine Aussage, die durch ein Ausrufezeichen bekräftigt werden muß, ist zumindest zweifelhaft.
Eine Aussage, die durch mehrere Ausrufezeichen bekräftigt wird, ist definitiv falsch.
Der aktuelle Deppensport: Wir töten ein Akkusativ.

WernerWetter


wneudeck

Hallo,
das ist jetzt zwar ein etwas unangemessener Vergleich, aber genau aus dem Grund (gemeint ist der Beitrag von Holli) führt WSWIN parallel zu den Monatsdateien (dort sind ja alle Rohdaten drin) auch die sog. Jahresdateien. Grund ist genau der von Dietmar angeführte: es müssen für statistische Zwecke (und da wimmelt es in WSWIN ja nur so) nicht ständig alle Werte neu berechnet werden (was zu einer enormen Beanspruchung von Ressourcen führen würde), sondern es wird auf bereits abgelegte MinMax-Werte usw zurückgegriffen und diese eben bei Über-oder Unterschreitung neu erfasst.

joachimF

Hallo Werner,
verstanden habe ich die Ausführung nicht so richtig. Ich stelle es mir so vor :
Min/Max der Jan-Datei wird in die JahresDatei übernommen.
Min/Max der Feb-Datei wird mit der JahresDatei verglichen und evtl. angepasst .
Min/Max der März_Datei  wird mit der JahresDatei verglichen und evtl. angepasst .
Soweit OK.

Aber wenn ich jetzt z.B. ein Diagramm 'Mitte Februar - Mitte März' zeichnen lasse,
welche abgespeicherten Min/Max Werte nehme ich dann?
Gruß
Joachim

--
43° 23" - 6° 10"  - 150 ü NN
https://puttkammer.de

Holli

Zitat von: joachimF am 18.01.2015, 20:24:59
Aber wenn ich jetzt z.B. ein Diagramm 'Mitte Februar - Mitte März' zeichnen lasse,
welche abgespeicherten Min/Max Werte nehme ich dann?
Ist das ein abgeschlossener Zeitraum? Und selbst wenn: Welchen Sinn sollen Statistikberechnungen für diesen Zeitraum haben?
Dietmar

Eine Aussage, die durch ein Ausrufezeichen bekräftigt werden muß, ist zumindest zweifelhaft.
Eine Aussage, die durch mehrere Ausrufezeichen bekräftigt wird, ist definitiv falsch.
Der aktuelle Deppensport: Wir töten ein Akkusativ.

Fredy

#77
@Joachim
ZitatAber wenn ich jetzt z.B. ein Diagramm 'Mitte Februar - Mitte März' zeichnen lasse,
welche abgespeicherten Min/Max Werte nehme ich dann?

Hier müsstes du dann die "Hilfstabelle" mit Tagesdaten verwenden, und daraus die Max/Min der gesuchten Tage finden. Das wäre vom Programmieraufwand etwa gleich, die Abfrage würde aber etwas schneller ausgeführt werden können, als bei eine Suche der in der "Haupttabelle".

Die "letzte 24 Stunden" Abfrage löse ich mit einer "Unterabfrage" wie folgt:

SELECT YEAR(datetime) AS dy, MONTH(datetime) -1 AS dm, DAY(datetime) AS dd, HOUR(datetime) AS th, MINUTE(datetime) AS tm, temp, hum, pressure
FROM wettertabelle
WHERE datetime >= (SELECT datetime - INTERVAL 1 DAY AS endDate  FROM wettertabelle ORDER BY datetime DESC LIMIT 1)
ORDER BY datetime


Beachte die Unterabfrage in der WHERE Klausel. Dort suche ich den Zeitstempel welcher genau 1 Tag seit dem letzten vorhanden Datensatz zurück liegt. Die Zahl hinter INTERVAL beschreibt die Anzahl Tage. Du kannst also auch z.B die letzten 30 Tage zurückgehen:

SELECT YEAR(datetime) AS dy, MONTH(datetime) -1 AS dm, DAY(datetime) AS dd, HOUR(datetime) AS th, MINUTE(datetime) AS tm, temp, hum, pressure
FROM wettertabelle
WHERE datetime >= (SELECT datetime - INTERVAL 30 DAY AS endDate  FROM wettertabelle ORDER BY datetime DESC LIMIT 1)
ORDER BY datetime


Ich hoffe das hilft :)

Betreffend "Hilfstabellen":

Ich möchte hier keinesfalls generell von Hilfstabellen abraten. Selbstverständlich kann das Anlegen und Pflegen von Hilfstabellen, bei bestimmten Abfragen extrem Ressourcen sparen. Die konsequente Umsetzung von Hilfstabellen wäre aber auch komplexer.
Bei mir spielt das derzeit noch keine grosse Rolle (bei max. 100 Besucher/Tag und noch akzeptablem Seitenladezeiten  ;)

Ein Beispiel:
Die Anfrage, Berechnung und Darstellung von 365 Tagen, jeweils mit Min/Max/Avg von 5 Spalten, aus einer Tabelle mit 400'000 5 Minuten Intervall Datensätzen, verursachen bei mir eine gesamte Ladezeit von ca. 1- 1.5 Sekunden.

Das mit Joachim besprochene, markieren der Minimum/Maximum Werte, in einem amChart mittels Events, hat damit aber nur bedingt zu tun. Der Weg die Daten aus einer Hilfstabelle oder der Haupttabelle zu holen, ist in etwa derselbe. Man muss nur beachten, dass man auch den Zeitstempel der Werte braucht. Im Tutorial habe ich aber einen Weg beschrieben, welcher ohne weitere DB-Anfrage auskommt und die Max/Min aus den sowiso ankommenden Daten berechnet.

Ich habe mal 2 Möglichkeiten verglichen: 7 separate DB-Anfragen um aus einer Tabelle mit rund 400'000 Datensätzen, die jeweiligen min/max werte eines Tages zu finden, sowie die Lösung im Tutorial über php, mit grösser/kleiner Vergleich. Ich konnte mit einer Messung der Seitenladezeiten, keine relevanten Performance Unterschiede feststellen. (Die Ladezeiten anderer Elemente der Website, waren bei mir um ein vielfaches höher und die DB-Anfragen fielen gar nicht ins Gewicht.) Aber vermutlich hatten die DB-Anfragen eine höhere Last erzeugt, als die php Variante. Darum habe ich im Tutorial mal die php Variante beschrieben.


Grüsse, Fredy

Beiträge zusammengeführt, weil der Autor sich selbst geantwortet hat statt seinen letzten Beitrag zu ändern: 19.01.2015, 01:27:33

@Holli
ZitatWelchen Sinn sollen Statistikberechnungen für diesen Zeitraum haben?

Es geht in diesem spezifischen Fall, um die Markierung von max/min Werten in einem amchart Diagramm über einen frei wählbaren Zeitraum. Ob das jetzt Sinnvoll ist oder nicht, lässt sich natürlich streiten ;)



Grüsse Fredy
--
www.wetterbinningen.ch

Holli

Zitat von: Fredy am 19.01.2015, 01:16:09
Es geht in diesem spezifischen Fall, um die Markierung von max/min Werten in einem amchart Diagramm über einen frei wählbaren Zeitraum. Ob das jetzt Sinnvoll ist oder nicht, lässt sich natürlich streiten ;)
In sehr wenigen Einzelfällen mag sowas sinnvoll sein. Im Normalfall fehlt ganz einfach jeglicher Bezug und damit sind solche Werte völlig aussagelos. Sie sind so wenig wert, daß es sich nicht einmal lohnt, darüber zu streiten ;)

Der einzige Fall, wo tatsächlich solche "krummen" Zeiträume betrachtet werden müssen, sind die jeweils aktuellen Werte im Vergleich mit zurückliegenden. Wenn ich den laufenden Tag mit zurückliegenden vergleichen will, muß ich entweder bei den zurückliegenden Tagen denselben Zeitraum betrachten, der beim laufenden Tag vergangen ist, oder ich muß die laufenden letzten 24 Std. betrachten, was in der Regel realistischere Werte liefert. Dann sind auch größere Berechnungen gerechtfertigt, aber auch nur für den laufenden Zeitraum, nicht für den abgeschlossenen zurückliegenden, bei dem sich die Werte nicht mehr ändern.
Dietmar

Eine Aussage, die durch ein Ausrufezeichen bekräftigt werden muß, ist zumindest zweifelhaft.
Eine Aussage, die durch mehrere Ausrufezeichen bekräftigt wird, ist definitiv falsch.
Der aktuelle Deppensport: Wir töten ein Akkusativ.

Fredy

Hallo Holli

Es geht ja nicht immer nur um Vergleiche gleichen Zeitraumes. Die max/min Werte während eines "überlappenden" Zeitbereichs können doch durchaus interessieren. Eine Kälteperiode z.B. hört ja nicht auf, nur weil eine Woche oder Monat zuende ist.

Grüsse Fredy
--
www.wetterbinningen.ch