+ - 0:00:00
Notes for current slide
Notes for next slide

Daten

Explorative Datenanalyse mit R
The R Bootcamp

September 2021

1 / 30

3 Klassen von Datenobjekten

list - R's Mehrzweck-Container

  • Kann alle Daten beinhalten, inkl. lists
  • Nützlich für komplexe Funktionsoutputs

data.frame - R's Tabelle

  • Spezialfall einer list
  • R's Tidy-Format für Daten

vector - R's Daten-Container

  • Primärer Daten-Container
  • Beinhaltet Daten genau einer Klasse

2 / 30

data frame

  • Eine liste bestehend aus vectoren gleicher Länge.
  • Die vectoren haben verschiedene Klassen: numeric, character, etc.
  • Verschiedene Varianten: data.frame, data.table, tibble.




3 / 30

Inhalt ansehen

# printe basel
basel
## # A tibble: 10,000 × 20
## id geschlecht alter groesse gewicht
## <dbl> <chr> <dbl> <dbl> <dbl>
## 1 1 W 44 174 NA
## 2 2 M 65 180 85.6
## 3 3 M 31 168 53.9
## 4 4 M 31 166. 105
## 5 5 M 24 180. 102.
## # … with 9,995 more rows




4 / 30

Inhalt ansehen

# Zeige den data frame in neuem tab
View(basel)




5 / 30

Zugriff mit $

# Extrahiere die Variable Alter
basel$alter
## [1] 44 65 31 31 24 59 48 53 50 62 73 53
## [13] 38 26
## [ reached getOption("max.print") -- omitted 9986 entries ]
# Extrahiere die Variable Bildung
basel$bildung
## [1] "obligatorisch" "sek III"
## [3] "sek III" "lehre"
## [5] "obligatorisch" "sek III"
## [7] "obligatorisch" "lehre"
## [9] "sek III" "lehre"
## [11] "sek III" "lehre"
## [13] "lehre" "obligatorisch"
## [ reached getOption("max.print") -- omitted 9986 entries ]




6 / 30

Verändern mit $

# Teile die Variable einkommen durch 1000
basel$einkommen <- basel$einkommen / 1000
# zeige data frame
basel
## # A tibble: 10,000 × 20
## id geschlecht alter groesse gewicht
## <dbl> <chr> <dbl> <dbl> <dbl>
## 1 1 W 44 174 NA
## 2 2 M 65 180 85.6
## 3 3 M 31 168 53.9
## 4 4 M 31 166. 105
## 5 5 M 24 180. 102.
## # … with 9,995 more rows




7 / 30

vector

  • R's primärer Daten-Container
  • Kann nur eine einzelne Daten-Klasse beinhalten (und fehlende Werte).
  • Daten-Klassen

    • numeric - Alle Zahlen
    • character - Alle Zeichen (e.g., Namen)
    • logical - TRUE oder FALSE
    • ...
    • NA - fehlende Werte




8 / 30

numeric

numeric Vektoren beinhalten Zahlen und nur Zahlen.

# Extrahiere die Variable Alter
basel$alter
## [1] 44 65 31 31 24 59 48 53 50 62
# Zeige die Klasse von Alter
class(basel$alter)
## [1] "numeric"
# Ist Alter numeric
is.numeric(basel$alter)
## [1] TRUE

9 / 30

character

character Vektoren beinhalten alle Zeichen um die herum Anführungszeichen stehen.

# Extrahiere die Variable Geschlecht
basel$geschlecht
## [1] "W" "M" "M" "M" "M" "M" "W" "W"
# Extrahiere die Variable Bildung
basel$bildung
## [1] "obligatorisch" "sek III"
## [3] "sek III" "lehre"
## [5] "obligatorisch" "sek III"
## [7] "obligatorisch" "lehre"

10 / 30

character

character Vektoren beinhalten alle Zeichen um die herum Anführungszeichen stehen.

# Extrahiere die Variable Alter
basel$alter
## [1] 44 65 31 31 24 59 48 53 50 62
# Wandle Alter in character um
as.character(basel$alter)
## [1] "44" "65" "31" "31" "24" "59" "48"
## [8] "53" "50" "62"

11 / 30

logical

logical Vektoren werden typischerweise durch logische Vergleiche erstellt und benutzt um in Data Frames oder Vektoren bestimmte Fälle auszuwählen.

# Welche Werte in Geschlecht sind m
basel$geschlecht == "M"
## [1] FALSE TRUE TRUE TRUE TRUE TRUE
## [7] FALSE FALSE TRUE FALSE
# Welche Werte in Alteer sind kleiner 30
basel$alter < 50
## [1] TRUE FALSE TRUE TRUE TRUE FALSE
## [7] TRUE FALSE FALSE FALSE

12 / 30

logical

logical Vektoren werden typischerweise durch logische Vergleiche erstellt und benutzt um in Data Frames oder Vektoren bestimmte Fälle auszuwählen.

Logische Operatoren

== - ist gleich

<, > - kleiner/grösser als

<=, >= - kleiner/grösser als oder gleich

&, && - logisches UND

|, || - logisches ODER

13 / 30

Zugriff / Ändern via [ ]

# Extrahiere die Variable Alter
alter <- basel$alter
alter
## [1] 44 65 31 31 24 59 48 53 50 62
# Extrahiere zweiten Wert
alter[2]
## [1] 65
# Ändere zweiten Wert
alter[2] <- 100
alter

Mehr Info hier.




14 / 30

Das tidyverse

  • Das tidyverse ist eine Sammlung hoch-performanter, nutzerfreundlicher Pakete für eine effiziente Datenaufbereitung und -analyse.
  1. readr für Daten I/O.
  2. tibble für moderne data_frame's.
  3. dplyr für Datenverarbeitung.
  4. tidyr für Datenverarbeitung.
  5. ggplot2 für Grafiken.
16 / 30

Datentypen ausserhalb von R

  • Strukturierte Daten
    • Delimiter getrennt: .csv, .txt, etc.
    • Relationale Datenbanken: SQL

  • Semi-strukturierte Daten
    • Markup: .xml, .xls, .html etc.
    • Non markup: JSON, MongoDB

  • Unstrukturierte Daten
    • z.B. Text




17 / 30

readr

  • Delimiter separieren die Spalten.
  • Meist als lokale Textdatei vorliegend.
  • Datenklassen werden inferiert.


18 / 30

readr

  • Delimiter separieren die Spalten.
  • Meist als lokale Textdatei vorliegend.
  • Datenklassen werden inferiert.


# Lese Basel Datensatz ein
basel <- read_csv("1_Data/basel.csv")
# Benutze expliziten Delimiter
basel <- read_delim("1_Data/basel.csv",
delim = ",")
basel
## # A tibble: 10,000 × 20
## id geschlecht alter groesse
## <dbl> <chr> <dbl> <dbl>
## 1 1 f 87 165
## 2 2 m 54 175.
## 3 3 f 34 147.
## 4 4 m 31 166.
## 5 5 m 24 180.
## # … with 9,995 more rows
19 / 30

tibble

  • Schlanke Version des data frames mit:
    • Informativeren Print
    • Keinen Faktoren
    • Konsistenteres Subsetting


# Lese Basel Datensatz ein
basel <- read_csv("1_Data/basel.csv")
# Benutze expliziten Delimiter
basel <- read_delim("1_Data/basel.csv",
delim = ",")
basel
## # A tibble: 10,000 × 20
## id geschlecht alter groesse
## <dbl> <chr> <dbl> <dbl>
## 1 1 f 87 165
## 2 2 m 54 175.
## 3 3 f 34 147.
## 4 4 m 31 166.
## 5 5 m 24 180.
## # … with 9,995 more rows
20 / 30

Den Filepath finden

  • Finde den Filepath mittels RStudio's Auto-Complete.
  • Setze den Cursor zwischen Anführungszeichen und drücke Tab.


21 / 30

Den Filepath finden

  • Finde den Filepath mittels RStudio's Auto-Complete.
  • Setze den Cursor zwischen Anführungszeichen und drücke Tab.


22 / 30

Inferierte Datentypen

# Lese Basel Datensatz ein
basel <- read_csv("1_Data/basel.csv")
## Rows: 10000 Columns: 20
## ── Column specification ────────────────
## Delimiter: ","
## chr (5): geschlecht, bildung, konfe...
## dbl (15): id, alter, groesse, gewich...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

23 / 30

Inferierte Datentypen

Manchmal ist es nötig readr etwas auf die Sprünge zu helfen, damit Datentypen korrekt inferiert werden.

# Setze Symbol für fehlende Werte
basel <- read_csv("1_Data/basel.csv",
na = c('NA'))
# Re-inferiere Datentypen
basel <- type_convert(basel)

24 / 30

Relationale Datenbanken siehe db.rstudio.com

  • R kann direkt auf Datenbanken arbeiten: MySQL, MariaDB, BigQuery, Redshift, etc.
    Siehe hier.
  • dplyr wird z.B. automatisch übersetzt.
# Verbinge mit MySQL Datenbank
con <- dbConnect(MySQL(),
user='studiech_rbootca',
password='Du*5hA+7NU:8T',
dbname='studiech_rbootcamp',
host='studie.ch',
port = 3306)
# Zeige Tabellen
dbListTables(con)
## [1] "basel"
25 / 30

Relationale Datenbanken siehe db.rstudio.com

  • R kann direkt auf Datenbanken arbeiten: MySQL, MariaDB, BigQuery, Redshift, etc.
    Siehe hier.
  • dplyr wird z.B. automatisch übersetzt.
# Extrahiere Tabelle Customers
basel <- tbl(con, "basel")
basel
## # Source: table<basel> [?? x 20]
## # Database: mysql 5.7.26-log-cll-lve
## # [@studie.ch:/studiech_rbootcamp]
## id geschlecht alter_jahre groesse
## <dbl> <chr> <dbl> <dbl>
## 1 1 f 87 165
## 2 2 m 54 175.
## 3 3 f 34 147.
## 4 4 m 31 166.
## 5 5 m 24 180.
## # … with more rows
26 / 30

Relationale Datenbanken siehe db.rstudio.com

  • R kann direkt auf Datenbanken arbeiten: MySQL, MariaDB, BigQuery, Redshift, etc.
    Siehe hier.
  • dplyr wird z.B. automatisch übersetzt.
# Extrahiere Tabelle Customers
basel <- tbl(con, "basel")
# Extrahiere CompanyNamer Variable
basel %>% pull(konfession)
## [1] "katholisch" "konfessionslos"
## [3] "konfessionslos" "katholisch"
## [5] "katholisch" NA
## [7] "konfessionslos" "katholisch"
## [9] "konfessionslos" "andere"
## [ reached getOption("max.print") -- omitted 9990 entries ]
27 / 30

Semi-strukturierte Daten mit xml2 und rvest

# Tabelle laden von Wikipedia (mit xml2 und rvest)
read_html("https://en.wikipedia.org/wiki/R_(programming_language)") %>%
html_node(xpath = '//*[@id="mw-content-text"]/div/table[2]') %>%
html_table() %>% as_tibble()
## # A tibble: 22 × 3
## Release Date Description
## <chr> <chr> <chr>
## 1 0.16 "" "This is the last alpha version developed primarily by Ihaka and G…
## 2 0.49 "1997-04-2… "This is the oldest source release which is currently available on…
## 3 0.60 "1997-12-0… "R becomes an official part of the GNU Project. The code is hosted…
## 4 0.65.1 "1999-10-0… "First versions of update.packages and install.packages functions …
## 5 1.0 "2000-02-2… "Considered by its developers stable enough for production use.[57…
## 6 1.4 "2001-12-1… "S4 methods are introduced and the first version for Mac OS X is m…
## 7 1.8 "2003-10-0… "Introduced a flexible condition handling mechanism for signalling…
## 8 2.0 "2004-10-0… "Introduced lazy loading, which enables fast loading of data with …
## 9 2.1 "2005-04-1… "Support for UTF-8 encoding, and the beginnings of internationaliz…
## 10 2.6.2 "2008-02-0… "Last version to support Windows 95, 98, Me and NT 4.0[58]"
## # … with 12 more rows
28 / 30

Other data siehe rio

readr

# read fixed width files (can be fast)
data <- read_fwf(file, ...)
# read Apache style log files
data <- read_log(file, ...)

haven

# read SAS's .sas7bat and sas7bcat files
data <- read_sas(file, ...)
# read SPSS's .sav files
data <- read_sav(file, ...)
# etc

readxl

# read Excel's .xls and xlsx files
data <- read_excel(file, ...)


Other

# Read Matlab .mat files
data <- R.matlab::readMat(file, ...)
# Read and wrangle .xml and .html
data <- XML::xmlParseParse(file, ...)
# from package jsonlite: read .json files
data <- jsonlite::read_json(file, ...)
29 / 30

3 Klassen von Datenobjekten

list - R's Mehrzweck-Container

  • Kann alle Daten beinhalten, inkl. lists
  • Nützlich für komplexe Funktionsoutputs

data.frame - R's Tabelle

  • Spezialfall einer list
  • R's Tidy-Format für Daten

vector - R's Daten-Container

  • Primärer Daten-Container
  • Beinhaltet Daten genau einer Klasse

2 / 30
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow