aus csv.-datei Daten als Date-Datentyp erfassen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

G-Rizzle
Beiträge: 13
Registriert: Do Nov 18, 2021 1:51 pm

aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von G-Rizzle »

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:

1.PNG
1.PNG (9.24 KiB) 1490 mal betrachtet

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?
2.PNG
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
G-Rizzle
Beiträge: 13
Registriert: Do Nov 18, 2021 1:51 pm

Re: aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von G-Rizzle »

Anhang noch zum printen des Listeneintrags eines Listeneintrags:
3.PNG
3.PNG (6.06 KiB) 1488 mal betrachtet
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von bigben »

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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
G-Rizzle
Beiträge: 13
Registriert: Do Nov 18, 2021 1:51 pm

Re: aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von G-Rizzle »

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.

1.PNG


Grüße
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von Hufeisen »

G-Rizzle hat geschrieben: Do Dez 23, 2021 9:05 amHi 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.
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.
G-Rizzle
Beiträge: 13
Registriert: Do Nov 18, 2021 1:51 pm

Re: aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von G-Rizzle »

Hufeisen hat geschrieben: Do Dez 23, 2021 10:07 am
G-Rizzle hat geschrieben: Do Dez 23, 2021 9:05 amHi 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.
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.
Hi Hufeisen,
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) 92-mal heruntergeladen
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von Hufeisen »

Wunderbar, nun kannst du dich dem Problem Schritt für Schritt nähern.

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 ...
 
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$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" ..
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von bigben »

Hallo G-Rizzle,
G-Rizzle hat geschrieben: Do Dez 23, 2021 10:27 am...Konnte mit deinem Post letztes mal nichts wirklich anfangen und konnte das Problem dann von hinten durch die Brust ins Auge umgehen.
Mehr als im nächsten Thread nachfragen, ob es geholfen hat, kann ich nicht machen.
Was genau soll ich mit "str(Deine_Daten)" ?
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().

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")
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.

Wenn Du dann weiter unten schreibst

Code: Alles auswählen

ggplot(datensatz_btceur, aes(x = daten_btceur))+
geom_line(aes(y=closes_btceur))
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.

Deshalb die Fehlermeldung.


LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
G-Rizzle
Beiträge: 13
Registriert: Do Nov 18, 2021 1:51 pm

Re: aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von G-Rizzle »

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:

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
1.PNG

ich vermisse Python, das lerne ich jetzt erst richtig zu schätzen :D


Frohe Weihnachtsfeiertage. Seid ihr eigentlich "ehrenamtlich" hier im Forum so aktiv, oder bekommt ihr eine Vergütung in irgendeiner Weise dafür?

Grüße
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: aus csv.-datei Daten als Date-Datentyp erfassen

Beitrag von bigben »

Hallo G-Rizzle,
G-Rizzle hat geschrieben: Fr Dez 24, 2021 12:14 pmalso verstehe ich es richtig: in ggplot2 plottet man nur ein zusammenhängendes Dataframe, bzw Spalten aus diesem. Keine seperat extrahierten Spalten.
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.
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))
Ich weiß wirklich nicht, warum Du Dich so hartnäckig dagegen weigerst, die Daten nach dem Einlesen einmal mit str() anzuschauen :!:

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 vermisse Python, das lerne ich jetzt erst richtig zu schätzen :D
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.

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)
Seid ihr eigentlich "ehrenamtlich" hier im Forum so aktiv, oder bekommt ihr eine Vergütung in irgendeiner Weise dafür?
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.
Frohe Weihnachtsfeiertage.
Dir auch!
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten