aus csv.-datei Daten als Date-Datentyp erfassen
aus csv.-datei Daten als Date-Datentyp erfassen
Hi,
ich möchte aus einer .csv-Datei eine Spalte mit Daten einlesen und diese in R auch als solchen Datentyp bekanntmachen. Leider haut das ganze nicht recht hin.
Der Datentyp liegt folgend vor:
Jetzt löse ich entsprechende Spalte heraus. Außerdem interessiert mich der Datentyp (wird als "List" angezeigt, warum nicht Dataframe? der Hauptdatensatz liegt doch als Dataframe vor.
Außerdem möchte ich nun z.B. das erste Element der Liste anzeigen lassen.
--> Warum wird trotzdem die gesamte Liste geprintet?
Verwirrt printe ich nun, wie man es ja bei einer Liste von Listen macht, den ersten Eintrag des ersten Eintrags. Es passt, allerdings steht hier nun etwas von "675 Levels: ...." --> Was ist das? Warum kommt das?
Das ganze mache ich eigentlich nur, um die Liste eben als Date-Liste vorliegen zu haben. Die as.Date()-Funktion funktioniert nicht (ich denke, da die Daten nicht als Strings vorliegen). --> Wie mache ich das ?
Ich bin sehr verwirrt und freue mich über Hilfe
Gregor
ich möchte aus einer .csv-Datei eine Spalte mit Daten einlesen und diese in R auch als solchen Datentyp bekanntmachen. Leider haut das ganze nicht recht hin.
Der Datentyp liegt folgend vor:
Jetzt löse ich entsprechende Spalte heraus. Außerdem interessiert mich der Datentyp (wird als "List" angezeigt, warum nicht Dataframe? der Hauptdatensatz liegt doch als Dataframe vor.
Außerdem möchte ich nun z.B. das erste Element der Liste anzeigen lassen.
--> Warum wird trotzdem die gesamte Liste geprintet?
Verwirrt printe ich nun, wie man es ja bei einer Liste von Listen macht, den ersten Eintrag des ersten Eintrags. Es passt, allerdings steht hier nun etwas von "675 Levels: ...." --> Was ist das? Warum kommt das?
Das ganze mache ich eigentlich nur, um die Liste eben als Date-Liste vorliegen zu haben. Die as.Date()-Funktion funktioniert nicht (ich denke, da die Daten nicht als Strings vorliegen). --> Wie mache ich das ?
Ich bin sehr verwirrt und freue mich über Hilfe
Gregor
Re: aus csv.-datei Daten als Date-Datentyp erfassen
Anhang noch zum printen des Listeneintrags eines Listeneintrags:
Re: aus csv.-datei Daten als Date-Datentyp erfassen
Hallo,
auch diesmal wäre str(datensatz) der zweitbeste Weg, nach einem reproduzierbarenMinimalbeispiel, um zu zeigen, was für Daten Du da hast. Auch dieses Mal wurde das Datum als Faktor eingelesen und nicht als Datum.
Siehe auch meinen letzten Post in diesem Thread http://forum.r-statistik.de/viewtopic.p ... 738#p16738
LG, Bernhard
auch diesmal wäre str(datensatz) der zweitbeste Weg, nach einem reproduzierbarenMinimalbeispiel, um zu zeigen, was für Daten Du da hast. Auch dieses Mal wurde das Datum als Faktor eingelesen und nicht als Datum.
Siehe auch meinen letzten Post in diesem Thread http://forum.r-statistik.de/viewtopic.p ... 738#p16738
LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: aus csv.-datei Daten als Date-Datentyp erfassen
bigben hat geschrieben: ↑Mi Dez 22, 2021 7:32 pm Hallo,
auch diesmal wäre str(datensatz) der zweitbeste Weg, nach einem reproduzierbarenMinimalbeispiel, um zu zeigen, was für Daten Du da hast. Auch dieses Mal wurde das Datum als Faktor eingelesen und nicht als Datum.
Siehe auch meinen letzten Post in diesem Thread http://forum.r-statistik.de/viewtopic.p ... 738#p16738
LG, Bernhard
Hi Bernhard,
tut mir leid, dass ich etwas schwer von Begriff bin. Konnte mit deinem Post letztes mal nichts wirklich anfangen und konnte das Problem dann von hinten durch die Brust ins Auge umgehen.
Ich denke, ich habe die die Daten nun richtig formatiert. Leider kommen beim plotten immernoch Fehlermeldungen, mit denen ich nichts anfangen kann und bei denen ich auch mit Googlesuche nichts finde.
Grüße
Re: aus csv.-datei Daten als Date-Datentyp erfassen
Bernhard hat dir beim letzten mal gezeigt, wie man Daten, die von R nicht richtig erkannt werden, als Datum deklariert. Wenn du seine Erklärung nicht verstanden hast, dann solltest du uns sagen, bis zu welchem Punkt du damals gekommen bist und wo du noch mal eine genauere Erklärung benötigst. Deine Behelfslösung scheint ja nicht für ähnliche Probleme zu funktionieren.
Ganz wichtig: Zeige uns deine Daten im Codeblock, nicht als Bildschirmfoto. Dann können wir auch damit arbeiten. str(Deine_Daten) hilft dabei sehr.
Re: aus csv.-datei Daten als Date-Datentyp erfassen
Hi Hufeisen,Hufeisen hat geschrieben: ↑Do Dez 23, 2021 10:07 amBernhard hat dir beim letzten mal gezeigt, wie man Daten, die von R nicht richtig erkannt werden, als Datum deklariert. Wenn du seine Erklärung nicht verstanden hast, dann solltest du uns sagen, bis zu welchem Punkt du damals gekommen bist und wo du noch mal eine genauere Erklärung benötigst. Deine Behelfslösung scheint ja nicht für ähnliche Probleme zu funktionieren.
Ganz wichtig: Zeige uns deine Daten im Codeblock, nicht als Bildschirmfoto. Dann können wir auch damit arbeiten. str(Deine_Daten) hilft dabei sehr.
danke schonmal.
Hier der Codeblock, inkl. angehängter Datei.
Was genau soll ich mit "str(Deine_Daten)" ?
Code: Alles auswählen
datensatz_btceur = read.csv("BTC-EUR.csv")
print(typeof(datensatz_btceur))
daten_btceur = as.Date(as.character(datensatz_btceur$Date), "%Y-%m-%d")
print(typeof(daten_btceur))
closes_btceur = datensatz_btceur["Close"]
library(ggplot2)
ggplot(datensatz_btceur, aes(x = daten_btceur))+
geom_line(aes(y=closes_btceur))
danke euch für eure geduld und ein paar ruhige Tage!
- Dateianhänge
-
- BTC-EUR.csv
- (56.85 KiB) 93-mal heruntergeladen
Re: aus csv.-datei Daten als Date-Datentyp erfassen
Wunderbar, nun kannst du dich dem Problem Schritt für Schritt nähern.
Wie du siehst und Bernhard schon geschrieben hat, wird die Variable Date als Faktor eingelesen. Du musst R nur noch mitteilen, dass du Date als Datum behandeln möchtest. Wie das geht, hat Bernhard im letzten Thema erklärt.
Code: Alles auswählen
test <- read.csv(file = 'http://forum.r-statistik.de/download/file.php?id=1629')
str(test)
'data.frame': 675 obs. of 7 variables:
$ Date : Factor w/ 675 levels "2020-02-17","2020-02-18",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Open : Factor w/ 659 levels "10006.346680",..: 608 600 621 595 597 599 596 607 593 568 ...
$ High : Factor w/ 658 levels "10009.510742",..: 614 626 628 595 600 599 613 615 594 568 ...
$ Low : Factor w/ 659 levels "10017.701172",..: 593 603 601 595 600 597 602 594 575 508 ...
$ Close : Factor w/ 659 levels "10006.637695",..: 602 621 598 596 600 597 609 594 569 516 ...
$ Adj.Close: Factor w/ 659 levels "10006.637695",..: 602 621 598 596 600 597 609 594 569 516 ...
$ Volume : Factor w/ 659 levels "101409092304",..: 504 524 518 495 443 370 446 494 459 543 ...
Code: Alles auswählen
test$datum_as_date <- as.Date(as.character(test$Date), "%Y-%m-%d")
str(test)
'data.frame': 675 obs. of 8 variables:
$ Date : Factor w/ 675 levels "2020-02-17","2020-02-18",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Open : Factor w/ 659 levels "10006.346680",..: 608 600 621 595 597 599 596 607 593 568 ...
$ High : Factor w/ 658 levels "10009.510742",..: 614 626 628 595 600 599 613 615 594 568 ...
$ Low : Factor w/ 659 levels "10017.701172",..: 593 603 601 595 600 597 602 594 575 508 ...
$ Close : Factor w/ 659 levels "10006.637695",..: 602 621 598 596 600 597 609 594 569 516 ...
$ Adj.Close : Factor w/ 659 levels "10006.637695",..: 602 621 598 596 600 597 609 594 569 516 ...
$ Volume : Factor w/ 659 levels "101409092304",..: 504 524 518 495 443 370 446 494 459 543 ...
$ datum_as_date: Date, format: "2020-02-17" "2020-02-18" "2020-02-19" "2020-02-20" ..
Re: aus csv.-datei Daten als Date-Datentyp erfassen
Hallo G-Rizzle,
Wenn Du dann weiter unten schreibst
Deshalb die Fehlermeldung.
LG,
Bernhard
Mehr als im nächsten Thread nachfragen, ob es geholfen hat, kann ich nicht machen.
Wenn Du Deine_Daten durch Dein Datenobjekt ersetzt, dann wird Dir vernünftig angezeigt, ob es sich um eine data.frame handelt und wenn ja, als welcher Typ welche Spalte eingelesen wurde und so weiter. Die Funktion str() war auch in Deinem ersten Thread schon mal Thema. Sie ist viel häufiger passend als typeof().Was genau soll ich mit "str(Deine_Daten)" ?
In dieser (der letzten hier zitierten) Zeile fängt das Problem an. daten_btceur wird hier als eigenständige Variable außerhalb des Dataframes datensatz_btceur angelegt. Das wäre in weiten Teilen von R kein Problem, es ist aber eine Marotte von ggplot2, dass Daten immer in zusammenhängenden Dataframes gedacht werden.Code: Alles auswählen
datensatz_btceur = read.csv("BTC-EUR.csv") print(typeof(datensatz_btceur)) daten_btceur = as.Date(as.character(datensatz_btceur$Date), "%Y-%m-%d")
Wenn Du dann weiter unten schreibst
dann sucht ggplot die Daten für die x und für die y-Achse innerhalb des Dataframes datensatz_btceur und kann sie dort nicht finden.Code: Alles auswählen
ggplot(datensatz_btceur, aes(x = daten_btceur))+ geom_line(aes(y=closes_btceur))
Deshalb die Fehlermeldung.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: aus csv.-datei Daten als Date-Datentyp erfassen
Hi ihr beiden,
also verstehe ich es richtig: in ggplot2 plottet man nur ein zusammenhängendes Dataframe, bzw Spalten aus diesem. Keine seperat extrahierten Spalten.
Nach diesem Verständnis mein Code:
Tatsächlich wird etwas geplottet, allerdings...merkwürdig
ich vermisse Python, das lerne ich jetzt erst richtig zu schätzen
Frohe Weihnachtsfeiertage. Seid ihr eigentlich "ehrenamtlich" hier im Forum so aktiv, oder bekommt ihr eine Vergütung in irgendeiner Weise dafür?
Grüße
also verstehe ich es richtig: in ggplot2 plottet man nur ein zusammenhängendes Dataframe, bzw Spalten aus diesem. Keine seperat extrahierten Spalten.
Nach diesem Verständnis mein Code:
Code: Alles auswählen
library(ggplot2)
ggplot(datensatz_btceur, aes(x = as.Date(as.character(Date), "%Y-%m-%d")))+
geom_line(aes(y=Close))
Tatsächlich wird etwas geplottet, allerdings...merkwürdig
ich vermisse Python, das lerne ich jetzt erst richtig zu schätzen
Frohe Weihnachtsfeiertage. Seid ihr eigentlich "ehrenamtlich" hier im Forum so aktiv, oder bekommt ihr eine Vergütung in irgendeiner Weise dafür?
Grüße
Re: aus csv.-datei Daten als Date-Datentyp erfassen
Hallo G-Rizzle,
Der Autor von ggplot2 hält das für gute Statistikpraxis und argumentieren kann man dafür auch.
Wenn Du diesem guten Ratschlag folgen würdest hättest Du gleich gesehen, dass Deine Zahlenkolonnen nicht als Zahlen erkannt wurden. Beim Betrachten der CSV-Datei sieht man dann auch recht rasch, dass da fehlende Zahlen als "null" markiert sind. Da sieht R, dass das ein String ist und geht davon aus, dass in der ganzen Spalte Strings stehen.
So hier könnte man Dein Datenbeispiel plotten:
LG,
Bernhard
Im Grundsatz ja. Man kann auch verschiedene Dataframes in einem Plot unterbringen, aber eigentlich immer nur Dataframes, keine isolierten Vektoren.
Der Autor von ggplot2 hält das für gute Statistikpraxis und argumentieren kann man dafür auch.
Ich weiß wirklich nicht, warum Du Dich so hartnäckig dagegen weigerst, die Daten nach dem Einlesen einmal mit str() anzuschauenNach diesem Verständnis mein Code:Code: Alles auswählen
library(ggplot2) ggplot(datensatz_btceur, aes(x = as.Date(as.character(Date), "%Y-%m-%d")))+ geom_line(aes(y=Close))
Wenn Du diesem guten Ratschlag folgen würdest hättest Du gleich gesehen, dass Deine Zahlenkolonnen nicht als Zahlen erkannt wurden. Beim Betrachten der CSV-Datei sieht man dann auch recht rasch, dass da fehlende Zahlen als "null" markiert sind. Da sieht R, dass das ein String ist und geht davon aus, dass in der ganzen Spalte Strings stehen.
Ich bin einigermaßen sicher, dass man auch in Python Daten in einem definierten Format einlesen muss bzw. irgendwo markieren muss, wie fehlende Daten markiert sind. Auch in Python ist es bestimmt gute Praxis, nach Dateizugriffen zu prüfen, was man da bekommen hat. Gibt man in read.csv an, dass "null" für fehlende Daten steht, dann läuft das auch glatt durch.ich vermisse Python, das lerne ich jetzt erst richtig zu schätzen
So hier könnte man Dein Datenbeispiel plotten:
Code: Alles auswählen
datensatz_btceur <- read.csv("http://forum.r-statistik.de/download/file.php?id=1629",
na.strings = "null",
stringsAsFactors = TRUE) # stringsAsFactors zur Absicherung
# gegen R Versionssprünge
datensatz_btceur$daten_btceur <- # mit '$' wird das jetzt *im* Dataframe ergänzt
as.Date(as.character(datensatz_btceur$Date), "%Y-%m-%d")
library(ggplot2)
p <- ggplot(datensatz_btceur, aes(x = daten_btceur)) +
geom_errorbar(aes(ymin = Low, ymax = High), color = "pink") +
geom_point(aes(y = Close), alpha = .4) +
labs(x = "Datum", y = "BTC Schlusskurs (EUR)", caption = "Intraday Intervall in Rosa") +
theme_bw()
print(p)
Alle ehrenamtlich. Student könnte das Forum als Werbung für seine Berufstätigkeit nutzen, ich kann aber nicht erkennen, dass er das irgendwo versucht.Seid ihr eigentlich "ehrenamtlich" hier im Forum so aktiv, oder bekommt ihr eine Vergütung in irgendeiner Weise dafür?
Dir auch!Frohe Weihnachtsfeiertage.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte