The Batman’s Ecosystem
[This article was first published on Ripples, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
If I weren’t crazy, I’d be insane! (Joker)
I present today a dynamical D3.js plot where I combine three things:
- The Batman curve
- A text mining analysis to obtain most common words from the Batman’s page at Wikipedia
- A line plot using morris.js library of
rCharts
package where point labels are the words obtained in the previous step
This is my particular homage to one of the most amazing superheros ever, together with Daredevil. Since I am not allowed to post JavaScript nor embed objects in my WordPress.com blog, I can only show you an screenshot of the graph:
If you want to play with the graph, you can download it here. This is not the first time I write about Batman (see this), and maybe will not be the last one.
The code:
require(ggplot2) require(dplyr) require(rCharts) library(rvest) library(tm) f1u <- function(x) {ifelse ((abs(x) > 3 & abs(x) <= 7), 3*sqrt(1-(x/7)^2), 0)} f1d <- function(x) {ifelse ((abs(x) >= 4 & abs(x) <= 7), -3*sqrt(1-(x/7)^2), 0)} f2u <- function(x) {ifelse ((abs(x) > 0.50 & abs(x) < 0.75), 3*abs(x)+0.75, 0)} f2d <- function(x) {ifelse ((abs(x) > -4 & abs(x) < 4), abs(x/2)-(3*sqrt(33)-7)*x^2/112-3 + sqrt(1-(abs(abs(x)-2)-1)^2), 0)} f3u <- function(x) {ifelse ((x > -0.5 & x < 0.5), 2.25, 0)} f4u <- function(x) {ifelse ((abs(x) > 1 & abs(x) <= 3), 6 * sqrt(10)/7 + (1.5 - 0.5 * abs(x)) * sqrt(abs(abs(x)-1)/(abs(x)-1)) - 6 * sqrt(10) * sqrt(4-(abs(x)-1)^2)/14, 0)} f5u <- function(x) {ifelse ((abs(x) >= 0.75 & abs(x) <= 1), 9-8*abs(x), 0)} fu <- function (x) f1u(x)+f2u(x)+f3u(x)+f4u(x)+f5u(x) fd <- function (x) f1d(x)+f2d(x) batman <- function(r,x) {ifelse(r%%2==0, fu(x), fd(x))} data.frame(x=seq(from=-7, to=7, by=0.125)) %>% mutate(y=batman(row_number(), x)) -> df html("https://en.wikipedia.org/wiki/Batman") %>% html_nodes("#bodyContent") %>% html_text() %>% VectorSource() %>% Corpus() %>% tm_map(tolower) %>% tm_map(removePunctuation) %>% tm_map(removeNumbers) %>% tm_map(stripWhitespace) %>% tm_map(removeWords, c(stopwords(kind = "en"), "batman", "batmans")) %>% DocumentTermMatrix() %>% as.matrix() %>% colSums() %>% sort(decreasing=TRUE) %>% head(n=nrow(df)) %>% attr("names") -> df$word m1=mPlot(x = "x", y = "y", data = df, type = "Line") m1$set(pointSize = 5, lineColors = c('black', 'black'), width = 900, height = 500, hoverCallback = "#! function(index, options, content) { var row = options.data[index] return '<b>' + row.word + '</b>'} !#", lineWidth = 2, grid=FALSE, axes=FALSE) m1 m1$save('Batman.html', standalone = TRUE)
To leave a comment for the author, please follow the link and comment on their blog: Ripples.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.