Event:2018/03/19 Vortrag R: Unterschied zwischen den Versionen
Noqqe (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Noqqe (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 7: | Zeile 7: | ||
Inhalt wird die Programmiersprache [https://www.r-project.org/ R] sein. Was macht sie aus, warum gibt es sie und wer benutzt R eigentlich? | Inhalt wird die Programmiersprache [https://www.r-project.org/ R] sein. Was macht sie aus, warum gibt es sie und wer benutzt R eigentlich? | ||
Folien | = Folien = | ||
[[Datei:R-Talk.pdf]] | [[Datei:R-Talk.pdf]] | ||
== Notizen == | |||
== Scope dieses kleinen Talks== | |||
Soll eine kurze Einführung in R werden ohne gross in krasse Programmierung einzutauchen | |||
==Was ist R== | |||
R ist eine Programmiersprache um mit Daten zu hantieren. Statistische Auswertung Excel für Akademiker | |||
==Geschichte von R== | |||
1992 als Nachfolger von S S war von Bell Labs und hatte nicht wirklich eine freie Lizenz R ist in C, Fortran (heute noch) und R geschrieben. | |||
==Bedienung== | |||
Interactive Mode | |||
oder eben als File (`gewinn.R`) | |||
``` | |||
#!/usr/bin/Rscripteuro <- function(x){ y = format(x, digits=10, nsmall=2, decimal.mark=",", big.mark=".") paste(c(y), "EUR")}s = rev(read.table('~/foo.txt'))income = rev(s$V2)# Print some informationseuro(sum(income))euro(mean(income))# Graph cars using blue points overlayed by a lineplot(income, type="o", col="blue")# Create a title with a red, bold/italic fonttitle(main="Gewinn", col.main="red", font.main=4) | |||
``` | |||
== Datentypen== | |||
- Integer | |||
- String | |||
- Vector | |||
- List | |||
- matrix | |||
- data.frame | |||
== Integer== | |||
``` | |||
> y | |||
[1] 15 | |||
``` | |||
== String== | |||
``` | |||
> y | |||
[1] "cccc" | |||
``` | |||
== Vector== | |||
Beste Sache in ganz R | |||
``` | |||
> x <- c(1,4,6,7) | |||
> x | |||
[1] 1 4 6 7 | |||
``` | |||
==Warum sind Vektoren jetzt so geil?== | |||
==List== | |||
``` | |||
> a <- c("foo", "bar", "baz") | |||
> b <- c("alice", "bob") | |||
> x <- list(a,b) | |||
> x | |||
[[1]] | |||
[1] "foo" "bar" "baz" | |||
[[2]] | |||
[1] "alice" "bob" | |||
``` | |||
==Matrix== | |||
``` | |||
> x <- matrix( c(2, 4, 3, 1, 5, 7), nrow=3, ncol=2 ) | |||
> x | |||
[,1] [,2] | |||
[1,] 2 1 | |||
[2,] 4 5 | |||
[3,] 3 7 | |||
``` | |||
== Data Frame== | |||
``` | |||
> d <- data.frame(drinks=c("Mate","Coffee"),consumption=c(23,42)) | |||
> d | |||
drinks consumption | |||
1 Mate 23 | |||
2 Coffee 42 | |||
``` | |||
Auch etwas worin R sehr gut ist. Daten auf dem Terminal Formattieren. | |||
``` | |||
people = data.frame ( | |||
age = c(32,34,12,41,18,23,43,22,19,24), | |||
height = c(177,166,165,174,156,184,191,179,182,180), | |||
sex = c('M','F','M','M','F','M','F','F','M','F')) | |||
> people | |||
age height sex | |||
1 32 177 M | |||
2 34 166 F | |||
3 12 165 M | |||
4 41 174 M | |||
5 18 156 F | |||
6 23 184 M | |||
7 43 191 F | |||
8 22 179 F | |||
9 19 182 M | |||
10 24 180 F | |||
``` | |||
==Funktionen== | |||
``` | |||
> a <- c(1,2,3) | |||
> oddcount <- function(x) { | |||
k <- 0 | |||
for (n in x) { | |||
if (n %% 2 == 1 ) k <- k+1 | |||
} | |||
return(k) | |||
} | |||
> oddcount(a) | |||
[1] 2 | |||
``` | |||
== Builtin Funktionen (Exploration)== | |||
``` | |||
rnorm(100) ## Random Normal Distribution | |||
mean(x) ## Durchschnitt | |||
sd(x) ## Standard Abweichung | |||
seq(100) ## zähle bis 100 | |||
rep(98,4) ## wiederholt werte (repeat) | |||
all(x > 8) ## Makro für IF Conditions, wenn ALLE dann | |||
any(x > 8) ## wenn IRGENDEINS dann | |||
sqrt(9) ## Wurzel ziehen | |||
round(12.2) ## Runden auf nächsten Wert | |||
head(x) ## einfach wie in Unix | |||
tail(x) ## same here | |||
subset(x,x > 5) ## Filtern innerhalb Vectoren nach Conditions | |||
which(x,x > 5) ## Selbes, gibt aber die relativen positionen der Werte aus. | |||
diff(x) ## berechnet die unterschiede innerhalb nummerischer Vektoren | |||
sign(x) ## "begradigt" negative und positive werte | |||
length(x) ## länge von vectoren abfragen | |||
sort(x) | |||
order(x) ## sortieren mit realtiven index angaben als return | |||
str(x) ## welche Struktur hat der Vector? | |||
mode(x) ## was für eine Struktur liegt vor? | |||
summary(x) ## erzähl mir alles was so geht über x? | |||
print(x) ## gib mir die print methode für den jeweiligen Datentypen | |||
class(x) ## zeigt die Class an zb. "data.frame" | |||
apply(x,y,z) ## funktion für jeden Wert in vecotr ausführen | |||
lapply(x,y,z) ## selbes für liste | |||
sapply(x,y) ## für liste, aber rückgabe als vector | |||
cbind(matrix,vector) ## column an matrix binden | |||
rbind(matrix,vector) ## row an matrix binden | |||
dim(matrix) ## columns und rows anzahl einer matrix ausgeben | |||
nrow(x) ## nur rows | |||
ncol(x) ## nur columns | |||
attributes(x) ## attribute einer klasse abfragen (zb. dim bei matrix) | |||
as.matrix | |||
as.numeric | |||
as.character | |||
as.factor | |||
colnames(matrix) ## columns namen geben (von matrix) | |||
rownames(matrix) ## für rows | |||
names(j) ## beschreibungen ausgeben bei listen | |||
unlist(j) ## liste zu vector konvertieren | |||
unname(j) ## alle namen entfernen | |||
``` | |||
==sapply== | |||
``` | |||
> t <- function(x) { | |||
y <- x + 1 | |||
return(y) | |||
} | |||
> o <- c(1,4,56,8,12) | |||
> sapply(o,t) | |||
[1] 2 5 57 9 13 | |||
``` | |||
==lapply== | |||
``` | |||
> o <- c(1,4,56,8,12) | |||
> p <- c(12,42,23,1337) | |||
> q <- list(p,o) | |||
> q | |||
[[1]] | |||
[1] 12 42 23 1337 | |||
[[2]] | |||
[1] 1 4 56 8 12 | |||
> lapply(q,mean) | |||
[[1]] | |||
[1] 353.5 | |||
[[2]] | |||
[1] 16.2 | |||
> lapply(q,max) | |||
[[1]] | |||
[1] 1337 | |||
[[2]] | |||
[1] 56 | |||
``` | |||
== apply== | |||
``` | |||
m<-matrix(1:100,nrow=10,ncol=10) | |||
> m | |||
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] | |||
[1,] 1 11 21 31 41 51 61 71 81 91 | |||
[2,] 2 12 22 32 42 52 62 72 82 92 | |||
[3,] 3 13 23 33 43 53 63 73 83 93 | |||
[4,] 4 14 24 34 44 54 64 74 84 94 | |||
[5,] 5 15 25 35 45 55 65 75 85 95 | |||
[6,] 6 16 26 36 46 56 66 76 86 96 | |||
[7,] 7 17 27 37 47 57 67 77 87 97 | |||
[8,] 8 18 28 38 48 58 68 78 88 98 | |||
[9,] 9 19 29 39 49 59 69 79 89 99 | |||
[10,] 10 20 30 40 50 60 70 80 90 100 | |||
> apply(m,1,mean) | |||
[1] 46 47 48 49 50 51 52 53 54 55 | |||
> apply(m,2,mean) | |||
[1] 5.5 15.5 25.5 35.5 45.5 55.5 65.5 75.5 85.5 95.5 | |||
> apply(m,1,function(x) x * 10) | |||
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] | |||
[1,] 10 20 30 40 50 60 70 80 90 100 | |||
[2,] 110 120 130 140 150 160 170 180 190 200 | |||
[3,] 210 220 230 240 250 260 270 280 290 300 | |||
[4,] 310 320 330 340 350 360 370 380 390 400 | |||
[5,] 410 420 430 440 450 460 470 480 490 500 | |||
[6,] 510 520 530 540 550 560 570 580 590 600 | |||
[7,] 610 620 630 640 650 660 670 680 690 700 | |||
[8,] 710 720 730 740 750 760 770 780 790 800 | |||
[9,] 810 820 830 840 850 860 870 880 890 900 | |||
[10,] 910 920 930 940 950 960 970 980 990 1000 | |||
``` | |||
==Daten einlesen== | |||
``` | |||
read.table("bla.csv",header=FALSE) ## Import von CSV Dateien | |||
> x <- read.csv("Downloads/hurricanes.csv", header=TRUE) | |||
> x | |||
Month Average X2005 X2006 X2007 X2008 X2009 X2010 X2011 X2012 X2013 X2014 | |||
1 May 0.1 0 0 1 1 0 0 0 2 0 0 | |||
2 Jun 0.5 2 1 1 0 0 1 1 2 2 0 | |||
3 Jul 0.7 5 1 1 2 0 1 3 0 2 2 | |||
4 Aug 2.3 6 3 2 4 4 4 7 8 2 2 | |||
5 Sep 3.5 6 4 7 4 2 8 5 2 5 2 | |||
6 Oct 2.0 8 0 1 3 2 5 1 5 2 3 | |||
7 Nov 0.5 3 0 0 1 1 0 1 0 1 0 | |||
8 Dec 0.0 1 0 1 0 0 0 0 0 0 0 | |||
scan(tf,"") ## import von textdateien | |||
``` | |||
== Visualisierungen== | |||
Builtin Visualisierung mittels `plot` und `lines` | |||
``` | |||
> a <- c(1,2,3) | |||
> plot(a) | |||
``` | |||
Heutzutage benutzt man aber `ggplot`, was ein externe Library ist. | |||
==Was mach ich mit R?== | |||
Im Grunde kann man damit alles machen was man will, weil Turing Complete. | |||
## Was macht die Industrie mit R | |||
Marktforschern (Data Scientists) benutzt um Modelle zu bauen Sobald Modelle sich als valide erweisen werden sie dann von Programmierern in anderen besser skalierbareren Sprachen implementiert und auf den ganzen Datenbestand angewendet. Zum Beispiel mit Scala oder MapReduce/Yarn Stack von Hadoop | |||
== Was kann ich mit R alles machen? == | |||
R und ich haben so eine Art Hopon-Hopoff Beziehung. Seit 2012 bastel ich immer mal wieder Phasenweise mehr und mal weniger damit herum. | |||
``` | |||
* GPX Karte malen ([Visualize gpx tracks from a folder on a picture from google maps. · GitHub](https://gist.github.com/noqqe/5a780a2132b781a01bb0debed7765ab9)) | |||
``` | |||
``` | |||
* Kontoführung | |||
* Fahrrad Stats (Distanz, Herzrate, Geschwindigkeitsentwicklung) | |||
``` | |||
== Wie Entwickelt ich R ?== | |||
``` | |||
* Commandline Interaktiv | |||
* Vim | |||
* R-Studio (IDE) | |||
``` | |||
== Das R-Universum == | |||
``` | |||
* Grosser Frauenanteil ([About us – R-Ladies Global](https://rladies.org/about-us/)) | |||
* Packages (CRAN) [The Comprehensive R Archive Network](https://cran.r-project.org/) | |||
* Diverse Bücher | |||
* Data Scientist is der heisse Scheiss. | |||
``` | |||
== Schwächen von R== | |||
RAM. Sobald deine Daten nicht mehr in deinen RAM passen ist es vorbei. Workaround: Wir haben riesige Maschinen bei Amazon hochgefahren, brauchen sie aber meistens nicht weil die Data Scientists eh nur mit kleinen Datenmengen modellieren. |
Version vom 6. Dezember 2023, 08:44 Uhr
Datum: 19. Maerz 2018
Beginn: 19 Uhr
Vortragender: noqqe
Inhalt wird die Programmiersprache R sein. Was macht sie aus, warum gibt es sie und wer benutzt R eigentlich?
Folien
Notizen
Scope dieses kleinen Talks
Soll eine kurze Einführung in R werden ohne gross in krasse Programmierung einzutauchen
Was ist R
R ist eine Programmiersprache um mit Daten zu hantieren. Statistische Auswertung Excel für Akademiker
Geschichte von R
1992 als Nachfolger von S S war von Bell Labs und hatte nicht wirklich eine freie Lizenz R ist in C, Fortran (heute noch) und R geschrieben.
Bedienung
Interactive Mode
oder eben als File (`gewinn.R`)
```
- !/usr/bin/Rscripteuro <- function(x){ y = format(x, digits=10, nsmall=2, decimal.mark=",", big.mark=".") paste(c(y), "EUR")}s = rev(read.table('~/foo.txt'))income = rev(s$V2)# Print some informationseuro(sum(income))euro(mean(income))# Graph cars using blue points overlayed by a lineplot(income, type="o", col="blue")# Create a title with a red, bold/italic fonttitle(main="Gewinn", col.main="red", font.main=4)
```
Datentypen
- Integer - String - Vector - List - matrix - data.frame
Integer
``` > y [1] 15 ```
String
``` > y [1] "cccc" ```
Vector
Beste Sache in ganz R
``` > x <- c(1,4,6,7) > x [1] 1 4 6 7 ```
Warum sind Vektoren jetzt so geil?
List
``` > a <- c("foo", "bar", "baz") > b <- c("alice", "bob") > x <- list(a,b) > x 1 [1] "foo" "bar" "baz"
2 [1] "alice" "bob" ```
Matrix
``` > x <- matrix( c(2, 4, 3, 1, 5, 7), nrow=3, ncol=2 ) > x
[,1] [,2]
[1,] 2 1 [2,] 4 5 [3,] 3 7 ```
Data Frame
``` > d <- data.frame(drinks=c("Mate","Coffee"),consumption=c(23,42)) > d
drinks consumption
1 Mate 23 2 Coffee 42 ```
Auch etwas worin R sehr gut ist. Daten auf dem Terminal Formattieren.
``` people = data.frame ( age = c(32,34,12,41,18,23,43,22,19,24), height = c(177,166,165,174,156,184,191,179,182,180), sex = c('M','F','M','M','F','M','F','F','M','F'))
> people
age height sex
1 32 177 M 2 34 166 F 3 12 165 M 4 41 174 M 5 18 156 F 6 23 184 M 7 43 191 F 8 22 179 F 9 19 182 M 10 24 180 F ```
Funktionen
``` > a <- c(1,2,3) > oddcount <- function(x) {
k <- 0 for (n in x) { if (n %% 2 == 1 ) k <- k+1 } return(k)
}
> oddcount(a) [1] 2 ```
Builtin Funktionen (Exploration)
``` rnorm(100) ## Random Normal Distribution mean(x) ## Durchschnitt sd(x) ## Standard Abweichung seq(100) ## zähle bis 100 rep(98,4) ## wiederholt werte (repeat) all(x > 8) ## Makro für IF Conditions, wenn ALLE dann any(x > 8) ## wenn IRGENDEINS dann sqrt(9) ## Wurzel ziehen round(12.2) ## Runden auf nächsten Wert head(x) ## einfach wie in Unix tail(x) ## same here subset(x,x > 5) ## Filtern innerhalb Vectoren nach Conditions which(x,x > 5) ## Selbes, gibt aber die relativen positionen der Werte aus. diff(x) ## berechnet die unterschiede innerhalb nummerischer Vektoren sign(x) ## "begradigt" negative und positive werte length(x) ## länge von vectoren abfragen sort(x) order(x) ## sortieren mit realtiven index angaben als return str(x) ## welche Struktur hat der Vector? mode(x) ## was für eine Struktur liegt vor? summary(x) ## erzähl mir alles was so geht über x? print(x) ## gib mir die print methode für den jeweiligen Datentypen class(x) ## zeigt die Class an zb. "data.frame" apply(x,y,z) ## funktion für jeden Wert in vecotr ausführen lapply(x,y,z) ## selbes für liste sapply(x,y) ## für liste, aber rückgabe als vector cbind(matrix,vector) ## column an matrix binden rbind(matrix,vector) ## row an matrix binden dim(matrix) ## columns und rows anzahl einer matrix ausgeben nrow(x) ## nur rows ncol(x) ## nur columns attributes(x) ## attribute einer klasse abfragen (zb. dim bei matrix) as.matrix as.numeric as.character as.factor colnames(matrix) ## columns namen geben (von matrix) rownames(matrix) ## für rows names(j) ## beschreibungen ausgeben bei listen unlist(j) ## liste zu vector konvertieren unname(j) ## alle namen entfernen ```
sapply
``` > t <- function(x) {
y <- x + 1 return(y)
}
> o <- c(1,4,56,8,12) > sapply(o,t) [1] 2 5 57 9 13 ```
lapply
``` > o <- c(1,4,56,8,12) > p <- c(12,42,23,1337) > q <- list(p,o)
> q 1 [1] 12 42 23 1337
2 [1] 1 4 56 8 12
> lapply(q,mean) 1 [1] 353.5
2 [1] 16.2
> lapply(q,max) 1 [1] 1337
2 [1] 56 ```
apply
``` m<-matrix(1:100,nrow=10,ncol=10)
> m
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 1 11 21 31 41 51 61 71 81 91 [2,] 2 12 22 32 42 52 62 72 82 92 [3,] 3 13 23 33 43 53 63 73 83 93 [4,] 4 14 24 34 44 54 64 74 84 94 [5,] 5 15 25 35 45 55 65 75 85 95 [6,] 6 16 26 36 46 56 66 76 86 96 [7,] 7 17 27 37 47 57 67 77 87 97 [8,] 8 18 28 38 48 58 68 78 88 98 [9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
> apply(m,1,mean)
[1] 46 47 48 49 50 51 52 53 54 55
> apply(m,2,mean)
[1] 5.5 15.5 25.5 35.5 45.5 55.5 65.5 75.5 85.5 95.5
> apply(m,1,function(x) x * 10)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 10 20 30 40 50 60 70 80 90 100 [2,] 110 120 130 140 150 160 170 180 190 200 [3,] 210 220 230 240 250 260 270 280 290 300 [4,] 310 320 330 340 350 360 370 380 390 400 [5,] 410 420 430 440 450 460 470 480 490 500 [6,] 510 520 530 540 550 560 570 580 590 600 [7,] 610 620 630 640 650 660 670 680 690 700 [8,] 710 720 730 740 750 760 770 780 790 800 [9,] 810 820 830 840 850 860 870 880 890 900
[10,] 910 920 930 940 950 960 970 980 990 1000 ```
Daten einlesen
``` read.table("bla.csv",header=FALSE) ## Import von CSV Dateien > x <- read.csv("Downloads/hurricanes.csv", header=TRUE) > x
Month Average X2005 X2006 X2007 X2008 X2009 X2010 X2011 X2012 X2013 X2014
1 May 0.1 0 0 1 1 0 0 0 2 0 0 2 Jun 0.5 2 1 1 0 0 1 1 2 2 0 3 Jul 0.7 5 1 1 2 0 1 3 0 2 2 4 Aug 2.3 6 3 2 4 4 4 7 8 2 2 5 Sep 3.5 6 4 7 4 2 8 5 2 5 2 6 Oct 2.0 8 0 1 3 2 5 1 5 2 3 7 Nov 0.5 3 0 0 1 1 0 1 0 1 0 8 Dec 0.0 1 0 1 0 0 0 0 0 0 0
scan(tf,"") ## import von textdateien ```
Visualisierungen
Builtin Visualisierung mittels `plot` und `lines`
``` > a <- c(1,2,3) > plot(a) ```
Heutzutage benutzt man aber `ggplot`, was ein externe Library ist.
Was mach ich mit R?
Im Grunde kann man damit alles machen was man will, weil Turing Complete.
- Was macht die Industrie mit R
Marktforschern (Data Scientists) benutzt um Modelle zu bauen Sobald Modelle sich als valide erweisen werden sie dann von Programmierern in anderen besser skalierbareren Sprachen implementiert und auf den ganzen Datenbestand angewendet. Zum Beispiel mit Scala oder MapReduce/Yarn Stack von Hadoop
Was kann ich mit R alles machen?
R und ich haben so eine Art Hopon-Hopoff Beziehung. Seit 2012 bastel ich immer mal wieder Phasenweise mehr und mal weniger damit herum.
```
- GPX Karte malen ([Visualize gpx tracks from a folder on a picture from google maps. · GitHub](https://gist.github.com/noqqe/5a780a2132b781a01bb0debed7765ab9))
```
```
- Kontoführung
- Fahrrad Stats (Distanz, Herzrate, Geschwindigkeitsentwicklung)
```
Wie Entwickelt ich R ?
```
- Commandline Interaktiv
- Vim
- R-Studio (IDE)
```
Das R-Universum
```
- Grosser Frauenanteil ([About us – R-Ladies Global](https://rladies.org/about-us/))
- Packages (CRAN) [The Comprehensive R Archive Network](https://cran.r-project.org/)
- Diverse Bücher
- Data Scientist is der heisse Scheiss.
```
Schwächen von R
RAM. Sobald deine Daten nicht mehr in deinen RAM passen ist es vorbei. Workaround: Wir haben riesige Maschinen bei Amazon hochgefahren, brauchen sie aber meistens nicht weil die Data Scientists eh nur mit kleinen Datenmengen modellieren.