Import

10.05.2019 - Valentin Gold - Reading time ~51 Minutes


Import externer Dateien

Wenn Sie Glück haben, dann liegen die Dateien bereits in einem einfachen maschinen-lesbaren Format vor, z.B. .txt, .csv, .xls(x), .doc(x). Für diese Dateien klappt das Einlesen relativ problemlos – es gibt “nur” zwei Dinge zu beachten.

1. Text Encoding

Das mit dem Encoding ist so eine Sache:

  • Jeder (String-)Character hat eine numerische Repräsentation
  • Die erste Repräsentation war ist ASCII (American Standard Code for Information Interchange) mit \(2^7\) Bits = 128 numerischen Repräsentationen, die unter http://xahlee.info/comp/ascii_table.html eingesehen werden können
  • Später wurde diese Repräsentation verschiedentlich erweitert, um mehr Character kodieren zu können
  • Das Problem: Viele verschiedene Sprachen, viele verschiedene Zeichenkodierungen
  • Die Lösung: Unicode – ein eindeutiges Zeichen für jeden möglichen bekannten wie unbekannten Character, inzwischen in Version 10.0
  • Die bekanntesten und gebräuchlichsten Encodings sind UTF-8 und UTF-16 (Unicode Transformation Format), je nachdem, wie viele Bits für die Repräsentation benötigt werden

So weit zur Theorie, aber was bedeutet das in der Praxis? In der praktischen Arbeit mit R zeigt sich, dass häufig Umlaute falsch dargestellt werden. Das betrifft nicht nur die Skripte (daher gibt es die Option “Reopen with Encoding” in RStudio), sondern auch die zu öffnenden Dateien. Wenn Sie das Encoding kennen, dann können Sie für die Tidyverse-Pakete das Argument locale() entsprechend setzen, z.B. locale = locale(encoding = "UTF-8"). Es gibt auch die nützliche Funktion guess_encoding(), mit der R das Encoding zu erraten versucht. Das klappt mal besser, mal schlechter. Ein guter Text-Editor kann auch Wunder wirken. Weitere Informationen finden Sie auf der Seite von readr.

Hier einmal am Beispiel einer Datei aus dem EuroParl Korpus.

#Import einer Datei
library(readr)
test <- read_lines("../../../daten/EuroParl/txt/de/ep-00-01-17.txt")

#Errate Encoding
guess_encoding(test)
## # A tibble: 4 x 2
##   encoding     confidence
##   <chr>             <dbl>
## 1 UTF-8              1   
## 2 windows-1252       0.81
## 3 windows-1254       0.27
## 4 windows-1250       0.22

#ergo
test <- read_lines("../../../daten/EuroParl/txt/de/ep-00-01-17.txt", 
                   locale = locale(encoding="UTF-8"))

2. Mehrere Dateien auf einmal einlesen

Oftmals liegt Ihnen nicht nur ein kompletter Textdatensatz vor, sondern die Daten sind in verschiedenen Dateien verpackt. Zum Beispiel sind die EuroParl Daten nach Sitzungen getrennt. Sie könnten jetzt natürlich anfangen, alle Dateien manuell mit einem Editor (oder wenn es sein muss auch in Word) zusammenzusetzen \(\ldots\)aber wie Sie sich sicherlich vorstellen können, ist dies äußerst mühselig und dauert ewig. Alternativ können Sie in R eine Schleife basteln, mit denen Sie die gewünschten Dateien alle einlesen. Voraussetzung ist allerdings, dass die Dateien alle gleich formatiert sind. Wenn Sie beispielsweise zwei mit Komma getrennte Dateien einlesen, sollten beide Dateien gleich viele und gleich benannte Variablen aufweisen.

Schleifen sind gar nicht so schwierig, wie es zuerst aussieht. Es gibt verschiedene Möglichkeiten, u.a.

  • “for”-Schleife
  • “while”-Schleife
  • “repeat”-Schleife

Für uns relevant sind primär nur “for”-Schleifen.

Das Prinzip ist das folgende:

Ein einfaches Beispiel

for (i in 1:10){
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

Ausgabe in ein vertikales Objekt überführen geht ebenfalls

obj.h <- NULL #Leeres Objekt

for (i in 1:10){ #Schleife
  temp <- i^2 #Anwendung Funktion
  obj.h <- cbind(obj.h, temp) #horizontal zusammenfügen
}

obj.h #Ausgabe
##      temp temp temp temp temp temp temp temp temp temp
## [1,]    1    4    9   16   25   36   49   64   81  100

Ausgabe in ein horizontales Objekt überführen geht ebenfalls

obj.v <- NULL #Leeres Objekt

for (i in 1:10){ #Schleife
  temp <- i^2 #Anwendung Funktion
  obj.v <- rbind(obj.v, temp) #vertikal zusammenfügen
}

obj.v #Ausgabe
##      [,1]
## temp    1
## temp    4
## temp    9
## temp   16
## temp   25
## temp   36
## temp   49
## temp   64
## temp   81
## temp  100

Sie können auch vorher bereits eine Liste mit Elementen erstellen, über die die Schleife laufen soll, d.h.

seq.for <- 1:10 #Sequenz

obj.v <- NULL #Leeres Objekt

for (i in seq.for){ #Schleife
  temp <- i^2 #Anwendung Funktion
  obj.v <- rbind(obj.v, temp) #vertikal zusammenfügen
}

head(obj.v) #Ausgabe
##      [,1]
## temp    1
## temp    4
## temp    9
## temp   16
## temp   25
## temp   36

Die Sequenz muss nicht numerisch sein

seq.for <- letters[1:3] #Sequenz
seq.for
## [1] "a" "b" "c"

obj.v <- NULL #Leeres Objekt

for (i in seq.for){ #Schleife
  temp <- i #Anwendung Funktion
  obj.v <- rbind(obj.v, temp) #vertikal zusammenfügen
}

head(obj.v) #Ausgabe
##      [,1]
## temp "a" 
## temp "b" 
## temp "c"

Jetzt haben wir es fast\(\ldots\) eine Sache fehlt noch: Wenn Sie mehr als ein Element übernehmen wollen (als Dataframe bzw. Tibble), dann müssen Sie das explizit anfordern, z.B.

library(tibble)
seq.for <- 1:10 #Sequenz

obj.v <- NULL #Leeres Objekt

for (i in seq.for){ #Schleife
  temp <- i^2 #Anwendung Funktion
  obj.v <- rbind(obj.v, tibble(i, temp)) #vertikal zusammenfügen
}

head(obj.v) #Ausgabe
## # A tibble: 6 x 2
##       i  temp
##   <int> <dbl>
## 1     1     1
## 2     2     4
## 3     3     9
## 4     4    16
## 5     5    25
## 6     6    36

Aus Erfahrung weiß ich, dass Schleifen oftmals irgendwo hängen und sich die Fehlersuche als schwierig herausstellt. Damit Fehler schneller gefunden werden, können Sie die Schleife manuell für einzelne Elemente laufen lassen, d.h.

seq.for <- 1:10 #Sequenz

obj.v <- NULL #Leeres Objekt

i <- seq.for[1] #erstes Element der Sequenz, d.h. i=1

#for (i in seq.for){ #Schleife (z.T. auskommentiert)
  temp <- i^2 #Anwendung Funktion
  obj.v <- rbind(obj.v, tibble(i, temp)) #vertikal zusammenfügen
#}

temp; obj.v #Zwischenschritte für i=1
## [1] 1
## # A tibble: 1 x 2
##       i  temp
##   <int> <dbl>
## 1     1     1

Es fehlt noch ein allerletzter Schritt: Falls Sie Ihre Daten nicht im gleichen Ordner gespeichert haben wie Ihr Heimatverzeichnis (was sich empfiehlt), dann müssen Sie den Pfad zur Datei angeben, ansonsten findet R die Datei nicht. Hierfür eignen sich die Funktionen aus dem Paket stringr, das wir in einer späteren Sitzung noch einmal genauer besprechen werden. Prinzipiell machen Sie nichts anderes, als den Dateipfad zusammenzubasteln.

Es ist immer gut, wenn Sie die Rohdaten in einem bestimmten Ordner ablegen und dann diesen Ordner außer für das erste Einlesen der Daten nicht mehr ansprechen. So ist sichergestellt, dass Sie immer Zugriff auf die Rohdaten haben, egal welche Datenaufbereitungen Sie vorgenommen haben. Wenn Sie einen Fehler gemacht haben, können Sie jederzeit die Rohdaten wieder erneut einlesen. Zudem könnten die Daten prinzipiell weitergegeben werden.

#Entweder so
test <- read_lines("../../../daten/EuroParl/txt/de/ep-00-01-17.txt", 
                   locale = locale(encoding="UTF-8"))

#oder so
library(stringr)
i <- "ep-00-01-17.txt"
file_path <- str_c("../../../daten/EuroParl/txt/de/", i)
test <- read_lines(file_path, 
                   locale = locale(encoding="UTF-8"))

Jetzt haben wir alle benötigten Code-Elementen von Schleifen zusammen, so dass wir mehrere Dateien auf einmal einlesen können. Wir brauchen also

  • ein R-Objekt, das die Elemente für die Schleife beinhaltet
  • ein leeres R-Objekt, in das die einzelnen Elemente überführt werden
  • die Schleife, die die Dateien einliest und im leeren R-Objekt speichert
  • im optimalen Falle können wir das resultierende Objekt validieren
#Liste aller Files im Ordner
files <- list.files("../../../daten/EuroParl/txt/de/", 
                    pattern=".txt")
length(files)
## [1] 9224

#Nur für die ersten 10 Dateien, ansonsten läuft die Schleife ewig (9224 Dateien)
files <- files[1:10]
files
##  [1] "ep-00-01-17.txt" "ep-00-01-18.txt" "ep-00-01-19.txt"
##  [4] "ep-00-01-20.txt" "ep-00-01-21.txt" "ep-00-02-02.txt"
##  [7] "ep-00-02-03.txt" "ep-00-02-14.txt" "ep-00-02-15.txt"
## [10] "ep-00-02-16.txt"

#Leeres Objekt
europarl_de <- NULL

#Für Testzwecke
i <- files[1]

#Schleife
for (i in files){
  file_path <- str_c("../../../daten/EuroParl/txt/de/", i)
  original <- read_lines(file_path)
  europarl_de <- rbind(europarl_de, tibble(i, original))
}

#Inspektion
dim(europarl_de)
## [1] 15872     2

Andere Formate

Sollten die Dateien in einem anderen Format vorliegen, dann kann es entweder auch relativ einfach sein, oder aber auch komplex werden, wie z.B. für Webseiten. Hier schauen wir uns einmal den Import verschiedener gängiger Dateiformate an.

.json-Dateien

Das JavaScript Objekt Notation (json) Format ist ein gängiges Format im Bereich der Textdaten. Relativ viele APIs geben JSON aus, z.B. die API des https://offenesparlament.de/daten/. Es gibt spezielle Pakete, die mit dem Format umgehen können.

#Paket ggf. installieren und laden
#install.packages("jsonlite")
library(jsonlite)

#Dateipfad
file <- "https://raw.githubusercontent.com/Datenschule/offenesparlament-data/master/sessions/json/001.json"

#Einlesen
json_file <- jsonlite::fromJSON(file)

#Als Tibble formatieren
json_file <- as_tibble(json_file)

#Inspektion
dim(json_file)
## [1] 251  14
names(json_file)
##  [1] "id"              "profile_url"     "sequence"       
##  [4] "sitzung"         "speaker"         "speaker_cleaned"
##  [7] "speaker_fp"      "speaker_key"     "speaker_party"  
## [10] "text"            "top"             "top_id"         
## [13] "type"            "wahlperiode"
glimpse(json_file)
## Observations: 251
## Variables: 14
## $ id              <int> 690098, 690099, 690100, 690101, 690102, 690103, …
## $ profile_url     <chr> "https://www.abgeordnetenwatch.de/profile/dr-hei…
## $ sequence        <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14…
## $ sitzung         <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ speaker         <chr> "Alterspräsident Dr. Heinz Riesenhuber", "Zurufe…
## $ speaker_cleaned <chr> "Dr. Heinz Riesenhuber", "", "Dr. Heinz Riesenhu…
## $ speaker_fp      <chr> "heinz-riesenhuber", NA, "heinz-riesenhuber", NA…
## $ speaker_key     <chr> "1699", "", "1699", "", "1775", "1699", "", "169…
## $ speaker_party   <chr> NA, NA, NA, NA, "cducsu", NA, NA, NA, NA, NA, NA…
## $ text            <chr> "Guten Morgen, meine Damen und Herren!", "Guten …
## $ top             <chr> "TOP 5 Festlegung der Zahl der Vizepräsidenten",…
## $ top_id          <int> 13729, 13729, 13729, 13729, 13729, 13729, 13729,…
## $ type            <chr> "chair", "poi", "chair", "poi", "poi", "chair", …
## $ wahlperiode     <int> 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, …

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)
json_file %>% 
  select(id, speaker, text) %>% 
  slice(1:200) %>% 
  DT::datatable(.)

Hier werden diejenigen fündig, die für Ihre Fragestellungen Plenarprotokolle der 18.Legislaturperiode benötigen. Die Daten gibt es ansonsten auch auf der Webseite des deutschen Bundestages als Textdaten zum herunterladen: https://www.bundestag.de/dokumente/protokolle/plenarprotokolle/plenarprotokolle/.

.pdf-Dateien

PDF-Dateien sind in vielen Fällen schwieriger zu importieren – nicht wegen des Imports (denn dafür gibt es gute Pakete), sondern wegen der zum Teil komischen Textformatierungen, die eine aufwendige Nachbearbeitung benötigen. Zugegeben, das Beispiel hier ist sehr extrem, aber bereits mit 2-spaltigem Format kann es große Probleme geben.

#Beispiel Modulbeschreibung für dieses Seminar
download.file(url="https://flexnow2.uni-goettingen.de/modulbeschreibungen/8742.pdf", 
              destfile="../../../modulbeschreibungen/8742.pdf", 
              mode = "wb")

#Paket ggf installieren und laden
#install.packages("pdftools")
library(pdftools)

#Einlesen der Datei
modul_pdf <- pdf_text("../../../modulbeschreibungen/8742.pdf")

#Inspektion
modul_pdf
## [1] "                                                                                   Modul M.MZS.12 - Version 4\nGeorg-August-Universität Göttingen                                                         6C\n                                                                                           3 SWS\nModul M.MZS.12: Datenerhebung in der quantitativen Sozialfor-\nschung\nEnglish title: Methods of Data Collection in Quantitative Social Research\nLernziele/Kompetenzen:                                                                     Arbeitsaufwand:\nDie Studierenden:                                                                          Präsenzzeit:\n1. erwerben vertiefte Kenntnisse zu standardisierten Erhebungsmethoden,                    31,5 Stunden\n2. können auf Basis der theoretischen und methodischen Kenntnisse Entscheidungen           Selbststudium:\nzu Anlage und Durchführung standardisierter Erhebungen fällen und                          148,5 Stunden\n3. können ein erstelltes Untersuchungskonzept in ein spezifisches Erhebungsdesign\nüberführen sowie\n4. Maßnahmen und Strategien entwickeln, um die getroffenen Entscheidungen unter\nFeldbedingungen qualitätsorientiert umzusetzen.\nLehrveranstaltungen:\n1. Probleme und Methoden der Datenerhebung (Seminar)                                       1 SWS\n2. Praktische Umsetzung einer Fragestellung durch Anwendung eines                          2 SWS\nErhebungsverfahrens (Seminar)\nPrüfung: Hausarbeit (max. 15 Seiten)                                                       6C\nPrüfungsvorleistungen:\nGruppenvortrag mit anschließender Diskussion (ca. 20 Minuten)\nPrüfungsanforderungen:\nIn dem Gruppenvortrag weisen die Studierenden nach, dass sie in der Lage sind, eine\neigene Fragestellung mittels eines adäquaten Erhebungsverfahrens umzusetzen,\nverantwortlich eine an wissenschaftlichen Standards orientierte Datenerhebung zu\norganisieren und die gewonnenen Erkenntnisse aus methodischer Sicht kritisch zu\nreflektieren und zu diskutieren. In der individuellen Hausarbeit zeigen die Studierenden\ndann, dass sie in der Lage sind die diskutierten Ergebnisse aufzubereiten und\nwissenschaftlich adäquat zu verschriftlichen.\nZugangsvoraussetzungen:                                  Empfohlene Vorkenntnisse:\nB.MZS.03 oder ein äquivalentes Modul aus einem           Grundkenntnisse der Forschungslogik quantitativer\nvergleichbaren BA-Studiengang oder M.MZS.1 oder          Sozialforschung\nM.MZS.11;\nM.MZS.12 darf nicht belegt werden, wenn M.MZS.2\nbereits erfolgreich absolviert wurde\nSprache:                                                 Modulverantwortliche[r]:\nDeutsch                                                  Prof. Dr. Steffen-Matthias Kühnel\nAngebotshäufigkeit:                                      Dauer:\njedes Sommersemester                                     1 Semester\nWiederholbarkeit:                                        Empfohlenes Fachsemester:\nzweimalig\n                                                                                                            1\n"
## [2] "Modul M.MZS.12 - Version 4\nMaximale Studierendenzahl:\n30\nBemerkungen:\nMögliche Inhalte in den Lehrveranstaltungen sind z.B.: Befragung, Inhaltsanalyse, Beobachtung,\nExperimente/Feldexperimente, Pretestmethoden.\n2\n"
cat(modul_pdf)
##                                                                                    Modul M.MZS.12 - Version 4
## Georg-August-Universität Göttingen                                                         6C
##                                                                                            3 SWS
## Modul M.MZS.12: Datenerhebung in der quantitativen Sozialfor-
## schung
## English title: Methods of Data Collection in Quantitative Social Research
## Lernziele/Kompetenzen:                                                                     Arbeitsaufwand:
## Die Studierenden:                                                                          Präsenzzeit:
## 1. erwerben vertiefte Kenntnisse zu standardisierten Erhebungsmethoden,                    31,5 Stunden
## 2. können auf Basis der theoretischen und methodischen Kenntnisse Entscheidungen           Selbststudium:
## zu Anlage und Durchführung standardisierter Erhebungen fällen und                          148,5 Stunden
## 3. können ein erstelltes Untersuchungskonzept in ein spezifisches Erhebungsdesign
## überführen sowie
## 4. Maßnahmen und Strategien entwickeln, um die getroffenen Entscheidungen unter
## Feldbedingungen qualitätsorientiert umzusetzen.
## Lehrveranstaltungen:
## 1. Probleme und Methoden der Datenerhebung (Seminar)                                       1 SWS
## 2. Praktische Umsetzung einer Fragestellung durch Anwendung eines                          2 SWS
## Erhebungsverfahrens (Seminar)
## Prüfung: Hausarbeit (max. 15 Seiten)                                                       6C
## Prüfungsvorleistungen:
## Gruppenvortrag mit anschließender Diskussion (ca. 20 Minuten)
## Prüfungsanforderungen:
## In dem Gruppenvortrag weisen die Studierenden nach, dass sie in der Lage sind, eine
## eigene Fragestellung mittels eines adäquaten Erhebungsverfahrens umzusetzen,
## verantwortlich eine an wissenschaftlichen Standards orientierte Datenerhebung zu
## organisieren und die gewonnenen Erkenntnisse aus methodischer Sicht kritisch zu
## reflektieren und zu diskutieren. In der individuellen Hausarbeit zeigen die Studierenden
## dann, dass sie in der Lage sind die diskutierten Ergebnisse aufzubereiten und
## wissenschaftlich adäquat zu verschriftlichen.
## Zugangsvoraussetzungen:                                  Empfohlene Vorkenntnisse:
## B.MZS.03 oder ein äquivalentes Modul aus einem           Grundkenntnisse der Forschungslogik quantitativer
## vergleichbaren BA-Studiengang oder M.MZS.1 oder          Sozialforschung
## M.MZS.11;
## M.MZS.12 darf nicht belegt werden, wenn M.MZS.2
## bereits erfolgreich absolviert wurde
## Sprache:                                                 Modulverantwortliche[r]:
## Deutsch                                                  Prof. Dr. Steffen-Matthias Kühnel
## Angebotshäufigkeit:                                      Dauer:
## jedes Sommersemester                                     1 Semester
## Wiederholbarkeit:                                        Empfohlenes Fachsemester:
## zweimalig
##                                                                                                             1
##  Modul M.MZS.12 - Version 4
## Maximale Studierendenzahl:
## 30
## Bemerkungen:
## Mögliche Inhalte in den Lehrveranstaltungen sind z.B.: Befragung, Inhaltsanalyse, Beobachtung,
## Experimente/Feldexperimente, Pretestmethoden.
## 2

#Metadaten der Datei
pdf_info("../../../modulbeschreibungen/8742.pdf")
## $version
## [1] "1.4"
## 
## $pages
## [1] 2
## 
## $encrypted
## [1] FALSE
## 
## $linearized
## [1] FALSE
## 
## $keys
## $keys$Creator
## [1] "Apache FOP Version 2.2.0-SNAPSHOT"
## 
## $keys$Producer
## [1] "Apache FOP Version 2.2.0-SNAPSHOT"
## 
## 
## $created
## [1] "2018-05-15 12:18:15 CEST"
## 
## $modified
## [1] "2106-02-07 07:28:15 CET"
## 
## $metadata
## [1] "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?><x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\n   <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n      <rdf:Description xmlns:dc=\"http://purl.org/dc/elements/1.1/\" rdf:about=\"\">\n         <dc:format>application/pdf</dc:format>\n         <dc:language>x-unknown</dc:language>\n         <dc:date>2018-05-15T12:18:15+02:00</dc:date>\n      </rdf:Description>\n      <rdf:Description xmlns:pdf=\"http://ns.adobe.com/pdf/1.3/\" rdf:about=\"\">\n         <pdf:Producer>Apache FOP Version 2.2.0-SNAPSHOT</pdf:Producer>\n         <pdf:PDFVersion>1.4</pdf:PDFVersion>\n      </rdf:Description>\n      <rdf:Description xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\" rdf:about=\"\">\n         <xmp:CreatorTool>Apache FOP Version 2.2.0-SNAPSHOT</xmp:CreatorTool>\n         <xmp:MetadataDate>2018-05-15T12:18:15+02:00</xmp:MetadataDate>\n         <xmp:CreateDate>2018-05-15T12:18:15+02:00</xmp:CreateDate>\n      </rdf:Description>\n   </rdf:RDF>\n</x:xmpmeta>\n<?xpacket end=\"r\"?>"
## 
## $locked
## [1] FALSE
## 
## $attachments
## [1] FALSE
## 
## $layout
## [1] "no_layout"

Optical Character Recognitation (OCR)

Was ist jedoch, wenn die Daten nicht gut eingelesen werden können, z.B. weil Bilddateien vorliegen oder das pdf-Dokument eigentlich eine Bilddatei ist?

Dann muss man OCR (Optical Character Recognition) anwenden. Das Tolle ist: Auch hierfür gibt es verfügbare Pakete, z.B.

  • abbyyR
  • tesseract

Für abbyyR benötigt man einen kostenpflichtigen Zugang zu ABBYY’s Produkten, tesseract ist kostenlos, aber dafür nicht ganz so gut. Tesseract funktioniert auf Mac und Windows Maschinen “out-of-the-box”, für andere Systeme muss tesseract erst installiert werden.

#Paket ggf. installieren und laden
#install.packages("tesseract")
library(tesseract)

#Deutsche Trainingsdaten downloaden
#tesseract_download('deu')

#In Bilddatei konvertieren
#Fehlermeldung auf meinem Rechner, siehe
#https://github.com/ropensci/pdftools/issues/38
#pdftools::pdf_convert("../../../modulbeschreibungen/8742.pdf", dpi = 600)
pdf_fonts("../../../modulbeschreibungen/8742.pdf")
## # A tibble: 3 x 4
##   name              type  embedded file 
##   <chr>             <chr> <lgl>    <chr>
## 1 Helvetica         type1 FALSE    ""   
## 2 Helvetica-Oblique type1 FALSE    ""   
## 3 Helvetica-Bold    type1 FALSE    ""

#Einlesen
modul_ocr <- ocr("../../../modulbeschreibungen/8742.png", 
                 engine = tesseract("deu"))

#Inspektion
modul_ocr
## [1] "Modul M.MZS.12 - Version 4\n\nGeorg-August-Universität Göttingen 6C\n\n3 SWS\nModul M.MZS.12: Datenerhebung in der quantitativen Sozialfor-\nschung\nEnglish title: Methods of Data Collection in Quantitative Social Research\nLernziele/Kompetenzen: Arbeitsaufwand:\nDie Studierenden: Präsenzzeit:\n1. erwerben vertiefte Kenntnisse zu standardisierten Erhebungsmethoden, 31,5 Stunden\n2. können auf Basis der theoretischen und methodischen Kenntnisse Entscheidungen Selbststudium:\nzu Anlage und Durchführung standardisierter Erhebungen fällen und 148,5 Stunden\n3. können ein erstelltes Untersuchungskonzept in ein spezifisches Erhebungsdesign\nüberführen sowie\n4. Maßnahmen und Strategien entwickeln, um die getroffenen Entscheidungen unter\nFeldbedingungen qualitätsorientiert umzusetzen.\nLehrveranstaltungen:\n1. Probleme und Methoden der Datenerhebung (Seminar) 1 SWS\n2. Praktische Umsetzung einer Fragestellung durch Anwendung eines 2 SWS\nErhebungsverfahrens (Seminar)\nPrüfung: Hausarbeit (max. 15 Seiten) 6C\nPrüfungsvorleistungen:\nGruppenvortrag mit anschließender Diskussion (ca. 20 Minuten)\nPrüfungsanforderungen:\nIn dem Gruppenvortrag weisen die Studierenden nach, dass sie in der Lage sind, eine\neigene Fragestellung mittels eines adäquaten Erhebungsverfahrens umzusetzen,\nverantwortlich eine an wissenschaftlichen Standards orientierte Datenerhebung zu\norganisieren und die gewonnenen Erkenntnisse aus methodischer Sicht kritisch zu\nreflektieren und zu diskutieren. In der individuellen Hausarbeit zeigen die Studierenden\ndann, dass sie in der Lage sind die diskutierten Ergebnisse aufzubereiten und\nwissenschaftlich adäquat zu verschriftlichen.\nZugangsvoraussetzungen: Empfohlene Vorkenntnisse:\nB.MZS.03 oder ein äquivalentes Modul aus einem Grundkenntnisse der Forschungslogik quantitativer\nvergleichbaren BA-Studiengang oder M.MZS.1 oder [Sozialforschung\nM.MZS.11;\nM.MZS.12 darf nicht belegt werden, wenn M.MZS.2\nbereits erfolgreich absolviert wurde\nSprache: Modulverantwortlichef[r]:\nDeutsch Prof. Dr. Steffen-Matthias Kühnel\nAngebotshäufigkeit: Dauer:\njedes Sommersemester 1 Semester\nWiederholbarkeit: Empfohlenes Fachsemester:\nzweimalig\n\n1\n"