-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path05_datenimport.Rmd
326 lines (247 loc) · 23.2 KB
/
05_datenimport.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
---
title: "Datenimport"
author: CorrelAid e.V.
date: "`r Sys.Date()`"
authors:
- David Schweizer
- Nina Hauser
- Zoé Wolter
- Jonas Lorenz
- Leo Preu
- Philipp Bosch
output:
html_document:
toc: true
toc_depth: 2
toc_float: true
theme: flatly
css: www/style.css
includes:
after_body: ./www/favicon.html
language: de
runtime: shiny_prerendered
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE)
library(learnr)
library(gradethis)
source("R/setup/gradethis-setup.R")
source("R/setup/tutorial-setup.R")
# Read app parameters
params <- yaml::yaml.load_file("www/app_parameters.yml")
# Benötigte Daten laden
source("R/setup/functions.R")
```
```{r, include=FALSE}
data_processed <- get_data_processed()
```
```{r results='asis'}
cat(get_license_note(rmarkdown::metadata$title, rmarkdown::metadata$authors))
```

# **Datenimport in zwei Schritten**
## **1. Schritt: Dateiformat**
Grundlegend gibt es **zwei Möglichkeiten**, Daten in R zu importieren. Entscheidend ist dabei, woher wir unsere Daten importieren wollen: <br>
1. aus lokal oder remote gespeicherten **Dateiformaten** (XLSX, CSV, ...) <br>
2. über **Datenabfragen** von Datenbanken und aus dem Internet (Abfragesprachen wie SQL oder über APIs und Web-Scraping; mehr hierzu in den Exkursen) <br>
**Tabelle: Überblick Dateiformate**
```{r dateiformate_tabelle, results='asis'}
tabelle <- "
Dateiformat: | Dateistruktur: | Endung: | Package::Funktion
--------------|-------------------------------------------------------------------|---------------------------------|------------
CSV-Datei | tabellarisch-strukturierte Textdatei | .csv | readr::read_csv
Excel-Datei | tabellarische Daten aus Microsoft Excel | .xls/.xlsx | readxl::read_excel
SAS | SAS-Export, der nicht in allen Anwendungen geöffnet werden kann | .sas | haven::read_sas
Shapefile | Kartographische Datei, die Koordinaten und Polygone enthält | .shp | sf::st_read
SPSS | SPSS-Export, der nicht in allen Anwendungen geöffnet werden kann | .sav | haven:: read_sav
Stata | Stata-Export, der nicht in allen Anwendungen geöffnet werden kann | .dta | haven::read_dta
Textdatei | allgemeine Textdateien | .txt | readr::read_delim
"
cat(tabelle)
```
Um die Daten anschließend richtig zu importieren, ist es wichtig, einen Blick auf das **Dateiformat** zu werfen. Wenn wir nicht bereits wissen, in welchem Format unsere Daten vorliegen, gibt es (je nach Betriebssystem) mehrere Möglichkeiten, es herauszufinden:
- **Windows-User** können sich die Dateiendung über die Multifunktionsleiste auf der Registerkarte "Ansicht" anzeigen lassen: Aktiviert dort das Feld "Dateinamenerweiterungen" im Abschnitt "Ein-/Ausblenden".
- **Mac-User** navigieren zu ihrem Schreibtisch und können sich dort die Dateiendung über "Finder" -> "Erweitert" -> "Alle Dateinamensuffixe einblenden" anzeigen lassen.
Um Fehlern vorzubeugen, solltet Ihr - wenn möglich - die Datei vorab in einem **Texteditor** öffnen und dabei Folgendes beachten:
- **Dateiformat**: In welchem Format liegt die Datei vor?
- **Speicherort**: Wo ist die Datei gespeichert?
- **Dateistruktur**: Was gibt es hinsichtlich der Struktur zu beachten (Separatoren, fehlende Werte, etc.)?
- **Sprache**. Die meisten Datenanalyseprogramme verwenden Englisch als Standardeinstellung, weshalb es bei dem Import **deutschsprachiger Dateien** zu Fehlern kommen kann. Wir müssen dabei besonders auf Umlaute, Spaltentrenner (engl. Separator, im Deutschen ";") und Dezimaltrennzeichen (im Deutschen ",") achten. Wie wir mit solchen Fällen umgehen, schauen uns wir uns gleich noch einmal genauer an!
## **2. Schritt: Der Import**
Einerseits können wir CSV-, XLSX-, SPSS-, SAS und Stata-Dateien ganz klassisch manuell und **ohne Code** in RStudio importieren. Dabei navigieren wir über "File" -> "Import Dataset" zum entsprechenden Dateiformat und können dann ganz einfach unseren File/URL eingeben und schon haben wir unseren Datensatz in R importiert!
Alternativ können wir diese Dateien auch mit Funktionen diverser Packages importieren - wie genau wir das machen, schauen wir uns nach dem Quiz genauer an.
# **Quiz**
```{r quiz_datenimport, echo=FALSE}
quiz(caption = NULL,
question("Welche Faktoren spielen beim Datenimport eine wichtige Rolle?",
answer("Das Dateiformat (Tipp: Dateiendung)", correct = TRUE),
answer("Die Dateistruktur mit Codierung, (Dezimal-)Trennzeichen, usw.", correct = TRUE),
answer("Der Speicherort (lokal vs. remote)", correct = TRUE),
answer("Die Art und Weise wie die Daten geladen werden sollen (einmalig, periodisch oder live)", correct = TRUE),
correct = "Richtig, genau diese vier Dinge müssen wir beachten, wenn wir Daten in R importieren wollen! Wieso und weshalb die jeweiligen Aspekte wichtig sind, kannst Du oben noch einmal nachlesen.",
incorrect = "Leider falsch, an dieser Stelle sind nämlich alle vier Faktoren wichtig, wenn wir erfolgreich Daten in R importieren wollen. Wieso und weshalb die jeweiligen Aspekte wichtig sind, kannst Du oben noch einmal nachlesen.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("An welcher Dateiendung erkennt man Excel-Dateien?",
answer(".xls", correct = TRUE),
answer(".xlsx", correct = TRUE),
answer(".csv"),
correct = "Richtig, Excel-Dateien enden mit .xls oder .xlsx. CSV-Daten sind Textdateien, die wir natürlich auch in R importieren können!",
incorrect = "Leider falsch, Excel-Dateien enden mit .xls oder .xlsx. CSV-Dateien sind Textdateien - aber auch diese können wir natürlich in R importieren.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Woran erkennt man CSV-Dateien?",
answer('An dem Trennzeichen ","'),
answer('An der Dateiendung ".csv"', correct = TRUE),
correct = "Richtig, vor allem die Dateiendung ist ein wichtiger Hinweis, wenn wir das Dateiformat herausfinden möchten. CSV steht übrigens für 'comma separated values', also 'durch Komma getrennte Werte').",
incorrect = "Leider falsch, CSV-Dateien sind zwar in der Regel durch Kommata getrennt, es gibt allerdings auch CSV-Dateien, deren Spalten durch Semikolons, Pipes (senkrechte Striche) und Tabstopps getrennt werden. Daher werfen wir immer einen Blick auf die Dateiendung, wenn wir uns einmal unsicher sind.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Optionen gibt es, um lokale Dateien zu importieren?",
answer("Manuell über den File Explorer in RStudio (File -> Import Dataset).", correct = TRUE),
answer("Mit individuellen Funktionen aus verschiedenen Packages für die verschiedenen Dateiformate.", correct = TRUE),
answer("SAS- und SPSS-Dateien können mit der gleichen Funktion importiert werden."),
correct = "Richtig, wir können einerseits manuell über den File Explorer navigieren oder aber mit verschiedenen Funktionen arbeiten!",
incorrect = "Leider falsch, je nach Dateiformat benötigen wir nämlich unterschiedliche Funktionen, die jedoch mit dem gleichen Package geladen werden können. Allerdings bieten und auch unterschiedliche Packages verschiedene Import-Funktionen.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Können nur lokal gespeicherte Dateien importiert werden?",
answer("Ja."),
answer("Nein.", correct = TRUE),
correct = "Richtig, wir können nämlich dank R sowohl lokal als auch remote gespeicherte Daten importieren und analysieren!",
incorrect = "Leider falsch, dank R können wir nämlich sowohl lokal als auch remote gespeicherte Daten (z.B. über Hyperlinks) importieren und analysieren.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
)
)
```
Im restlichen Kapitel wollen wir nun anhand praktischer Übungen den Import unterschiedlicher CSV- und XLSX-Dateien üben.
# **CSV-Dateien**
In einer **CSV-Datei (comma separated values, zu dt. Komma getrennte Werte)** werden - wie der Name bereits vermuten lässt - die verschiedenen **Datenwerte durch Kommata getrennt**. **Jede Zeile entspricht einer Beobachtung**, wobei die **erste Zeile "Header"** genannt wird. Diese erste Zeile enthält keine Werte im eigentlichen Sinne, sondern die Bezeichnungen der einzelnen Spalten, also die Namen der Variablen. Wir nutzen den Header, um auf bestimmte Spalten und Werte zuzugreifen.
## **Datenimport über URLs**
Das **`readr`**-Package ist ein Paket, das uns den Import verschiedener Dateien ermöglicht. Innerhalb dieses Packages können wir die **`read.csv()`**-Funktion nutzen, um CSV-Dateien zu importieren. Wichtig ist, dass wir dabei das **Komma als Separator** zwischen den verschiedenen Argumenten und den **Punkt als Dezimaltrennzeichen** verwenden! Schauen wir uns nun einmal die verschiedenen Argumente der Funktion an, die wir entsprechend unserer Dateistruktur setzen können:
- **`file = ...`**: Festlegen des Dateipfades
- **`col_names = TRUE/FAlSE`**: Vorhandensein bzw. Nicht-Vorhandensein des Headers
- **`skip = ...`**: Festlegen, ob Zeilen übersprungen werden sollen; kann Werte zwischen 0 und N annehmen
- **`na = ...`**: Definieren, wie fehlende Werte (NAs) aussehen sollen - z.B. "" (leer)
``` {r exericse_csv, exercise = TRUE}
# install.packages("readr")
data_raw <- readr::read_csv(
file = 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-01-26/plastics.csv', # Dateiname
col_names = TRUE, # Header
skip = 0, # Zeilen
na = c("", "NA") # fehlende Werte
)
head(data_raw)
```
## **Datenimport über lokale Dateipfade**
Oben haben wir nun gesehen, wie wir relativ intuitiv Daten über (offene) URLs (Uniform Resource Locator, dt. Link) importieren können. Nun wollen wir uns anschauen, wie wir Daten importieren, die wir bereits lokal auf unserem Rechner gespeichert haben, dazu müssen wir nämlich den **Path (dt. Dateipfad)** definieren. Hierfür gibt es verschiedene Methoden, von denen allerdings nur eine wirklich sinnvoll ist. Wichtig dabei ist, dass wir unsere **Ordnerstruktur ordentlich** halten. Wenn wir Daten in R analysieren wollen, erstellen wir also ein RProjekt, das sowohl einen **Ordner für unser Skript** also einen einen **Ordner für unsere Daten** enthält. Dort legen wir unseren Datensatz ab, nachdem wir diesen heruntergeladen haben. Wir verwenden zum Import wie gewohnt die **`read_csv()`**-Funktion des `readr`-Packages und können nun ganz einfach mithilfe der Funktion **`here::here()`** in unseren Ordner - der in diesem Fall 'daten' genannt wurde - navigieren. Anmerkung: Die `here()`- Funktion stammt aus dem `here`-Package, das wir verwenden können, um Dateipfade in Projekten auf eine einfache und robuste Weise zu verwalten - bei Interesse könnt Ihr Euch das Package [hier](https://cran.r-project.org/web/packages/here/vignettes/here.html){target="_blank"} noch einmal genauer anschauen. Und so würde dann der entsprechende Code aussehen (hier nur zum Zeigen):
``` {r daten_einlesen_lokal, exercise = TRUE}
data_processed <- readr::read_csv(here::here('daten/bffp2019_plastics_processed.csv')) # Dateipfad
head(data_processed)
```
## **Vorsicht: Sprache!**
Eine Sache, die wir beim Datenimport auf jeden Fall beachten müssen, ist die **Sprache unserer Programme**. Verwenden wir Programme (insb. Excel) in deutscher Sprache, werden CSV-Dateien häufig mit dem **Separator ";"** und dem **Dezimaltrennzeichen ","** exportiert. Da R allerdings das Komma als Separator und den Punkt als Dezimaltrennzeichen verwendet, kann das am Ende zu Fehlern führen. Allerdings bietet uns R auch dafür verschiedene Lösungsmöglichkeiten:
1. Verwendung der **`read.csv2()`**-Funktion für den Import deutschsprachiger CSV-Dateien
2. Verwendung der allgemeineren **`read_delim()`**-Funktion mit dem Argument **`delim = ";"` - somit legen wir das Semikolon als Separator fest.
Einen solchen Fall haben wir zum Beispiel hier, wenn wir die Strukturdaten für die Wahlkreise zur Bundestagswahl 2021 importieren möchten. Diese werden uns [hier](https://www.bundeswahlleiterin.de/bundestagswahlen/2021/strukturdaten.html) von der Bundeswahlleiterin zur Verfügung gestellt. Wir möchten diese Daten nun verwenden, um verschiedene Analysen durchzuführen - logischerweise handelt es sich dabei um deutschsprachige Daten. Die Funktion und ihre grundlegenden Argumente kennen wir bereits, aber schaut gerne noch einmal oben in die Funktion, wenn es etwas unklar ist. Versucht die Datei korrekt zu importieren - Tipp: verwendet das `delim = ";"` Argument.
*Anmerkung zum Argument `skip = 8`: An dieser Stelle müssen wir acht Zeilen überspringen. Öffnet die CSV Datei doch einmal selbst mit einem Texteditor, um herauszufinden warum.*
```{r exercise_csv, exercise = TRUE}
# Laden der Strukturdaten der Bundeswahlleiterin
strukturdaten <- readr::read_delim(
file = 'https://www.bundeswahlleiterin.de/dam/jcr/b1d3fc4f-17eb-455f-a01c-a0bf32135c5d/btw21_strukturdaten.csv', # Dateiname
# Ergänzt hier den entsprechenden Code
col_names = TRUE, # Header
skip = 8, # Zeilen
na = c("", "NA"), # fehlende Werte
)
head(strukturdaten)
```
```{r exercise_csv-solution}
# Laden der Strukturdaten der Bundeswahlleiterin
strukturdaten <- readr::read_delim(
file = 'https://www.bundeswahlleiterin.de/dam/jcr/b1d3fc4f-17eb-455f-a01c-a0bf32135c5d/btw21_strukturdaten.csv', # Dateiname
delim = ";", # Semikolon als Separator
col_names = TRUE, # Header
skip = 8, # 8 Zeilen müssen übersprungen werden. Tipp: Texteditor
na = c("", "NA") # fehlende Werte
)
head(strukturdaten)
```
```{r exercise_csv-check}
grade_this_code()
```
Das war es auch schon zum Import von CSV-Dateien, machen wir also weiter mit den Excel-Dateien!
# **Excel-Dateien**
Neben CSV-Daten stehen uns viele Datensätze vor allem als **Excel-Dateien** zur Verfügung. Wahrscheinlich haben wir alle schon einmal (mehr oder weniger intensiv) mit Excel gearbeitet, weshalb wir uns direkt anschauen wollen, welche Excel-Daten wir beispielsweise nutzen und wie wir diese in R importieren können.
Ein Beispiel für Excel-Dateien sind **Google Trends Daten**. Mit den Daten von Google Trends können wir erforschen, wonach die Welt gerade auf der Suchmaschine Google sucht. Das **Google Search Volume** (dt. Google Suchvolumen) bezieht sich dabei konkret auf die Anzahl der Suchanfragen, die Nutzer:innen zu einem bestimmten Suchbegriff innerhalb eines bestimmten Zeitraums eingeben. Ein hohes Volumen deutet also auf ein hohes Interesse an dem entsprechenden Thema hin.
Wir haben für Euch zwei Dateien erstellt, die Daten zu den Suchbegriffen "beach clean up" (dt. Strand aufräumen), also Aktionen wie denen von "Break Free From Plastics", und "plastic pollution" (dt. Plastikverschmutzung) enthalten. Das entsprechende Arbeitsblatt "trends_over_time" stellt die Entwicklung des Suchvolumens im Zeitverlauf der vergangenen fünf Jahre dar, während das Arbeitsblatt "by_country" länderspezifische Entwicklung im Durchschnitt des letzten Jahres abbildet.
*Anmerkung zu Google Trends: Zur Live-Verknüpfung mit den aktuellen Daten von Google gibt es in R das `gtrendsR`-Package. Dazu mehr im Exkurs "API".*
## **Import von Excel-Dateien**
Zum Import von Excel-Dateien verwenden wir analog zu den CSV-Dateien die **`read_excel()`**-Funktion aus dem zugehörigen Package **`readxl`**. Auch hier wollen wir zunächst einmal einen Blick auf die verschiedenen Argumente dieser Funktion werfen:
- **`path = ...`**: Definition von Path und Dateinamen
- **`sheet = ...`**: Definition des Arbeitsblatts
- **`col_names = TRUE/FAlSE`**: Deklarierung der Spaltennamen
- **`na = ...`**: Definieren, wie fehlende Werte (NAs) aussehen sollen - z.B. "" (leer)
```{r exercise_xlsx, exercise = TRUE}
#install.packages(readxl)
# Laden des Arbeitsblattes "trends_over_time" der Datei "Plastic Pollution - Google Trends.xlsx"
googletrendstime_plasticpollution <- readxl::read_excel(
path = here::here("daten/Plastic Pollution - Google Trends.xlsx"), # Dateipfad/-name
sheet = "trends_over_time", # Arbeitsblatts
col_names = TRUE, # Spaltennamen
na = c("", NA)) # fehlende Werte
head(googletrendstime_plasticpollution)
```
Wenn wir den Code nun "übersetzen", laden wir mit der Funktion `readxl::read_excel()` das Arbeitsblatt (`sheet = ...`) "trends_over_time" der Excel-Datei "Plastic Pollution - Google Trends.xlsx" aus unserem Ordner "Daten" (`path = ...`). Das Arbeitsblatt enthält Spaltenbezeichnungen (`col_names = ...`) und fehlende Werte werden durch "" (leer) gekennzeichnet (`na = ...`).
Versucht nun einmal mithilfe der gleichen Funktion das zweite Arbeitsblatt "by_country" der Datei "Beach Clean Up - Google Trends.xlsx" zu laden. Ihr könnt dazu den oberen Code kopieren und dann die Namen der Datei und des Arbeitsblatts an der richtigen Stelle verändern!
```{r exercise_excel, exercise = TRUE}
googletrendstime_plasticpollution <- readxl::read_excel(
path = here::here("???"), # Dateipfad/-name
sheet = "???", # Arbeitsblatts
col_names = TRUE, # Spaltennamen
na = c("", NA)) # fehlende Werte
head(googletrendstime_plasticpollution)
```
```{r exercise_excel-solution}
# Laden des Arbeitsblattes "by_country" der Datei "Beach Clean Up - Google Trends.xlsx"
readxl::read_excel(
path = here::here("daten/Beach Clean Up - Google Trends.xlsx"), # Änderung Dateinamen
sheet = "by_country", # Änderung Arbeitsblatt
col_names = TRUE, # Spaltennamen
na = c("", NA)) # fehlende Werte
```
```{r exercise_excel-check}
grade_this_code()
```
# **Nach dem Datenimport: Datenbereinigung**
## **Warum Datenbereinigung?**
Bisher haben wir uns vor allem damit beschäftigt, wie wir verschiedene Dateitypen erfolgreich in R importieren können. So weit so gut - doch was machen wir, wenn wir unsere Daten erfolgreich importiert haben und von lauter Zahlen und kryptischen Bezeichnungen förmlich erschlagen werden? Wir räumen auf!
Tatsächlich ist am Anfang einer jeden Arbeit erst einmal ein bisschen **Fleißarbeit** gefragt, denn viele Datensätze sind unglaublich groß und umfangreich und dadurch im ersten Moment ziemlich unordentlich ('messy'). Glücklicherweise bietet uns R auch diesem Fall eine Reihe an Möglichkeiten, die wir nutzen können, um einen sauberen ('tidy') Datensatz zu erzeugen. Wir nutzen dafür das sogenannte **`tidyverse´**-Package. Warum wir das Package verwenden und welche Möglichkeiten sich daraus ergeben, schauen wir uns einmal im folgenden Video an (bis 15:35 Min.):

## **Das `tidyverse`-Package**
<left>
{#id .class width=20% height=100%}
</left>
<br>
- Das [`tidyverse`](https://www.tidyverse.org/packages/){target="_blank"}-Package ist eine **Sammlung von verschiedenen R-Packages**, die aufeinander abgestimmt sind und dabei derselben Logik folgen. Es bietet uns unzählige Möglichkeiten, die wir uns in den kommenden Wochen im Detail anschauen werden - aber keine Sorge, einige der Packages und Funktionen kennen wir bereits aus den vergangenen Wochen!
- **Installation**: Alle enthaltenen Packages können einzeln installiert und aufgerufen werden. Wir können aber auch alle gesammelt über `install_packages('tidyverse')` bzw. `library(tidyverse)` installieren und laden.
- **Voraussetzung**: Um mit Tidyverse arbeiten zu können, benötigen wir "tidy" Datensätze:
{#id .class width=60% height=60%}
*Illustrations from the Openscapes blog Tidy Data for reproducibility, efficiency, and collaboration by Julia Lowndes and Allison Horst*
# **Und jetzt Ihr!**
An dieser Stelle seid Ihr dran! Ihr dürft gerne veruchen, Eure **eigene Datensätze** in R zu importieren. Kommuniziert gerne über Slack, wenn Euch bestimmte Datensätze interessieren. Ansonsten (oder zusätzlich) gibt es die folgenden Aufgaben und das zugehörige **R-Skript 05_datenimport-uebung.R** (im [Übungsordner](https://download-directory.github.io/?url=https://github.com/CorrelAid/rlernen_umwelt/tree/main/uebungen){target="_blank"} unter 05_datenimport), das Ihr bearbeiten könnt:
1. Versucht, den "Plastics"-Datensatz (im Ordner `daten/plastics.csv` im [Übungsordner](https://download-directory.github.io/?url=https://github.com/CorrelAid/rlernen_umwelt/tree/main/uebungen){target="_blank"}) mit diesem Code **lokal zu laden**.
2. Ladet den "Plastics"-Datensatz über einen [**Hyperlink**](https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-01-26/plastics.csv){target="_blank"}.
3. **Bonus:** In der interaktiven Übung habne wir uns die Strukturdaten zur Bundestagswahl 2021 angeschaut - diese lagen uns in der **UTF-8** Kodierung vor. Kommen wir nun noch einmal zurück zu diesen Sturkturdaten, wobei wir uns nun die Daten aus dem Jahr 2017 anschauen möchten, die wir [hier](https://www.bundeswahlleiterin.de/dam/jcr/f7566722-a528-4b18-bea3-ea419371e300/btw2017_strukturdaten.csv) als CSV-Datei downloaden können. Versucht die Datei manuell zu importieren. Achtet dabei auf den im Kapitel beschriebenen Ablauf und öffnet die Datei zunächst mit einem Texteditor: Welche Formatierung (encoding) hat sie? Ihr könnt die Formatierung anschließend beim manuellen Import unter "Locale" ändern. (Test: Was passiert, wenn wir die Locale nicht ändern?) Des Weiteren müsst Ihr natürlich wieder auf die Argumente *skip* und *delim* achten.
# **Zusätzliche Ressourcen**
- [How to Import Data Into R: A Tutorial](https://www.datacamp.com/tutorial/r-data-import-tutorial?utm_source=google&utm_medium=paid_search&utm_campaignid=19589720821&utm_adgroupid=157156375351&utm_device=c&utm_keyword=&utm_matchtype=&utm_network=s&utm_adpostion=&utm_creative=684592139663&utm_targetid=dsa-2218886984060&utm_loc_interest_ms=&utm_loc_physical_ms=9043008&utm_content=&utm_campaign=230119_1-sea~dsa~tofu_2-b2c_3-row-p1_4-prc_5-na_6-na_7-le_8-pdsh-go_9-nb-e_10-na_11-na&gad_source=5&gclid=EAIaIQobChMIqYmK_a6SiAMVjBCiAx2LsBUwEAAYASAAEgLnnfD_BwE){target="_blank"} von DataCamp (engl.)
- [R Data Import/Export](https://cran.r-project.org/doc/manuals/r-devel/R-data.html){target="_blank"}
- [Cheat Sheet: Data import](https://github.com/CorrelAid/rlernen_umwelt/blob/main/cheatsheets/05_cheatsheet-import.pdf){target="_blank"} (engl.)
- [Web Scraping in R](https://app.dataquest.io/course/scraping-in-r){target="_blank"} auf DataQuest (engl.)
- [Data tidying with tidyr - Cheatsheet](https://rstudio.github.io/cheatsheets/html/tidyr.html?_gl=1*emcbuk*_ga*ODMxNjY5MzM4LjE3MjQyNDU0MTE.*_ga_2C0WZ1JHG0*MTcyNDY2NTEwMi4yLjEuMTcyNDY2NTQ5Ny4wLjAuMA..){target="_blank"}
<a class="btn btn-primary btn-back-to-main" href=`r params$links$end_session`>Session beenden</a>