class: center, middle, inverse, title-slide # Geospatial Techniques for Social Scientists in R ## Introduction ### Stefan Jünger & Anne-Kathrin Stroppe
February 08, 2021 --- layout: true --- ## About This Course This course will teach you how to exploit `R` and apply its geospatial techniques in a social science context. By the end of this course, you should... - be comfortable with using geospatial data in `R` - including importing, wrangling, and exploring geospatial data - be able to create maps based on your very own processed geospatial data in `R` --- ## Keep Calm and Carry On Learning/Using `R` <img src="data:image/png;base64,#./img/r_first_then.png" width="50%" style="display: block; margin: auto;" /> <small><small>Illustration by [Allison Horst](https://github.com/allisonhorst/stats-illustrations) </small></small> --- ## This Is Not a Spatial Statistics Course The topic of spatial statistics would require a focus on actual statistics rather than hands-on data wrangling. Therefore, we decided to skip the subject of spatial statistics. We won't take a closer look at: - The concept of spatial dependence, its modeling using spatial weight matrices, and analysis (e.g., Moran's I) - Spatial regression -- Still, all of these topics can be approached using `R`, e.g., with the packages - [`spdep`](https://bookdown.org/yihui/rmarkdown/xaringan-key.html) - [`spatstat`](https://cran.r-project.org/web/packages/spatstat/index.html) - [`spatialEco`](https://cran.r-project.org/web/packages/spatialEco/index.html) - and so many more --- ## We Are (Necessarily) Selective There's a multitude of spatial `R` packages - we cannot cover all of them - you may have used some we are not familiar with -- We show the use of packages we exploit in practice - there's always another way of doing things in `R` - don't hesitate to bring up your solutions -- We cannot cover all functions in the packages we use for data wrangling and geometric analysis. **You can't learn everything at once, but you also don't have to!** --- ## Prerequisites for This Course - At least basic knowledge of `R`, its syntax, and internal logic - Affinity for using script-based languages (`Stata` and `Python` are also great) - Don't be scared to wrangle data with complex structures - Working versions of `R` (and `Rstudio`) on your computer - Ideally, with the packages installed, we asked you upfront --- ## About Us **Stefan Jünger** - Postdoctoral researcher in the team Data Linking & Data Security at the GESIS Data Archive - Interim Head of the GESIS Secure Data Center - Ph.D. in social sciences, University of Cologne - (other) research interests: - quantitative methods - social inequalities & attitudes towards minorities - data management & data privacy - reproducible research [stefan.juenger@gesis.org](mailto:stefan.juenger@gesis.org) | [@StefanJuenger](https://twitter.com/StefanJuenger) | [https://stefanjuenger.github.io](https://stefanjuenger.github.io) --- ## About Us **Anne-Kathrin Stroppe** - Doctoral researcher in the team National Surveys at the GESIS Data Archive - Data Curator for the German Longitudinal Election Study - Research focuses on political and electoral geography - (other) research interests: - determinants of electoral behavior - infrastructural inequalities & political alienation - quantitative methods of the social sciences [anne-kathrin.stroppe@gesis.org](mailto:anne-kathrin.stroppe@gesis.org) | [@AStroppe](https://twitter.com/AStroppe) --- ## About You - What's your name? - Where do you work/study? What are you working on/studying? - What is your experience with `R` or other programming languages? - Do you already have experience with geospatial data? - What statistical software package(s) do you typically use? - **What do you want to use `R` and geospatial data for?** --- ## Preliminaries - The workshop consists of a combination of lectures and hands-on exercises - Feel free to ask questions at any time - if it is a question that everybody can/should hear, use the "raise hand" function in *Zoom*, wait until we call you, and then ask via audio/video - Please mute your microphones unless you are asking a question - Slides and other materials are available at .center[`https://github.com/StefanJuenger/gesis-workshop-geospatial-techniques-R`] --- ## Course Schedule <table class="table" style="margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> Day </th> <th style="text-align:left;"> Time </th> <th style="text-align:left;"> Title </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;color: gray !important;"> February 08 </td> <td style="text-align:left;color: gray !important;"> 09:00am-10:30am </td> <td style="text-align:left;font-weight: bold;"> Introduction </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 08 </td> <td style="text-align:left;color: gray !important;"> 11:00am-12:30pm </td> <td style="text-align:left;font-weight: bold;"> Vector Data </td> </tr> <tr> <td style="text-align:left;color: gray !important;color: gray !important;"> February 08 </td> <td style="text-align:left;color: gray !important;color: gray !important;"> 12:30pm-01:30pm </td> <td style="text-align:left;font-weight: bold;color: gray !important;"> Lunch Break </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 08 </td> <td style="text-align:left;color: gray !important;"> 01:30pm-03:00pm </td> <td style="text-align:left;font-weight: bold;"> Basic Maps </td> </tr> <tr> <td style="text-align:left;color: gray !important;border-bottom: 1px solid"> February 08 </td> <td style="text-align:left;color: gray !important;border-bottom: 1px solid"> 03:30pm-05:00pm </td> <td style="text-align:left;font-weight: bold;border-bottom: 1px solid"> Raster Data </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;"> 09:00am-10:30am </td> <td style="text-align:left;font-weight: bold;"> Advanced Data Import </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;"> 11:00am-12:30pm </td> <td style="text-align:left;font-weight: bold;"> Applied Data Wrangling </td> </tr> <tr> <td style="text-align:left;color: gray !important;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;color: gray !important;"> 12:30pm-13:30pm </td> <td style="text-align:left;font-weight: bold;color: gray !important;"> Lunch Break </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;"> 01:30pm-03:00pm </td> <td style="text-align:left;font-weight: bold;"> Advanced Maps I </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;"> 03:30pm-05:00pm </td> <td style="text-align:left;font-weight: bold;"> Advanced Maps II </td> </tr> </tbody> </table> --- ## Now <table class="table" style="margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> Day </th> <th style="text-align:left;"> Time </th> <th style="text-align:left;"> Title </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;color: gray !important;background-color: yellow !important;"> February 08 </td> <td style="text-align:left;color: gray !important;background-color: yellow !important;"> 09:00am-10:30am </td> <td style="text-align:left;font-weight: bold;background-color: yellow !important;"> Introduction </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 08 </td> <td style="text-align:left;color: gray !important;"> 11:00am-12:30pm </td> <td style="text-align:left;font-weight: bold;"> Vector Data </td> </tr> <tr> <td style="text-align:left;color: gray !important;color: gray !important;"> February 08 </td> <td style="text-align:left;color: gray !important;color: gray !important;"> 12:30pm-01:30pm </td> <td style="text-align:left;font-weight: bold;color: gray !important;"> Lunch Break </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 08 </td> <td style="text-align:left;color: gray !important;"> 01:30pm-03:00pm </td> <td style="text-align:left;font-weight: bold;"> Basic Maps </td> </tr> <tr> <td style="text-align:left;color: gray !important;border-bottom: 1px solid"> February 08 </td> <td style="text-align:left;color: gray !important;border-bottom: 1px solid"> 03:30pm-05:00pm </td> <td style="text-align:left;font-weight: bold;border-bottom: 1px solid"> Raster Data </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;"> 09:00am-10:30am </td> <td style="text-align:left;font-weight: bold;"> Advanced Data Import </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;"> 11:00am-12:30pm </td> <td style="text-align:left;font-weight: bold;"> Applied Data Wrangling </td> </tr> <tr> <td style="text-align:left;color: gray !important;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;color: gray !important;"> 12:30pm-13:30pm </td> <td style="text-align:left;font-weight: bold;color: gray !important;"> Lunch Break </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;"> 01:30pm-03:00pm </td> <td style="text-align:left;font-weight: bold;"> Advanced Maps I </td> </tr> <tr> <td style="text-align:left;color: gray !important;"> February 09 </td> <td style="text-align:left;color: gray !important;"> 03:30pm-05:00pm </td> <td style="text-align:left;font-weight: bold;"> Advanced Maps II </td> </tr> </tbody> </table> --- ## Geographic Information in Social Science Research .pull-left[ Exploiting geographic information is not new. For example, Siegfried (1913) has used soil composition information to explain election results in France. ] .pull-right[ <img src="data:image/png;base64,#https://images.fr.shopping.rakuten.com/photo/874882994.jpg" width="75%" style="display: block; margin: auto;" /> .center[.tinyisher[https://images.fr.shopping.rakuten.com/photo/874882994.jpg]] ] --- ##Integration in Theory .pull-left[ <img src="data:image/png;base64,#https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1387595670l/7034925.jpg" width="65%" style="display: block; margin: auto;" /> .center[.tinyisher[https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1387595670l/7034925.jpg]] ] .pull-right[ A lot of classic theories have space embedded For example, in Allport's (1954) contact theory, he at least implicitly assumes that people meet in a set space ] --- ## Today’s Research Is Not Necessarily New .pull-left[ <img src="data:image/png;base64,#./img/park_etal.png" width="1087" style="display: block; margin: auto;" /> .tinyisher[Park et al. 1925] ] -- .pull-right[ <img src="data:image/png;base64,#./img/fig_halo_example.png" width="5963" style="display: block; margin: auto;" /> .tinyisher[Jünger 2019] ] --- ## Data Landscape .pull-left[ Increased amount of available data - Quantitative and on a small spatial scale </br> <img src="data:image/png;base64,#./img/tools_today.png" width="60%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="data:image/png;base64,#./img/geo_today.png" width="816" style="display: block; margin: auto;" /> Better tools - Personal computer with enough horsepower - Standard software, such as `R`, can be used as Geographic Information System (GIS) ] --- ## What Are Georeferenced Data? .pull-left[ </br> Data with a direct spatial reference `\(\rightarrow\)` **geo-coordinates** - Information about geometries - Optional: Content in relation to the geometries ] .pull-right[ <img src="data:image/png;base64,#./img/fig_geometries.png" width="85%" style="display: block; margin: auto;" /> .tinyisher[Sources: OpenStreetMap / GEOFABRIK (2018), City of Cologne (2014), and the Statistical Offices of the Federation and the Länder (2016) / Jünger, 2019] ] --- ## Geospatial Data </br> Essentially georeferenced data as defined before - Information about geometries and related information Can be projected jointly in one single space - Allows data linking and extraction of substantial information </br> .center[**This is why they can serve as auxiliary information, i.e., context data, for survey data!**] --- ## Geospatial Data in This Course I In the folder called `data` in the same folder as the other materials for this workshop, you can find the data files we prepped for all the exercises and slides. The following data are included: - Administrative borders of Germany (Prefix *GER_*) are provided by the German [Federal Agency for Cartography and Geodesy](http://www.bkg.bund.de)(2018). Check out their [Open Data Portal](https://gdz.bkg.bund.de/index.php/default/open-data.html). - The hospital locations are based on the register of hospitals and preventive care/rehabilitation facilities 2015 published by the [Federal Statistical Office Germany](https://www-genesis.destatis.de/genesis/online). Addresses were geocoded and -referenced by Anne. --- ## Geospatial Data in This Course II - Data on Covid-19 cases and deaths as of Feb 2nd, 2021 were prepared by the Robert-Koch-Institut and downloaded from the [NPGEO data hub](https://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/917fc37a709542548cc3be077a786c17_0). - Election Results for the German Right-Wing Populist Party *AfD* in the 2017 German federal election ([Der Bundeswahlleiter, Wiesbaden 2018](https://www.bundeswahlleiter.de/bundestagswahlen/2017/ergebnisse/weitere-ergebnisse.html)). - German Census 2011 data are provided by the [Federal Statistical Office Germany, Wiesbaden 2020](https://www.zensus2011.de/EN/Home/home_node.html) --- ## Geospatial Data in This Course III - Shapefiles for Cologne are gathered from the [Open Data Portal Cologne](https://www.offenedaten-koeln.de/) - Raster data on land use are provided by the Leibniz [Institute of Ecological Urban and Regional Development](https://www.ioer.de/1/home/) through the [Monitor of Settlement and Open Space Development (IOER Monitor)](https://www.ioer-monitor.de/en/) **Please make sure that if you reuse any of the provided data to cite the original data sources.** --- ## What Is GIS? Most common understanding: Geographic Information Systems (GIS) as specific software to process geospatial data for - Visualization - Analysis <img src="data:image/png;base64,#./img/gis.png" width="70%" style="display: block; margin: auto;" /> .center[.tinyisher[Screenshot of the Open Source GIS [`QGIS`](https://qgis.org)]] --- ## Data Specifics .pull-left[ </br> </br> <img src="data:image/png;base64,#./img/fig_3d_simple.png" width="9083" style="display: block; margin: auto;" /> .tinyisher[Sources: OpenStreetMap / GEOFABRIK (2018) and City of Cologne (2014)] ] .pull-right[ Formats - Vector data (points, lines, polygons) - Raster data (grids) Coordinate reference systems - Allow the projection on earth's surface - Differ in precision for specific purposes ] --- ## Layers Must Match! </br> <img src="data:image/png;base64,#./img/fig_projections.png" width="9956" style="display: block; margin: auto;" /> .tinyisher[Source: Statistical Office of the European Union Eurostat (2018) / Jünger, 2019] --- ## Types of CRS **Geographic CRS** - description of specific points - perfect for navigation as it creates straight lines between points **Projected CRS** - projection of geometries on a (flat) surface - straight lines become bent lines (There are also geocentric CRS requiring also a z-coordinate...) *In practice, you shouldn't worry too much about CRS. Again, what matters is that they match.* --- class: middle ## Short Break ☕ Grab one of your favorite hot or cold beverages, or take a stretch break. If you're back at your place, you may want to play around with geometries on this site: https://thetruesize.com --- ## A Bit More About CRS A lot of software relies on open libraries comprising information about CRS. - to project geometries on earth's surface - to convert one dataset's CRS to another CRS system --- ## Old Standard: `PROJ.4` Strings This is how you information about the CRS are defined in a classic standard: ``` +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ``` .tinyisher[Source: https://epsg.io/3035] (It's nothing you would type by hand) --- ## New Kid in Town: `WKT` (“Well Known Text”) ``` PROJCS["ETRS89 / LAEA Europe", GEOGCS["ETRS89", DATUM["European_Terrestrial_Reference_System_1989", SPHEROID["GRS 1980",6378137,298.257222101, AUTHORITY["EPSG","7019"]], TOWGS84[0,0,0,0,0,0,0], AUTHORITY["EPSG","6258"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.0174532925199433, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4258"]], PROJECTION["Lambert_Azimuthal_Equal_Area"], PARAMETER["latitude_of_center",52], PARAMETER["longitude_of_center",10], PARAMETER["false_easting",4321000], PARAMETER["false_northing",3210000], UNIT["metre",1, AUTHORITY["EPSG","9001"]], AUTHORITY["EPSG","3035"]] ``` .tinyisher[Source: https://epsg.io/3035] --- ## Current Transition From `PROJ.4` to `WKT` in `R` Currently, there's a transition from the bit old standard of `PROJ.4` to `WKT` in many `R` packages. - you'll get a lot of warnings (see next slide) - you should check what's causing the warning - in the best case, they will disappear in the future However, for the operations we are going to show... --- ## ...Just Ignore the Warnings You may particularly face some warnings when using the `raster` package (see this afternoon's session about these data). Again, as always in `R`, that's just a warning. [You can ignore it](https://gis.stackexchange.com/questions/365296/setting-crs-of-raster-to-epsg-3035-using-r) since it's a result of the current transition of CRS definitions in individual packages. ``` Warning message: In showSRID(uprojargs, format = "PROJ", multiline = "NO") : Discarded datum European_Terrestrial_Reference_System_1989 in CRS definition ``` I have turned these warnings off for legibility reasons in my slides. --- ## EPSG Codes And EPSG:3035 Eventually, it's not as challenging to work with CRS in `R` as it may seem - we don't have to use PROJ.4 or WKT strings directly. Most of the times it's enough to use so-called EPSG Codes ("European Petroleum Survey Group Geodesy") - Small digit sequence **During the course, we rely on the European Terrestrial Reference System EPSG:3035, but that's maybe just a matter of taste.** --- ## More Details on Geospatial Data There's no more on geospatial data and their quirks for the time being. Let's learn about them as we learn about specific formats: - vector data (soon) - raster data (this afternoon) It should not be surprising in light of this course's content: `R` can serve as a full-blown Geographic Information System (GIS) for all these data. --- ## `R` Packages for Geospatial Data There have been packages for geospatial data in `R` already for a long time. - [`sp`](https://cran.r-project.org/web/packages/sp/index.html) for vector data - [`raster`](https://cran.r-project.org/web/packages/raster/index.html) for raster data .pull-left[ Cutting-edge for vector data - [`sf`](https://cran.r-project.org/web/packages/sf/index.html), which implements the [ISO 19125](https://www.iso.org/standard/40114.html) standard for geospatial data, called "simple features". ] .pull-right[ <img src="data:image/png;base64,#./img/sf.jpg" width="75%" style="display: block; margin: auto;" /> .tinyisher[Illustration by [Allison Horst](https://github.com/allisonhorst/stats-illustrations)] ] --- ## Packages in This Course We will use plenty of different packages during the course, but only a few are our main drivers (e.g., the `sf` package). Here's the list of packages .pull-left[ - [`dplyr`](https://cran.r-project.org/web/packages/dplyr/index.html) - [`ggplot2`](https://cran.r-project.org/web/packages/ggplot2/index.html) - [`ggsn`](https://cran.r-project.org/web/packages/ggsn/index.html) - [`haven`](https://cran.r-project.org/web/packages/haven/index.html) - [`maptools`](https://cran.r-project.org/web/packages/maptools/index.html) - [`osmdata`](https://cran.r-project.org/web/packages/osmdata/index.html) - [`OpenStreetMap`](https://cran.r-project.org/web/packages/OpenStreetMap/index.html) - [`reticulate`](https://cran.r-project.org/web/packages/reticulate/index.html) (optional) - [`sf`](https://cran.r-project.org/web/packages/sf/index.html) ] .pull-right[ - [`spatstat`](https://cran.r-project.org/web/packages/spatstat/index.html) - [`stars`](https://cran.r-project.org/web/packages/stars/index.html) - [`tmap`](https://cran.r-project.org/web/packages/tmap/index.html) - [`tmaptools`](https://cran.r-project.org/web/packages/tmaptools/index.html) - [`raster`](https://cran.r-project.org/web/packages/raster/index.html) - [`z11`](https://github.com/StefanJuenger/z11) ] *Note*: Some additional packages will be installed as dependencies. --- class: middle ## Exercise 1_1_1: Package Installation [Exercise](https://stefanjuenger.github.io/gesis-workshop-geospatial-techniques-R/exercises/1_1_1_Package_Installation_question.html) [Solution](https://stefanjuenger.github.io/gesis-workshop-geospatial-techniques-R/solutions/1_1_1_Package_Installation_solution.html) --- class: middle ## Some Last Notes on Using `R` --- ## What Is `R`? >R is a free software environment for statistical computing and graphics. It compiles and runs on a wide variety of UNIX platforms, Windows and MacOS ([`R` Project website](https://www.r-project.org/)). `R` is [free and open-source software (FOSS)](https://en.wikipedia.org/wiki/Free_and_open-source_software) and also a programming language. More specifically, it is a free, non-commercial implementation of the [`S` programming language](https://en.wikipedia.org/wiki/S_(programming_language) (developed by Bell Laboratories). --- ## Base `R` vs. `Tidyverse` There's only one `R`. However, due to the enormous amount of additional packages, routines for similar purposes can shape up rather differently. A prime example is the [`Tidyverse`](https://www.tidyverse.org/) - collection of packages for data science - tools to import, wrangle, and visualize data `Tidyverse` is sometimes a bit easier for beginners - verbs in the `dplyr` package - non-standard evaluation (`column_name` vs. `"column_name"`) - pipes (in contrast to nested functions) --- ## Piping In `R` Usually, in `R` we apply functions as follows: ```r f(x) ``` In the logic of pipes this function is written as: ```r x %>% f(.) ``` -- We can use pipes on more than one function: ```r x %>% f_1() %>% f_2() %>% f_3() ``` More details: https://r4ds.had.co.nz/pipes.html --- ## Some Precocious Notes on Style .pull-left[ In some ways, writing code is similar to writing a novel; it's a craft where you set the tone of how you want to be perceived by your future-you and others. What helps to be understood is the styling of your code. ] .pull-right[ <img src="data:image/png;base64,#./img/on_writing_king.jpg" width="70%" style="display: block; margin: auto;" /> .tinyisher[https://images-na.ssl-images-amazon.com/images/I/71z4varBITL.jpg] ] --- ## General Elements of Style These are only some of the topics you will face when researching for styling your code. - line length (see the ["sacred 80 column rule"]( https://www.emacswiki.org/emacs/EightyColumnRule)) - indentions - variable/object naming - comments - assignment rules `R` is pretty flexible in styling, which is why it is necessary to think about these topics - compare that to `Python`, which has strict indention rules --- ## Style Guides out There It's not uncommon to follow a specific style guide that already exists. Many institutions define styles for several different programming languages, such as [Google's style guide for `R`](https://google.github.io/styleguide/Rguide.html) It doesn't matter what style you use as long as you are consistent (at least in one single `R`-file, right?). --- ## Coding in Style 😎 [The `tidyverse` style guide](https://style.tidyverse.org/) by Hadley Wickham [`styler`](http://styler.r-lib.org/) package (incl. RStudio add-in) ```r install.packages("styler") library(styler) ``` From the package documentation: - `style_file()` styles .R and/or .Rmd files. - `style_dir()` styles all .R and/or .Rmd files in a directory. <img src="data:image/png;base64,#./img/styler_addin.png" width="50%" style="display: block; margin: auto;" /> --- ## Namespaces `::` I (again, Stefan) heavily use namespace declarations in code: `::`. It's a way to safely call a function if there are the same function names in other packages loaded. Usually, you don't need that, but it's a transparent way to show from which package you call which function. No namespaces: ```r library(sf) st_buffer(fancy_data, 500) ``` With namespaces: ```r sf::st_buffer(fancy_data, 500) ``` --- class: middle ## Break ☕ --- layout: false class: center background-image: url(data:image/png;base64,#./assets/img/the_end.png) background-size: cover .left-column[ </br> <img src="data:image/png;base64,#./img/stefan.png" width="90%" style="display: block; margin: auto;" /> ] .right-column[ .left[.small[<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" style="height:1em;fill:currentColor;position:relative;display:inline-block;top:.1em;"> [ comment ] <path d="M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z"></path></svg> [`stefan.juenger@gesis.org`](mailto:stefan.juenger@gesis.org)] </br> .small[<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" style="height:1em;fill:currentColor;position:relative;display:inline-block;top:.1em;"> [ comment ] <path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg> [`@StefanJuenger`](https://twitter.com/StefanJuenger)] </br> .small[<svg viewBox="0 0 496 512" xmlns="http://www.w3.org/2000/svg" style="height:1em;fill:currentColor;position:relative;display:inline-block;top:.1em;"> [ comment ] <path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg> [`StefanJuenger`](https://github.com/StefanJuenger)] </br> .small[<svg viewBox="0 0 576 512" xmlns="http://www.w3.org/2000/svg" style="height:1em;fill:currentColor;position:relative;display:inline-block;top:.1em;"> [ comment ] <path d="M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z"></path></svg> [`https://stefanjuenger.github.io`](https://stefanjuenger.github.io)]] </br> ]