An R package to analyze the parliamentary records of the 19th legislative period of the Bundestag, the German parliament.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
flavis 77f79f0d86 change spelling of greens fraction, fix parsing issue in comments table 4 anni fa
R change spelling of greens fraction, fix parsing issue in comments table 4 anni fa
inst rename some columns to english 4 anni fa
man add rotatelab to bar_plot_fractions 4 anni fa
vignettes change spelling of greens fraction, fix parsing issue in comments table 4 anni fa
.Rbuildignore fix vignette 4 anni fa
.gitignore refactor again because of check complaining 4 anni fa
DESCRIPTION refactor bar_plot_fractions and add error handling 4 anni fa
NAMESPACE refactor rede -> speech, redner -> speaker 4 anni fa
README.md update README.md 4 anni fa

README.md

How to develop

# everything works with devtools (loads some other packages too)
library(devtools)

# reload all package functions
load_all()

#write to CSV files to speed up loading
tables <- read_all()
tables <- repair(tables)
write_to_csv(tables)

We NEVER use source(...), etc.! Also NEVER use library(...). But to add new packages (as dependency), use:

use_package("my-good-old-package")

To make package imports available, you have to add them to R/hateimparlament-package.R as @import <package>.

To reload / create documentation (calls roxygen)

document()

Build vignettes

rmarkdown::render("vignettes/bla.Rmd")

Download

Before parsing, fetch.R must be run to download all protocols.

fetch_all("../inst/records/") # path to directory where records should be stored

Parsing

tables

parse.R parses all downloaded logs and creates 5 tibbles. repair.R then cleans up the errors in these tibbles.

read_all("../inst/records/") %>% repair()

Speaker

structure: id , first_name , last_name , fraction , title , role_short, role_long.

Obtained from the <speaker list> entry at the end of the transcripts.

Speeches

Structure: id , speaker

The speeches id is specified in the protocol and is unique.A speech is a <speech> entry in the session history. A speech always has a main speaker (the one standing at the front of the lectern).

Within a speech, there can be different speech entries:

  • Comments: Applause, interjections, etc.
  • Speeches: Typically mainly the main speaker, but also interjections. These are stored in the talks, comments and applause tables when parsing.

Talks

Structure: speech_id , speaker , content.

These are the actual talk entries that appear within speeches.

  • speech_id: the speech in which the contribution appears.
  • speaker: The speaker of the speech entry.
  • content: The content of the speech.

###comments

These are the interjections that appear during the speeches.

They have the following structure:

  • speech_id: The speech that was interrupted.
  • on_speaker: The speaker who was interrupted.
  • fraction
  • commenter: The person who interrupted the speech.
  • comment: The content of the comment.

###applause

The logical table shows which party applauded for which speaker with explicit speech and which did not.

structure: speech_id, on_speaker, CDU_CSU, SPD, FDP, DIE_LINKE, BUENDNIS_90_DIE_GRUENEN, AfD

Analysis

analysis.R provides some functions to analyze the “Plenarprotokolle” and to create plots.

In the vignettes you can find different analyses of the protocols, for example:

  • “Who talks the most?”
  • “Which party gives the most speeches?”
  • “Which party comments the most on which parties?”
  • “When are which topics discussed the most?”
  • ...