Skalierung von Daten

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

Moderatoren: EDi, jogo

Antworten
Joe_Gerner

Skalierung von Daten

Beitrag von Joe_Gerner »

Hallo,

ich habe eine Tabelle mit 7 verschiedenen Variablen, wobei jede einen anderen Wertebereich besitzt.
Die eine geht von 0 bis 10, die andere von 0 bis 42000 und eine von -10 bis 10.
Gibt es eine Möglichkeit die Daten so zu skalieren das alle im gleichen Wertebereich liegen?

Vielen Dank und viele Grüße

Felix
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Skalierung von Daten

Beitrag von jogo »

Hallo Felix,

willkommen im Forum!
Joe_Gerner hat geschrieben: Mi Jun 13, 2018 2:31 pm ich habe eine Tabelle mit 7 verschiedenen Variablen, wobei jede einen anderen Wertebereich besitzt.
Die eine geht von 0 bis 10, die andere von 0 bis 42000 und eine von -10 bis 10.
Gibt es eine Möglichkeit die Daten so zu skalieren das alle im gleichen Wertebereich liegen?
Ja, es gibt eine. Meiner Meinung nach gibt es viele Möglichkeiten dafür. Die Frage ist, wie soll das Ergebnis konkret aussehen?
Kannst Du uns schon mal den Output von

Code: Alles auswählen

str(DeinDataframe)
in Deiner nächsten Nachricht zeigen?
Bitte schaue Dir auch schon mal die Funktion scale() an:

Code: Alles auswählen

help("scale")
Gruß, Jörg
Joe_Gerner

Re: Skalierung von Daten

Beitrag von Joe_Gerner »

Hallo Jörg,

vielen Dank für deine schnelle Antwort.
Also es geht mir darum das alle Variablen im gleichen Wertebereich liegen, zum Beispiel von 0 bis 100

Ich habe jetzt am Skript schon mal gearbeitet und bekomme die Skalierung glaube ich hin. Das Problem ist jetzt nur mir beim Ausführen einer weiteren Funktion angezeigt wird, dass im skalierten Datensatz unendliche oder NA Werte vorhanden sind. Beides habe ich bereits geprüft, konnte aber weder NA noch inf Werte finden. Weiß zufällig Jemand wo der Fehler in meinem Skript ist?

R-Script:
___________________________________________________________________________________________________________________________

library('archetypes')
library('spsurvey') #statistische Auswertung
library('graphics')
library('rcompanion')
library('MASS')
library('scales')

setwd("C:/Users/Desktop/Masterarbeit/R Berechnungen/")

t <-read.csv2("Warburg_auswahl.csv")
str(t)


scale_Gebaeude_Hoehe <-t$Gebaeude_Hoehe/100+1
scale_Bldg_Edges <-t$Bldg_Edges/100+1
scale_Bldg_Surface_wf <-t$Bldg_Surface_wF/100+1
scale_SHAPE_Idx_ISO <-t$Shape_Idx_ISO/100+1
scale_Num_Nb_100 <-t$Num_Nb_100/100+1
scale_MBR_Orientation <- t$MBR_Orientation/100+1

scale_Gebaeude_Hoehe<-round(scale_Gebaeude_Hoehe,2)
scale_Bldg_Surface_wf<- round(scale_Bldg_Surface_wf,2)
scale_Bldg_Edges<- round(scale_Bldg_Edges,2)
scale_Num_Nb_100 <- round(scale_Num_Nb_100,2)
scale_MBR_Orientation<- round(scale_MBR_Orientation,2)
scale_SHAPE_Idx_ISO <- round(scale_SHAPE_Idx_ISO,2)

scale_t <-cbind(scale_MBR_Orientation,scale_Num_Nb_100,scale_SHAPE_Idx_ISO,scale_Bldg_Surface_wf,
scale_Bldg_Edges,scale_Gebaeude_Hoehe)

write.csv2(scale_t,"Warburg_scale.csv")
___________________________________________________________________________________________________________________________
Ausgabe str:
str(t)
'data.frame': 23668 obs. of 6 variables:
$ Gebaeude_Hoehe : num 11.2 7.05 1.53 5.89 9.95 ...
$ Bldg_Edges : int 6 4 4 4 9 4 6 5 7 10 ...
$ Bldg_Surface_wF: num 246.3 81.8 51 149.5 612.6 ...
$ Shape_Idx_ISO : num 0.784 0.317 0.694 0.101 0.783 ...
$ Num_Nb_100 : int 1 30 46 26 46 27 36 35 27 34 ...
$ MBR_Orientation: num 115.3 130.9 49.6 140.5 49.9 ...

___________________________________________________________________________________________________________________________
Eine Stichprobe, sowie ein Screenshot der Fehlermeldung habe ich in den Anhang gepackt.

Ich bin für jeden Hinweis dankbar

Vielen Dank und viele Grüße
Dateianhänge
Fehlermeldung
Fehlermeldung
Warburg_auswahl.csv
Ausgangsdaten,jedoch nur eine kleine Stichprobe davon
(3.81 KiB) 49-mal heruntergeladen
Joe_Gerner

Re: Skalierung von Daten

Beitrag von Joe_Gerner »

Hallo Jörg,

ein kurzer Nachtrag, ich habe das Ganze jetzt mal mit der von dir angesprochenen scale Funktion probiert.
Damit umgehe ich das Problem der fehlenden oder unendlichen Werte.
Nur wie bekomme ich es hin das keine negativen Werte beim skalieren herauskommen?
Also mein Wertebereich muss positiv bleiben.

Vielen Dank und viele Grüße

Felix
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Skalierung von Daten

Beitrag von bigben »

Hi!
Joe_Gerner hat geschrieben: Do Jun 14, 2018 11:35 amNur wie bekomme ich es hin das keine negativen Werte beim skalieren herauskommen?
Vielleicht hilft Dir ja folgende Skalierungsfunktion besser als scale:

Code: Alles auswählen

myscale <- function(values, to.min=0, to.max=100){
  mi <- min(values)
  ma <- max(values)
  (values-mi)*to.max/(ma-mi)+to.min
}
Hier ein visuelles Anwendungsbeispiel für die Funktion:

Code: Alles auswählen

start <- runif(10, -5, 30)
ziel <- myscale(start)
plot(rep(1, 10), start, xlim=c(1,2), ylim=c(-10,100))
points(rep(2, 10), ziel)
abline(h=c(0,100), lty=2, col="orange")
for(i in 1:10) arrows(1,start[i], 2, ziel[i])
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Skalierung von Daten

Beitrag von jogo »

Hallo Felix,

hier eine Variante von mir:

Code: Alles auswählen

Warburg <- read.csv2("Warburg_auswahl.csv")
# scale(Warburg$Gebaeude_Hoehe)

my.scale <- function(x) {
  mi <- min(x); ma <- max(x)
  (x-mi)/(ma-mi)
}

summary(my.scale(Warburg$Gebaeude_Hoehe))

Warburg[] <- lapply(Warburg, my.scale)
summary(Warburg)
Gruß, Jörg
Joe_Gerner

Re: Skalierung von Daten

Beitrag von Joe_Gerner »

Hallo Bernhard und Jörg,

danke euch für eure schnelle und gute Hilfe :)

viele Grüße

Felix
Antworten