Dieses Dokument beschreibt die Vorprozessierung und explorative Analyse des Datensatzes, der unter srf.ch interaktiv visualisiert und unter diesem Link als CSV-Datei zum Download angeboten wird.
SRF Data legt Wert darauf, dass die Datenvorprozessierung und -Analyse nachvollzogen und überprüft werden kann. SRF Data glaubt an das Prinzip offener Daten, aber auch offener und nachvollziehbarer Methoden. Zum anderen soll es Dritten ermöglicht werden, auf dieser Vorarbeit aufzubauen und damit weitere Auswertungen oder Applikationen zu generieren.
Die Vorprozessierung und Analyse wurde im Statistikprogramm R vorgenommen. Die Endprodukte des verwendeten Scripts sind:
output/seco_dual_use_for_vis.csv
: Wird für die Visualisierung verwendet, reduzierte Menge von Attributenoutput/seco_dual_use.csv
: Vollständiger Datensatz, der zum Download angeboten wird. Dieser Datensatz wird im folgenden Kapitel beschrieben.Das zugrunde liegende Script sowie die prozessierten Daten können unter diesem Link heruntergeladen werden. Durch Ausführen von preprocessing.Rmd
kann der hier beschriebene Prozess nachvollzogen und dieses Dokument generiert werden. Dabei werden Daten aus dem Ordner input
eingelesen und Ergebnisse in den Ordner output
geschrieben.
Der Code für die vorliegende Datenprozessierung und die Visualisierung ist unter https://github.com/srfdata/2017-01-dual-use zur freien Verwendung verfügbar.
2017-01-dual-use von SRF Data ist lizenziert unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 4.0 International Lizenz.
Code & Daten von SRF Data sind unter https://srfdata.github.io verfügbar.
Die veröffentlichten Informationen sind sorgfältig zusammengestellt, erheben aber keinen Anspruch auf Aktualität, Vollständigkeit oder Richtigkeit. Es wird keine Haftung übernommen für Schäden, die durch die Verwendung dieses Scripts oder der daraus gezogenen Informationen entstehen. Dies gilt ebenfalls für Inhalte Dritter, die über dieses Angebot zugänglich sind.
seco_dual_use.csv
Attribut | Typ | Beschreibung |
---|---|---|
(Erste Spalte, keine Bezeichnung) | Integer | Identifikator, eindeutig. |
GN | Integer | Geschäftsnummer in der Seco-Datenbank, zwei unterschiedliche Formate je nach Herkunfstdatei. |
UnterGN | Integer | Durchnummerierung von Geschäften mit gleicher GN. |
Datum | Date | Datum der Bewilligung im Format YYYY-MM-DD. Ab 2016 nur noch jeweils der erste Tag des Quartals, in dem die Bewilligung erteilt wurde |
Land | String | Land, in das die Güter exportiert werden. |
Wert | Float | Wert der Güter in Schweizer Franken. |
Verzeichnis | String | Kürzel für Verzeichnis, siehe unten. |
Signatur | String | Code, der die Kategorie/Art der gehandelten Güter kodiert, aufgeschlüsselt in Haupttyp, Untertyp, Zusatz, siehe Beispiel unten. Achtung: Es kann sein, dass ein Geschäft zwei Signaturen aufweist. Dann wird nur die erste zur Ermittelung der Teilsignaturen verwendet. |
Haupttyp | String | Erste Hierarchiestufe der Signatur, entspricht Überkategorien in den einzelnen Verzeichnissen. |
Untertyp | String | Zweite Hierarchiestufe der Signatur, entspricht Unterkategorien in den einzelnen Verzeichnissen. |
Zusatz | String | Rest der Signatur. |
Herkunftsdatei | String | Originaldatei auf der Website des SECO |
Folgende Werte sind möglich:
Die in der Visualisierung mit hochgestellten Buchstaben referenzierte Zusammenfassung der Verzeichnisse (“Dual-Use-Güter”, “Besondere militärische Güter” und “Andere Güter”) wurde von SRF Data vorgenommen und ist unter output/verzeichnis_beschreibung.csv
einsehbar.
Die in der Visualisierung dargestellte “Kategorie” entspricht dem Haupttyp. Die Übersetzung von Haupttyp wurde von SRF Data basierend auf amtlichen Dokumenten (Verordnungen, Verzeichnisse) vorgenommen und ist unter output/signatures_verzeichnis_haupttyp_beschreibung.csv
einsehbar.
GKV 6A002.c1 ergibt…
In der Gesamtheit: “Ausrüstung zur ‘direkten Bildwandlung’ mit eingebauten Bildverstärkerröhren” (gemäss Anhang 1 + 2 GKV, 2012).
Der Datensatz für die Jahre 2012, 2013 und 2014 basiert ursprünglich auf zwei verschiedenen, von SECO im Januar 2015 publizierten Datensätzen:
input/tracker.xlsx
input/elic.xlsx
Der Datensatz für das Jahr 2015 findet sich auf der neuen Übersichtsseite unter dem Reiter 2015 -> im Ordner input/elic_2015_new.xlsx
.
Der Datensatz für das Jahr 2016 findet sich auf der neuen Übersichtsseite unter dem Reiter 2016 -> im Ordner input/elic_2016_*.xlsx
. Er ist auf vier Excel-Files (für jedes Quartal) aufgesplittet.
Laut Aussage des SECO kann die veröffentlichte Bewilligungs-Datenbank Mehrfachbewilligungen enthalten. Gewisse Aufträge sind so umfassend, dass ihre Ausführung mehrere Jahre dauert. Weil eine Exportbewilligung aber nur ein Jahr gültig ist, tauchen in den Daten vereinzelt auch Geschäfte auf, die schon vor 2012 bewilligt wurden. Solche Mehrfachbewilligungen führen dazu, dass Aufträge in der Statistik mehrfach vorkommen können.
Vom SECO wurde SRF Data eine Liste mit Geschäften übergeben, die schon vor 2012 erstmals bewilligt wurden und ihren Weg wiederum in die Datenbank fanden. Es handelt sich um folgende Geschäftsnummern:
Geschäftsnummer | Beschreibung | Auftragsvolumen |
---|---|---|
8001226 (ELIC) | Flugzeuge und Simulatoren nach Indien | rund 155 Mio. CHF |
14476 | Flugzeuge nach Indien | rund 165 Mio. CHF |
16043 | Flugzeuge nach Indien | rund 80 Mio. CHF |
12332 | Flugzeuge nach Saudi-Arabien | rund 1 Mia. CHF |
8001302 (ELIC) | Simulatoren nach Katar | rund 345 Mio. CHF |
Für die Jahre 2015 und 2016 liegen keine solchen Informationen vor.
if(!require(dplyr)) {
install.packages("dplyr", repos="http://cran.us.r-project.org")
require(dplyr)
}
## Loading required package: 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
if(!require(tidyr)) {
install.packages("tidyr", repos="http://cran.us.r-project.org")
require(tidyr)
}
## Loading required package: tidyr
if(!require(ggplot2)) {
install.packages("ggplot2", repos="http://cran.us.r-project.org")
require(ggplot2)
}
## Loading required package: ggplot2
# wenn es probleme mit rjava gibt, am besten diesen weg befolgen: http://stackoverflow.com/questions/23469061/why-does-rjava-not-work-on-ubuntu-14-04-using-openjdk-7 (openjdk-8-jdk statt 7!)
if(!require(xlsx)) {
install.packages("xlsx", repos="http://cran.us.r-project.org")
require(xlsx)
}
## Loading required package: xlsx
## Loading required package: rJava
## Loading required package: xlsxjars
require(scales)
## Loading required package: scales
options(scipen = 999)
# Funktion zur Klassifikation von Signaturen
source("classify.r")
# Funktion zum Formatieren von Zahlen
source("numberFormatter.r")
# ACHTUNG: Das Reinladen der XLSX-Dateien dauert seine Zeit...
tracker_raw <- read.xlsx(file = "input/tracker.xlsx", sheetIndex = 1, colClasses = "character", stringsAsFactors = F)
# Spaltentypen setzen und umbenennen
tracker_raw <- tracker_raw %>%
mutate(Bewilligungsdatum = as.Date(Bewilligungsdatum, "%Y-%m-%d"), Geschäftsnummer = as.integer(Geschäftsnummer), Wert = as.numeric(Wert), Quartal = paste(format(Bewilligungsdatum, "%y"),
sprintf("%02i", (as.POSIXlt(Bewilligungsdatum)$mon) %/% 3L + 1L),
sep="/")) %>%
rename(GN = Geschäftsnummer, Datum = Bewilligungsdatum, Land = Endverbraucherland)
# überprüfen
str(tracker_raw)
## 'data.frame': 4718 obs. of 15 variables:
## $ GN : int 11738 11746 11747 11747 11747 11747 11748 11693 11710 11749 ...
## $ Datum : Date, format: "2012-01-04" "2012-01-04" ...
## $ Land : chr "China" "China" "Thailand" "Thailand" ...
## $ AG..GKV. : chr NA NA NA NA ...
## $ MTCR..GKV. : chr NA NA NA NA ...
## $ NSGI..GKV. : chr NA NA NA NA ...
## $ NSGII..GKV.: chr "2B201b" "2B201a1" NA NA ...
## $ WA..GKV. : chr "2B001c" "2B001b2" NA NA ...
## $ ML..GKV. : chr NA NA NA NA ...
## $ Anhang.5.1 : num NA NA 5.1 5.1 5.1 5.1 NA NA NA NA ...
## $ Anhang.5.2 : num NA NA NA NA NA NA NA NA NA NA ...
## $ Anhang.5.3 : logi NA NA NA NA NA NA ...
## $ ChKV : chr NA NA NA NA ...
## $ Wert : num 492552 341164 7616 6241 1174 ...
## $ Quartal : chr "12/01" "12/01" "12/01" "12/01" ...
elic_raw <- read.xlsx(file = "input/elic.xlsx", sheetIndex = 1, colClasses = "character", stringsAsFactors = F)
# Spaltentypen setzen und umbenennen
elic_raw <- elic_raw %>%
mutate(Ausstellungsdatum = as.Date(Ausstellungsdatum, "%d.%m.%Y"), Geschäftsnummer = as.integer(Geschäftsnummer), Position...Wert..CHF. = as.numeric(Position...Wert..CHF.), Quartal = paste(format(Ausstellungsdatum, "%y"), sprintf("%02i", (as.POSIXlt(Ausstellungsdatum)$mon) %/% 3L + 1L),
sep="/")) %>%
rename(GN = Geschäftsnummer, Datum = Ausstellungsdatum, Land = Bestimmungs..Lieferland, Wert = Position...Wert..CHF.)
# überprüfen
str(elic_raw)
## 'data.frame': 873 obs. of 7 variables:
## $ GN : int 8000002 8000004 8000009 8000012 8000010 8000013 8000016 8000015 8000026 8000024 ...
## $ Datum : Date, format: "2014-02-07" "2014-02-11" ...
## $ Land : chr "China, Volksrepublik" "Russische Föderation" "Singapur" "Slowenien" ...
## $ Position...Güterart: chr "Dual Use Güter" "Dual Use Güter" "Dual Use Güter\nDual Use Güter" "Besondere militärische Güter" ...
## $ Position...EKN : chr "2B120" "6A002.c1" "2B001.b1\n2B201.a1" "ML15" ...
## $ Wert : num 1950000 2098305 209609 128000 43188 ...
## $ Quartal : chr "14/01" "14/01" "14/01" "14/01" ...
# elic 2015
elic_2015 <- read.xlsx(file = "input/elic_2015_new.xlsx", sheetIndex = 1, colClasses = "character", stringsAsFactors = F)
# Spaltentypen setzen und umbenennen
elic_2015 <- elic_2015 %>%
mutate(Ausstellungsdatum = as.Date(Ausstellungsdatum, "%d.%m.%Y"), Geschäftsnummer = as.integer(Geschäftsnummer), Wert..CHF. = as.numeric(Wert..CHF.), Quartal = paste(format(Ausstellungsdatum, "%y"), sprintf("%02i", (as.POSIXlt(Ausstellungsdatum)$mon) %/% 3L + 1L),
sep="/")) %>%
rename(GN = Geschäftsnummer, Datum = Ausstellungsdatum, Land = Bestimmungsland, Wert = Wert..CHF., Position...Güterart = Güterart, Position...EKN = EKN, Art = Geschäftsart) %>%
filter(Art == "Ausfuhr") %>%
select(-Art)
# 2016
elic_2016_1 <- read.xlsx(file = "input/elic_2016_1.xlsx", sheetIndex = 1, colClasses = "character", stringsAsFactors = F)
elic_2016_1 <- elic_2016_1 %>%
mutate(Datum = as.Date("2016-01-01 00:00:01")) %>%
mutate(Quartal = paste(format(Datum, "%y"), sprintf("%02i", (as.POSIXlt(Datum)$mon) %/% 3L + 1L), sep="/")) %>%
select(GN = Geschäftsnummer, Datum, Quartal, Land = Bestimmungsland, Wert = Wert..CHF., Position...Güterart = Güterart, Position...EKN = Exportkontrollnummer..EKN., Art = Richtung) %>%
filter(Art == "Ausfuhr") %>%
select(-Art)
elic_2016_2 <- read.xlsx(file = "input/elic_2016_2.xlsx", sheetIndex = 1, colClasses = "character", stringsAsFactors = F)
elic_2016_2 <- elic_2016_2 %>%
mutate(Datum = as.Date("2016-04-01 00:00:01")) %>%
mutate(Quartal = paste(format(Datum, "%y"), sprintf("%02i", (as.POSIXlt(Datum)$mon) %/% 3L + 1L), sep="/")) %>%
select(GN = Geschäftsnummer, Datum, Quartal, Land = Bestimmungsland, Wert = Wert..CHF., Position...Güterart = Güterart, Position...EKN = Exportkontrollnummer..EKN., Art = Richtung) %>%
filter(Art == "Ausfuhr") %>%
select(-Art)
elic_2016_3 <- read.xlsx(file = "input/elic_2016_3.xlsx", sheetIndex = 1, colClasses = "character", stringsAsFactors = F)
elic_2016_3 <- elic_2016_3 %>%
mutate(Datum = as.Date("2016-07-01 00:00:01")) %>%
mutate(Quartal = paste(format(Datum, "%y"), sprintf("%02i", (as.POSIXlt(Datum)$mon) %/% 3L + 1L), sep="/")) %>%
select(GN = Geschäftsnummer, Datum, Quartal, Land = Bestimmungsland, Wert = Wert..CHF., Position...Güterart = Güterart, Position...EKN = Exportkontrollnummer..EKN., Art = Richtung) %>%
filter(Art == "Ausfuhr") %>%
select(-Art)
# manuelle Fehlerbehebung: Für EKN 5.3 gibt es keine offizielle Definition, gemeint ist wohl 5.1
elic_2016_3[elic_2016_3$GN == 8010868 & elic_2016_3$Position...EKN == 5.3,]$Position...EKN <- 5.1
elic_2016_4 <- read.xlsx(file = "input/elic_2016_4.xlsx", sheetIndex = 1, colClasses = "character", stringsAsFactors = F)
elic_2016_4 <- elic_2016_4 %>%
mutate(Datum = as.Date("2016-10-01 00:00:01")) %>%
mutate(Quartal = paste(format(Datum, "%y"), sprintf("%02i", (as.POSIXlt(Datum)$mon) %/% 3L + 1L), sep="/")) %>%
select(GN = Geschäftsnummer, Datum, Quartal, Land = Bestimmungsland, Wert = Wert..CHF., Position...Güterart = Güterart, Position...EKN = Exportkontrollnummer..EKN., Art = Richtung) %>%
filter(Art == "Ausfuhr") %>%
select(-Art)
elic_raw <- rbind(elic_raw, elic_2015, elic_2016_1, elic_2016_2, elic_2016_3, elic_2016_4)
rm(elic_2015)
Duplikate: Mehrere Einträge unter der gleichen Geschäftsnummer
Wie viele “Duplikate” gibt es?
dim(tracker_raw)[1] - dim(distinct(select(tracker_raw, GN)))[1]
## [1] 374
dim(elic_raw)[1] - dim(distinct(select(elic_raw, GN)))[1]
## [1] 1903
# dim(elic_2015)[1] - dim(distilnct(select(elic_2015, GN)))[1]
Diese werden nicht aggregiert sondern so belassen, jedoch durchnummiert (Generierung neue Spalte UnterGN)
tracker_summarized <- tracker_raw %>%
group_by(GN, Quartal, Land) %>%
mutate(UnterGN = row_number())
elic_summarized <- elic_raw %>%
group_by(GN, Quartal, Land) %>%
mutate(UnterGN = row_number())
rm(tracker_raw)
rm(elic_raw)
Wie viele Einträge haben in der Tracker-Applikation zwei Signaturen?
dim(filter(tracker_summarized, NSGII..GKV. != "", WA..GKV. != ""))[1]
## [1] 757
Wie viele davon sind solche, die mit der gleichen Obersignatur (sprich: dem gleichen Haupt- und Untertyp, siehe unten) beginnen?
dim(filter(tracker_summarized, NSGII..GKV. != "", WA..GKV. != "", substr(NSGII..GKV.,1,2) == substr(WA..GKV.,1,2)))[1]
## [1] 757
Wie viele Geschäfte haben keine Signatur?
tracker_without_signature <- tracker_summarized %>%
gather(Variable, Value, AG..GKV.:ChKV) %>%
group_by(GN, Quartal, Land, UnterGN) %>%
filter(all(is.na(Value) | Value == "NA")) %>%
slice(1)
dim(tracker_without_signature)[1]
## [1] 99
ELIC?
dim(elic_summarized[elic_summarized$Position...EKN == "",])[1]
## [1] 0
# ELIC: Umbenennen und Spalte hinzufügen
elic_restructured <- elic_summarized %>%
rename(Signatur = Position...EKN, "Verordnung/Typ ELIC" = Position...Güterart) %>%
mutate("Verordnung/Typ" = NA)
# Tracker: Kondensieren (breit nach lang)
tracker_restructured <- tracker_summarized %>%
gather(Variable, Value, AG..GKV.:ChKV) %>% # breit nach lang
group_by(GN, Quartal, Land, UnterGN) %>%
filter(if(all(is.na(Value) | Value == "NA")) row_number() == 1 else (!is.na(Value) | Value == "NA")) %>% # wenn Geschäft gar keine Signatur hat, dann nur den ersten nehmen, sonst alle nehmen, die einen Wert haben (für solche, die mehr als eine Signatur haben)
summarise_each(funs(paste(unique(.), collapse = "\n"))) %>% # alle eindeutigen Werte pro Gruppe mit einem newline-Operator zusammenfügen
mutate(Wert = as.numeric(Wert)) # Wert muss numerisch sein
# Tracker: Einträge, für die keine Signatur bekannt ist, umbenennen, und eine leere Spalte für Kombination mit ELIC hinzufügen, sowie Spalten umbennenen
tracker_restructured <- tracker_restructured %>%
mutate(Variable = ifelse(is.na(Value) | Value == "NA","unbekannt", Variable), Value = ifelse(is.na(Value) | Value == "NA","unbekannt", Value), "Verordnung/Typ ELIC" = NA) %>%
rename("Verordnung/Typ" = Variable, "Signatur" = Value)
Zwischenbilanz
str(as.data.frame(elic_restructured))
## 'data.frame': 6703 obs. of 9 variables:
## $ GN : chr "8000002" "8000004" "8000009" "8000012" ...
## $ Datum : Date, format: "2014-02-07" "2014-02-11" ...
## $ Land : chr "China, Volksrepublik" "Russische Föderation" "Singapur" "Slowenien" ...
## $ Verordnung/Typ ELIC: chr "Dual Use Güter" "Dual Use Güter" "Dual Use Güter\nDual Use Güter" "Besondere militärische Güter" ...
## $ Signatur : chr "2B120" "6A002.c1" "2B001.b1\n2B201.a1" "ML15" ...
## $ Wert : num 1950000 2098305 209609 128000 43188 ...
## $ Quartal : chr "14/01" "14/01" "14/01" "14/01" ...
## $ UnterGN : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Verordnung/Typ : logi NA NA NA NA NA NA ...
str(as.data.frame(tracker_restructured))
## 'data.frame': 4718 obs. of 9 variables:
## $ GN : int 10263 11180 11435 11435 11663 11666 11667 11671 11693 11710 ...
## $ Quartal : chr "12/01" "12/02" "13/01" "13/01" ...
## $ Land : chr "Iran, Islamische Republik (SG)" "China" "Gabun" "Gabun" ...
## $ UnterGN : int 1 1 1 2 1 1 1 1 1 1 ...
## $ Datum : chr "2012-03-22" "2012-05-25" "2013-02-25" "2013-02-25" ...
## $ Wert : num 1790 550000 650 4200 158000 ...
## $ Verordnung/Typ : chr "unbekannt" "NSGI..GKV." "Anhang.5.1" "Anhang.5.1" ...
## $ Signatur : chr "unbekannt" "0B001b14" "5.1" "5.1" ...
## $ Verordnung/Typ ELIC: logi NA NA NA NA NA NA ...
rm(tracker_summarized)
rm(elic_summarized)
seco_dual_use <- rbind(as.data.frame(elic_restructured), as.data.frame(tracker_restructured))
str(seco_dual_use)
## 'data.frame': 11421 obs. of 9 variables:
## $ GN : chr "8000002" "8000004" "8000009" "8000012" ...
## $ Datum : Date, format: "2014-02-07" "2014-02-11" ...
## $ Land : chr "China, Volksrepublik" "Russische Föderation" "Singapur" "Slowenien" ...
## $ Verordnung/Typ ELIC: chr "Dual Use Güter" "Dual Use Güter" "Dual Use Güter\nDual Use Güter" "Besondere militärische Güter" ...
## $ Signatur : chr "2B120" "6A002.c1" "2B001.b1\n2B201.a1" "ML15" ...
## $ Wert : num 1950000 2098305 209609 128000 43188 ...
## $ Quartal : chr "14/01" "14/01" "14/01" "14/01" ...
## $ UnterGN : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Verordnung/Typ : chr NA NA NA NA ...
rm(tracker_restructured)
rm(elic_restructured)
Wie viele Länder gibt es?
laender <- arrange(seco_dual_use, Land)
# unique(laender$Land) # der Lesbarkeit halber auskommentiert
length(unique(laender$Land))
## [1] 167
Manuell umschreiben gemäss SRF-Länderliste.
seco_dual_use$Land[seco_dual_use$Land == "Bosnien und Herzegowina"] <- "Bosnien-Herzegowina"
seco_dual_use$Land[seco_dual_use$Land == "Pakistan (CA)"] <- "Pakistan"
seco_dual_use$Land[seco_dual_use$Land == "Indien (CA)"] <- "Indien"
seco_dual_use$Land[seco_dual_use$Land == "China, Taiwan"] <- "Taiwan"
seco_dual_use$Land[seco_dual_use$Land == "China, Volksrepublik"] <- "China"
seco_dual_use$Land[seco_dual_use$Land == "Ekuador"] <- "Ecuador"
seco_dual_use$Land[seco_dual_use$Land == "Großbritannien (Vereinigtes Königreich)"] <- "Grossbritannien"
seco_dual_use$Land[seco_dual_use$Land == "Hongkong"] <- "Hong Kong"
seco_dual_use$Land[seco_dual_use$Land == "Iran, Islamische Republik"] <- "Iran"
seco_dual_use$Land[seco_dual_use$Land == "Iran, Islamische Republik (SG)"] <- "Iran"
seco_dual_use$Land[seco_dual_use$Land == "Myanmar (Union)"] <- "Myanmar (Birma)"
seco_dual_use$Land[seco_dual_use$Land == "Qatar"] <- "Katar"
seco_dual_use$Land[seco_dual_use$Land == "Serbia"] <- "Serbien"
seco_dual_use$Land[seco_dual_use$Land == "Slowakei, Slowakische Republik"] <- "Slowakische Republik"
seco_dual_use$Land[seco_dual_use$Land == "Taiwan, Provinz von China"] <- "Taiwan"
seco_dual_use$Land[seco_dual_use$Land == "Vereinigte Staaten"] <- "Vereinigte Staaten von Amerika"
seco_dual_use$Land[seco_dual_use$Land == "Libysch-Arabische Dschamahirija"] <- "Libyen"
seco_dual_use$Land[seco_dual_use$Land == "Russische Föderation"] <- "Russland"
seco_dual_use$Land[seco_dual_use$Land == "Belarus"] <- "Weissrussland"
seco_dual_use$Land[seco_dual_use$Land == "Bangladesch"] <- "Bangladesh"
seco_dual_use$Land[seco_dual_use$Land == "Bermuda"] <- "Bermudas"
seco_dual_use$Land[seco_dual_use$Land == "Brunei Darussalam"] <- "Brunei"
seco_dual_use$Land[seco_dual_use$Land == "Demokratische Republik Kongo"] <- "Kongo-Kinshasa"
seco_dual_use$Land[seco_dual_use$Land == "Kongo, Demokratische Republik (ex-Zaire)"] <- "Kongo-Kinshasa"
seco_dual_use$Land[seco_dual_use$Land == "Cayman-Inseln"] <- "Kaiman-Inseln"
seco_dual_use$Land[seco_dual_use$Land == "Korea, Republik"] <- "Südkorea"
seco_dual_use$Land[seco_dual_use$Land == "Korea, Republik (Südkorea)"] <- "Südkorea"
seco_dual_use$Land[seco_dual_use$Land == "Kroatien (Hrvatska)"] <- "Kroatien"
seco_dual_use$Land[seco_dual_use$Land == "Laos, Demokratische Volksrepublik"] <- "Laos"
seco_dual_use$Land[seco_dual_use$Land == "Macao"] <- "Macau"
seco_dual_use$Land[seco_dual_use$Land == "Mazedonien, die ehemalige jugoslawische Republik"] <- "Mazedonien"
seco_dual_use$Land[seco_dual_use$Land == "Mazedonien (ehemalige jugoslawische Republik)"] <- "Mazedonien"
seco_dual_use$Land[seco_dual_use$Land == "Myanmar (Birma)"] <- "Myanmar"
seco_dual_use$Land[seco_dual_use$Land == "Slowakische Republik"] <- "Slowakei"
seco_dual_use$Land[seco_dual_use$Land == "Tansania, Vereinigte Republik"] <- "Tansania"
seco_dual_use$Land[seco_dual_use$Land == "Tschechische Republik"] <- "Tschechien"
seco_dual_use$Land[seco_dual_use$Land == "Vereinigte Staaten von Amerika"] <- "USA"
seco_dual_use$Land[seco_dual_use$Land == "Moldova"] <- "Moldawien"
Wie viele Länder gibt es jetzt noch?
length(unique(seco_dual_use$Land))
## [1] 146
sort(unique(seco_dual_use$Land))
## [1] "Afghanistan" "Ägypten"
## [3] "Algerien" "Andorra"
## [5] "Angola" "Argentinien"
## [7] "Armenien" "Aserbaidschan"
## [9] "Äthiopien" "Australien"
## [11] "Bahamas" "Bahrain"
## [13] "Bangladesh" "Belgien"
## [15] "Benin" "Bermudas"
## [17] "Bhutan" "Bolivien"
## [19] "Bosnien-Herzegowina" "Botswana"
## [21] "Brasilien" "Brunei"
## [23] "Bulgarien" "Burkina Faso"
## [25] "Chile" "China"
## [27] "Costa Rica" "Dänemark"
## [29] "Deutschland" "Dominikanische Republik"
## [31] "Ecuador" "Elfenbeinküste"
## [33] "El Salvador" "Eritrea"
## [35] "Estland" "Fidschi"
## [37] "Finnland" "Frankreich"
## [39] "Gabun" "Georgien"
## [41] "Ghana" "Griechenland"
## [43] "Grossbritannien" "Guatemala"
## [45] "Honduras" "Hong Kong"
## [47] "Indien" "Indonesien"
## [49] "Irak" "Iran"
## [51] "Irland" "Island"
## [53] "Israel" "Italien"
## [55] "Japan" "Jemen"
## [57] "Jordanien" "Kaiman-Inseln"
## [59] "Kambodscha" "Kamerun"
## [61] "Kanada" "Kasachstan"
## [63] "Katar" "Kenia"
## [65] "Kirgisistan" "Kolumbien"
## [67] "Kongo-Kinshasa" "Kroatien"
## [69] "Kuba" "Kuwait"
## [71] "Laos" "Lettland"
## [73] "Libanon" "Libyen"
## [75] "Litauen" "Luxemburg"
## [77] "Macau" "Madagaskar"
## [79] "Malaysia" "Mali"
## [81] "Malta" "Marokko"
## [83] "Marshallinseln" "Mauretanien"
## [85] "Mauritius" "Mazedonien"
## [87] "Mexiko" "Moldawien"
## [89] "Monaco" "Mongolei"
## [91] "Myanmar" "Namibia"
## [93] "Neuseeland" "Niederlande"
## [95] "Nigeria" "Norwegen"
## [97] "Oman" "Österreich"
## [99] "Pakistan" "Panama"
## [101] "Paraguay" "Peru"
## [103] "Philippinen" "Polen"
## [105] "Portugal" "Rumänien"
## [107] "Russland" "Sambia"
## [109] "San Marino" "Saudi-Arabien"
## [111] "Schweden" "Schweiz"
## [113] "Senegal" "Serbien"
## [115] "Sierra Leone" "Singapur"
## [117] "Slowakei" "Slowenien"
## [119] "Spanien" "Sri Lanka"
## [121] "Südafrika" "Sudan"
## [123] "Südkorea" "Swasiland"
## [125] "Taiwan" "Tansania"
## [127] "Thailand" "Togo"
## [129] "Trinidad und Tobago" "Tschechien"
## [131] "Tunesien" "Türkei"
## [133] "Turkmenistan" "Uganda"
## [135] "Ukraine" "Ungarn"
## [137] "Uruguay" "USA"
## [139] "Usbekistan" "Vatikan"
## [141] "Venezuela" "Vereinigte Arabische Emirate"
## [143] "Vietnam" "Weissrussland"
## [145] "Zentralafrikanische Republik" "Zypern"
Neue Spalten erstellen
# Spalte für Dateiherkunft
seco_dual_use <- seco_dual_use %>%
mutate(Herkunftsdatei = NA, Verzeichnis = NA, Haupttyp = NA, Untertyp = NA, Zusatz = NA)
Signaturaufschlüsselung
# Verzeichnis fin
computedList <- mapply(classifyVerzeichnis, seco_dual_use[,"Verordnung/Typ"], seco_dual_use[,"Verordnung/Typ ELIC"], seco_dual_use[,"Signatur"])
seco_dual_use <- seco_dual_use %>%
mutate(Verzeichnis = as.factor(t(computedList)[,1]), Herkunftsdatei = as.factor(t(computedList)[,2]))
# Verordnung/Typ (ELIC) werden nicht mehr gebraucht
seco_dual_use <- seco_dual_use %>%
select(-contains("Verordnung/Typ"))
# Signatur aufschlüsseln
# nur GVK anzeigen
seco_dual_use_only_gkv <- seco_dual_use %>%
filter(Verzeichnis == "GKV") %>%
select(Signatur, Herkunftsdatei)
computedList <- mapply(classifySignatur, seco_dual_use[,"Verzeichnis"], seco_dual_use[,"Herkunftsdatei"], seco_dual_use[,"Signatur"])
seco_dual_use_cleaned <- seco_dual_use %>%
mutate(Haupttyp = as.factor(t(computedList)[,1]), Untertyp = as.factor(t(computedList)[,2]), Zusatz = as.factor(t(computedList)[,3]))
# Sample nehmen, um Klassifikation zu überprüfen
seco_dual_use_cleaned %>%
sample_n(40) %>%
select(Verzeichnis, Signatur, Haupttyp, Untertyp, Zusatz)
## Verzeichnis Signatur Haupttyp Untertyp Zusatz
## 5599 5.1 5.1 1 <NA> <NA>
## 8247 GKV 6A002c1 6 A 002c1
## 2494 GKV 9A012 9 A 012
## 5385 GKV 5A002.a1 5 A 002a1
## 8353 GKV 5A001i 5 A 001i
## 3010 GKV 2B001.a 2 B 001a
## 64 GKV 2B201.a.1\n2B001.b.2 2 B 201a1
## 8127 5.1 5.1 1 <NA> <NA>
## 6690 GKV 5A002.a1 5 A 002a1
## 10310 GKV 1B231b2 1 B 231b2
## 2603 GKV 3A225 3 A 225
## 384 ML (GKV) ML11.a 11 a <NA>
## 3174 GKV 2B201.b1 2 B 201b1
## 10521 GKV 2B201a1\n2B001b2 2 B 201a1
## 1790 5.1 5.1 1 <NA> <NA>
## 11396 GKV 6A005a6b2 6 A 005a6b2
## 1153 GKV 2B001.b2\n2B201.a1 2 B 001b2
## 7671 GKV 2B201a1 2 B 201a1
## 7969 GKV 2B352b 2 B 352b
## 5330 5.1 5.1 1 <NA> <NA>
## 7844 GKV 6A002c1 6 A 002c1
## 7488 GKV 2B001a 2 B 001a
## 5224 GKV 2B001.a 2 B 001a
## 3528 GKV 0C003 0 C 003
## 9192 GKV 2B201a1 2 B 201a1
## 2870 GKV 2B350.g2 2 B 350g2
## 3694 5.1 5.1 1 <NA> <NA>
## 5663 ML (GKV) ML05.b 5 b <NA>
## 5924 5.2 5.2 2 <NA> <NA>
## 2272 GKV 2B001.b1\n2B201.a 2 B 001b1
## 8605 5.1 5.1 1 <NA> <NA>
## 4205 GKV 5D002.c1 5 D 002c1
## 3322 GKV 5A002.a1 5 A 002a1
## 2459 ML (GKV) ML17\nML22 17 <NA> <NA>
## 2621 GKV 0C003 0 C 003
## 2575 GKV 1B118 1 B 118
## 11388 GKV 1C228 1 C 228
## 4433 ML (GKV) ML05 5 <NA> <NA>
## 2493 GKV 9A012 9 A 012
## 490 GKV 2B350.g 2 B 350g
# Faktorenlevels überprüfen
levels(seco_dual_use_cleaned$Verzeichnis)
## [1] "5.1" "5.2" "ChKV" "GKV" "ML (GKV)" "unbekannt"
levels(seco_dual_use_cleaned$Herkunftsdatei)
## [1] "ELIC" "Tracker"
# Hier gibt es Einträge à la 1A, 2B und 3B, dies sind keine Fehler, sondern Haupttypen der ChKV
levels(seco_dual_use_cleaned$Haupttyp)
## [1] "0" "1" "10" "11" "13" "14" "15" "16" "17" "18" "1A" "2" "21" "22"
## [15] "2B" "3" "3B" "4" "5" "6" "7" "8" "9"
levels(seco_dual_use_cleaned$Untertyp)
## [1] "" "0" "1" "10" "11" "14" "16" "17" "2" "3"
## [11] "4" "5" "5b1" "7" "9" "a" ".a" "A" "a1" "a13a"
## [21] "a21" "b" "B" "b4" "c" "C" "c2" "d" "D" "d1"
## [31] "d2" "E" "f" "f1" "g" "h"
levels(seco_dual_use_cleaned$Zusatz)
## [1] "" "0" "001" "001a" "001A"
## [6] "001a1" "001a10c" "001a12" "001a13b" "001a2"
## [11] "001a2a" "001a2c" "001A2C" "001a3" "001a5a1"
## [16] "001A5A1" "001a5a2" "001A5A2" "001a5a3" "001a5a4"
## [21] "001A5A4" "001a5a5" "001a6b" "001a7a" "001A7A"
## [26] "001a7b" "001b" "001B" "001b1" "001b10"
## [31] "001b14" "001b141b" "001b14b" "001b1b" "001b2"
## [36] "001B2" "001b2b3" "001b2d" "001b3" "001c"
## [41] "001C" "001c1" "001c2" "001d" "001D"
## [46] "001e" "001E" "001f" "001f1" "001f2"
## [51] "001f3" "001f3a" "001f4" "001g" "001g2"
## [56] "001h" "001i" "001j" "002" "002a"
## [61] "002a1" "002A1" "002a1a" "002a1b" "002a1b3"
## [66] "002A1B3" "002a1d" "002a2a" "002a3f" "002a3g"
## [71] "002a5" "002A5" "002a9" "002a+b" "002b1"
## [76] "002b4b" "002c1" "002C1" "002c2" "002d3"
## [81] "002g" "002g2" "002G2" "003" "003a"
## [86] "003a3" "003b4" "003b4a" "003b4b" "003b4c"
## [91] "003c1" "003f2" "004a" "004c" "004c1"
## [96] "004e" "005" "0055b" "005a5b" "005a6a"
## [101] "005A6A" "005a6b" "005a6b2" "005A6B2" "005b2"
## [106] "005b6a" "005B6A" "005b6a2" "005b8b" "005d"
## [111] "005d1" "005d1a2" "005d1d4" "005e" "006"
## [116] "006a" "006b" "006b2" "007" "008c"
## [121] "008d" "010b" "010B" "010e" "012"
## [126] "012a" "012a1" "012a2" "012b" "101"
## [131] "101a" "101b" "103" "103a" "103A"
## [136] "103a1" "103A1" "105" "105b1" "108b2"
## [141] "110" "111" "111a2a" "111a2a3" "111a2c"
## [146] "115" "115a" "117" "118" "118a"
## [151] "120" "120a" "122" "201" "2011a"
## [156] "201a" "201a1" "201A1" "201a123" "201a2"
## [161] "201a3" "201b" "201b1" "201b2" "201c"
## [166] "202" "202b" "203b3" "204" "206"
## [171] "210A" "210b" "225" "226" "228"
## [176] "228c" "230" "230c" "231" "231a"
## [181] "231b" "231b2" "233" "233a" "234"
## [186] "235" "350" "35009" "35013" "35014"
## [191] "35015" "35020" "35043" "35046" "35049"
## [196] "3504g" "3509" "350a3" "350a4" "350a,b,d,g3"
## [201] "350b2" "350b3" "350c" "350c1" "350c3"
## [206] "350c4" "350d1" "350d2" "350d2, 3, 9" "350d3"
## [211] "350d4" "350d5" "350d7" "350e" "350e1"
## [216] "350e2" "350e3" "350e4" "350e5" "350e7"
## [221] "350g" "350G" "350g1" "350G1" "350g1a"
## [226] "350g2" "350G2" "350g3" "350g3b" "350g4"
## [231] "350g9c" "350h2" "350h3" "350h6" "350i"
## [236] "350i1" "350i10" "350i3" "350i4" "350i7"
## [241] "351" "351a3" "351c10" "351d11" "351d15"
## [246] "351d4" "351d5" "351d7" "352" "352b"
## [251] "352b1" "352B1" "352c" "352d" "352D"
## [256] "352d2" "352e" "352f" "352f2"
Was sind die kleinsten Einträge auf der Liste, das heisst: Wie viele Geschäfte im Wert von 1 Franken gibt es? Wie viele Geschäfte unter 1’000 Franken gibt es? Wie viele Geschäfte unter 10’000 Franken gibt es? Wie viele Geschäfte unter 100’000 Franken gibt es?
dim(seco_dual_use_cleaned[seco_dual_use_cleaned$Wert == 1,])[1]
## [1] 87
dim(seco_dual_use_cleaned[seco_dual_use_cleaned$Wert <= 1000,])[1]
## [1] 1588
dim(seco_dual_use_cleaned[seco_dual_use_cleaned$Wert <= 10000,])[1]
## [1] 4412
dim(seco_dual_use_cleaned[seco_dual_use_cleaned$Wert <= 100000,])[1]
## [1] 7176
# Spalten neu ordnen
seco_dual_use_cleaned <- seco_dual_use_cleaned %>%
select(GN, UnterGN, Quartal, Datum, Land, Wert, Verzeichnis, Signatur, Haupttyp, Untertyp, Zusatz, Herkunftsdatei)
# \n durch | ersetzen in Signatur
seco_dual_use_cleaned_for_output <- seco_dual_use_cleaned %>%
mutate(Signatur = sub("\\n", "|", Signatur)) %>%
mutate(Untertyp = ifelse(is.na(Untertyp), "", as.character(Untertyp))) %>%
mutate(Haupttyp = ifelse(is.na(Haupttyp), "", as.character(Haupttyp))) %>%
mutate(Zusatz = ifelse(is.na(Zusatz), "", as.character(Zusatz)))
write.csv(seco_dual_use_cleaned_for_output, file = "output/seco_dual_use.csv")
# Output für Visualisierung
# Benötigt: Datum, Land, Wert, Verzeichnis, Haupttyp
seco_dual_use_for_vis <- seco_dual_use_cleaned %>%
select(Datum, Land, Wert, Verzeichnis, Haupttyp) %>%
mutate(Haupttyp = as.character(Haupttyp))
# Chemikalien zusammenfassen
seco_dual_use_for_vis$Haupttyp[seco_dual_use_for_vis$Verzeichnis == "ChKV"] <- "0"
# NAs durch leere Strings ersetzen
seco_dual_use_for_vis$Haupttyp[is.na(seco_dual_use_for_vis$Haupttyp)] <- ""
write.csv(seco_dual_use_for_vis, file = "output/seco_dual_use_for_vis.csv", row.names = F, quote = c(1, 2, 4, 5))
Output aller unterschiedlichen Signaturen als CSV
write.csv(data.frame(signatures = unique(paste(seco_dual_use_cleaned$Verzeichnis, seco_dual_use_cleaned$Haupttyp, seco_dual_use_cleaned$Untertyp, seco_dual_use_cleaned$Zusatz))), "output/all_signatures.csv")
Output aller unterschiedlichen Verzeichnis-Haupttyp-Kategorien zur manuellen Beschreibung
only_top_category_signatures <- seco_dual_use_cleaned %>%
select(Verzeichnis, Haupttyp) %>%
distinct() %>%
mutate(Beschreibung = "", Haupttyp = as.character(Haupttyp)) %>%
arrange(Verzeichnis, Haupttyp)
write.csv(only_top_category_signatures, "output/signatures_verzeichnis_haupttyp.csv", row.names = F)
Wie sieht die Verteilung aus?
cdf <- ggplot(seco_dual_use_cleaned, aes(x = Wert)) + stat_ecdf() + scale_x_log10(labels = formatAsChfWithoutCHF) + scale_y_continuous(labels = percent)
cdf
## Warning: Removed 76 rows containing non-finite values (stat_ecdf).
Wie viel Prozent des Exportvolumens sind Kleinaufträge oder Exporte zu Testzwecken (Definition gemäss SECO: Geschäfte mit einem Wert von unter 10’000 Franken)?
seco_dual_use %>%
group_by("Unter 10'000" = Wert < 10000, "Zwischen 10'000 und 100'000" = Wert < 100000 & Wert >= 10000, "Zwischen 100'000 und 1 Mio." = Wert >= 100000 & Wert < 1000000, "Zwischen 1 Mio. und 10 Mio." = Wert >= 1000000 & Wert < 10000000, "Über 10 Mio." = Wert >= 10000000) %>%
summarise(Summe = sum(Wert), Anzahl = n()) %>%
mutate(Summenanteil = Summe / sum(seco_dual_use_cleaned$Wert)) %>%
gather(Kategorie, Value, -Summe, -Summenanteil, -Anzahl) %>%
filter(Value == T) %>%
select(-Value)
## # A tibble: 5 x 4
## Summe Anzahl Summenanteil Kategorie
## <dbl> <int> <dbl> <chr>
## 1 13134628 4383 0.001886455 Unter 10'000
## 2 105477315 2778 0.015149133 Zwischen 10'000 und 100'000
## 3 1292598872 3573 0.185648940 Zwischen 100'000 und 1 Mio.
## 4 1422366155 620 0.204286709 Zwischen 1 Mio. und 10 Mio.
## 5 4129020669 67 0.593028764 Über 10 Mio.
# Sonstige Kennzahlen
seco_dual_use %>%
summarise(median = formatAsChf(median(Wert)), sd = formatAsChf(sd(Wert)), mean = formatAsChf(mean(Wert)))
## median sd mean
## 1 CHF 28'800.- CHF 11'261'899.- CHF 609'631.2.-
Es zeigt sich klar, dass Exporte mit kleinen Summen nur einen verschwindend kleinen Teil des gesamten Exportvolumens ausmachen (< 2 Prozent). Exporte zu Testzwecken oder temporäre Exporte fallen bei der nachfolgenden Analyse rein rechnerisch also nicht ins Gewicht. Geschäfte mit einem Handelswert von über 10 Mio. sind für rund 60 Prozent des Exportvolumens verantwortlich.
Exporte im Wert von wie vielen Franken wurden im untersuchten Zeitraum bewilligt?
formatAsChf(sum(seco_dual_use_cleaned$Wert))
## [1] "CHF 6'962'597'639.-"
Was sind die grössten Exporte auf der Liste?
arrange(seco_dual_use_cleaned, desc(Wert)) %>%
mutate(Wert = formatAsChf(Wert)) %>%
select(GN, Land, Verzeichnis, Quartal, Wert) %>%
slice(1:10)
## GN Land Verzeichnis Quartal Wert
## 1 12332 Saudi-Arabien ML (GKV) 12/02 CHF 1'000'000'000.00.-
## 2 8002454 Saudi-Arabien ML (GKV) 15/02 CHF 415'000'000.00.-
## 3 8001302 Katar ML (GKV) 14/04 CHF 275'000'000.00.-
## 4 8008471 Indien ML (GKV) 16/02 CHF 232'000'000.00.-
## 5 14476 Indien ML (GKV) 13/03 CHF 165'000'000.00.-
## 6 8001226 Indien ML (GKV) 14/04 CHF 135'100'000.00.-
## 7 8002561 Jordanien ML (GKV) 16/01 CHF 120'000'000.00.-
## 8 8005535 Katar ML (GKV) 15/04 CHF 119'200'000.00.-
## 9 8005555 Indien ML (GKV) 15/04 CHF 80'000'000.00.-
## 10 8005539 Indien ML (GKV) 15/04 CHF 80'000'000.00.-
Mit welchen 10 Ländern wird am meisten gehandelt?
laenderSummen10Sortiert <- seco_dual_use_cleaned %>%
group_by(Land) %>%
summarise(Wert = sum(Wert)) %>%
arrange(desc(Wert)) %>%
slice(1:10)
laenderAndere <- seco_dual_use_cleaned %>%
group_by(Land) %>%
summarise(Wert = sum(Wert)) %>%
arrange(desc(Wert)) %>%
slice(11:n()) %>%
summarise(Land = "Andere", Wert = sum(Wert))
# Summe der sonstigen
laenderSummen10SortiertForBar <- rbind(laenderSummen10Sortiert, laenderAndere) %>%
mutate(Land = factor(Land, levels = c(laenderSummen10Sortiert$Land, laenderAndere$Land))) # in die richtige Reihenfolge bringen
laenderSummenBar <- ggplot(data = laenderSummen10SortiertForBar, aes(x = Land, y = Wert)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Land") +
theme(axis.text.x = element_text(angle=45, vjust=0.5))
laenderSummenBar
Mit welchen 10 Ländern wird am meisten gehandelt, 2016?
laenderSummen10Sortiert <- seco_dual_use_cleaned %>%
filter(Datum >= as.Date("2016-01-01")) %>%
group_by(Land) %>%
summarise(Wert = sum(Wert)) %>%
arrange(desc(Wert)) %>%
slice(1:10)
laenderAndere <- seco_dual_use_cleaned %>%
filter(Datum >= as.Date("2016-01-01")) %>%
group_by(Land) %>%
summarise(Wert = sum(Wert)) %>%
arrange(desc(Wert)) %>%
slice(11:n()) %>%
summarise(Land = "Andere", Wert = sum(Wert))
# Summe der sonstigen
laenderSummen10SortiertForBar <- rbind(laenderSummen10Sortiert, laenderAndere) %>%
mutate(Land = factor(Land, levels = c(laenderSummen10Sortiert$Land, laenderAndere$Land))) # in die richtige Reihenfolge bringen
laenderSummenBar <- ggplot(data = laenderSummen10SortiertForBar, aes(x = Land, y = Wert)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Land") +
theme(axis.text.x = element_text(angle=45, vjust=0.5))
laenderSummenBar
Wie viel Prozent des Exportvolumens fallen auf die 5 Länder mit dem grössten bewilligten Exportvolumen?
laenderSummen5Sortiert <- seco_dual_use_cleaned %>%
group_by(Land) %>%
summarise(Wert = sum(Wert)) %>%
arrange(desc(Wert)) %>%
slice(1:5)
sum(laenderSummen5Sortiert$Wert)/sum(seco_dual_use_cleaned$Wert) * 100
## [1] 68.16904
Wie verteilt sich das Exportvolumen auf die einzelnen Verzeichnisse?
verzeichnisSummen <- seco_dual_use_cleaned %>%
group_by(Verzeichnis) %>%
summarise(Wert = sum(Wert)) %>%
arrange(desc(Wert)) %>%
mutate(Verzeichnis = factor(Verzeichnis, levels = Verzeichnis))
verzeichnisSummenBar <- ggplot(data = verzeichnisSummen, aes(x = Verzeichnis, y = Wert)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Verzeichnis") +
theme(axis.text.x = element_text(angle=45, vjust=0.5))
verzeichnisSummenBar
# Summe nach Jahr
exportvolumenNachJahr <- seco_dual_use_cleaned %>%
group_by(Jahr = format(Datum, "%Y"), Verzeichnis) %>%
summarise(Wert = sum(Wert)) %>%
mutate(Verzeichnis = factor(Verzeichnis, levels = c("ML (GKV)", "GKV", "unbekannt", "ChKV", "5.1", "5.2")))
exportvolumenNachJahrBar <- ggplot(data = exportvolumenNachJahr, aes(x = Jahr, y = Wert, fill = factor(Verzeichnis), order = Verzeichnis)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Jahr") +
scale_fill_discrete(name = "Verzeichnis")
exportvolumenNachJahrBar
# Summe nach Jahr
exportvolumenNachJahr <- seco_dual_use_cleaned %>%
filter(Land == "Irak") %>%
group_by(Jahr = format(Datum, "%Y"), Verzeichnis) %>%
summarise(Wert = sum(Wert)) %>%
mutate(Verzeichnis = factor(Verzeichnis, levels = c("ML (GKV)", "GKV", "unbekannt", "ChKV", "5.1", "5.2")))
exportvolumenNachJahrBar <- ggplot(data = exportvolumenNachJahr, aes(x = Jahr, y = Wert, fill = factor(Verzeichnis), order = Verzeichnis)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Jahr") +
scale_fill_discrete(name = "Verzeichnis")
exportvolumenNachJahrBar
seco_dual_use_cleaned_with_quarter <- seco_dual_use_cleaned %>%
mutate(quarter = ceiling(as.integer(format(Datum, format = "%m")) / 3))
exportvolumenNachQuartal <- seco_dual_use_cleaned %>%
group_by(Quartal = paste(format(Datum, format = "%Y"), ceiling(as.integer(format(Datum, format = "%m")) / 3), sep = "-"), Verzeichnis) %>%
summarise(Wert = sum(Wert)) %>%
mutate(Verzeichnis = factor(Verzeichnis, levels = c("ML (GKV)", "GKV", "unbekannt", "ChKV", "5.1", "5.2")))
exportvolumenNachQuartalBar <- ggplot(data = exportvolumenNachQuartal, aes(x = Quartal, y = Wert, fill = factor(Verzeichnis), order = Verzeichnis)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Quartal") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
scale_fill_discrete(name = "Verzeichnis")
exportvolumenNachQuartalBar
# Summe nach Jahr, nur Wassenaar-Güter
# zuerst brauchen wir die grössten fünf Kategorien
exportvolumenML5Groesste <- seco_dual_use_cleaned %>%
filter(Verzeichnis == "ML (GKV)") %>%
group_by(Haupttyp) %>%
summarise(Wert = sum(Wert)) %>%
arrange(desc(Wert)) %>%
select(Haupttyp) %>%
slice(1:5)
exportvolumenNachJahrML <- seco_dual_use_cleaned %>%
filter(Verzeichnis == "ML (GKV)") %>%
group_by(Jahr = format(Datum, "%Y"), Haupttyp) %>%
summarise(Wert = sum(Wert)) %>%
mutate(Haupttyp = ifelse(Haupttyp %in% as.data.frame(exportvolumenML5Groesste)[,1], as.character(Haupttyp), "andere")) %>%
mutate(Haupttyp = factor(Haupttyp, levels = c(as.character(as.data.frame(exportvolumenML5Groesste)[,1]), "andere")))
exportvolumenNachJahrMLBar <- ggplot(data = exportvolumenNachJahrML, aes(x = Jahr, y = Wert, fill = factor(Haupttyp), order = Haupttyp)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Jahr") +
scale_fill_discrete(name = "Haupttyp")
exportvolumenNachJahrMLBar
# Summe nach Jahr, nur GKV
# zuerst brauchen wir die grössten fünf Kategorien
exportvolumenGKV5Groesste <- seco_dual_use_cleaned %>%
filter(Verzeichnis == "GKV") %>%
group_by(Haupttyp) %>%
summarise(Wert = sum(Wert)) %>%
arrange(desc(Wert)) %>%
select(Haupttyp) %>%
slice(1:5)
exportvolumenNachJahrGKV <- seco_dual_use_cleaned %>%
filter(Verzeichnis == "GKV") %>%
group_by(Jahr = format(Datum, "%Y"), Haupttyp) %>%
summarise(Wert = sum(Wert)) %>%
mutate(Haupttyp = ifelse(Haupttyp %in% as.data.frame(exportvolumenGKV5Groesste)[,1], as.character(Haupttyp), "andere")) %>%
mutate(Haupttyp = factor(Haupttyp, levels = c(as.character(as.data.frame(exportvolumenGKV5Groesste)[,1]), "andere")))
exportvolumenNachJahrGKVBar <- ggplot(data = exportvolumenNachJahrGKV, aes(x = Jahr, y = Wert, fill = factor(Haupttyp), order = Haupttyp)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Jahr") +
scale_fill_discrete(name = "Haupttyp")
exportvolumenNachJahrGKVBar
# Summe nach Jahr, nur GKV
# zuerst brauchen wir die grössten fünf Kategorien
exportvolumenGKV5Groesste <- seco_dual_use_cleaned %>%
filter(Verzeichnis == "GKV", Land == "Irak") %>%
group_by(Haupttyp) %>%
summarise(Wert = sum(Wert)) %>%
arrange(desc(Wert)) %>%
select(Haupttyp) %>%
slice(1:5)
exportvolumenNachJahrGKV <- seco_dual_use_cleaned %>%
filter(Verzeichnis == "GKV", Land == "Irak") %>%
group_by(Jahr = format(Datum, "%Y"), Haupttyp) %>%
summarise(Wert = sum(Wert)) %>%
mutate(Haupttyp = ifelse(Haupttyp %in% as.data.frame(exportvolumenGKV5Groesste)[,1], as.character(Haupttyp), "andere")) %>%
mutate(Haupttyp = factor(Haupttyp, levels = c(as.character(as.data.frame(exportvolumenGKV5Groesste)[,1]), "andere")))
exportvolumenNachJahrGKVBar <- ggplot(data = exportvolumenNachJahrGKV, aes(x = Jahr, y = Wert, fill = factor(Haupttyp), order = Haupttyp)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Jahr") +
scale_fill_discrete(name = "Haupttyp")
exportvolumenNachJahrGKVBar
neareastcountries <- c("Kuwait", "Bahrain", "Oman", "Katar", "Saudi-Arabien", "Vereinigte Arabische Emirate", "Jemen", "Israel", "Jordanien", "Libanon", "Syrien", "Ägypten", "Iran", "Türkei", "Irak")
# Summe nach Jahr
exportvolumenNachJahr <- seco_dual_use_cleaned %>%
filter(Land %in% neareastcountries) %>%
group_by(Jahr = format(Datum, "%Y")) %>%
summarise(Wert = sum(Wert))
exportvolumenNachJahrBar <- ggplot(data = exportvolumenNachJahr, aes(x = Jahr, y = Wert)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Jahr")
exportvolumenNachJahrBar
exportvolumenNachQuartal <- seco_dual_use_cleaned %>%
filter(Land %in% neareastcountries) %>%
group_by(Quartal = paste(format(Datum, format = "%Y"), ceiling(as.integer(format(Datum, format = "%m")) / 3), sep = "-")) %>%
summarise(Wert = sum(Wert))
exportvolumenNachQuartalBar <- ggplot(data = exportvolumenNachQuartal, aes(x = Quartal, y = Wert)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Quartal") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
exportvolumenNachQuartalBar
exportvolumenNachQuartal <- seco_dual_use_cleaned %>%
group_by(Quartal = paste(format(Datum, format = "%Y"), ceiling(as.integer(format(Datum, format = "%m")) / 3), sep = "-")) %>%
summarise(Wert = sum(Wert))
exportvolumenNachQuartalBar <- ggplot(data = exportvolumenNachQuartal, aes(x = Quartal, y = Wert)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = formatAsChf) +
xlab("Quartal") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
exportvolumenNachQuartalBar