\documentclass{beamer}

\usepackage[utf8]{inputenc}

\usepackage{listings}
\lstdefinestyle{mystyle}{
    commentstyle=\color{gray},
    keywordstyle=\color{black},
    numberstyle=\tiny\color{gray},
    stringstyle=\color{black},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2
}
 
\lstset{style=mystyle}
\begin{document}

\begin{frame}
    \frametitle{Implementierung}
    \tableofcontents
\end{frame}

\section{Herunterladen der Protokolle}
\begin{frame}
\frametitle{Herunterladen der Protokolle}

Funktion: \lstinline{fetch_all(download_dir)}

\begin{itemize}[<+->]
    \item Protokolle als XML-Dateien von \url{bundestag.de} herunterladen und
        in \lstinline{download_dir} speichern.
    \item Problem: Maschinenunfreundliche Webseite
    \item Lösung: Source Code von \url{bundestag.de} nach Schnittstelle durchsuchen
\end{itemize}
    
\end{frame}
\section{Konvertierung der XML-Dateien in tibbles}

\begin{frame}
    \frametitle{Konvertierung der XML-Dateien in tibbles}
    Funktion: \lstinline{read_all(filepath)}
    \begin{itemize}[<+->]
        \item Liest jede XML-Datei in angegebenem Dateipfad einzeln
        \item Extrahiert Sitzungsdatum, Rednerliste und Sitzungsverlauf
        \item Konvertiert Rednerliste in eine R Liste.
        \item Iteriert durch den Sitzungsverlauf, extrahiert Reden,
            Redebeiträge, Kommentare und Beifall
        \item Kombiniert alle Redner, Reden, Redebeiträge, Kommentare und Beifall
            zu 5 tibbles und gibt benannte Liste zurück.
    \end{itemize}
\end{frame}

\begin{frame}[fragile]
    \frametitle{Tabellen}
    Ergebnis der Konvertierung ist eine benannte Liste \lstinline{res} mit tibbles:
    \pause
    \begin{lstlisting}[language=R,basicstyle=\tiny\ttfamily]
> res$speaker
# A tibble: 1,025 x 7
  id      prename            lastname   fraction title role_short   role_long
  <chr>   <chr>              <chr>      <chr>    <chr> <chr>        <chr>
1 110021  Alterspraesident D Otto Solms NA       NA    Alterspraesi Alterspraesi
2 110032  Carsten            Schneider  SPD      NA    NA           NA
# with 1,023 more rows
\end{lstlisting}
\pause
    \begin{lstlisting}[language=R,basicstyle=\tiny\ttfamily]
> res$speeches
# A tibble: 25,068 x 3
  id         speaker  date
  <chr>      <chr>    <date>
1 ID19100100 11002190 2017-10-24
2 ID19100200 11002190 2017-10-24
# with 25,066 more rows
\end{lstlisting}
\pause
    \begin{lstlisting}[language=R,basicstyle=\tiny\ttfamily]
> res$talks
# A tibble: 63,663 x 3
  speech_id  speaker  content
  <chr>      <chr>    <chr>
1 ID19100100 11002190 "Guten Morgen, liebe Kolleginnen und Kollegen! Nehmen Sie
2 ID19100300 11003218 "Sehr geehrter Herr Praesident! Sehr geehrte Kolleginnen u
# with 63,661 more rows
\end{lstlisting}

\end{frame}

\begin{frame}[fragile]
    \begin{lstlisting}[language=R,basicstyle=\tiny\ttfamily]
> res$comments
# A tibble: 83,649 x 5
  speech_id  on_speaker fraction      commenter       content
  <chr>      <chr>      <chr>         <chr>           <chr>
1 ID19100300 11003218   BUENDNIS 90/D Katrin Goering  Was?
2 ID19100300 11003218   CDU/CSU       Volker Kauder   Warum habt ihr das bei Ge
# with 83,647 more rows
\end{lstlisting}
\pause
    \begin{lstlisting}[language=R,basicstyle=\tiny\ttfamily]
> res$applause
# A tibble: 89,586 x 8
  speech_id  on_speaker CDU_CSU SPD   FDP   DIE_LINKE BUENDNIS_90_DIE_GRU  AfD
  <chr>      <chr>      <lgl>   <lgl> <lgl> <lgl>     <lgl>                <lgl>
1 ID19100300 11003218   FALSE   TRUE  FALSE TRUE      TRUE                 FALSE
2 ID19100300 11003218   FALSE   TRUE  TRUE  TRUE      FALSE                FALSE
# with 89,584 more rows\end{lstlisting}
\end{frame}

\section{Reparieren von Fehlern}
\begin{frame}
    \frametitle{Reparieren von Fehlern}

    Problem: Uneinheitliche Schreibweisen / Fehler in den Rednerlisten.

    \pause
    Lösung: Funktion: \lstinline{repair_speaker(speakers)}
    \pause
    \begin{itemize}[<+->]
        \item Erhält \lstinline{tibble} von Rednern
        \item Entfernt Redner mit ungültigen, doppelt vergebenen IDs
        \item Vereinheitlicht Schreibweisen der Fraktionen, Namen und Titel der Redner
    \end{itemize}

\end{frame}

\begin{frame}
    \frametitle{Reparieren von Fehlern}
    Problem: Namen in Kommentaren Rednern aus Rednertabelle zuordnen

    \pause
    Lösung: Funktion \lstinline{repair_comments(comments, speakers)}
    \begin{itemize}
        \item Erstellt für jeden Redner einen Regulären Ausdruck aus dem Namen
        \item Sucht für jeden Kommentar nach dem entsprechenden Eintrag in der
            Rednertabelle
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Reparieren von Fehlern}
    Beide Reparaturschritte werden in der Funktion \lstinline{repair} zusammengefasst.
\end{frame}

\section{Analyse}

\begin{frame}
    \frametitle{Analyse}
    Stelle Hilfsfunktionen zur Analyse der Daten zur Verfügung:
    \begin{itemize}[<+->]
        \item \lstinline{bar_plot_fractions}: Erstellt ein Balkendiagramm aus einer Tabelle
            mit Fraktionsdaten
        \item \lstinline{find_word}: Fügt in der Redebeiträgetabelle zu jedem Redebeitrag
            die Häufigkeit eines Regulären Ausdrucks hinzu.
        \item \lstinline{word_usage_by_date}: Zählt an welchen Daten (Tagen) ein regulärer Ausdruck
            wie oft verwendet wird.
        \item \lstinline{join_speaker}: Fügt einer Tabelle mit Spalte \lstinline{speaker} die
            enstprechenden Informationen aus der Rednertabelle hinzu.
    \end{itemize}
\end{frame}

\end{document}
