Tabellen zusammenfassen

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Juniper
Beiträge: 14
Registriert: Fr Nov 27, 2020 9:32 am

Re: Tabellen zusammenfassen

Beitrag von Juniper »

Ich habe übrigens damals nachgerechnet, es entstehen über 133.049.344.986 Datensätze, bei joins auch.
Nur mal quergerechnet:

Wenn jeder dieser Datensätze nur 1bit braucht, dann wären dass schon 16,5 GB...
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Tabellen zusammenfassen

Beitrag von Athomas »

Ich habe übrigens damals nachgerechnet, es entstehen über 133.049.344.986 Datensätze, bei joins auch.
Sollten die enthaltenen "Datümer" für den Abgleich doch eine Rolle spielen, müssten wir nochmal reden :) ...
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Tabellen zusammenfassen

Beitrag von Athomas »

Nur mal quergerechnet:

Wenn jeder dieser Datensätze nur 1bit braucht, dann wären dass schon 16,5 GB...
Das ist ja kein Problem - solange man diese Bits nicht gleichzeitig braucht :) !

Ich bin übrigens kein Freund des nachträglichen Veränderns von Posts - mal abgesehen von Rechtschreibfehlern...
Juniper
Beiträge: 14
Registriert: Fr Nov 27, 2020 9:32 am

Re: Tabellen zusammenfassen

Beitrag von Juniper »

Athomas hat geschrieben: Fr Nov 27, 2020 3:09 pm Ein "merge" ist symmetrisch, d.h. Du bekommst auch Sätze mit, die in der jeweils anderen Datei keinen Partner haben. Willst Du das?
Die Komplexität der entstehenden Datei lässt sich nicht a priori abschätzen, im Extremfall (alle IDs gleich) hätte man ca. 100 Milliarden Sätze - dann dürfte R auch in die Knie gehen :D ...

Hier mein "Experiment":

Code: Alles auswählen

library(data.table)

Anzahl_ABC <- 34374
un_dt_ABC  <- c(207, sample(207:20112, 14000), 20112)                     # vorkommende IDs

dt_ABC <- data.table(ID        = sample(un_dt_ABC, Anzahl_ABC, replace=TRUE),
                     Datum_ABC = as.Date(sample(17532:18593, Anzahl_ABC, replace=TRUE), origin=("1970-01-01")),
                     Differenz = runif(Anzahl_ABC))
Diff_Lücken <- sample(1:Anzahl_ABC, 5000)
dt_ABC[Diff_Lücken, Differenz:=NA_real_]

#---------------------

Anzahl_DEF <- 3870639
un_dt_DEF  <- c(162, sample(162:20038, 16000), 20038)

dt_DEF <- data.table(ID        = sample(un_dt_DEF, Anzahl_DEF, replace=TRUE),
                     Datum_DEF = as.Date(sample(17532:18593, Anzahl_DEF, replace=TRUE), origin=("1970-01-01")),
                     Zahl_1    = sample(1:1000, Anzahl_DEF, replace=TRUE),
                     Zahl_2    = sample(1:100,  Anzahl_DEF, replace=TRUE),
                     Ort       = sample(c("Hückeswagen", "Ostrhauderfehn","Wurmannsquick"),  Anzahl_DEF, replace=TRUE)
                     )

driss <- merge(dt_ABC, dt_DEF, by="ID", allow.cartesian=TRUE)
Hi Athomas,
Das sieht gut aus. Ich habe viel ersetzt, blicke aber noch nicht ganz durch (Ist jetzt meine 3. Woche mit R). Er wirft bei mir folgende Fehlermeldung: "Fehler in sample(un_dt_ABC, Anzahl_ABC, replace = TRUE) :
konnte Funktion "sample" nicht finden"
Ich habe ABC und sample durch den echten Namen ersetzt...
Vielen Dank im vorraus!
Juniper
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Tabellen zusammenfassen

Beitrag von Athomas »

Ich habe ABC und sample durch den echten Namen ersetzt...
:?: "sample" ist eine ("eingebaute") Funktion des base-Packages, da gibt es nichts zu ersetzen!
Ich habe damit lediglich Spieldaten erzeugt, um den anschließenden Ablauf darstellen zu können...

So wie ich das sehe, brauchst Du keine Spieldaten, wenn Du echte hast!?
Wenn Du was nicht verstehst, kannst Du gerne fragen - dafür sind wir hier, und wir lachen auch nicht :) !
Juniper
Beiträge: 14
Registriert: Fr Nov 27, 2020 9:32 am

Re: Tabellen zusammenfassen

Beitrag von Juniper »

OK, d.H. ich brauche nura driss <- ...?
Und vor allem davor dient nur der Spieldatenerzeugung?
Vielen Dank!!!
Juniper
Juniper
Beiträge: 14
Registriert: Fr Nov 27, 2020 9:32 am

Re: Tabellen zusammenfassen

Beitrag von Juniper »

Nur mit der Funktion driss <- ... bekomme ich folgende Fehlermeldung: Fehler: kann Vektor der Größe 1.1 GB nicht allozieren. Der Datensatz bleibt leider zu groß. Oder habe ich was wichtiges vergessen?
Es grüßt euch herzlich
Juniper
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Tabellen zusammenfassen

Beitrag von EDi »

Was hast du denn noch so anderes Zeugs im RAM liegen? Vielleicht reicht es dir ja schon mal den RAM aufzuräumen.

Dabei auch nicht das Betriebssystem außer acht lassen, ich bin immer wieder erstaunt was da (unnötig) verbraten wird...

Falls das zu aufwändig ist: besorg dir einfach größere RAM-Riegel und baut die ein. Die Kosten dafür sind ja verglichen zum Aufwand relativ gering.
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.
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Tabellen zusammenfassen

Beitrag von Athomas »

... bekomme ich folgende Fehlermeldung: Fehler: kann Vektor der Größe 1.1 GB nicht allozieren.
Was dabei rauskommt, ist von der tatsächlichen Verteilung der IDs in den Dateien abhängig - ich hatte ein gleichmäßiges Auftreten innerhalb des bekannten Spektums unterstellt, dann gehts! Wenn sich die IDs irgendwo knubbeln, kann es im Extremfall bis zu den 133 Millarden Datensätzen gehen - bei denen auch keine Speicheraufrüstung helfen würde :( !

Da Du die Daten nicht weitergeben darfst, noch ein Vorschlag - zeig bitte die IDs (oder, wenn die auch geheim sind, eine Umcodierung davon), und ich stricke ein Beispiel um dieses Gerüst herum.
Juniper
Beiträge: 14
Registriert: Fr Nov 27, 2020 9:32 am

Re: Tabellen zusammenfassen

Beitrag von Juniper »

Hi Athomas,
Es ist super lieb von dir, dass du dir soviel Mühe gibst! Dass weiß ich echt zu schätzen! Es ist folgendes: In den nächsten Monaten werdee ich immer wieder Tabellen dieser Größe verknüpfen, toll wäre also eine allgemeingültige Lösung.
Wäre es denn möglich, innerhalb der Tabelle zu sortieren nahc der ID und dann die Tabelle in 10 Teile teilen, aber nur an bestimmten Stellen? Also nicht in 10 Teile, die gleich groß sind, sondern dass ich beispielsweise bei ID 50 teile, und dann bei 100,...? Wenn ich in der anderen Tabelle bei den gleichen IDs trenne, habe ich mehrere kleine Tabellen, die müsste ich ja dann problemlos zusammenfügen können, oder?!
HG
Juniper
Antworten