CSV-Export vom Bankkonto analysieren

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

matte20

CSV-Export vom Bankkonto analysieren

Beitrag von matte20 »

Hey Leute,

kann mir bitte jemand hierbei helfen:

Ich möchte gerne meine Ein- und Ausgaben analysieren und diese grafisch darstellen zur besseren Übersicht.
Leider bietet die DKB hierfür von Haus aus keine Funktion mit der man das auf der Webseite machen könnte.
Dementsprechend bin ich bei meiner Recherche auf R gestoßen, doch leider fehlt mir da die nötige Kompetenz das umzusetzen, also hoffe ich auf eure Hilfe. :|
Hier mal ein Screenshot von den Spaltennamen der CSV-Datei:
Bildschirmfoto 2017-12-17 um 21.57.20.png
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: CSV-Export vom Bankkonto analysieren

Beitrag von bigben »

Hallo matte20,

natürlich lassen sich solche Dateien mit R auswerten. Wenn Du Lust hast, Dich in R einzuarbeiten, dann helfen wir Dir gerne. Was nicht heißt, dass wir ohne Eigenleistung Deinerseits für Dich beliebig komplexe Auswertungen programmieren. Das kommt aus Deiner Anfrage nicht ganz raus.

Die zwei nächsten Schritte:
  • CSV-Dateien können sehr unterschiedlich aussehen. Um sie einzulesen, muss man ein wenig darüber wissen, wie das CSV codiert ist. Bitte lese die Datei mit einem Texteditor ein, ändere um der Diskretion willen ein paar Zahlen und poste die ersten etwa 10 Zeilen hier.
  • Welche Art von Auswertung stellst Du Dir denn vor? Welche Fragen sollen beantwortet werden? Schreib das mal konkret auf.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
matte20

Re: CSV-Export vom Bankkonto analysieren

Beitrag von matte20 »

Danke Bernhard für die schnelle Antwort,

ich versuche mich seit 2 Stunden in R einzuarbeiten, leider ohne Erfolg. :roll:
Beim Versuch die CSV-Datei per

Code: Alles auswählen

read.csv("Umsätze2015.csv")
einzulesen bin ich schon mal gescheitert.
Hab auch den Pfad angegeben:

Code: Alles auswählen

path <- "/Users/Matte/Desktop/Umsätze" #Pfad zum Ordner 
setwd(path)

Dachte das könnte an der CSV-Datei liegen, weil die Bank das vielleicht anders codiert. Jedenfalls habe ich die wirklich notwendigen Daten dann kopiert und in eine neue Excel Tabelle eingefügt und diese als .CSV abgespeichert.
Jetzt wird mir eine andere Meldung angezeigt:
Bildschirmfoto 2017-12-18 um 01.09.40.png
Jedenfalls richte ich mich erstmal an deine Anweisungen und selbstverständlich versuche ich mich mit R auseinanderzusetzen. :)

Ansicht im Texteditor:
Bildschirmfoto 2017-12-18 um 01.12.10.png
Was ich mir vorstelle:
Positive und negative Beträge sollen separat und summiert in den entsprechenden Monaten angezeigt werden.
Bspw. Januar-> Einnahmen: 2000 Ausgaben: 1000
Februar-> Einnahmen: 3000 Ausgaben: 1500
usw.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: CSV-Export vom Bankkonto analysieren

Beitrag von jogo »

Hallo Matte,

willkommen im Forum!
Wie heißt die Datei nun wirklich:
a) "Umsätze2015.csv" (so wie in der Nachricht angegeben) oder
b) "Umsätze2016" (ohne ".csv" am Ende, so wie im Bild mit der Fehlermeldung)
:?:

Allgemeine Hinweise:
1. Man kann nach dem setwd(...) mit dir() und getwd() kontrollieren, ob alles geklappt hat.
2. Umlaute im Dateinamen sind eventuell ungünstig; beheben:
a) anderen Namen für die Datei
b) file.choose() verwenden.

Bei Deiner Datei musst Du bei read.table() sep=';' und dec=',' setzen! Also:

Code: Alles auswählen

U <- read.table(file=file.choose(), header=TRUE, sep=';', dec=',')
Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: CSV-Export vom Bankkonto analysieren

Beitrag von bigben »

Hallo matte20,

was Jörg vergessen hat: Nach dem Einlesen, wie von ihm gezeigt, bitte das Ergebnis von

Code: Alles auswählen

str(U)
posten (ggf nach Ändern von Beträgen oder erkennbaren Namen, das ist ja ein öffentliches Forum hier).
Was ich mir vorstelle:
Positive und negative Beträge sollen separat und summiert in den entsprechenden Monaten angezeigt werden.
Bspw. Januar-> Einnahmen: 2000 Ausgaben: 1000
Februar-> Einnahmen: 3000 Ausgaben: 1500
usw.
Das sind realistische Anfängerziele. Das kriegen wir hin.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
matte20

Re: CSV-Export vom Bankkonto analysieren

Beitrag von matte20 »

Allgemeine Hinweise:
1. Man kann nach dem setwd(...) mit dir() und getwd() kontrollieren, ob alles geklappt hat.
2. Umlaute im Dateinamen sind eventuell ungünstig; beheben:
a) anderen Namen für die Datei
b) file.choose() verwenden.
Vielen Dank Jörg, funktioniert jetzt! :)
Bildschirmfoto 2017-12-18 um 14.51.36.png
bitte das Ergebnis von str(U) posten
Bildschirmfoto 2017-12-18 um 14.51.46.png
Jetzt muss ich mich mal schnell mit str() auseinandersetzen, weil ich echt nicht weiß was das Ergebnis zu bedeuten hat. :roll:
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: CSV-Export vom Bankkonto analysieren

Beitrag von jogo »

matte20 hat geschrieben: Mo Dez 18, 2017 3:00 pm
Allgemeine Hinweise:
1. Man kann nach dem setwd(...) mit dir() und getwd() kontrollieren, ob alles geklappt hat.
2. Umlaute im Dateinamen sind eventuell ungünstig; beheben:
a) anderen Namen für die Datei
b) file.choose() verwenden.
Vielen Dank Jörg, funktioniert jetzt! :)
Bildschirmfoto 2017-12-18 um 14.51.36.png
aber nur im Sinne von "es gab keine Fehlermeldung"
bitte das Ergebnis von str(U) posten
Bildschirmfoto 2017-12-18 um 14.51.46.png
Jetzt muss ich mich mal schnell mit str() auseinandersetzen, weil ich echt nicht weiß was das Ergebnis zu bedeuten hat. :roll:
Leider nichts Gutes:
Du hast Zahlen, bei denen es ein Tausender-Trennzeichen gibt. Deshalb werden die Zahlen nicht als solche erkannt.
Unter diesen Umständen, kannst Du beim Einlesen mit read.table() noch den Parameter stringsAsFactors=FALSE setzen.
Dann weiter mit

Code: Alles auswählen

names(U)[2] <- "Betrag"
U$Betrag <- gsub(".", "", U$Betrag, fixed=TRUE)
U$Betrag <- gsub(",", ".", U$Betrag, fixed=TRUE)
U$Betrag <- as.numeric(U$Betrag)
U$Buchungstag <- as.Date(U$Buchungstag, format="%d.%m.%Y")
Im Paket lubridate (ggf. installieren) gibt es hübsche Datumsfunktionen:

Code: Alles auswählen

library("lubridate")
U$Jahr  <- year(U$Buchungstag)
U$Monat <- month(U$Buchungstag)
Vielleicht geht dann auch schon:

Code: Alles auswählen

aggregate(Betrag ~ Jahr + Monat, data=subset(U, Betrag>=0), FUN=sum) # und
aggregate((-Betrag) ~ Jahr + Monat, data=subset(U, Betrag<0), FUN=sum)
Gruß, Jörg
matte20

Re: CSV-Export vom Bankkonto analysieren

Beitrag von matte20 »

Hallo Jörg,
erstmal vielen lieben Dank! Für die Jahre 2015 und 2016 hat es einwandfrei funktioniert, aber für 2017 scheint der mir falsche Werte auszugeben.
Die CSV-Dateien enthalten im Schnitt identische Werte und dieselben Spalten.
Hier mal ein Ausschnitt mit Beispielwerten:
Januar - positive und negative Werte:
Bildschirmfoto 2017-12-19 um 01.39.31.png
Summierte Ausgabe der negativen Beträge in R:
Bildschirmfoto 2017-12-19 um 01.41.24.png
Die positiven Werte scheinen aber korrekt zu sein und der Code macht auch Sinn.. :?:
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: CSV-Export vom Bankkonto analysieren

Beitrag von jogo »

Hallo Matte,
matte20 hat geschrieben: Di Dez 19, 2017 1:43 am Hallo Jörg,
erstmal vielen lieben Dank! Für die Jahre 2015 und 2016 hat es einwandfrei funktioniert, aber für 2017 scheint der mir falsche Werte auszugeben.
Die CSV-Dateien enthalten im Schnitt identische Werte und dieselben Spalten.
Hier mal ein Ausschnitt mit Beispielwerten:
Januar - positive und negative Werte:
Bildschirmfoto 2017-12-19 um 01.39.31.png

Summierte Ausgabe der negativen Beträge in R:
Bildschirmfoto 2017-12-19 um 01.41.24.png

Die positiven Werte scheinen aber korrekt zu sein und der Code macht auch Sinn.. :?:
Bildschirmfotos sind nicht geeignet, um das Verhalten zu reproduzieren. Da die Einleseprozedur mir inzwischen bekannt ist, ist eine CSV-Datei gut geeignet, um entsprechende Daten zu konstruieren.
Für eine Fehlersuche würde ich wie folgt vorgehen:
1. nach dem Einlesen zuerst die Datumsoperationen,
2. die Spalte $Betrag zusätzlich zu den originalen Daten generieren,
3. Kontrolle der verdächtigen Daten.

Code: Alles auswählen

library("lubridate")
U <- read.table(file=file.choose("Umsaetze2017"), header=TRUE, sep=';', dec=',', stringsAsFactors=FALSE)
U$BuTag <- as.Date(U$Buchungstag, format="%d.%m.%Y")
U$Jahr  <- year(U$BuTag)
U$Monat <- month(U$BuTag)

U$Betrag <- gsub(".", "", U[, 2], fixed=TRUE)
U$Betrag <- gsub(",", ".", U$Betrag, fixed=TRUE)
U$Betrag <- as.numeric(U$Betrag)

# subset(U, Betrag>=0 & Monat==1)
subset(U, Betrag<0 & Monat==1)
sum(subset(U, Betrag<0 & Monat==1)$Betrag)
aggregate(Betrag ~ Jahr + Monat, data=subset(U, Betrag<0), FUN=sum)
Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: CSV-Export vom Bankkonto analysieren

Beitrag von bigben »

Hallo Jörg,
jogo hat geschrieben: Mo Dez 18, 2017 3:29 pm

Code: Alles auswählen

aggregate((-Betrag) ~ Jahr + Monat, data=subset(U, Betrag<0), FUN=sum)
Kannst Du mir die Formel da erklären? Schlägst Du wirklich einen Variablennamen vor, der ein Minus enthält? Den Trick mit der Klammer kannte ich nicht, aber ist das eine gute Idee?
Identifiers consist of a sequence of letters, digits, the period (‘.’) and the underscore. They must not start with a digit or an underscore, or with a period followed by a digit.
https://cran.r-project.org/doc/manuals/ ... dentifiers

Bin gespannt,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten