Erste Schritte Mittelwert zeitlich abhängiger Werte

PaulGustav

Mitglied
Hallo zusammen,

ich stehe mal wieder vor einem kleinen Rätsel und würde dies gerne möglichst kurz und knapp lösen. Es geht darum, dass ich eine große Datenmenge habe, welche über einen großen Zeitraum erhoben wurde. Grundlegend liegen mir die Daten wie folgt vor:
Code:
Rohdaten (je Stunde eine gezippte Datei => 24 Dateien je Tag)
2015-01-08T00:59:54Z,100,11
                    ,200,37
                    ,100,52
2015-01-08T01:00:24Z,300,11
                    ,100,37
2015-01-08T01:00:54Z,300,11
2015-01-08T01:01:24Z,300,11
2015-01-08T01:01:54Z,300,11
2015-01-08T01:02:24Z,300,11
                    ,100,13
2015-01-08T01:02:54Z,300,11
2015-01-08T23:59:59Z,100,54

2015-01-09T00:59:54Z,200,40
                    ,400,37
                    ,400,52
2015-01-09T01:00:24Z,200,40
                    ,400,37
2015-01-09T01:00:54Z,200,40
2015-01-09T01:01:24Z,200,40
2015-01-09T01:01:54Z,200,40
2015-01-09T01:02:24Z,200,40
                    ,400,13
2015-01-09T01:02:54Z,200,40
2015-01-09T23:59:59Z,300,60

Für eine Zeitreihenanalyse, welche sich über ein ganzes Jahr erstrecken soll, hätte ich nun gerne die Mittelwerte für jeden Tag. Also in diesm Falle ein solches Ergebnis:
Code:
2015-01-08,208.33,22.5
2015-01-09,275,39.92

Mein Problem ist, dass für jeden Tag eine unterschiedliche Anzahl an Zeitstempeln vorliegt. Ich arbeite bisher schon mit Instant und habe auch schon die aggregierten Werte entsprechend parsen können. Ist es vielleicht mittels der Java.Instant- / Java.Time-API möglich, eine Schleife zu schreiben, die sich die jeweiligen Werte eines Tages merkt und mir aus allen ermittelten Werte den Mittelwert ausspuckt?

Beste Grüße und schon mal vorab vielen Dank,
Paul
 
Bisher parse ich übrigens mittels folgenden (minimal gehaltenen) Code:
Java:
public class AggregateTimeSeriesData {
    while ((line = br.readLine()) != null) {
                        String[] content = line.split(",");
                        if (StringUtils.isEmpty(content[COLUMN_TIMESTAMP]) == false && line.contains(",") == true) {
                            Instant time = Instant.parse(content[COLUMN_TIMESTAMP].substring(0, 20));
                            if (time.isAfter(startTime) && time.isBefore(stopTime)) {
                                dp = new TrafficJamDataPoint(time);
                                dp.addDataLine(content);
                                tsData.add(dp);
                            }
                        } else if (content[COLUMN_TIMESTAMP].isEmpty() && dp != null) {
                            dp.addDataLine(content);
                        }
                    }
}

               
public class TrafficJamDataPoint {
    public void addDataLine(String[] content) {
        count++;
        if (isNullOrBlank((content[COLUMN_DELAY])))
            totalDelay += 0;
        else
            totalDelay += Float.parseFloat(content[COLUMN_DELAY]);
        if (isNullOrBlank(content[COLUMN_LENGTH]))
            totalLength += 0;
        else
            totalLength += Float.parseFloat(content[COLUMN_LENGTH]);
    }               
}
 

Neue Themen


Zurück
Oben