Visualizing with D3 JavaScript Network Graphs from R
Hi all, I want to visualize some of my courses I’ve followed by year. I have found D3 JavaScript Network Graphs from R with some nice and cool visualizations.
In this post I will describe how I transform my data for creating the RadialNetwork and DiagonalNetwork visualizations.
Loading and have a look at the data
First off all I had a Excel file with some of my followed some courses since 2013. I’ve saved it to a csv file courses.csv
. Let have a look of the file.
1 2 3 |
setwd("~/Documents") courses <- read.csv("courses.csv", sep=";",header=TRUE, stringsAsFactors = FALSE) head(courses) |
1 2 3 4 5 6 7 8 |
## year month course type ## 1 2013 December Excel 2007-2010 Expert: Analyse en rapportage in-class ## 2 2014 Januari Business Analysis (Vijfhart) in-class ## 3 2014 November Business Intelligence & Analytics (Cibit) in-class ## 4 2014 December Big Data Fundamentals (IIR Trainingen) in-class ## 5 2015 Januari Datameer Big Data Certified Analyst (Datameer) in-class ## 6 2015 Februari The Python programming language (AT Computing) in-class |
1 |
str(courses) |
1 2 3 4 5 6 |
## 'data.frame': 25 obs. of 4 variables: ## $ year : int 2013 2014 2014 2014 2015 2015 2015 2015 2015 2015 ... ## $ month : chr "December" "Januari" "November" "December" ... ## $ course: chr "Excel 2007-2010 Expert: Analyse en rapportage" "Business Analysis (Vijfhart)" "Business Intelligence & Analytics (Cibit)" "Big Data Fundamentals (IIR Trainingen)" ... ## $ type : chr "in-class" "in-class" "in-class" "in-class" ... |
Oke, we have a data.frame of 25 observation of 4 variables (year, month, course and type). Since both visualizations are based on tree diagrams we need to create a tree from my data.frame
. After some searching on the internet I’ve found the package data.tree. In this package there is a paragraph called “Create a tree from a data.frame
”.
Let’s start to create a tree from my courses
Load the library.
1 |
library(data.tree) |
The data.frame
is a table and each row is a leaf. We create a path from root to leaf and save that into the data.frame
as new column pathString
.
Define the hierarchy (Year|Month|Type|Course)
1 2 |
courses$pathString <- paste("courses",courses$year,courses$month,courses$type,courses$course, sep= "|") head(courses) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
## year month course type ## 1 2013 December Excel 2007-2010 Expert: Analyse en rapportage in-class ## 2 2014 Januari Business Analysis (Vijfhart) in-class ## 3 2014 November Business Intelligence & Analytics (Cibit) in-class ## 4 2014 December Big Data Fundamentals (IIR Trainingen) in-class ## 5 2015 Januari Datameer Big Data Certified Analyst (Datameer) in-class ## 6 2015 Februari The Python programming language (AT Computing) in-class ## pathString ## 1 courses|2013|December|in-class|Excel 2007-2010 Expert: Analyse en rapportage ## 2 courses|2014|Januari|in-class|Business Analysis (Vijfhart) ## 3 courses|2014|November|in-class|Business Intelligence & Analytics (Cibit) ## 4 courses|2014|December|in-class|Big Data Fundamentals (IIR Trainingen) ## 5 courses|2015|Januari|in-class|Datameer Big Data Certified Analyst (Datameer) ## 6 courses|2015|Februari|in-class|The Python programming language (AT Computing) |
After we have created the pathString
we need to convert it to a node, with the package data.tree
is that very easy.
1 2 |
coursesTree <- as.Node(courses, pathDelimiter = "|") coursesTree |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
## levelName ## 1 courses ## 2 ¦--2013 ## 3 ¦ °--December ## 4 ¦ °--in-class ## 5 ¦ °--Excel 2007-2010 Expert: Analyse en rapportage ## 6 ¦--2014 ## 7 ¦ ¦--Januari ## 8 ¦ ¦ °--in-class ## 9 ¦ ¦ °--Business Analysis (Vijfhart) ## 10 ¦ ¦--November ## 11 ¦ ¦ °--in-class ## 12 ¦ ¦ °--Business Intelligence & Analytics (Cibit) ## 13 ¦ °--December ## 14 ¦ °--in-class ## 15 ¦ °--Big Data Fundamentals (IIR Trainingen) ## 16 ¦--2015 ## 17 ¦ ¦--Januari ## 18 ¦ ¦ °--in-class ## 19 ¦ ¦ °--Datameer Big Data Certified Analyst (Datameer) ## 20 ¦ ¦--Februari ## 21 ¦ ¦ °--in-class ## 22 ¦ ¦ °--The Python programming language (AT Computing) ## 23 ¦ ¦--May ## 24 ¦ ¦ °--online ## 25 ¦ ¦ ¦--The Data Scientist's Toolbox (Coursera) ## 26 ¦ ¦ °--Quick start to JavaScript Volume 1,2 & 3 (Pluralsight) ## 27 ¦ ¦--June ## 28 ¦ ¦ °--online ## 29 ¦ ¦ ¦--R Programming (Cousera) ## 30 ¦ ¦ ¦--Big Data Analytics with Tableau (Pluralsight) ## 31 ¦ ¦ ¦--Data Analysis Fundamentals with Tableau (Pluralsight) ## 32 ¦ ¦ °--Getting and Cleaning Data (Coursera) ## 33 ¦ ¦--November ## 34 ¦ ¦ ¦--online ## 35 ¦ ¦ ¦ °--Exploratory Data Analysis (Coursera) ## 36 ¦ ¦ °--in-class ## 37 ¦ ¦ °--Applied Statistics and data analysis (Tridata) ## 38 ¦ °--December ## 39 ¦ ¦--online ## 40 ¦ ¦ ¦--Reproducible Research (Coursera) ## 41 ¦ ¦ °--R Programming (Data-Mania) ## 42 ¦ °--in-class ## 43 ¦ °--Scrum Master ## 44 °--2016 ## 45 ¦--Januari ## 46 ¦ ¦--online ## 47 ¦ ¦ °--Statistical Inference (Coursera) ## 48 ¦ °--in-class ## 49 ¦ ¦--Using Splunk 6 (Splunk) ## 50 ¦ ¦--Searching and Reporting with Splunk 6 (Splunk) ## 51 ¦ ¦--Creating Splunk 6.3 Knowledge Objects (Splunk) ## 52 ¦ °--Splunk Tutorial (Splunk) ## 53 ¦--April ## 54 ¦ °--in-class ## 55 ¦ °--JavaScript (Vijfhart) ## 56 °--August ## 57 °--online ## 58 ¦--JavaScript (Codecademy) ## 59 °--Intro to Descriptive Statistics (Udemy) |
The last thing we need is a list-to-list structure before we can plot the two networkD3 visulizatios
1 |
coursesTreeList <- ToListExplicit(coursesTree, unname =TRUE) |
Plot the two visulizatios
1 2 3 4 5 6 7 |
library(networkD3) diagonalNetwork(List=coursesTreeList, fontSize = 13, fontFamily = "OpenSans-Light", nodeStroke = "orange", linkColour = "#AAA", opacity = 0.9) |
1 2 3 4 5 |
radialNetwork(List=coursesTreeList, fontSize = 13, fontFamily = "OpenSans-Light", nodeStroke = "orange", opacity = 0.9) |
Well that look nice!! This package is great!!
This code can also be find on my GitHub
SessionInfo
1 |
sessionInfo() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
## R version 3.3.2 (2016-10-31) ## Platform: x86_64-apple-darwin13.4.0 (64-bit) ## Running under: macOS Sierra 10.12.1 ## ## locale: ## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 ## ## attached base packages: ## [1] stats graphics grDevices utils datasets methods base ## ## other attached packages: ## [1] magrittr_1.5 RWordPress_0.2-3 networkD3_0.2.13 data.tree_0.4.0 ## [5] knitr_1.15 ## ## loaded via a namespace (and not attached): ## [1] igraph_1.0.1 Rcpp_0.12.8 rstudioapi_0.6 devtools_1.12.0 ## [5] munsell_0.4.3 colorspace_1.3-0 R6_2.2.0 httr_1.2.1 ## [9] stringr_1.1.0 plyr_1.8.4 tools_3.3.2 visNetwork_1.0.2 ## [13] webshot_0.3.2 git2r_0.15.0 withr_1.0.2 influenceR_0.1.0 ## [17] DiagrammeR_0.8.4 htmltools_0.3.5 yaml_2.1.14 digest_0.6.10 ## [21] assertthat_0.1 tibble_1.2 bitops_1.0-6 htmlwidgets_0.8 ## [25] RCurl_1.95-4.8 curl_2.2 memoise_1.0.0 evaluate_0.10 ## [29] rmarkdown_1.1 stringi_1.1.2 XMLRPC_0.3-0 scales_0.4.1 ## [33] XML_3.98-1.5 jsonlite_1.1 markdown_0.7.7 |
I’m creative, imaginative, free-thinking, daydreamer and strategic who needs freedom, peace and space to brainstorm and to fantasize about new and surprising solutions. Generates ideas and solves difficult problems, sees all options, judges accurately and wants to get to the bottom of things.
Interested in Data Science, Data Analytics, Running, Crossfit, Obstacle Running and Coffee.