Probleme mit Grafik in Zeitreihe
Moderator: schubbiaschwilli
Probleme mit Grafik in Zeitreihe
Hallo alle miteinander,
da ich komplett neu hier bin, bitte ich zu entschuldigen wenn ich etwas mit "der Tür ins Haus falle" um um Hilfe zu bitten. Zumindest konnte ich lesen, dass ich noch keine private Nachrichten verschicken darf. Aber darum geht es mir nicht. Als Newcomer in R als Programmiersprache erhoffe ich mir Hilfe und Unterstützung zum Thema "Zeitreihenanalyse".
Mir geht es im Rahmen eines größeren Projektes darum zunächst an Zufallsvariablen eine automatische Messtation für Grundwasser zu
simulieren. Diese fiktive Messstation soll zunächst für den Zeitraum von 12 Monaten kontinuierlich im 60-minütigen Rhythmus Daten sammeln. Später
sollen diese Daten per Zeitreihenanalyse untersucht werden inwieweit saisonale Schwankungen die Grundwasserchemie im Untersuchungsgebiet
beeinflussen.
Zum Anfang wollte ich nur eine einfache Zeitreihe erstellen wie sie als Vorlage unter dieser Webseite: http://www.faes.de/Basis/Basis-Statisti ... yse_r.html erstellt worden ist.
Hier ist der zugehörige Code, welchen ich zu diesem Zweck erstellt habe:
#Erzeugung normalverteilter Variablen
ph <- round(rnorm(8760,6, sd = 1), 2)
# Erzeugung des Zeitrahmens
zeitpunkte_year<- seq(from = as.POSIXct("2018-01-01 00:00"),
to = as.POSIXct("2018-12-31 23:00"), by = "hour")
# Trennung von Date and Time
zeitpunkte_year_sep <- data.frame(Date = as.Date(zeitpunkte_year, format =
"%B/%d/%Y"),
Time = format( as.POSIXct( zeitpunkte_year, format =
"%m/%d/%Y %H:%M"),
format = "%H:%M %p") )
# Separieren des Datums mit anschließender Umformatierung
library(stringi)
library(tidyr)
library(tidyselect)
d <- data.frame(date = zeitpunkte_year_sep$Date)
d <- separate (d, "date", c("Year", "Month", "Day"), sep = "-")
d
e <- revalue(d$Month, c("01"="Januar", "02"="Februar", "03"="März", "04" =
"April", "05" = "Mai", "06" = "Juni", "07"="Juli", "08" = "August", "09" =
"Septmember",
"10" = "Oktober", "11" = "November", "12" =
"Dezember"))
# Erzeugung Data frame
year_ph_t <- data.frame(f, ph)
#Zeitreihe
yearindex <- ts(year_ph_t$ph, freq = 356, start = c(2018,1) , end =
c(2018,12))
yearindex
Time Series:
Start = c(2018, 1)
End = c(2018, 12)
Frequency = 356
[1] 5.02 6.75 5.64 5.62 6.33 6.20 6.10 5.06 6.76 7.22 3.91 5.53
View(year_ph_t)
# A tibble: 8,760 x 3
Year Month ph
<chr> <chr> <dbl>
1 2017 12 5.02
2 2018 01 6.75
3 2018 01 5.64
4 2018 01 5.62
5 2018 01 6.33
6 2018 01 6.2
7 2018 01 6.1
8 2018 01 5.06
9 2018 01 6.76
10 2018 01 7.22
yearindex
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2018 5.02 6.75 5.64 5.62 6.33 6.20 6.10 5.06 6.76 7.22 3.91 5.53
Die Grafik die ich als Resultat bekomme, entspricht leider in keinster Weise den Erwartungen. Vielleicht kann mir jemand von Euch sagen, was ich falsch gemacht habe? Denn angehängte die Graphik entspricht leider nicht dem gewünschten Ergebnis. Ich hoffe sehr das der mitgelieferte Code nicht noch mehr Verwirrung stiftet? Ich freue mich sehr auf eine Rückmeldung und bedanke mich sehr im Voraus bei Euch allen.
Retep
da ich komplett neu hier bin, bitte ich zu entschuldigen wenn ich etwas mit "der Tür ins Haus falle" um um Hilfe zu bitten. Zumindest konnte ich lesen, dass ich noch keine private Nachrichten verschicken darf. Aber darum geht es mir nicht. Als Newcomer in R als Programmiersprache erhoffe ich mir Hilfe und Unterstützung zum Thema "Zeitreihenanalyse".
Mir geht es im Rahmen eines größeren Projektes darum zunächst an Zufallsvariablen eine automatische Messtation für Grundwasser zu
simulieren. Diese fiktive Messstation soll zunächst für den Zeitraum von 12 Monaten kontinuierlich im 60-minütigen Rhythmus Daten sammeln. Später
sollen diese Daten per Zeitreihenanalyse untersucht werden inwieweit saisonale Schwankungen die Grundwasserchemie im Untersuchungsgebiet
beeinflussen.
Zum Anfang wollte ich nur eine einfache Zeitreihe erstellen wie sie als Vorlage unter dieser Webseite: http://www.faes.de/Basis/Basis-Statisti ... yse_r.html erstellt worden ist.
Hier ist der zugehörige Code, welchen ich zu diesem Zweck erstellt habe:
#Erzeugung normalverteilter Variablen
ph <- round(rnorm(8760,6, sd = 1), 2)
# Erzeugung des Zeitrahmens
zeitpunkte_year<- seq(from = as.POSIXct("2018-01-01 00:00"),
to = as.POSIXct("2018-12-31 23:00"), by = "hour")
# Trennung von Date and Time
zeitpunkte_year_sep <- data.frame(Date = as.Date(zeitpunkte_year, format =
"%B/%d/%Y"),
Time = format( as.POSIXct( zeitpunkte_year, format =
"%m/%d/%Y %H:%M"),
format = "%H:%M %p") )
# Separieren des Datums mit anschließender Umformatierung
library(stringi)
library(tidyr)
library(tidyselect)
d <- data.frame(date = zeitpunkte_year_sep$Date)
d <- separate (d, "date", c("Year", "Month", "Day"), sep = "-")
d
e <- revalue(d$Month, c("01"="Januar", "02"="Februar", "03"="März", "04" =
"April", "05" = "Mai", "06" = "Juni", "07"="Juli", "08" = "August", "09" =
"Septmember",
"10" = "Oktober", "11" = "November", "12" =
"Dezember"))
# Erzeugung Data frame
year_ph_t <- data.frame(f, ph)
#Zeitreihe
yearindex <- ts(year_ph_t$ph, freq = 356, start = c(2018,1) , end =
c(2018,12))
yearindex
Time Series:
Start = c(2018, 1)
End = c(2018, 12)
Frequency = 356
[1] 5.02 6.75 5.64 5.62 6.33 6.20 6.10 5.06 6.76 7.22 3.91 5.53
View(year_ph_t)
# A tibble: 8,760 x 3
Year Month ph
<chr> <chr> <dbl>
1 2017 12 5.02
2 2018 01 6.75
3 2018 01 5.64
4 2018 01 5.62
5 2018 01 6.33
6 2018 01 6.2
7 2018 01 6.1
8 2018 01 5.06
9 2018 01 6.76
10 2018 01 7.22
yearindex
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2018 5.02 6.75 5.64 5.62 6.33 6.20 6.10 5.06 6.76 7.22 3.91 5.53
Die Grafik die ich als Resultat bekomme, entspricht leider in keinster Weise den Erwartungen. Vielleicht kann mir jemand von Euch sagen, was ich falsch gemacht habe? Denn angehängte die Graphik entspricht leider nicht dem gewünschten Ergebnis. Ich hoffe sehr das der mitgelieferte Code nicht noch mehr Verwirrung stiftet? Ich freue mich sehr auf eine Rückmeldung und bedanke mich sehr im Voraus bei Euch allen.
Retep
- Dateianhänge
-
- Test_ph.png (8.21 KiB) 3461 mal betrachtet
Re: Probleme mit Grafik in Zeitreihe
Hallo retep,
willkommen im Forum. Nur für das nächste Mal: Es gibt prima Formatierungsmöglichkeiten für Code (</>-Schaltfläche) und dadurch wird das Lesen einfacher.
Das gezeigte Beispiel auf der Seite faes.de... ist ein einfaches Beispiel, es geht nur um das Prinzip. Welche Erwartungen hast Du denn?
Auch bin ich ein Freund von einfachen Lösungen und stolpere über die Verknüpfung ts-Objekt und tibble-Strukturen. Ob sich das verträgt? (Du merkst, ich bin kein Freund der tidyverse-Philosophie.)
willkommen im Forum. Nur für das nächste Mal: Es gibt prima Formatierungsmöglichkeiten für Code (</>-Schaltfläche) und dadurch wird das Lesen einfacher.
Das gezeigte Beispiel auf der Seite faes.de... ist ein einfaches Beispiel, es geht nur um das Prinzip. Welche Erwartungen hast Du denn?
Auch bin ich ein Freund von einfachen Lösungen und stolpere über die Verknüpfung ts-Objekt und tibble-Strukturen. Ob sich das verträgt? (Du merkst, ich bin kein Freund der tidyverse-Philosophie.)
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube
Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube
Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Re: Probleme mit Grafik in Zeitreihe
Hallo,
hab vielen Dank für die schnelle Rückmeldung! Allerdings bin ich ganz sicher ob ich verstanden habe, was du mit </> Formatierung meinst. Für die Unannehmlichkeiten entschuldige ich mich.
Also, der Reihe nach: Ich wollte einfach nur eine zum Testen eine einfache Zeitreihe über den Untersuchungszeitraum von 12 Monaten erstellen. Die fiktive Messstelle sammelt die Daten stündlich:
Hier die fiktiven Daten für den "ph-Wert":
Das nächste Problem was sich mir stellte, war die Formatierung der Zeitsequenz. Ich wollte die Monate nicht als Zahl 01, 02, 03....sondern als Wort "Januar", "Februar"....Deswegen der umständliche Weg der Umformatierung mittels des Befehls "revalue". Ich wollte für jede Spalte, separat, Jahr, Monat, Tag, Zeit:
Mit dem Befehl "revalue" aus dem Package "stringi" sollte laut meiner Recherche dies gelingen:
Interessanterweise bekomme ich jetzt die Fehlermeldung: "Error in revalue(d$Month, c(`01` = "Januar", `02` = "Februar", `03` = "März", :
could not find function "revalue"
Beim ersten Versuch, war der Befehl erfolgreich. In meiner Datentabelle (siehe Anhang, Exceltabelle) habe ich alles schön auseinander genommen. Zwar ziemlich umständlich für den Anfang (bin ja auch blutiger Anfänger) - aber es macht Spaß und ich komme voran.
Jetzt wollte ich mit den Daten mir eine Zeitreihe anzeigen lassen um später diese - erstmal fiktive - Messstelle, wöchentlich, monatlich, quartalsweise auszuwerten. Stück für Stück wollte ich die zu messenden Variablen erweitern, der Realität anpassen um zum Schluss an realen Daten zu arbeiten.
Mittlerweile bin ich bei den Packages "zoo" , "forecast" und "xts" gelandet. Laut meiner Recherche kommen diese Packages viel besser mit Datenreihen klar. Nur leider ich nicht. Weil ich nicht weiß wie ich meine Daten dort ablegen muss. Die Beschreibung finde ich nicht ganz eindeutig - zumindest für mich. Sorry!
Hab nochmals vielen Dank für deine Geduld und Hilfe!
Viele Grüße,
Retep
PS: Ich vermute das mit der Formatierunsmöglichkeit hat wieder nicht funktioniert obwohl ich den Button für code benutzt habe: komisch. Nochmals Sorry für die Umstände.
hab vielen Dank für die schnelle Rückmeldung! Allerdings bin ich ganz sicher ob ich verstanden habe, was du mit </> Formatierung meinst. Für die Unannehmlichkeiten entschuldige ich mich.
Also, der Reihe nach: Ich wollte einfach nur eine zum Testen eine einfache Zeitreihe über den Untersuchungszeitraum von 12 Monaten erstellen. Die fiktive Messstelle sammelt die Daten stündlich:
Code: Alles auswählen
zeitpunkte_year<- seq(from = as.POSIXct("2018-01-01 00:00"),
to = as.POSIXct("2018-12-31 23:00"), by = "hour")
Code: Alles auswählen
ph_year<- round(rnorm(8760,6, sd = 1), 2)
Code: Alles auswählen
zeitpunkte_year_sep <- data.frame(Date = as.Date(zeitpunkte_year, format = "%B/%d/%Y"),
Time = format( as.POSIXct( zeitpunkte_year, format = "%m/%d/%Y %H:%M"),
format = "%H:%M %p") )
Code: Alles auswählen
Monat <- revalue(d$Month, c("01"="Januar", "02"="Februar", "03"="März", "04" = "April", "05" = "Mai", "06" = "Juni", "07"="Juli", "08" = "August", "09" = "September",
"10" = "Oktober", "11" = "November", "12" = "Dezember"))
could not find function "revalue"
Beim ersten Versuch, war der Befehl erfolgreich. In meiner Datentabelle (siehe Anhang, Exceltabelle) habe ich alles schön auseinander genommen. Zwar ziemlich umständlich für den Anfang (bin ja auch blutiger Anfänger) - aber es macht Spaß und ich komme voran.
Jetzt wollte ich mit den Daten mir eine Zeitreihe anzeigen lassen um später diese - erstmal fiktive - Messstelle, wöchentlich, monatlich, quartalsweise auszuwerten. Stück für Stück wollte ich die zu messenden Variablen erweitern, der Realität anpassen um zum Schluss an realen Daten zu arbeiten.
Mittlerweile bin ich bei den Packages "zoo" , "forecast" und "xts" gelandet. Laut meiner Recherche kommen diese Packages viel besser mit Datenreihen klar. Nur leider ich nicht. Weil ich nicht weiß wie ich meine Daten dort ablegen muss. Die Beschreibung finde ich nicht ganz eindeutig - zumindest für mich. Sorry!
Hab nochmals vielen Dank für deine Geduld und Hilfe!
Viele Grüße,
Retep
PS: Ich vermute das mit der Formatierunsmöglichkeit hat wieder nicht funktioniert obwohl ich den Button für code benutzt habe:
Code: Alles auswählen
- Dateianhänge
-
- Observation_year.xlsx
- (296.52 KiB) 137-mal heruntergeladen
Zuletzt geändert von jogo am So Sep 09, 2018 9:27 am, insgesamt 1-mal geändert.
Grund: Formatierung
Grund: Formatierung
Your first xts object
Welche Beschreibung meinst Du?Die Beschreibung finde ich nicht ganz eindeutig - zumindest für mich. Sorry!
(aus: http://rstudio-pubs-static.s3.amazonaws ... fc671.html)xts objects are simple. Think of them as a matrix of observations combined with an index of corresponding dates and times.
xts = matrix + times The main xts constructor takes a number of arguments, but the two most important are x for the data and order.by for the index. x must be a vector or matrix. order.by is a vector which must be the same length or number of rows as x, be a proper time or date object (very important!), and be in increasing order.
Re: Probleme mit Grafik in Zeitreihe
Hallo Athomas,
wow der Link zu xts ist Klasse! Den habe ich noch nicht gefunden! Ich werd diesen heute Abend ausprobieren. Ich gebe sofort Rückmeldung ob alles geklappt hat.
Zum Beispiel bei "Zoo". An welchem Punkt müssen meine Daten rein? bei dem Versuch die seq. Date von by = "1 day" auf by = 1 hour" zu ändern bekam ich einen Fehler angezeigt:
Nochmals vielen Dank für deine Hilfe,
retep
wow der Link zu xts ist Klasse! Den habe ich noch nicht gefunden! Ich werd diesen heute Abend ausprobieren. Ich gebe sofort Rückmeldung ob alles geklappt hat.
Zum Beispiel bei "Zoo". An welchem Punkt müssen meine Daten rein? bei dem Versuch die seq. Date von by = "1 day" auf by = 1 hour" zu ändern bekam ich einen Fehler angezeigt:
Code: Alles auswählen
Error in seq.Date(as.Date("2018/01/01"), as.Date("2018/12/31"), by = "1 hour") : ungültige Zeichenkette für 'by'
Code: Alles auswählen
set.seed(2018)
dates <- seq(as.Date("2018/01/01"), as.Date("2018/12/31"), by = "1 day")
dates <- dates[sample(length(dates), 100)]
#We construct a sample data.frame
df <- data.frame(
dates = dates,
val = cumsum(runif(length(dates))))
#To turn df into a zoo timeseries, you can do the following:
library(zoo)
ts <- with(df, zoo(val, dates))
#Plotting
plot.zoo(ts)]
retep
Zuletzt geändert von jogo am So Sep 09, 2018 9:25 am, insgesamt 1-mal geändert.
Grund: Formatierung
Grund: Formatierung
Re: Probleme mit Grafik in Zeitreihe
Eins vorweg: ich bin kein Zeitreihen-Spezi, d.h. ich habe nie ernsthaft damit gearbeitet, sondern nur ein wenig herumexperimentiert!
as.Date(...) erzeugt ein reines Datum, d.h. ohne den Zeitanteil - und dazu eine Stunde zu addieren ist nur beschränkt sinnvoll.
Warum bist Du nicht bei as.POSIXct geblieben - das klappt doch wunderbar!?
as.Date(...) erzeugt ein reines Datum, d.h. ohne den Zeitanteil - und dazu eine Stunde zu addieren ist nur beschränkt sinnvoll.
Warum bist Du nicht bei as.POSIXct geblieben - das klappt doch wunderbar!?
Code: Alles auswählen
library(xts)
zeitpunkte_jahr <- seq(from = as.POSIXct("2018-01-01 00:00"),
to = as.POSIXct("2018-12-31 23:00"), by = "hour")
Daten <- rnorm(length(zeitpunkte_jahr))
Zeitreihe <- xts(x = Daten, order.by = zeitpunkte_jahr)
# Fertig ist die Zeitreihe...
Zuletzt geändert von Athomas am Sa Sep 08, 2018 5:55 pm, insgesamt 1-mal geändert.
Re: Probleme mit Grafik in Zeitreihe
Hey,
danke für die schnelle Hilfe!!!! Aber ich bekomme nur alleine beim Ausführen des Codes, welchen du mit geschickt hast, folgende Fehlermeldung:
Ich arbeite heute Abend den Link zu der Webseite durch. Aber beim "Schnelldurchlauf" des Links habe ich nicht gesehen wie ich die Daten plotten kann.
Vielen Dank für deine schnelle Hilfe und es tut mir leid, falls ich nicht schnell genug kapiere......
retep
danke für die schnelle Hilfe!!!! Aber ich bekomme nur alleine beim Ausführen des Codes, welchen du mit geschickt hast, folgende Fehlermeldung:
Code: Alles auswählen
# Fertig ist die Zeitreihe....
> zeitpunkte_jahr
Error: object 'zeitpunkte_jahr' not found
Vielen Dank für deine schnelle Hilfe und es tut mir leid, falls ich nicht schnell genug kapiere......
retep
Zuletzt geändert von jogo am So Sep 09, 2018 9:24 am, insgesamt 1-mal geändert.
Grund: Formatierung
Grund: Formatierung
Re: Probleme mit Grafik in Zeitreihe
Ja toll, da habe ich wohl eine Klamnmer nicht mitkopiert , es aber jetzt oben geändert.
Zur Grafik habe ich noch gar nichts gesagt...
Zur Grafik habe ich noch gar nichts gesagt...
Re: Probleme mit Grafik in Zeitreihe
Hej,
perfekt!!!!!! Siehe Anhang! Jetzt kann ich langsam aber sicher ans "hübsch" machen sowie an die zeitlich unterschiedliche Auswertung (Woche, Monat, Quartal, Halbjährlich) und an das plotten gehen!
Wenn ich das richtig verstanden habe, dann muss die Zeitreihe und die zu analysierende Variable zu unterschiedlichen Dateien gehören. Der Plot funktioniert nicht, wenn ich zum Beispiel zeitreihe_jahr$ph angeben würde! Habe ich das richtig verstanden?
Nochmals vielen Dank für deine wertvolle Hilfe & Unterstützung!
perfekt!!!!!! Siehe Anhang! Jetzt kann ich langsam aber sicher ans "hübsch" machen sowie an die zeitlich unterschiedliche Auswertung (Woche, Monat, Quartal, Halbjährlich) und an das plotten gehen!
Wenn ich das richtig verstanden habe, dann muss die Zeitreihe und die zu analysierende Variable zu unterschiedlichen Dateien gehören. Der Plot funktioniert nicht, wenn ich zum Beispiel zeitreihe_jahr$ph angeben würde! Habe ich das richtig verstanden?
Nochmals vielen Dank für deine wertvolle Hilfe & Unterstützung!
- Dateianhänge
-
- Testzeitreihe_ph.png (7.72 KiB) 3436 mal betrachtet
Re: Probleme mit Grafik in Zeitreihe
Das hast Du wohl falsch verstanden, eine (xts-) Zeitreihe setzt sich lediglich aus zwei Komponenten zusammen...Wenn ich das richtig verstanden habe, dann muss die Zeitreihe und die zu analysierende Variable zu unterschiedlichen Dateien gehören.
Für Grafiken nehme ich immer ggplot2 (das ist der kleine Teil des tidyverse, in dem ich mich bewege ):
Code: Alles auswählen
library(xts)
zeitpunkte_jahr <- seq(from = as.POSIXct("2018-01-01 00:00"),
to = as.POSIXct("2018-12-31 23:00"), by = "hour")
Daten <- cumsum(rnorm(length(zeitpunkte_jahr)))
Zeitreihe <- xts(x = Daten, order.by = zeitpunkte_jahr)
# Fertig ist die Zeitreihe...
library(ggplot2)
Grafik <- ggplot(Zeitreihe) +
theme_bw() +
geom_point(aes(x=Index, y=Daten), colour="blue", alpha=0.4, size=0.5) +
geom_smooth(aes(x=Index, y=Daten), colour="darkgreen")
print(Grafik)