Kategorien
Skripte

Fitting Linear Models

y <- cars$dist
x <- 1:length(y)
plot(x, y, pch = 20)
fit <- lm(y~x)
abline(fit, col="blue", lwd=2)
fit_last_ten <- lm(y[40:50]~x[40:50])
abline(fit_last_ten, col="red", lwd=2)

Kategorien
Internet Skripte

Jupyter Notebook

Jupyter Notebook ist eine Open-Source-Webanwendung, mit der man Dokumente erstellen und freigeben kann. Die Dokumente können Code, Visualisierung und erläuternde Texte enthalten.

Kategorien
Skripte

Wiederholung R und Ablage Dataframe auf SQL

Folgendes Skript sammelt wiederholt ein paar Grundlagen und speichert am Ende die Daten per RODBC auf einem SQL-Server. Die Tabelle auf dem SQL-Server wird vorausgesetzt.

rm(list=ls()) # alles löschen
 
setwd("C:/Entwicklung/Projekte/BurDocs/r/demo/")
 
source("../config.R")
source("../utils.R")
 
library("RODBC", lib.loc=libpath)
 
# ein Vektor vom Typ "integer"
#    Zahlen: 12 bis 18
a=12:18
 
# ein Vektor vom Typ "double"
b=c(2,4,6,8)
 
# ein Vektor vom Typ "character"
#    Großbuchstaben: "M", "A", "I", "K"
c=LETTERS[c(13,1,9,11)]
 
# ein Data-Frame
#    alle Spalten müssen gleiche Anzahl Zeilen
df=data.frame(aaa=a[1:4],bbb=b,ccc=c)
 
# Inhalte und Typen erkunden
typeof(a)
length(a)
class(b)
names(df)
is.data.frame(df)
is.factor(df$ccc)
levels(df$ccc)
str(df)
str(df$ccc)
nrow(df)
ncol(df)
df[1]     # Werte von Spalte 1
df['aaa'] # entspricht df[1]
df[3,2]   # Wert von Reihe + Spalte
df[3,]    # alle Spalten der dritten Reihe
df$aaa
df$aaa[2] # vom Vektor der zweite Wert
 
colnames(df) <- c('aaa','b','ccc') # Spaltenname umbenennen
colnames(df)[2] = 'bbb'            # zweite Spalte umbenennen
rownames(df)                       # Namen für die Zeilen
 
df <- cbind(df, "ddd"= 100-df$bbb)     # eine Spalte hinzufügen
df <- rbind(df, list(16, 10, 'M', 30)) # eine Zeile hinzufügen 
#    ...Spalte ddd muss Teil des Faktors sein (siehe unten)
 
df[order(df$ddd),]  # Tabelle sortieren
subset(df,df$bbb>4) # Tabelle filtern
 
# Beispiel: die b-Werte der Reihen, die b > 4
#    - einen logischen Vektor erstellen
#    - den Vektor für eine Auswahl verwenden
#    - nur die b-Werte anzeigen 
L = df$bbb > 4
df[L,]
df[L,]$bbb
 
# Beispiel: Duplikate in Tabelle suchen
#    - die Tabelle df verdoppeln, durch anhängen 
#    - für jede verdoppelte Zeile wird TRUE geliefert
#    - mit which die Zeilennummern der Duplikate holen
#    - mit dem ! die Ausgabe umkehren
#    - mit unique die eindeutigen Zeilen filtern
#    - dfdf dauerhaft löschen
dfdf <- rbind(df,df)
duplicated(dfdf)
which(duplicated(dfdf))
which(!duplicated(dfdf))
unique(dfdf)
rm(dfdf)
 
# Beispiel: Tabelle gruppieren
#    - gruppiere die Spalte ccc
#    - summiere die Spalte bbb
tapply(df$bbb,df$ccc,sum)
 
# Beispiel: neue Werte zum Faktor in Spalte ccc hinzufügen
#    - Buchstabe "a" hinzufügen
#    - Buchstaben "ndres" hinzufügen
df$ccc <- factor(df$ccc, levels = c(levels(df$ccc), 'a'))
values = letters[c(14,4,18,5,19)]
df$ccc <- factor(df$ccc, levels = c(levels(df$ccc), values))
df <- rbind(df, list(18, 12, 'a', 60))
 
# Beispiel: eine Zeile komplett löschen
#    - alle Zeilen mit "M" suchen
#    - Zeilennamen von M-Zeilen holen
#    - Zeilennamen in Nummern wandeln
#    - nur 2-te Nummer verwenden
#    - Ergebnis umkehren
#    - Zeilen von Tabelle holen
df <- df[-as.numeric(rownames(df[df$ccc == 'M',]))[2],]
 
# Beispiel: Tabelle auf SQL-Server speichern
conn <- odbcConnect("MAIK_x64")
odbcClearError(conn)
sqlSave(conn, df, "demo_r", 
        rownames=FALSE, safer=FALSE, append=FALSE)
close(conn)
Kategorien
Software

Grafiken mit R

Der Artikel „Comparing ggplot2 and R Base Graphics“ vergleicht nicht nur die beiden Grafikoptionen, sondern liefert auch einfache Beispiele für die verschiedenen Diagrammformen.

Kategorien
Skripte

R automatisieren

Das Wikibook „GNU R: Benutzung von R aus der Kommandozeile“ beschreibt mit Rscript eine Möglichkeit, die R-Skripte per Automatismus auszuführen.

In „Develop in RStudio, run in RScript“ wird beschrieben, wie in RStudio geschriebene Skripte mit Rscript ausgeführt werden.

Mit „Configuring and building unixODBC“ können unter Linux entsprechende Datenbankverbindungen eingerichtet werden.

Kategorien
Skripte

sigmoid in R

x = seq(-1, 1, 0.1)
sigmoid = function(x, g) {1 / (1 + exp(-g*x))}
plot(x, sigmoid(x, 10), t="l", col="blue")

Der Parameter „g“ gibt die Steigung der Funktion an. Ein kleiner Wert lässt die Kurve flacher werden.

In Java mit g = 1: (1/( 1 + Math.pow(Math.E,(-1*x))))

Kategorien
Skripte

Breakout detection in R

„Our main motivation behind creating the package has been to develop a technique to detect breakouts which are robust, from a statistical standpoint, in the presence of anomalies. The BreakoutDetection package can be used in wide variety of contexts. For example, detecting breakout in user engagement post an A/B test, detecting behavioral change, or for problems in econometrics, financial engineering, political and social sciences.“

Kategorien
Skripte

Daten von R auf SQL-Server speichern

Zuerst Loading Data and Basic Formatting in R lesen. Folgendes Skript sammelt wiederholt ein paar Grundlagen und speichert am Ende die Daten per RODBC auf einem SQL-Server. Die Tabelle auf dem SQL-Server wird vorausgesetzt.

[code lang=“scilab“]rm(list=ls()) # alles löschen

setwd(„C:/Entwicklung/Projekte/BurDocs/r/demo/“)

source(„../config.R“)
source(„../utils.R“)

library(„RODBC“, lib.loc=libpath)

# ein Vektor vom Typ „integer“
# Zahlen: 12 bis 18
a=12:18

# ein Vektor vom Typ „double“
b=c(2,4,6,8)

# ein Vektor vom Typ „character“
# Großbuchstaben: „M“, „A“, „I“, „K“
c=LETTERS[c(13,1,9,11)]

# einen leeren Data-Frame erstellen
df=data.frame(‚Bezeichnung’=as.character(), ‚Wert’=as.character(), stringsAsFactors=FALSE)
# noch einen Data-Frame anlegen; alle Spalten müssen gleiche Anzahl Zeilen
df=data.frame(aaa=a[1:4],bbb=b,ccc=c)

# Inhalte und Typen erkunden
typeof(a)
length(a)
class(b)
names(df)
is.data.frame(df)
is.factor(df$ccc)
levels(df$ccc)
str(df)
str(df$ccc)
nrow(df)
ncol(df)
df[1] # Werte von Spalte 1
df[‚aaa‘] # entspricht df[1]
df[3,2] # Wert von Reihe + Spalte
df[3,] # alle Spalten der dritten Reihe
df$aaa
df$aaa[2] # vom Vektor der zweite Wert

colnames(df) <- c('aaa','b','ccc') # Spaltenname umbenennen colnames(df)[2] = 'bbb' # zweite Spalte umbenennen rownames(df) # Namen für die Zeilen df <- cbind(df, "ddd"= 100-df$bbb) # eine Spalte hinzufügen df <- rbind(df, list(16, 10, 'M', 30)) # eine Zeile hinzufügen # ...Spalte ddd muss Teil des Faktors sein (siehe unten) df[order(df$ddd),] # Tabelle sortieren subset(df,df$bbb>4) # Tabelle filtern

# Beispiel: die b-Werte der Reihen, die b > 4
# – einen logischen Vektor erstellen
# – den Vektor für eine Auswahl verwenden
# – nur die b-Werte anzeigen
L = df$bbb > 4
df[L,]
df[L,]$bbb

# Beispiel: Duplikate in Tabelle suchen
# – die Tabelle df verdoppeln, durch anhängen
# – für jede verdoppelte Zeile wird TRUE geliefert
# – mit which die Zeilennummern der Duplikate holen
# – mit dem ! die Ausgabe umkehren
# – mit unique die eindeutigen Zeilen filtern
# – dfdf dauerhaft löschen
dfdf <- rbind(df,df) duplicated(dfdf) which(duplicated(dfdf)) which(!duplicated(dfdf)) unique(dfdf) rm(dfdf) # Beispiel: Tabelle gruppieren # - gruppiere die Spalte ccc # - summiere die Spalte bbb tapply(df$bbb,df$ccc,sum) # Beispiel: neue Werte zum Faktor in Spalte ccc hinzufügen # - Buchstabe "a" hinzufügen # - Buchstaben "ndres" hinzufügen df$ccc <- factor(df$ccc, levels = c(levels(df$ccc), 'a')) values = letters[c(14,4,18,5,19)] df$ccc <- factor(df$ccc, levels = c(levels(df$ccc), values)) df <- rbind(df, list(18, 12, 'a', 60)) # Beispiel: eine Zeile komplett löschen # - alle Zeilen mit "M" suchen # - Zeilennamen von M-Zeilen holen # - Zeilennamen in Nummern wandeln # - nur 2-te Nummer verwenden # - Ergebnis umkehren # - Zeilen von Tabelle holen df <- df[-as.numeric(rownames(df[df$ccc == 'M',]))[2],] # Beispiel: Tabelle auf SQL-Server speichern conn <- odbcConnect("MAIK_x64") odbcClearError(conn) sqlSave(conn, df, "demo_r", rownames=FALSE, safer=FALSE, append=FALSE) close(conn)[/code]