Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 1 | #!/usr/bin/Rscript |
| 2 | library(RKorAPClient) |
| 3 | library(ggplot2) |
| 4 | library(raster) |
| 5 | library(broom) |
Marc Kupietz | 9402dec | 2019-09-28 22:29:30 +0200 | [diff] [blame] | 6 | library(plotly) |
| 7 | library(htmlwidgets) |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 8 | |
Marc Kupietz | b1be8b4 | 2019-09-28 17:57:31 +0200 | [diff] [blame] | 9 | mapfile <- "examples/geo/data/cache/map-v2.rds" |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 10 | |
| 11 | fetchAndPrepareMap <- function(map, pick) { |
| 12 | cat("Downloading GADM map data for ", map, "\n") |
| 13 | sp <- readRDS(url(sprintf("https://biogeo.ucdavis.edu/data/gadm3.6/Rsp/gadm36_%s_sp.rds", map))) |
| 14 | if (pick > 0) { |
| 15 | sp@polygons <- sp@polygons[pick] |
| 16 | sp@data <- sp@data[pick,] |
| 17 | } |
| 18 | sp |
| 19 | } |
| 20 | |
| 21 | fetchMaps <- function(maps, picks) { |
| 22 | if (file.exists(mapfile)) { |
| 23 | df <- readRDS(mapfile) |
| 24 | } else { |
| 25 | cat("Downloading and caching GADM map data.\nPlease note that the GADM map data is licensed for academic use and other non-commercial use, only.\nSee https://gadm.org/license.html\n") |
| 26 | df <- broom::tidy(Reduce(bind, mapply(fetchAndPrepareMap, maps, picks))) |
| 27 | dir.create(dirname(mapfile), recursive = TRUE, showWarnings = FALSE) |
| 28 | saveRDS(df, mapfile) |
| 29 | } |
| 30 | df$grp <- floor(as.numeric(as.character(df$group))) |
| 31 | df |
| 32 | } |
| 33 | |
Marc Kupietz | b1be8b4 | 2019-09-28 17:57:31 +0200 | [diff] [blame] | 34 | map <- fetchMaps(c("DEU_1", "AUT_0", "CHE_0", "LUX_0", "BEL_3", "ITA_1", "LIE_0"), c(0, 0, 0, 0, 34, 17, 0)) |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 35 | |
| 36 | geoDistrib <- function(query, kco = new("KorAPConnection", verbose=TRUE)) { |
| 37 | regions <- readRDS("examples/geo/data/regions.rds") |
| 38 | regions$freq <- NA |
Marc Kupietz | 9402dec | 2019-09-28 22:29:30 +0200 | [diff] [blame] | 39 | regions$url <- NA |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 40 | plot <- NULL |
| 41 | vc <- "" |
| 42 | for (i in 1:nrow(regions)) { |
| 43 | if (!is.na(regions[i,]$query)) { |
Marc Kupietz | b1be8b4 | 2019-09-28 17:57:31 +0200 | [diff] [blame] | 44 | cat(as.character(regions[i,]$region), "\n") |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 45 | regions[i,]$total <- corpusStats(kco, vc=paste0(vc, regions[i,]$query))@tokens |
| 46 | if (regions[i,]$total == 0) { |
| 47 | regions[i,]$afreq <- 0 |
| 48 | regions[i,]$freq <- NA |
| 49 | } else { |
Marc Kupietz | 9402dec | 2019-09-28 22:29:30 +0200 | [diff] [blame] | 50 | kqo <- corpusQuery(kco, query, vc=paste0(vc, regions[i,]$query)) |
| 51 | regions[i,]$afreq <- kqo@totalResults |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 52 | regions[i,]$freq <- regions[i,]$afreq / regions[i,]$total |
Marc Kupietz | 9402dec | 2019-09-28 22:29:30 +0200 | [diff] [blame] | 53 | regions[i,]$url <- kqo@webUIRequestUrl |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 54 | } |
| 55 | cat(regions[i,]$afreq, regions[i,]$total, regions[i,]$freq, "\n") |
Marc Kupietz | 9402dec | 2019-09-28 22:29:30 +0200 | [diff] [blame] | 56 | plot <- updatePlot(query, map, regions) |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 57 | cat("\n\n") |
| 58 | } |
| 59 | } |
Marc Kupietz | 9402dec | 2019-09-28 22:29:30 +0200 | [diff] [blame] | 60 | pp <- ggplotly(plot) |
| 61 | for (i in 1:nrow(regions)) { |
| 62 | j <- grep(paste0(regions$region[i], "\""), pp$x$data, perl=TRUE) |
| 63 | pp$x$data[[j]]$customdata <- regions[i,]$url |
| 64 | } |
| 65 | ppp <- onRender(pp, "function(el, x) { el.on('plotly_click', function(d) { var url=d.points[0].data.customdata; window.open(url, 'korap') })}") |
| 66 | print(ppp) |
| 67 | pp |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 68 | } |
| 69 | |
Marc Kupietz | 9402dec | 2019-09-28 22:29:30 +0200 | [diff] [blame] | 70 | updatePlot <- function(query, map, regions) { |
| 71 | map$ipm <- sapply(map$grp, function(grp) regions$freq[grp] * 10^6) |
| 72 | map$region <- sapply(map$grp, function(grp) regions$region[grp]) |
| 73 | map$url <- sapply(map$grp, function(grp) regions$url[grp]) |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 74 | regionsPlot <- ggplot(map) + |
Marc Kupietz | 9402dec | 2019-09-28 22:29:30 +0200 | [diff] [blame] | 75 | geom_polygon(aes(x=long, y=lat, group=group, fill=ipm, text=region), colour= "black", size=.1) + |
Marc Kupietz | 451980d | 2019-09-23 23:45:10 +0200 | [diff] [blame] | 76 | theme(axis.line.x = element_blank(), |
| 77 | axis.line.y = element_blank(), |
| 78 | panel.grid.major = element_blank(), |
| 79 | panel.grid.minor = element_blank(), |
| 80 | panel.border = element_blank(), |
| 81 | panel.background = element_blank(), |
| 82 | axis.line=element_blank(),axis.text.x=element_blank(), |
| 83 | axis.text.y=element_blank(),axis.ticks=element_blank(), |
| 84 | axis.title.x=element_blank(), |
| 85 | axis.title.y=element_blank()) + |
| 86 | coord_equal(ratio=1.5) + |
| 87 | labs(title = sprintf("Regional distribution of ā%sā", query)) |
| 88 | print(regionsPlot) |
| 89 | regionsPlot |
| 90 | } |
| 91 | |
| 92 | #geoDistrib("wegen dem [tt/p=NN]") |
| 93 | geoDistrib("heuer") |
| 94 | #geoDistrib("Sonnabend") |
| 95 | #geoDistrib("eh") |