Initial setup with lecture example
This commit is contained in:
parent
ef8ed67ae7
commit
a9f9bdfdc5
@ -0,0 +1,165 @@
|
||||
|
||||
|
||||
|
||||
################
|
||||
# Im folgenden Abschnitt wird das User Interface (UI) definiert
|
||||
ui <- fluidPage(
|
||||
|
||||
# Titel der App
|
||||
titlePanel("Münchner Mietspiegel"),
|
||||
|
||||
# Layout für die Eingaben in die App und die Ausgaben
|
||||
sidebarLayout(
|
||||
|
||||
# Die Definition der Eingabefelder auf der linken Seite
|
||||
sidebarPanel(
|
||||
|
||||
# Eine Überschrift mit Linie darunter
|
||||
h3("Wohnung:",align="left"),
|
||||
hr(style="height: 1px; background: black"),
|
||||
|
||||
# Ein Slider für die Fläche der Wohnung
|
||||
# der Slider geht hier von 30 (min) bis 100 (max),
|
||||
# die Voreinstellung ist 75 (value)
|
||||
sliderInput(inputId = "flaeche",
|
||||
label = "Groesse in qm:",
|
||||
min = 30,
|
||||
max = 100,
|
||||
value = 75
|
||||
),
|
||||
|
||||
# Das Baujahr als numerische Eingabe
|
||||
# die Werte gehen von 1950 (min) bis 2000 (max) in Einerschritten (step)
|
||||
# die Voreinstellung ist 1981 (value)
|
||||
numericInput(inputId="bjahr",
|
||||
label="Baujahr:",
|
||||
value = 1981,
|
||||
min=1950,max=2000,step=1
|
||||
),
|
||||
|
||||
# Die Lage als Auswahlliste
|
||||
# die Auswahlmöglichkeiten sind "normale Lage", "gute Lage" und "beste Lage",
|
||||
# die entsprechende Zuordnung mit Zahlen 1, 2 und 3 sind wie im Datensatz,
|
||||
# die Voreinstellung ist 1 (selected) - also eine "normale Lage"
|
||||
selectInput("lage",label="Lage:",
|
||||
choices = list("normale Lage" = 1, "gute Lage" = 2,
|
||||
"beste Lage" = 3), selected = 1
|
||||
),
|
||||
|
||||
# eine Überschrift für die weiteren Ausstattungsmerkmale
|
||||
h5(strong("Ausstattung:"),align="left"),
|
||||
|
||||
# die weiteren drei Ausstattungsmerkmale (kueche, bad, zh) mit
|
||||
# Boxen zum Anklicken
|
||||
# die Voreinstellung ist jeweils FALSE (value), das heißt, es ist als
|
||||
# Voreinstellung keine Box angeklickt
|
||||
checkboxInput(inputId="luxuskueche", label="Luxusküche", value = FALSE),
|
||||
checkboxInput(inputId="luxusbad", label="Luxusbad", value = FALSE),
|
||||
checkboxInput(inputId="zentralheizung", label="mit Zentralheizung", value = FALSE),
|
||||
|
||||
),
|
||||
|
||||
# der Hauptbereich der Nutzeroberfläche für die Ausgabe der Ergebnisse
|
||||
mainPanel(
|
||||
|
||||
# Ausgabe des Histogramms
|
||||
plotOutput(outputId = "Verteilung"),
|
||||
|
||||
# Ausgabe der Prognose
|
||||
textOutput("Prognose"),
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
############
|
||||
|
||||
|
||||
server <- function(input, output) {
|
||||
|
||||
# Innerhalb dieser Funktion werden die Bilder für die Ausgabe
|
||||
# erzeugt und die Ergebnisse berechnet
|
||||
|
||||
# Folgende Funktion berechnet die Prognose für die eingegeben Werte
|
||||
prognose <- reactive({
|
||||
|
||||
# Speichere die Daten der Einflussvariablen in ein Objekt X
|
||||
X <- Daten[,c("flaeche","bjahr","bad","kueche","lage","zh")]
|
||||
|
||||
# Ersetze die erste Zeile in X nun mit den neuen, eingegebenen Werten
|
||||
|
||||
# zunächst die Werte für flaeche und bjahr
|
||||
X[1,"flaeche"] <- input$flaeche
|
||||
X[1,"bjahr"] <- input$bjahr
|
||||
# der angegebene Wert für lage muss zusätzlich noch in factor umgewandelt werden
|
||||
X[1,"lage"] <- as.factor(input$lage)
|
||||
|
||||
# die Eingaben TRUE/FALSE für die Ausstattungsmerkmale kueche, bad und zh
|
||||
# werden jeweils in 0/1-Variablen umgewandelt (mit ifelse) und in
|
||||
# den Datentyp factor umgewandelt (mit as.factor);
|
||||
# die Werte werden in die erste Zeile von X eingetragen
|
||||
X[1,"kueche"] <- as.factor(ifelse(input$luxuskueche == FALSE, 0, 1))
|
||||
X[1,"bad"] <- as.factor(ifelse(input$luxusbad == FALSE, 0, 1))
|
||||
X[1,"zh"] <- as.factor(ifelse(input$zentralheizung == FALSE, 0, 1))
|
||||
|
||||
# Berechne die Prognosen für X
|
||||
# die Prognose der neuen, eingegebenen Werte stehen im ersten Eintrag des Prognosevektors
|
||||
prognosevektor <- predict(model,X)
|
||||
prog <- prognosevektor[1]
|
||||
|
||||
# der Prognosewert wird noch auf 2 Stellen hinter dem Komma (digits=2) gerundet.
|
||||
prog <- round(prog,digits=2)
|
||||
|
||||
# der errechnete Wert soll als Ergebnis der Funktion zurückgegeben werden
|
||||
prog
|
||||
})
|
||||
|
||||
# diese Funktion erzeugt das Histogramm und speichert es als Ausgabebild
|
||||
# mit dem Namen output$Verteilung
|
||||
output$Verteilung <- renderPlot({
|
||||
|
||||
# die errechnete Prognose aus der oben geschriebenen Funktion prognose()
|
||||
prog <- prognose()
|
||||
|
||||
# Speichere die Daten der Einflussvariablen in ein Objekt X
|
||||
# und die Daten der Zielvariable in y.
|
||||
# Berechne dann die Abweichungen zwischen den Prognosen und den realen Werten
|
||||
X <- Daten[,c("flaeche","bjahr","bad","kueche","lage","zh")]
|
||||
y <- Daten[,"mieteqm"]
|
||||
abweichungen <- y-predict(model,X)
|
||||
|
||||
# Zeichne jetzt im Histogram die Prognose mit den Abweichungen;
|
||||
# dies visualisiert die bandbreite der Mieten für diese Wohnung
|
||||
hist(prog+abweichungen, col = "blue", main = "Verteilung der Quadratmetermieten",xlim=c(0,15))
|
||||
|
||||
})
|
||||
|
||||
# Definition einer Textausgabe mit dem namen output$Prognose
|
||||
# In dieser Textausgabe soll der in der Funktion prognose()
|
||||
# errechnete Prognosewert ausgegeben werden
|
||||
output$Prognose <- renderText({
|
||||
|
||||
# der Wert der Prognose aus der Funktion prognose()
|
||||
prog <- prognose()
|
||||
|
||||
# die Ausgabe ist eine Kombination (mit dem Befehl 'paste') von Text
|
||||
# und des errechneten Prognosewerts prog
|
||||
Ausgabe <- paste("Durchschnittliche Miete: ", prog," Euro")
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Aufruf der App-Funktionen
|
||||
###############
|
||||
|
||||
shinyApp(ui = ui, server = server)
|
||||
|
||||
###############
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,27 @@
|
||||
|
||||
# Setzen des Pfades und Einlesen der Daten
|
||||
|
||||
setwd("/config/workspace/assistenz-r/lecture")
|
||||
Daten <- read.csv("Mietspiegel.csv",header=TRUE,sep=";",fill=TRUE)
|
||||
|
||||
Daten[,"bad"] <- as.factor(Daten[,"bad"])
|
||||
Daten[,"kueche"] <- as.factor(Daten[,"kueche"])
|
||||
Daten[,"lage"] <- as.factor(Daten[,"lage"])
|
||||
Daten[,"zh"] <- as.factor(Daten[,"zh"])
|
||||
|
||||
# Berechnung des Entscheidungsbaumes
|
||||
|
||||
library(tree)
|
||||
Baum <- tree(mieteqm ~ flaeche + bjahr + bad + kueche + lage + zh, data=Daten)
|
||||
tuning <- cv.tree(Baum, K=5)
|
||||
t <- which.min(tuning$dev)
|
||||
Anzahl.Endknoten <- tuning$size[t]
|
||||
model <- prune.tree(Baum,best=Anzahl.Endknoten)
|
||||
|
||||
# Starten der Shiny-App
|
||||
|
||||
setwd("/config/workspace/assistenz-r/lecture/Meine-Mietspiegel-App-Entscheidungsbaum")
|
||||
library(shiny)
|
||||
|
||||
runApp("App-Mietspiegel_Entscheidungsbaum")
|
||||
|
@ -0,0 +1,169 @@
|
||||
|
||||
|
||||
################
|
||||
# Im folgenden Abschnitt wird das User Interface (UI) definiert
|
||||
ui <- fluidPage(
|
||||
|
||||
# Titel der App
|
||||
titlePanel("Münchner Mietspiegel"),
|
||||
|
||||
# Layout für die Eingaben in die App und die Ausgaben
|
||||
sidebarLayout(
|
||||
|
||||
# Die Definition der Eingabefelder auf der linken Seite
|
||||
sidebarPanel(
|
||||
|
||||
# Eine Überschrift mit Linie darunter
|
||||
h3("Wohnung:",align="left"),
|
||||
hr(style="height: 1px; background: black"),
|
||||
|
||||
# Ein Slider für die Fläche der Wohnung
|
||||
# der Slider geht hier von 30 (min) bis 100 (max),
|
||||
# die Voreinstellung ist 75 (value)
|
||||
sliderInput(inputId = "flaeche",
|
||||
label = "Groesse in qm:",
|
||||
min = 30,
|
||||
max = 100,
|
||||
value = 75
|
||||
),
|
||||
|
||||
# Das Baujahr als numerische Eingabe
|
||||
# die Werte gehen von 1950 (min) bis 2000 (max) in Einerschritten (step)
|
||||
# die Voreinstellung ist 1981 (value)
|
||||
numericInput(inputId="bjahr",
|
||||
label="Baujahr:",
|
||||
value = 1981,
|
||||
min=1950,max=2000,step=1
|
||||
),
|
||||
|
||||
# Die Lage als Auswahlliste
|
||||
# die Auswahlmöglichkeiten sind "normale Lage", "gute Lage" und "beste Lage",
|
||||
# die entsprechende Zuordnung mit Zahlen 1, 2 und 3 sind wie im Datensatz,
|
||||
# die Voreinstellung ist 1 (selected) - also eine "normale Lage"
|
||||
selectInput("lage",label="Lage:",
|
||||
choices = list("normale Lage" = 1, "gute Lage" = 2,
|
||||
"beste Lage" = 3), selected = 1
|
||||
),
|
||||
|
||||
# eine Überschrift für die weiteren Ausstattungsmerkmale
|
||||
h5(strong("Ausstattung:"),align="left"),
|
||||
|
||||
# die weiteren drei Ausstattungsmerkmale (kueche, bad, zh) mit
|
||||
# Boxen zum Anklicken
|
||||
# die Voreinstellung ist jeweils FALSE (value), das heißt, es ist als
|
||||
# Voreinstellung keine Box angeklickt
|
||||
checkboxInput(inputId="luxuskueche", label="Luxusküche", value = FALSE),
|
||||
checkboxInput(inputId="luxusbad", label="Luxusbad", value = FALSE),
|
||||
checkboxInput(inputId="zentralheizung", label="mit Zentralheizung", value = FALSE),
|
||||
|
||||
),
|
||||
|
||||
# der Hauptbereich der Nutzeroberfläche für die Ausgabe der Ergebnisse
|
||||
mainPanel(
|
||||
|
||||
# Ausgabe des Histogramms
|
||||
plotOutput(outputId = "Verteilung"),
|
||||
|
||||
# Ausgabe der Prognose
|
||||
textOutput("Prognose"),
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
############
|
||||
|
||||
|
||||
server <- function(input, output) {
|
||||
|
||||
# Innerhalb dieser Funktion werden die Bilder für die Ausgabe
|
||||
# erzeugt und die Ergebnisse berechnet
|
||||
|
||||
# Folgende Funktion berechnet die Prognose für die eingegeben Werte
|
||||
prognose <- reactive({
|
||||
|
||||
# Speichere die Daten unter neuem Namen
|
||||
Daten.neu <- Daten
|
||||
|
||||
# Ersetze die erste Zeile im neuen Datensatz nun mit den neuen, eingegebenen Werten
|
||||
|
||||
# zunächst die Werte für flaeche und bjahr
|
||||
Daten.neu[1,"flaeche"] <- input$flaeche
|
||||
Daten.neu[1,"bjahr"] <- input$bjahr
|
||||
# der angegebene Wert für lage muss zusätzlich noch in factor umgewandelt werden
|
||||
Daten.neu[1,"lage"] <- as.factor(input$lage)
|
||||
|
||||
# die Eingaben TRUE/FALSE für die Ausstattungsmerkmale kueche, bad und zh
|
||||
# werden jeweils in 0/1-Variablen umgewandelt (mit ifelse) und in
|
||||
# den Datentyp factor umgewandelt (mit as.factor);
|
||||
# die Werte werden in die erste Zeile von X eingetragen
|
||||
Daten.neu[1,"kueche"] <- as.factor(ifelse(input$luxuskueche == FALSE, 0, 1))
|
||||
Daten.neu[1,"bad"] <- as.factor(ifelse(input$luxusbad == FALSE, 0, 1))
|
||||
Daten.neu[1,"zh"] <- as.factor(ifelse(input$zentralheizung == FALSE, 0, 1))
|
||||
|
||||
# Berechne die Prognosen für Daten.neu
|
||||
# die Prognose der neuen, eingegebenen Werte stehen im ersten Eintrag des Prognosevektors
|
||||
X.neu <- model.matrix(mieteqm ~ flaeche + bjahr + bad + kueche + lage + zh, Daten.neu)
|
||||
X.neu <- X.neu[,-1] # entferne den Intercept
|
||||
|
||||
prognosevektor <- predict(model,X.neu)$predictions
|
||||
prog <- prognosevektor[1]
|
||||
|
||||
# der Prognosewert wird noch auf 2 Stellen hinter dem Komma (digits=2) gerundet.
|
||||
prog <- round(prog,digits=2)
|
||||
|
||||
# der errechnete Wert soll als Ergebnis der Funktion zurückgegeben werden
|
||||
prog
|
||||
})
|
||||
|
||||
# diese Funktion erzeugt das Histogramm und speichert es als Ausgabebild
|
||||
# mit dem Namen output$Verteilung
|
||||
output$Verteilung <- renderPlot({
|
||||
|
||||
# die errechnete Prognose aus der oben geschriebenen Funktion prognose()
|
||||
prog <- prognose()
|
||||
|
||||
# Speichere die Daten der Einflussvariablen in ein Objekt X
|
||||
# und die Daten der Zielvariable in y.
|
||||
# Berechne dann die Abweichungen zwischen den Prognosen und den realen Werten
|
||||
X <- Daten[,c("flaeche","bjahr","bad","kueche","lage","zh")]
|
||||
X <- model.matrix(mieteqm ~ flaeche + bjahr + bad + kueche + lage + zh, Daten)
|
||||
X <- X[,-1] # entferne den Intercept
|
||||
y <- Daten[,"mieteqm"]
|
||||
abweichungen <- y-predict(model,X)$predictions
|
||||
|
||||
# Zeichne jetzt im Histogram die Prognose mit den Abweichungen;
|
||||
# dies visualisiert die bandbreite der Mieten für diese Wohnung
|
||||
hist(prog+abweichungen, col = "blue", main = "Verteilung der Quadratmetermieten",xlim=c(0,15))
|
||||
|
||||
})
|
||||
|
||||
# Definition einer Textausgabe mit dem namen output$Prognose
|
||||
# In dieser Textausgabe soll der in der Funktion prognose()
|
||||
# errechnete Prognosewert ausgegeben werden
|
||||
output$Prognose <- renderText({
|
||||
|
||||
# der Wert der Prognose aus der Funktion prognose()
|
||||
prog <- prognose()
|
||||
|
||||
# die Ausgabe ist eine Kombination (mit dem Befehl 'paste') von Text
|
||||
# und des errechneten Prognosewerts prog
|
||||
Ausgabe <- paste("Durchschnittliche Miete: ", prog," Euro")
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Aufruf der App-Funktionen
|
||||
###############
|
||||
|
||||
shinyApp(ui = ui, server = server)
|
||||
|
||||
###############
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
[1208/081603.928:ERROR:directory_reader_win.cc(43)] FindFirstFile: Das System kann den angegebenen Pfad nicht finden. (0x3)
|
@ -0,0 +1,38 @@
|
||||
|
||||
# Setzen des Pfades und Einlesen der Daten
|
||||
|
||||
setwd("/config/workspace/assistenz-r/lecture")
|
||||
Daten <- read.csv("Mietspiegel.csv",header=TRUE,sep=";",fill=TRUE)
|
||||
|
||||
Daten[,"bad"] <- as.factor(Daten[,"bad"])
|
||||
Daten[,"kueche"] <- as.factor(Daten[,"kueche"])
|
||||
Daten[,"lage"] <- as.factor(Daten[,"lage"])
|
||||
Daten[,"zh"] <- as.factor(Daten[,"zh"])
|
||||
|
||||
# Berechnung des neuronalen Netzes
|
||||
|
||||
# Laden des R-Pakets
|
||||
library(ANN2)
|
||||
|
||||
# Erstellen eines Datensatzes mit Dummy-Codierung der kategoriellen Variablen
|
||||
X <- model.matrix(mieteqm ~ flaeche + bjahr + bad + kueche + lage + zh, Daten)
|
||||
X <- X[,-1] # entferne den Intercept
|
||||
|
||||
y <- Daten[,"mieteqm"]
|
||||
|
||||
# Trainieren des neuronalen Netzes
|
||||
# mit 2 Hidden Layer, wobei der 1. Hidden Layer 4 Hidden Units hat und
|
||||
# der 2. Hidden Layer 3 Units hat
|
||||
|
||||
model <- neuralnetwork(X, y, hidden.layers=c(4,3), regression = TRUE,
|
||||
loss.type = "absolute", learn.rates = 1e-04,n.epochs = 100,
|
||||
verbose=FALSE)
|
||||
|
||||
|
||||
# Starten der Shiny-App
|
||||
|
||||
library(shiny)
|
||||
|
||||
setwd("/config/workspace/assistenz-r/lecture/Meine-Mietspiegel-App-neuronalesNetz")
|
||||
runApp("App-Mietspiegel_neuronalesNetz")
|
||||
|
165
lecture/Meine-Mietspiegel-App/App-Mietspiegel/app.r
Normal file
165
lecture/Meine-Mietspiegel-App/App-Mietspiegel/app.r
Normal file
@ -0,0 +1,165 @@
|
||||
|
||||
|
||||
|
||||
################
|
||||
# Im folgenden Abschnitt wird das User Interface (UI) definiert
|
||||
ui <- fluidPage(
|
||||
|
||||
# Titel der App
|
||||
titlePanel("Münchner Mietspiegel"),
|
||||
|
||||
# Layout für die Eingaben in die App und die Ausgaben
|
||||
sidebarLayout(
|
||||
|
||||
# Die Definition der Eingabefelder auf der linken Seite
|
||||
sidebarPanel(
|
||||
|
||||
# Eine Überschrift mit Linie darunter
|
||||
h3("Wohnung:",align="left"),
|
||||
hr(style="height: 1px; background: black"),
|
||||
|
||||
# Ein Slider für die Fläche der Wohnung
|
||||
# der Slider geht hier von 30 (min) bis 100 (max),
|
||||
# die Voreinstellung ist 75 (value)
|
||||
sliderInput(inputId = "flaeche",
|
||||
label = "Groesse in qm:",
|
||||
min = 30,
|
||||
max = 100,
|
||||
value = 75
|
||||
),
|
||||
|
||||
# Das Baujahr als numerische Eingabe
|
||||
# die Werte gehen von 1950 (min) bis 2000 (max) in Einerschritten (step)
|
||||
# die Voreinstellung ist 1981 (value)
|
||||
numericInput(inputId="bjahr",
|
||||
label="Baujahr:",
|
||||
value = 1981,
|
||||
min=1950,max=2000,step=1
|
||||
),
|
||||
|
||||
# Die Lage als Auswahlliste
|
||||
# die Auswahlmöglichkeiten sind "normale Lage", "gute Lage" und "beste Lage",
|
||||
# die entsprechende Zuordnung mit Zahlen 1, 2 und 3 sind wie im Datensatz,
|
||||
# die Voreinstellung ist 1 (selected) - also eine "normale Lage"
|
||||
selectInput("lage",label="Lage:",
|
||||
choices = list("normale Lage" = 1, "gute Lage" = 2,
|
||||
"beste Lage" = 3), selected = 1
|
||||
),
|
||||
|
||||
# eine Überschrift für die weiteren Ausstattungsmerkmale
|
||||
h5(strong("Ausstattung:"),align="left"),
|
||||
|
||||
# die weiteren drei Ausstattungsmerkmale (kueche, bad, zh) mit
|
||||
# Boxen zum Anklicken
|
||||
# die Voreinstellung ist jeweils FALSE (value), das heißt, es ist als
|
||||
# Voreinstellung keine Box angeklickt
|
||||
checkboxInput(inputId="luxuskueche", label="Luxusküche", value = FALSE),
|
||||
checkboxInput(inputId="luxusbad", label="Luxusbad", value = FALSE),
|
||||
checkboxInput(inputId="zentralheizung", label="mit Zentralheizung", value = FALSE),
|
||||
|
||||
),
|
||||
|
||||
# der Hauptbereich der Nutzeroberfläche für die Ausgabe der Ergebnisse
|
||||
mainPanel(
|
||||
|
||||
# Ausgabe des Histogramms
|
||||
plotOutput(outputId = "Verteilung"),
|
||||
|
||||
# Ausgabe der Prognose
|
||||
textOutput("Prognose"),
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
############
|
||||
|
||||
|
||||
server <- function(input, output) {
|
||||
|
||||
# Innerhalb dieser Funktion werden die Bilder für die Ausgabe
|
||||
# erzeugt und die Ergebnisse berechnet
|
||||
|
||||
# Folgende Funktion berechnet die Prognose für die eingegeben Werte
|
||||
prognose <- reactive({
|
||||
|
||||
# Speichere die Daten der Einflussvariablen in ein Objekt X
|
||||
X <- Daten[,c("flaeche","bjahr","bad","kueche","lage","zh")]
|
||||
|
||||
# Ersetze die erste Zeile in X nun mit den neuen, eingegebenen Werten
|
||||
|
||||
# zunächst die Werte für flaeche und bjahr
|
||||
X[1,"flaeche"] <- input$flaeche
|
||||
X[1,"bjahr"] <- input$bjahr
|
||||
# der angegebene Wert für lage muss zusätzlich noch in factor umgewandelt werden
|
||||
X[1,"lage"] <- as.factor(input$lage)
|
||||
|
||||
# die Eingaben TRUE/FALSE für die Ausstattungsmerkmale kueche, bad und zh
|
||||
# werden jeweils in 0/1-Variablen umgewandelt (mit ifelse) und in
|
||||
# den Datentyp factor umgewandelt (mit as.factor);
|
||||
# die Werte werden in die erste Zeile von X eingetragen
|
||||
X[1,"kueche"] <- as.factor(ifelse(input$luxuskueche == FALSE, 0, 1))
|
||||
X[1,"bad"] <- as.factor(ifelse(input$luxusbad == FALSE, 0, 1))
|
||||
X[1,"zh"] <- as.factor(ifelse(input$zentralheizung == FALSE, 0, 1))
|
||||
|
||||
# Berechne die Prognosen für X
|
||||
# die Prognose der neuen, eingegebenen Werte stehen im ersten Eintrag des Prognosevektors
|
||||
prognosevektor <- predict(model,X)
|
||||
prog <- prognosevektor[1]
|
||||
|
||||
# der Prognosewert wird noch auf 2 Stellen hinter dem Komma (digits=2) gerundet.
|
||||
prog <- round(prog,digits=2)
|
||||
|
||||
# der errechnete Wert soll als Ergebnis der Funktion zurückgegeben werden
|
||||
prog
|
||||
})
|
||||
|
||||
# diese Funktion erzeugt das Histogramm und speichert es als Ausgabebild
|
||||
# mit dem Namen output$Verteilung
|
||||
output$Verteilung <- renderPlot({
|
||||
|
||||
# die errechnete Prognose aus der oben geschriebenen Funktion prognose()
|
||||
prog <- prognose()
|
||||
|
||||
# Speichere die Daten der Einflussvariablen in ein Objekt X
|
||||
# und die Daten der Zielvariable in y.
|
||||
# Berechne dann die Abweichungen zwischen den Prognosen und den realen Werten
|
||||
X <- Daten[,c("flaeche","bjahr","bad","kueche","lage","zh")]
|
||||
y <- Daten[,"mieteqm"]
|
||||
abweichungen <- y-predict(model,X)
|
||||
|
||||
# Zeichne jetzt im Histogram die Prognose mit den Abweichungen;
|
||||
# dies visualisiert die bandbreite der Mieten für diese Wohnung
|
||||
hist(prog+abweichungen, col = "blue", main = "Verteilung der Quadratmetermieten",xlim=c(0,15))
|
||||
|
||||
})
|
||||
|
||||
# Definition einer Textausgabe mit dem namen output$Prognose
|
||||
# In dieser Textausgabe soll der in der Funktion prognose()
|
||||
# errechnete Prognosewert ausgegeben werden
|
||||
output$Prognose <- renderText({
|
||||
|
||||
# der Wert der Prognose aus der Funktion prognose()
|
||||
prog <- prognose()
|
||||
|
||||
# die Ausgabe ist eine Kombination (mit dem Befehl 'paste') von Text
|
||||
# und des errechneten Prognosewerts prog
|
||||
Ausgabe <- paste("Durchschnittliche Miete: ", prog," Euro")
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Aufruf der App-Funktionen
|
||||
###############
|
||||
|
||||
shinyApp(ui = ui, server = server)
|
||||
|
||||
###############
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
23
lecture/Meine-Mietspiegel-App/run-Mietspiegel.r
Normal file
23
lecture/Meine-Mietspiegel-App/run-Mietspiegel.r
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
# Setzen des Pfades und Einlesen der Daten
|
||||
|
||||
setwd("/config/workspace/assistenz-r/lecture")
|
||||
Daten <- read.csv("Mietspiegel.csv",header=TRUE,sep=";",fill=TRUE)
|
||||
|
||||
Daten[,"bad"] <- as.factor(Daten[,"bad"])
|
||||
Daten[,"kueche"] <- as.factor(Daten[,"kueche"])
|
||||
Daten[,"lage"] <- as.factor(Daten[,"lage"])
|
||||
Daten[,"zh"] <- as.factor(Daten[,"zh"])
|
||||
|
||||
# Berechnung der linearen Regression
|
||||
|
||||
model <- lm( mieteqm ~ flaeche + bjahr + bad + kueche + lage + zh, data=Daten)
|
||||
|
||||
|
||||
# Starten der Shiny-App
|
||||
|
||||
setwd("/config/workspace/assistenz-r/lecture/Meine-Mietspiegel-App")
|
||||
library(shiny)
|
||||
|
||||
runApp("App-Mietspiegel")
|
||||
|
1905
lecture/Mietspiegel.csv
Normal file
1905
lecture/Mietspiegel.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user