====== Worldbank data e.g. ====== library(googleVis) demo(googleVis) Sys.setlocale(category = "LC_ALL", locale = "us") install.packages("googleVis") library(googleVis) demo(WorldBank) {{youtube>nNfT_UBmmu0}} ## Sys.setlocale("LC_CTYPE", "en_US.UTF-8") ## comment out if encoding problem occurs Sys.setlocale(category = "LC_ALL", locale = "us") ## SOURCE: http://lamages.blogspot.co.uk/2011/09/accessing-and-plotting-world-bank-data.html ## This demo shows how country level data can be accessed from the World Bank via their API and displayed with a Motion Chart. ## Inspired by Google's Public Data Explorer, see # http://www.google.com/publicdata/home ## ## For the World Bank Data terms of use see: ## http://data.worldbank.org/summary-terms-of-use ## ## To run this demo an internet connection and Flash are required. ## This demo is part of the googleVis R package. ## ## Markus Gesmann, 24 September 2011 (THANK YOU TO ALL AUTHORS & CREATORS!) ## Ryan > I updated the 12000 per.page to 14000 because the data was 'clipping' - missing some install.packages("googleVis") library(googleVis) getWorldBankData <- function(id='SP.POP.TOTL', date='1960:2010', value="value", per.page=14000){ require(RJSONIO) url <- paste("http://api.worldbank.org/countries/all/indicators/", id, "?date=", date, "&format=json&per_page=", per.page, sep="") wbData <- fromJSON(url)[[2]] wbData = data.frame( year = as.numeric(sapply(wbData, "[[", "date")), value = as.numeric(sapply(wbData, function(x) ifelse(is.null(x[["value"]]),NA, x[["value"]]))), country.name = sapply(wbData, function(x) x[["country"]]['value']), country.id = sapply(wbData, function(x) x[["country"]]['id']) ) names(wbData)[2] <- value return(wbData) } ## OK - that above is the function that calls DATA (JSON format) from the ## world bank APIs that have been exposed to make info available - ## when called, you'll see the variables populate getWorldBankCountries <- function(){ require(RJSONIO) wbCountries <- fromJSON("http://api.worldbank.org/countries?per_page=14000&format=json") wbCountries <- data.frame(t(sapply(wbCountries[[2]], unlist))) wbCountries$longitude <- as.numeric(wbCountries$longitude) wbCountries$latitude <- as.numeric(wbCountries$latitude) levels(wbCountries$region.value) <- gsub(" \\(all income levels\\)", "", levels(wbCountries$region.value)) return(wbCountries) } ### now pull the countries and the locations ## Create a string 1960:this year, e.g. 1960:2011 years <- paste("1960:", format(Sys.Date(), "%Y"), sep="") ## this just makes a string that says "1960:2014" - that's it ## Fertility rate fertility.rate <- getWorldBankData(id='SP.DYN.TFRT.IN', date=years, value="fertility.rate") ## calls the function iwth instructions to pull fertility data ## Life Expectancy life.exp <- getWorldBankData(id='SP.DYN.LE00.IN', date=years, value="life.expectancy") ##calls function to get hte life expectancy (same function, different id to API) ## Population population <- getWorldBankData(id='SP.POP.TOTL', date=years, value="population") ### and population - again, same funciton, different ID, different query, different data returns (12k-15k obs) ## GDP per capita (current US$) GDP.per.capita <- getWorldBankData(id='NY.GDP.PCAP.CD', date=years, value="GDP.per.capita.Current.USD") ## and one more trip to the API to get the GDP data ## Merge data sets wbData <- merge(life.exp, fertility.rate) wbData <- merge(wbData, population) wbData <- merge(wbData, GDP.per.capita) ## RA > I'm not sure if merge requres the left hand column to be same across all sets ## like a KEY - and if needs to be in same order, but suggest checking/testing/researching ## if you are hacking your own data in here head(wbData) dim(wbData) ## Get country mappings wbCountries <- getWorldBankCountries() head(wbCountries) ## returns a BEAUTIFUL key: ## header id iso2Code name region.id region.value adminregion.id adminregion.value incomeLevel.id incomeLevel.value lendingType.id lendingType.value capitalCity longitude latitude ## 1st row 1 ABW AW Aruba LCN Latin America & Caribbean NOC High income: nonOECD LNX Not classified Oranjestad 46 57 ## Add regional information wbData <- merge(wbData, wbCountries[c("iso2Code", "region.value", "incomeLevel.value")], by.x="country.id", by.y="iso2Code") ## here is magic of merge ## Filter out the aggregates and country id column subData <- subset(wbData, !region.value %in% "Aggregates" , select= -country.id) ## SUBDATA is only 9.9k long, rather than 12k (filtered Aggregates) // 12k may not be enougn anymore ## Create a motion chart!!!!!!!!!!!!!! (make sure you save first!) M <- gvisMotionChart(subData, idvar="country.name", timevar="year", options=list(width=700, height=600)) ## using SubData that looks like this: # id iso2Code name region.id region.value adminregion.id adminregion.value incomeLevel.id incomeLevel.value lendingType.id lendingType.value capitalCity longitude latitude # 1 ABW AW Aruba LCN Latin America & Caribbean NOC High income: nonOECD LNX Not classified Oranjestad 46 57 # 2 AFG AF Afghanistan SAS South Asia SAS South Asia LIC Low income IDX IDA Kabul 193 120 # 3 AFR A9 Africa NA Aggregates NA Aggregates Aggregates 1 1 ## Wont "do" anything except prepare the data in "M" for the plot ## Display the chart in your browser plot(M) ## awesome! ## SOURCE: http://lamages.blogspot.co.uk/2011/09/accessing-and-plotting-world-bank-data.html ## ORIGiNAL SOURCE: Posted by Markus Gesmann ## comments and a few tweaks by Ryan Anderson www.dreamtolearn.com ====== subway line 5-8 boarding-unboarding passenger ====== setwd("D:/Users/Hyo/Cs-Kant/CS/Rdata/rloveyou") library(googleVis) sub58 <- read.csv("서울지하철_5-8호선_이용현황_시간대별.csv",header=T) sub58 sub58_2 <- gvisMotionChart(sub58,idvar="호선명",timevar="시간") plot(sub58_2) ====== Hurricane Andrew ====== setwd("D:/Users/Hyo/Cs-Kant/CS/Rdata/rloveyou") library(googleVis) data(Andrew) Andrew storm1 <- gvisMap(Andrew, "LatLong" , "Tip", options=list(showTip=TRUE, showLine=TRUE, enableScrollWheel=TRUE, mapType='hybrid', useMapTypeControl=TRUE, width=800,height=400)) plot(storm1) ====== Seoul District Office marking ====== ====== Google Gauge Chart ====== library(googleVis) CityPopularity ex1 <-gvisGauge(CityPopularity, options=list(min=0, max=800, greenFrom=500, greenTo=800, yellowFrom=300, yellowTo=500, redFrom=0, redTo=300, width=400, height=300)) plot(ex1) ====== Pie charts ====== library(googleVis) CityPopularity pie1 <- gvisPieChart(CityPopularity,options=list(width=400, height=300)) plot(pie1) ====== Bar charts ====== library(googleVis) fruits=data.frame(month=c("JAN","FEB","MAR"), apple=c(30,10,20), orange=c(20,40,30)) line <- gvisLineChart(fruits) plot(line) # 양쪽면에 y축 표시하기 line2 <- gvisLineChart(fruits,"month",c("apple","orange"), option=list(series="[{targetAxisIndex:0}, {targetAxisIndex:1}]", vAxes="[{title:'apple'},{title:'orange'}]" )) plot(line2) # 선모양 변경하기 line3 <- gvisLineChart(fruits,xvar="month",yvar=c("apple","orange"), options=list(series="[{color:'blue',targetAxisIndex:0, linewidth:1,lineDashStyle:[1,10,1,10,1,10]}, {color:'red',targetAxisIndex:1, linewidth:2,lineDashStyle:[4,1]}]", vAxes="[{title:'apple'},{title:'orange'}]" )) plot(line3) gbar <- gvisBarChart(fruits) plot(gbar) ====== Bubble charts ====== library(googleVis) Fruits a <- gvisBubbleChart(Fruits, idvar="Fruit", xvar="Sales", yvar="Expenses", colorvar="Year", sizevar="Profit", options=list(height=500,weight=800, hAxis='{minValue:75, maxValue:125}')) plot(a) ====== Public Parking Places ====== setwd("D:/Users/Hyo/Cs-Kant/CS/Rdata/rloveyou") install.packages("ggmap") install.packages("stringr") library(ggmap) library(stringr) loc <- read.csv("서울_강동구_공영주차장_위경도.csv") loc kd <- get_map("Amsa-dong",zoom=13, maptype = "roadmap") kor.map <- ggmap(kd)+geom_point(data=loc, aes(x=LON, y=LAT), size=3,alpha=0.7,color="red") kor.map + geom_text(data=loc, aes(x = LON, y = LAT+0.001, label=주차장명),size=3) ggsave("kd.png",dpi=500) # 시립 구립 구분하기 loc2 <- str_sub(loc$주차장명,start=-2,end=-2) loc2 colors <- c() for ( i in 1:length(loc2)) { if (loc2[i] == '구' ) { colors <- c(colors,"red") } else { colors <- c(colors,"blue") } } kd <- get_map("Amsa-dong",zoom=13, maptype = "roadmap") kor.map <- ggmap(kd)+geom_point(data=loc, aes(x=LON, y=LAT), size=3,alpha=0.7,color=colors) kor.map + geom_text(data=loc, aes(x = LON, y = LAT+0.001, label=주차장명),size=3) ggsave("kd2.png",dpi=500) ====== Places in Jeju ====== install.packages("googleVis") install.packages("ggmap") Sys.setlocale("LC_CTYPE", "en_US.UTF-8") library(googleVis) library(ggmap) ft_placelst <- function(place) { temp <- geocode(place) place <- gsub("제주 ","",place) df_lst <- cbind(place,temp) return(df_lst) } df_placelst <- ft_placelst(readLines("제주여행코스.txt")) latlong <- paste(df_placelst$lat,":",df_placelst$lon) latlong <- gsub(" ","",latlong) df_placelst <- cbind(df_placelst, latlong) df_placelst placePath <- gvisMap(df_placelst, "latlong" ,"place" , options=list(showTip=TRUE, showLine=TRUE, enableScrollWheel=TRUE, mapType='hybrid', useMapTypeControl=TRUE, width=800,height=1000)) plot(placePath) ====== Population by districts ====== library(ggmap) library(grid) pop <- read.csv("지역별인구현황_2014_4월기준.csv",header=T) pop lon <- pop$LON lat <- pop$LAT data <- pop$총인구수 df <- data.frame(lon,lat,data) df map1 <- get_map("Jeonju",zoom=7 , maptype='roadmap') map1 <- ggmap(map1) map1 + geom_point(aes(x=lon,y=lat,colour=data,size=data),data=df) ggsave("pop.png",scale=1,width=7,height=4,dpi=500)