Einführung in die Netzwerkanalyse mit R

Werbung
R
Einführung
Grundlagen
Netzwerkanalyse
Michael Kronenwett
[email protected]
Universität Trier
2012
Michael Kronenwett, Universität Trier, 2012
Was ist „R“?
●
Eine Arbeitsumgebung mit statistischem
Schwerpunkt
●
Eine Programmiersprache
●
Open-Source
●
Homepage: http://www.r-project.org
Michael Kronenwett, Universität Trier, 2012
RStudio
●
●
RStudio ist eine grafische Benutzeroberfläche
für R. (http://rstudio.org/)
Starten von RStudio...
Michael Kronenwett, Universität Trier, 2012
RStudio
Unser R Skript
Die R Console
Michael Kronenwett, Universität Trier, 2012
Workspace
Dokumentation
Syntax
●
Was sind die Vorteile?
●
Was sind die Nachteile?
Michael Kronenwett, Universität Trier, 2012
Skripteingabe
●
Geben Sie das Folgende ein:
●
4+3+2.5
●
12*13
●
5*pi
●
Markieren Sie die Zeile (per Maus oder per Strg+A)
●
Klicken Sie auf „Run“
Michael Kronenwett, Universität Trier, 2012
Skripteingabe
●
Übungen
●
4+3+2.5
–
Wichtig: Anstatt Dezimalkomma verwenden wir Dezimalpunkt
–
Ausgabe: [1] 9.5
–
[1]: Ein Ergebnis, das aus einem Element besteht
–
9.5: Unser Ergebnis
–
Ein solches Ergebnis wird Skalar genannt.
●
30/5
●
(5*2)+100
●
...
Michael Kronenwett, Universität Trier, 2012
●
Variablen
●
Variablen sind Platzhalter für Werte
●
Geben Sie folgendes in die Konsole ein:
alter <- 72
–
Wir weißen der Variablen „alter“ mit dem Zeichen „<-“ den
Wert „72“ zu.
Erlaubte Zeichen: alter.der.person
● Nicht erlaubte Zeichen: Leerzeichen und alter_der_person
Mit Variablen kann auch gerechnet werden:
●
●
–
Z.B. brutto <- netto *1.19
Michael Kronenwett, Universität Trier, 2012
Variablen
●
●
Übung: Eine Person bestellt 5 Kuchenstücke.
Ein Kuchenstück kostet 2,10€. Wie viel muss
die Person bezahlen?
Berechnen Sie den Endpreis mithilfe von
Variablen.
Michael Kronenwett, Universität Trier, 2012
Variablen
●
●
Übung: Eine Person bestellt 5 Kuchenstücke.
Ein Kuchenstück kostet 2,10€. Wie viel muss
die Person bezahlen?
Berechnen Sie den Endpreis mithilfe von
Variablen.
> kuchen.preis <- 2.10
> kuchen.anzahl <- 5
> preis <- kuchen.preis * kuchen.anzahl
> preis
[1] 10.5
Michael Kronenwett, Universität Trier, 2012
Vektor
●
Mehrere Werte können in einem Vektor
gespeichert werden.
●
Bsp.: Das Alter von 3 Personen speichern:
●
alter.personen <- c(43, 21, 53)
●
c(): concatenate / „Aneinanderhängen“
●
Ist eine Funktion:
–
Funktionsname(Argument1, Argument2,...,Option1=..., Option2=...)
–
oder
–
Funktionsname(Argument1=Wert1, Argument2=Wert2,
Option1=Wert3,...)
Michael Kronenwett, Universität Trier, 2012
Vektor
●
R stellt eine Hilfe-Funktion bereit. Geben Sie
hierfür folgendes in die Konsole ein:
●
help()
●
help(c)
Michael Kronenwett, Universität Trier, 2012
Vektor
●
a <- c(2, 4, 5.5, 6)
●
geschlecht<-factor(c("m","m","w","m","w","w"))
●
Anzahl der Elemente ausgeben: length(a)
●
Summe über alle Elemente bilden: sum(a)
●
Multiplizieren: a*10
> a <- c(2, 4, 5.5, 6)
>a
[1] 2.0 4.0 5.5 6.0
> length(a)
[1] 4
> sum(a)
[1] 17.5
> a*10
[1] 20 40 55 60
> b <- a*10
>b
[1] 20 40 55 60
Michael Kronenwett, Universität Trier, 2012
Vektor
●
Weitere Beispiele:
●
●
●
5 Personen kaufen eine unterschiedliche Anzahl
Kuchenstücke.
Peter: 3 Stücke, Anna: 2 Stücke, Frau Müller: 4
Stücke, Karl: 1 Stück und Christina: 3 Stücke
Ein Kuchenstück kostet 2,10€. Wie viel haben alle
Personen zusammen gezahlt?
Michael Kronenwett, Universität Trier, 2012
Vektor
●
Beispiel:
●
5 Personen kaufen eine unterschiedliche Anzahl
Kuchenstücke.
Peter: 3 Stücke, Anna: 2 Stücke, Frau Müller: 4
Stücke, Karl: 1 Stück und Christina: 3 Stücke
●
Ein Kuchenstück kostet 2,10€. Wie viel haben alle
Personen zusammen gezahlt?
> kuchen.stuecke <- c(3,2,4,1,3)
> preis <- kuchen.stuecke*2.10
> sum(preis)
[1] 27.3
Michael Kronenwett, Universität Trier, 2012
Vektor
Weitere Berechnungsmöglichkeiten:
●
2 Vektoren miteinander multiplizieren:
> a <- c(2, 4, 5.5, 6)
> b <- c(100,200)
> a*b
[1] 200 800 550 1200
Bei unterschiedlich langen Vektoren wird der
kürzere Vektor so oft durch gegangen, bis alle
Elemente des größeren Vektors abgearbeitet
wurden.
Michael Kronenwett, Universität Trier, 2012
Matrix
●
Was ist eine Matrix?
a
a
a
a
11
21
...
12
...
22
a
a
1j
2j
...
a
i1
a
...
i2
a
ij
Anwendung:
Wenn wir mehrere Fällen haben, für die mehre
Merkmale vorliegen.
Michael Kronenwett, Universität Trier, 2012
Matrix
Merkmal
...
(z.B. Alter)
Fall
Person 1
Person 2
34
69
Merkmal
...
...
a
a
1j
2j
...
Person i
77
...
a
ij
Anwendung:
Wenn wir mehrere Fällen haben, für die mehre
Merkmale vorliegen.
Michael Kronenwett, Universität Trier, 2012
Matrix
●
Wie erstellen wir eine Matrix?
●
...mit der matrix-Funktion
●
help(matrix)
> ein.vektor <- c(100,200,20,30,50,120)
> eine.matrix <- matrix(ein.vektor,2,3)
> eine.matrix
[,1] [,2] [,3]
[1,] 100 20 50
[2,] 200 30 120
> dim(eine.matrix)
[1] 2 3
Michael Kronenwett, Universität Trier, 2012
Vektor / Matrix
Auf einzelne Elemente innerhalb eines Vektors
zugreifen:
●
Vektor[Position]
●
a[1] gibt das erste Element aus
●
a[3] gibt das dritte Element aus...
●
●
a[-3] gibt alle Elemente aus, außer das Element, das sich an
der dritte Position befindet
a[1:3] gibt das erste, das dritte und alle Elemente
dazwischen aus.
●
a[c(1,3)]: gibt das erste und das dritte Element aus
●
a[5] <- 4 : Schreibe den Wert „4“ an die 5. Position
Michael Kronenwett, Universität Trier, 2012
Vektor / Matrix
Auf einzelne Elemente innerhalb einer Matrix
zugreifen:
●
Matrix[Zeile,Spalte]
●
m[,1]: Erste Spalte ausgeben
●
m[2,]: Zweite Zeile ausgeben
●
m[2,2] <- 1 : In die zweite Zeile / zweite Spalte, den
Wert „1“ schreiben
Michael Kronenwett, Universität Trier, 2012
Filtern und Selektieren von Daten
●
Logische Bedingungen:
●
>, <, ==, <=, >=, !=
ein.vektor <- c(100,200,20,30,50,120)
ein.vektor < 100
[1] FALSE FALSE TRUE TRUE TRUE FALSE
Wir bekommen als Ergebnis einen logischen Vektor.
Damit wir alle Werte ausgeben können, die kleiner 100 sind, machen wir nun
folgendes:
> kleiner.hundert <- ein.vektor<100
> kleiner.hundert
[1] FALSE FALSE TRUE TRUE TRUE FALSE
> ein.vektor[kleiner.hundert]
[1] 20 30 50
Michael Kronenwett, Universität Trier, 2012
Filtern und Selektieren von Daten
●
Logische Operatoren:
●
& = UND
●
| = ODER
●
! = NOT
alter[kleiner.hundert & geschlecht=="w"]
[1] 19 32
alter[kleiner.hundert | geschlecht=="w"]
[1] 19 30 32 50
Michael Kronenwett, Universität Trier, 2012
Schleifen
for (cc in 1:10){
print(cc)
}
#Einzelne Werte eines Vektors per Schleife ausgeben
v <- c("Hans", "Peter", "Karl")
for (cc in 1:3){
print(v[cc])
}
Michael Kronenwett, Universität Trier, 2012
Daten einlesen
●
Vorhandene Daten aus einer Datei einlesen:
●
read.table
●
help(read.table)
Michael Kronenwett, Universität Trier, 2012
Daten einlesen
●
read.table("dateiname")
●
●
●
Warum csv2 und nicht csv?
Wo befinden wir uns?
●
getwd()
●
Ort ändern: setwd(„c:\\pfad““)
schulnoten <- read.table("Schulnote.txt")
> schulnoten <- read.table("Schulnote.txt")
> is.vector(schulnoten)
[1] FALSE
> names(schulnoten)
[1] "V1"
Michael Kronenwett, Universität Trier, 2012
Data-Frame
●
●
●
Ein Data-Frame fasst mehrer Datentypen (z.B.
Vekoren, Matrizen) zusammen.
summary(data-frame-name)
Zugriff auf die einzelnen Variablen:
data.frame$variable
> schulnoten$V1
[1] 2 3 2 3 2 2 3 2 3 1 2 3 3 3 3 3 4 4 3 1 3 1 4 3 2 3 2 3 3 2
Michael Kronenwett, Universität Trier, 2012
Data-Frame
●
Mehrere Vektoren einlesen und in ein DataFrame packen:
#Schulnoten aus Datei einlesen
schulnoten <- read.table("Schulnote.txt")
#... : Kennzeichnet eine
Kommentarzeile!
#Geschlecht aus Datei einlesen
geschlecht<-read.table("Geschlecht.txt")
Vorteil:
- Erhöht die Lesbarkeit
- Erhöht die Nachvollziehbarkeit
#neue Vektoren anlegen
schulnotev <- as.vector(schulnoten$V1)
geschlechtv <- as.vector(geschlecht$V1)
#neues Data-Frame anlegen
daten<-data.frame(geschlechtv,schulnotev)
Michael Kronenwett, Universität Trier, 2012
So oft wie möglich verwenden!
Daten schreiben
●
Einen Vektor schreiben:
●
write(geschlechtv, "test.txt", 1)
–
●
Was bewirkt die „1“ ?
Einen Data-Frame schreiben:
●
write.table(daten, "test_daten.txt")
Michael Kronenwett, Universität Trier, 2012
Pause
http://www.hradetzky-naturfotografie.de/wp-content/uploads/2011/11/1883_bergnovember.jpg
Michael Kronenwett,
Universität Trier, 2012
Netzwerkanalyse mit R
●
Funktionalität von R erweitern:
●
Pakete („Packages“) einbinden
1. Paket installieren
●
●
●
●
–
RStudio: „Packages“ → „Install Packages“
„Packages“ → „Search“ Feld
Paket aktivieren
Per R Syntax: install.packages("network")
Paket: „network“ (Butts/Hunter)
Michael Kronenwett, Universität Trier, 2012
Netzwerkanalyse mit R
●
Funktionalität von R erweitern:
●
Pakete („Packages“) einbinden
2. Paket verwenden
●
library(network)
Michael Kronenwett, Universität Trier, 2012
Netzwerkanalyse mit R
●
Und jetzt?
●
help(network)
●
http://www.jstatsoft.org/v24/i02/paper
Michael Kronenwett, Universität Trier, 2012
Netzwerkanalyse mit R
net <- network.initialize(5)
#Netzwerk mit 5 Knoten initialisieren
net
plot(net)
#Netzwerkgraph ausgeben
add.edge(net, 2, 5)
#Kante einfügen
net[3,2] <- 1
#Kante einfügen
net[,2] <- 1
#Kanten einfügen
net[,]
#Netzwerk in Matrixform ausgeben
delete.edges(net, 1)
Michael Kronenwett, Universität Trier, 2012
Netzwerkdaten laden
●
●
net <- read.paj("D:\\unitrier\\Workshop\\SummerschoolTrier2012\\Uebung_Gesamtnetzwerk\\Uebungsdateien\\GNU R Daten
und Syntax\\Schulklasse.net")
net[,]
Michael Kronenwett, Universität Trier, 2012
Netzwerkanalyse mit R
library(network)
#Netzwerk laden
net <- read.paj(„pfad“)
#Zusammenfassung allg. Netzwerkdaten
summary(net)
#Beziehungsmatrix anzeigen
net[,]
Michael Kronenwett, Universität Trier, 2012
Netzwerkmaßzahlen berechnen
●
Weiteres Paket einbinden: sna
Michael Kronenwett, Universität Trier, 2012
Netzwerkmaßzahlen berechnen
#Degree
degreev <- degree(net)
#Betweenness
betweennessv <- betweenness(net)
#Dyadenzensus
dyad.census(net)
#Triadenzensus
triad.census(net)
Michael Kronenwett, Universität Trier, 2012
Netzwerkmaßzahlen berechnen
#Zentralisierung
centralization(net, g=1, degree, cmode="indegree")
help(centralization) …
Michael Kronenwett, Universität Trier, 2012
Netzwerkmaßzahlen berechnen
#Degree
degreev <- degree(net)
#Betweenness
betweennessv <- betweenness(net)
#Dyadenzensus
dyad.census(net)
#Triadenzensus
triad.census(net)
Michael Kronenwett, Universität Trier, 2012
Netzwerkmaßzahlen berechnen
Wasserman & Faust, S. 566
Michael Kronenwett, Universität Trier, 2012
Akteursattribute laden
#Akteursattribute einlesen: Geschlecht
geschlecht <- read.table("...Geschlecht.txt")
geschlechtv <- as.vector(geschlecht$V1)
#Akteursattribute einlesen: Schulnoten
schulnoten <- read.table("...Schulnote.txt")
schulnotenv <- as.vector(schulnoten$V1)
Michael Kronenwett, Universität Trier, 2012
Netzwerkmaßzahlen berechnen
name <- network.vertex.names(net)
size <- network.size(net)
for(cc in 1:size){
print( c(name[cc], degree(net, nodes=cc, cmode="indegree") , degree(net, nodes=cc,
cmode="outdegree")) )
}
#eine andere Formatierung
for(cc in 1:size){
print(
c(
name[cc],
degree(net, nodes=cc, cmode="indegree") ,
degree(net, nodes=cc, cmode="outdegree")
)
)
}
Michael Kronenwett, Universität Trier, 2012
Netzwerke zeichnen
#Netzwerkgraph zeichnen
plot.network(net)
help(plot.network)
Michael Kronenwett, Universität Trier, 2012
Netzwerke zeichnen
#Netzwerkgraph zeichnen, Knotengroesse abhaengig von Betweenness-Wert
plot(net, vertex.cex=betweennessv)
#Normalisieren
betweennessv_n <- betweennessv / 100
#Netzwerkgraph zeichnen, Knotengroesse abhaengig von Betweenness-Wert
plot(net, vertex.cex=betweennessv_n)
#Netzwerkgraph zeichnen, Knotenfarbe abhaengig vom Geschlecht
plot(net, vertex.cex=2, vertex.col=geschlechtv)
#Netzwerkgraph zeichnen, Knotenfarbe abhaengig vom Geschlecht
plot(net, vertex.cex=schulnotenv, vertex.col=geschlechtv)
Michael Kronenwett, Universität Trier, 2012
Netzwerke zeichnen
Ein anderes Layout für den Netzwerkgraph
wählen:
●
help(gplot.layout)
Michael Kronenwett, Universität Trier, 2012
Netzwerke zeichnen
#Circle-Layout
plot(net, vertex.cex=schulnotenv, vertex.col=geschlechtv, coord=gplot.layout.circle(net))
#Fruchtermanreingold
plot(net, vertex.cex=schulnotenv, label=network.vertex.names(net),
vertex.col=geschlechtv, coord=gplot.layout.fruchtermanreingold(net,NULL))
Michael Kronenwett, Universität Trier, 2012
Literatur
●
●
Dolic (2004) Statistik mit R, Oldenburg Verlag,
München.
Wasserman & Faust (1994) Social Network
Analysis, Cambridge University Press,
Cambridge.
Michael Kronenwett, Universität Trier, 2012
Herunterladen