Datenimport

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

Moderatoren: EDi, jogo

Kalypso

Datenimport

Beitrag von Kalypso »

Hallo,

bislang kam ich mit dem Datenimport ganz gut zurecht, in dem ich zum Erstellen einer .csv Datei Open Office Org benutzte.
Ich machte diese Exceldatei mit dem Programm auf und konnte dann eine saubere ,csv Datei erstellen, die ich anschließend z. B. mit
test<- readSeries(file.choose(), format = "%Y-%m-%d", sep = ",")
in R hochladen und bearbeiten konnte.
Mein Problem ist, die nun wesentlich größeren Datenmengen und Open Office Org kann eine Datei mit schlappen 20 MB noch nicht mal mehr öffnen und mit Excel kriege ich das Format nicht hin. Ich habe zwar dem Programm den max. Arbeitsspeicher zugefügt, aber nichts geht mehr.
Ein Datenbeispiel habe ich mal eingefügt, die Spaltenanzahl kann schon mal 3.000 Werte betragen, zusammen mit einer 5 jährigen Historie kommen halt leider größere Mengen hinzu.
Kennt jemand noch eine andere Alternative um Daten fehlerfrei einlesen zu können und was muss ich dabei beachten?

Grüße
Kalypso
Dateianhänge
Beispiel.xlsx
(254.15 KiB) 106-mal heruntergeladen
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Datenimport

Beitrag von EDi »

Mein Problem ist, die nun wesentlich größeren Datenmengen
Ähemm... Excel ist dafür auch nicht gedacht / gut.
Schonmal an einen Datenbanklösung gedacht?

Ich kenne readSeries() jetzt nicht, aber das readxl package kann wunderbar Exceldateien einlesen.
Wenn du unbedingt ein timeSeries-Objekt brauchts, musst du den data.frame nur noch in so eines umwandeln.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Datenimport

Beitrag von student »

Hallo Kalypso,

wie hast Du die csv-Datei erstellt? Denkst Du an das Dezimalkomma und an das Semikolon als Trennzeichen? Wenn ich in Deinem Code das Trennzeichen "," sehe, frage ich mich, welche read.csv-Funktion Du benutzt? Dann sollte es auch kein Problem mit dem Datum geben...
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)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Datenimport

Beitrag von bigben »

Hallo!

5 Jahre täglich ein Wert sind 5 * 365,25 also unter 2000 Zeilen. Ein Dataframe mit 2000 Zeilen und 3000 Spalten sollte für R keine nennenswerte Belastung darstellen. Kannst ja mal schnell testen:

Code: Alles auswählen

daten <- as.data.frame(matrix(rnorm(2000*3000), nrow=2000))
Sollte kein Problem sein.

Also vermute ich ein Problem in OpenOffice oder Excel - beides hier nur bedingt on topic. Vielleicht kann man ja nach 4 Jahren einen Schnitt machen, eine OpenOffice-Datei mit den Daten der ersten 4 Jahre erstellen, eine zweite mit den Daten danach und dann beide Dateien in R zusammenfügen?

Nochmal zeigen, dass R damit kein Problem hat:

Code: Alles auswählen

daten2 <- rbind(daten, daten)
dim(daten2)
Vielleicht habe ich das Problem auch nicht ausreichend verstanden.

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

Re: Datenimport

Beitrag von Kalypso »

@EDi,

hi, eigentlich kann man aus der Größe einer Datei nicht die Notwendigkeit einer Datenbanklösung schließen, die hat andere Funktionen.
ich hab mich mit dem Packet auseinander gesetzt, leider bin ich nicht schlau geworden:

> read_excel("SUP_USD_Vorbereitung csv_teil1.xlsx", col_names = TRUE, col_types = NULL)
# A tibble: 1,754 x 475
date SuP500_TR `3M Company` `Abbott Laboratories` `Accenture plc` `Activision Blizzard` `Acuity Brands Inc` `Adobe Systems Incorporated` `Advance Auto Parts Inc` `Advanced Micro Devices`
<dttm> <dttm> <dttm> <dttm> <dttm> <dttm> <dttm> <dttm> <dttm> <dttm>
1 2010-12-28 1899-12-31 00:00:00 1899-12-31 00:00:00 1899-12-31 00:00:00 1899-12-31 00:00:00 1899-12-31 00:00:00 1899-12-31 00:00:00 1899-12-31 00:00:00 1899-12-31 00:00:00 1899-12-31 00:00:00
2 2010-12-29 1899-12-31 00:01:43 1899-12-31 00:00:20 1899-12-31 00:00:55 1899-12-31 00:19:13 1899-12-31 00:09:15 1899-12-30 23:59:46 1899-12-31 00:02:20 1899-12-31 00:04:21 1899-12-30 23:58:14
3 2010-12-30 1899-12-30 23:57:53 1899-12-30 23:56:21 1899-12-31 00:04:34 1899-12-30 23:54:05 1899-12-31 00:02:18 1899-12-30 23:54:09 1899-12-30 23:41:25 1899-12-31 00:05:52 1899-12-31 00:10:42
4 2010-12-31 1899-12-30 23:59:44 1899-12-30 23:56:01 1899-12-31 00:10:18 1899-12-31 00:02:05 1899-12-30 23:45:07 1899-12-30 23:34:16 1899-12-31 00:09:54 1899-12-30 23:47:42 1899-12-31 00:07:05
5 2011-01-03 1899-12-31 00:16:22 1899-12-31 00:08:11 1899-12-30 23:57:18 1899-12-31 00:02:59 1899-12-31 00:09:16 1899-12-31 00:42:12 1899-12-31 00:23:52 1899-12-30 23:45:52 1899-12-31 00:51:04
6 2011-01-04 1899-12-30 23:58:09 1899-12-30 23:58:01 1899-12-31 00:13:34 1899-12-30 23:50:31 1899-12-31 00:01:10 1899-12-30 23:42:03 1899-12-31 00:10:08 1899-12-30 22:48:20 1899-12-31 00:51:01
7 2011-01-05 1899-12-31 00:07:24 1899-12-31 00:00:00 1899-12-31 00:00:00 1899-12-31 00:00:18 1899-12-30 23:32:26 1899-12-30 23:54:36 1899-12-31 00:32:27 1899-12-31 00:01:52 1899-12-31 00:23:00
8 2011-01-06 1899-12-30 23:57:30 1899-12-30 23:51:12 1899-12-30 23:57:02 1899-12-31 00:05:23 1899-12-30 23:56:30 1899-12-31 00:40:12 1899-12-31 00:02:15 1899-12-30 23:12:38 1899-12-30 23:24:27
9 2011-01-07 1899-12-30 23:57:21 1899-12-31 00:01:31 1899-12-31 00:05:59 1899-12-31 00:02:23 1899-12-30 23:41:13 1899-12-30 23:53:46 1899-12-30 23:49:45 1899-12-31 00:38:29 1899-12-31 00:23:12
10 2011-01-10 1899-12-30 23:58:01 1899-12-31 00:15:22 1899-12-30 23:47:12 1899-12-30 23:47:15 1899-12-30 23:44:32 1899-12-30 22:30:09 1899-12-31 00:41:21 1899-12-31 00:10:43 1899-12-31 00:58:43
# ... with 1,744 more rows, and 465 more variables: `Aetna Inc` <dttm>, `Affiliated Managers Group` <dttm>, `Aflac Incorporated` <dttm>, `Agilent Technologies` <dttm>, `Air Products and Chemicals` <dttm>, `Akamai Technologies` <dttm>,
# `Alaska Air Group` <dttm>, `Albemarle Corporation` <dttm>, `Alexandria Real Estate Equities` <dttm>, `Alexion Pharmaceuticals` <dttm>, `Align Technology` <dttm>, `Allergan plc` <dttm>, `Alliance Data Systems Corporation` <dttm>,
# `Alliant Energy Corporation` <dttm>, `Allstate Corporation` <dttm>, `Alphabet Inc` <dttm>, `Altria Group` <dttm>, Amazoncom <dttm>, `Ameren Corporation` <dttm>, `American Airlines Group` <dttm>, `American Electric Power
# Company` <dttm>, `American Express Company` <dttm>, `American International Group` <dttm>, `American Tower Corporation REIT` <dttm>, `American Water Works` <dttm>, `AMERIPRISE FINANCIAL SERVICES` <dttm>, `AmerisourceBergen
# Corporation Holding` <dttm>, `Amgen Inc` <dttm>, `Amphenol Corporation` <dttm>, AMTEK <dttm>, `Anadarko Petroleum Corporation` <dttm>, `Analog Devices` <dttm>, Andeavor <dttm>, ANSYS <dttm>, Anthem <dttm>, `Aon plc` <dttm>, `Apache
# Corporation` <dttm>,


@student

ich hatte mit der bisherigen vorgehensweise überhaupt keine Probleme, nur durch die Größe in Excel lässt sich Open Office nicht mehr öffnen und nur deshalb kann ich keine csv Datei mehr erstellen.

@bigben
an die Leistungsfähigkeit an R verschwende ich keine Gedanken. dass passt alles.

Gibt es irgendwo ein Beispiel wie ich diese Tabellenform einlesen kann?

Alternativ bleibt mir dann nur aus einer großen Datei 15 Kleinere zu machen und diese mit cbind wieder in r zu vereinen, aber mein Stolz nagt daran...
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Datenimport

Beitrag von EDi »

ich hab mich mit dem Packet auseinander gesetzt, leider bin ich nicht schlau geworden:

> read_excel("SUP_USD_Vorbereitung csv_teil1.xlsx", col_names = TRUE, col_types = NULL)
# A tibble: 1,754 x 475
date SuP500_TR `3M Company` `Abbott Laboratories` `Accenture plc` `Activision Blizzard` `Acuity Brands Inc` `Adobe Systems Incorporated` `Advance Auto Parts Inc` `Advanced Micro Devices`
<dttm> <dttm> <dttm> <dttm> <dttm> <dttm> <dttm> <dttm> <dttm> <dttm>
Irgendwie erkennt read_excel alle Spalten als Datumsfelder (automatisch, da col_types = NULL).
Ich würde mal versuchen, den Typ expliziz zu übergeben (col_types = c('date', rep('numeric', <ncols>)).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Datenimport

Beitrag von EDi »

readxl, hat tatsächlich Probleme...
openxlsx scheint aber zu funktionieren....

Code: Alles auswählen

## download file
tmp <- tempfile(fileext = '.xlsx')
download.file('http://forum.r-statistik.de/download/file.php?id=146', tmp)
tmp

# load into R
library(readxl)
df <- read_excel(tmp)
str(df)
## doesn't work :()


df <- read_excel(tmp, col_types = c('date', rep('numeric', 661)))
str(df)
# looks much better...


## now with openxlsx
library(openxlsx)
df <- read.xlsx(tmp)
str(df)
eigentlich kann man aus der Größe einer Datei nicht die Notwendigkeit einer Datenbanklösung schließen, die hat andere Funktionen.
Trotzdem würde ich sagen, dass das Excel-Forment kein besonders gutes Format ist um Daten zu speichern.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Datenimport

Beitrag von student »

Wenn ich tibble lese, denke ich sofort an Flat is better than nested (aus Zen of Python). :roll:
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)
Kalypso

Re: Datenimport

Beitrag von Kalypso »

Hallo EDi,

ich quäle mich schon seit Tagen damit

zu
df <- read_excel(tmp, col_types = c('date', rep('numeric', 661)))
str(df)
# looks much better...

woher kommen die "661" und das "_", hat das bei Dir funktioniert?

Code: Alles auswählen

> ## download file
> tmp <- tempfile(fileext = '.xlsx')
> download.file('http://forum.r-statistik.de/download/file.php?id=146', tmp)
versuche URL 'http://forum.r-statistik.de/download/file.php?id=146'
Content type 'application/octet-stream' length 260254 bytes (254 KB)
downloaded 254 KB

> tmp
[1] "C:\\Users\\ALEXAN~1\\AppData\\Local\\Temp\\Rtmp6LNDIJ\\file11246b704547.xlsx"
> df <- read_excel(tmp, col_types = c('date', rep('numeric', 661)))
Fehler in read_fun(path = path, sheet = sheet, limits = limits, shim = shim,  : 
  Evaluation error: error -103 with zipfile in unzGetCurrentFileInfo
.
> df
function (x, df1, df2, ncp, log = FALSE) 
{
    if (missing(ncp)) 
        .Call(C_df, x, df1, df2, log)
    else .Call(C_dnf, x, df1, df2, ncp, log)
}
<bytecode: 0x00000000237cf0a8>
<environment: namespace:stats>
> 
> 
> 
> 
> ## now with openxlsx
> library(openxlsx)
Fehler: package or namespace load failed for ‘openxlsx’ in inDL(x, as.logical(local), as.logical(now), ...):
 kann shared object 'C:/Users/Alexander/Documents/R/win-library/3.4/openxlsx/libs/x64/openxlsx.dll' nicht laden:
  maximale Zahl von DLLs erreicht...
> df <- read.xlsx(tmp)
Fehler in read.xlsx(tmp) : konnte Funktion "read.xlsx" nicht finden
> str(df)
function (x, df1, df2, ncp, log = FALSE)  
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Datenimport

Beitrag von EDi »

woher kommen die "661" und das "_", hat das bei Dir funktioniert?
Das ist die Anzahl der spalten-1 die read_excel einliest. Bei mir funktioniert der Code.


Schonmal die openxlsx variante ausprobiert?
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten