### R code from vignette source 'dmsurvivor.Rnw' ### Encoding: UTF-8 ################################################### ### code chunk number 1: copyright (eval = FALSE) ################################################### ## # The Rattle Book R Code ## # ## # Copyright (c) 2011 Graham.Williams@togaware.com ## # ################################################### ### code chunk number 2: r:preface:options (eval = FALSE) ################################################### ## options(width=58, scipen=5, digits=4, continue=" ") ################################################### ### code chunk number 3: r:preface:example ################################################### library(rattle) rattle() cat("Welcome to Rattle", "and the world of Data Mining.\n") ################################################### ### code chunk number 4: dmsurvivor.Rnw:438-439 ################################################### crv$close <- "close" ################################################### ### code chunk number 5: r:preface:close_rattle ################################################### rattle:::close_rattle() ################################################### ### code chunk number 6: r:dmsurvivor:initialisations ################################################### # Load the required package for generating LaTeX tables. library(xtable) # Note that we load all packages here, and that we also need to load them in the # appropraite places in the examples throughout, so that the code segments # can run independently. 091103 Stop loading everything here as it gets # complicated - some packages cause issues in others. So, for each chapter, # be sure to detach any packages loaded in that chapter. # library(proto) # library(grid) # library(plyr) # library(reshape) # library(colorspace) # library(ggplot2) # library(XML) # library(pmml) # library(foreign) # library(sp) # library(maps) # library(rattle) # library(RODBC) # library(maptools) # library(mapdata) # library(bitops) # library(gtools) # library(gdata) # library(caTools) # library(gplots) # library(zoo) # library(mgcv) # library(gpclib) # library(deldir) # library(spatstat) # library(plotrix) # library(igraph) # library(network) # library(sna) # library(Hmisc) # library(tools) # library(archetypes) # Reduce the line width to suit publication # in book form. We can always reset all options to their # original values using: options(original.options). original.options <- options(width=58, continue=" ", scipen=5, digits=4) ######################################################################## # Support functions. source("utility.R") REBUILD <- FALSE ################################################### ### code chunk number 7: r:intro:count_packages ################################################### local({r <- getOption("repos"); r["CRAN"] <- "http://cran.r-project.org"; options(repos=r)}) setRepositories(graphics=FALSE, ind=1:7) pkgs.cran <- available.packages() pkgs.count <- length(unique(row.names(pkgs.cran))) ################################################### ### code chunk number 8: r:start:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() ################################################### ### code chunk number 9: r:start:r_cli ################################################### # Start up R in a terminal and capture the screen. # Note the 2 second pause - otherwise the window closes too quickly! fname <- "start:r_cli" if (rebuild(fname)) { system("gnome-terminal --title='Gnome Terminal' -e R", wait=FALSE) screenShot("start:r_cli", title="Gnome Terminal", pause=2, close=TRUE) } ################################################### ### code chunk number 10: r:start:load_rattle ################################################### library(rattle) rattle() ################################################### ### code chunk number 11: r:start:no_ask_close_no_verbose ################################################### crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) ################################################### ### code chunk number 12: r:start:rattle_startup ################################################### screenShot("start:rattle_startup", title="RattleStart") ################################################### ### code chunk number 13: r:start:rattle_startup_weather ################################################### rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) screenShot("start:rattle_startup_weather", title="RattleWeather") system("wmctrl -r 'R Data Miner - [Rattle (weather.csv)]' -e 0,-1,-1,858,900") screenShot("start:rattle_startup_weather_full", title="RattleWeather") system("wmctrl -r 'R Data Miner - [Rattle (weather.csv)]' -e 0,-1,-1,858,543") ################################################### ### code chunk number 14: r:start:rattle_startup_weather_full_annotate ################################################### system(paste("cd graphics;", "convert start:rattle_startup_weather_full.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 15,51 77,104 5,5"', '-draw "roundrectangle 4,109 43,131 5,5"', '-draw "roundrectangle 81,176 227,202 5,5"', "start:rattle_startup_weather_full_annotate.png")) # system("display graphics/start:rattle_startup_weather_full_annotate.png") ################################################### ### code chunk number 15: r:start:model_tab_build_weather_rpart ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.MODEL.NAME)) rattle:::switchToPage(crv$NOTEBOOK.MODEL.NAME) rattle:::executeModelTab() screenShot("start:rattle_weather_rpart", title="RattleWeather") ################################################### ### code chunk number 16: r:start:model_tab_build_weather_rpart_annotate ################################################### system(paste("cd graphics;", "convert start:rattle_weather_rpart.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 48,139 102,158 5,5"', '-draw "roundrectangle 348,109 398,131 5,5"', "start:rattle_weather_rpart_annotate.png")) # system("display graphics/start:rattle_weather_rpart_annotate.png") ################################################### ### code chunk number 17: r:start:click_draw_button ################################################### on_rpart_plot_button_clicked(NULL) system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,900,600') Sys.sleep(0.01) # Give time for the window to refresh screenShot("start:rattle_weather_rpart_draw", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 18: r:start:list_weather_rules ################################################### asRules(crs$rpart) ################################################### ### code chunk number 19: r:start:explore_target ################################################### rattle:::executeExplorePlot("crs$dataset", barplots="RainTomorrow", target=NULL) system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,900,600') screenShot("start:explore_target", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 20: r:start:explore_rattle_distr ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.EXPLORE.NAME)) rattle:::switchToPage(crv$NOTEBOOK.EXPLORE.NAME) rattle:::theWidget("explore_distr_radiobutton")$setActive(TRUE) system("wmctrl -r 'R Data Miner - [Rattle (weather.csv)]' -e 0,0,0,-1,590") system("xdotool mousemove 165 300") system("xdotool click 1") Sys.sleep(0.01) system("xdotool mousemove 165 395") system("xdotool click 1") Sys.sleep(0.01) system("xdotool mousemove 240 300") system("xdotool click 1") Sys.sleep(0.01) system("xdotool mousemove 240 395") system("xdotool click 1") Sys.sleep(0.01) # Give time for the window to refresh screenShot("start:explore_rattle_distr", title="RattleWeather") ################################################### ### code chunk number 21: r:start:explore_rattle_distr_annotate ################################################### system(paste("cd graphics;", "convert start:explore_rattle_distr.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 45,109 104,131 5,5"', '-draw "roundrectangle 159,140 272,160 5,5"', "start:explore_rattle_distr_annotate.png")) # system("display graphics/start:explore_rattle_distr_annotate.png") ################################################### ### code chunk number 22: r:start:explore_tab_box_hist_plot ################################################### rattle:::executeExplorePlot("crs$dataset[crs$sample,]", boxplots=c("MinTemp", "Sunshine"), hisplots=c("MinTemp", "Sunshine")) system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,900,600') Sys.sleep(0.01) # Give time for the window to refresh screenShot("start:rattle_weather_box_hist_plot", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 23: r:start:explore_tab_bar_dot_plot ################################################### rattle:::executeExplorePlot("crs$dataset[crs$sample,]", boxplots=NULL, hisplots=NULL, # 110126 barplots=c("WindDir9am"), dotplots=c("WindDir9am"), mosplot=c("WindDir9am")) system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,900,600') Sys.sleep(1) # Give time for the window to refresh screenShot("start:rattle_weather_bar_dot_plot", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 24: r:start:evaluate_tab_matrix_tree_test ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.EVALUATE.NAME)) rattle:::switchToPage(crv$NOTEBOOK.EVALUATE.NAME) rattle:::theWidget("evaluate_testing_radiobutton")$setActive(TRUE) rattle:::executeEvaluateTab() screenShot("start:rattle_weather_rpart_confusion_matrix_test", title="RattleWeather") ################################################### ### code chunk number 25: r:start:rattle_weather_rpart_confusion_matrix_test_annotate ################################################### system(paste("cd graphics;", "convert start:rattle_weather_rpart_confusion_matrix_test.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 400,109 465,131 5,5"', '-draw "roundrectangle 48,138 156,160 5,5"', '-draw "roundrectangle 58,170 115,191 5,5"', '-draw "roundrectangle 232,205 305,228 5,5"', "start:rattle_weather_rpart_confusion_matrix_test_annotate.png")) #system("display graphics/start:rattle_weather_rpart_confusion_matrix_test_annotate.png") ################################################### ### code chunk number 26: r:start:evaluate_tab_matrix_table ################################################### included <- union(rattle:::getVariableIndicies(crs$input), rattle:::getVariableIndicies(crs$target)) crs$pr <- predict(crs$rpart, crs$dataset[crs$test, included], type="class") tbl.test <- table(crs$dataset[crs$test, included]$RainTomorrow, crs$pr, dnn=c("Actual", "Predicted")) tbl.test.per <- round(100*tbl.test/sum(tbl.test)) ################################################### ### code chunk number 27: r:start:evaluate_tab_matrix_table_train ################################################### crs$pr <- predict(crs$rpart, crs$dataset[crs$sample, included], type="class") tbl.train <- table(crs$dataset[crs$sample, included]$RainTomorrow, crs$pr, dnn=c("Actual", "Predicted")) tbl.train.per <- round(100*tbl.train/sum(tbl.train)) #print(xtable(cbind(tbl.train, tbl.train.per))) #print(xtable(tbl.train, caption="Counts"), floating=FALSE) ################################################### ### code chunk number 28: r:start:evaluate_tab_matrix_table_train_per ################################################### #print(xtable(tbl.train.per, digits=0, caption="Percentages"), floating=FALSE) ################################################### ### code chunk number 29: r:start:evaluate_tab_matrix_table_validate ################################################### crs$pr <- predict(crs$rpart, crs$dataset[crs$validate, included], type="class") tbl.validate <- table(crs$dataset[crs$validate, included]$RainTomorrow, crs$pr, dnn=c("Actual", "Predicted")) tbl.validate.per <- round(100*tbl.validate/sum(tbl.validate)) #print(xtable(cbind(tbl.train, tbl.train.per))) #print(xtable(tbl.train, caption="Counts"), floating=FALSE) ################################################### ### code chunk number 30: r:start:evaluate_tab_matrix_table_test ################################################### crs$pr <- predict(crs$rpart, crs$dataset[crs$test, included], type="class") tbl.test <- table( crs$dataset[crs$test, included]$RainTomorrow, crs$pr, dnn=c("Actual", "Predicted")) tbl.test.per <- round(100*tbl.test/sum(tbl.test)) #print(xtable(cbind(tbl.test, tbl.test.per))) #print(xtable(tbl.test, caption="Counts"), floating=FALSE) ################################################### ### code chunk number 31: r:start:evaluate_tab_matrix_table_test_per ################################################### #print(xtable(tbl.test.per, digits=0, caption="Percentages"), floating=FALSE) ################################################### ### code chunk number 32: r:start:evaluate_tab_matrix_table_all ################################################### crs$pr <- predict(crs$rpart, crs$dataset[included], type="class") tbl.all <- table(crs$dataset[included]$RainTomorrow, crs$pr, dnn=c("Actual", "Predicted")) tbl.all.per <- round(100*tbl.all/sum(tbl.all)) #print(xtable(cbind(tbl.all, tbl.all.per))) #print(xtable(tbl.all, caption="Counts"), floating=FALSE) ################################################### ### code chunk number 33: r:start:evaluate_tab_matrix_table_all_per ################################################### #print(xtable(tbl.all.per, digits=0, caption="Percentages"), floating=FALSE) ################################################### ### code chunk number 34: r:start:rattle_startup_toolbar ################################################### system(paste("cd graphics;", "convert start:rattle_startup.png", "-crop 1000x106+0+0", "start:rattle_startup_toolbar.png")) # system("display graphics/start:rattle_startup_toolbar.png") ################################################### ### code chunk number 35: r:start:load_rattle_example (eval = FALSE) ################################################### ## library(rattle) ## rattle() ################################################### ### code chunk number 36: r:start:dim_weather ################################################### dim(weather) ################################################### ### code chunk number 37: r:start:dim_only ################################################### dim ################################################### ### code chunk number 38: r:start:seq ################################################### seq(1, 50) ################################################### ### code chunk number 39: r:start:head_iris ################################################### head(weather[1:9], 2) ################################################### ### code chunk number 40: r:start:tail_iris ################################################### tail(weather[1:9], 3) ################################################### ### code chunk number 41: r:start:weather_subset ################################################### weather[4:8, 2:4] ################################################### ### code chunk number 42: r:start:sqeuences ################################################### 4:8 seq(4, 8) c(4, 5, 6, 7, 8) ################################################### ### code chunk number 43: r:start:help_dim (eval = FALSE) ################################################### ## help(dim) ################################################### ### code chunk number 44: r:start:help_search_dim (eval = FALSE) ################################################### ## help.search("dimensions") ################################################### ### code chunk number 45: r:start:r_site_search (eval = FALSE) ################################################### ## RSiteSearch("dimensions") ################################################### ### code chunk number 46: r:start:quit_again (eval = FALSE) ################################################### ## q() ################################################### ### code chunk number 47: r:start:show_crs_rpart ################################################### print(crs$rpart, digits=1) ################################################### ### code chunk number 48: r:start:new_environment ################################################### en <- new.env() ################################################### ### code chunk number 49: r:start:dollar_notation ################################################### en$obs <- 4:8 en$obs en$vars <- 2:4 en$vars ################################################### ### code chunk number 50: r:start:env_evalq ################################################### evalq( { nobs <- length(obs) nvars <- length(vars) }, en) en$nobs en$nvars ################################################### ### code chunk number 51: r:start:env_ls ################################################### ls(en) ################################################### ### code chunk number 52: r:start:env_ls ################################################### library(gdata) ll(en) ################################################### ### code chunk number 53: r:start:env_as_list ################################################### as.list(en) ################################################### ### code chunk number 54: r:start:containers (eval = FALSE) ################################################### ## library(rpart) ## weatherDS <- new.env() ## evalq({ ## data <- weather ## nobs <- nrow(data) ## vars <- c(2:22, 24) ## form <- formula(RainTomorrow ~ .) ## target <- all.vars(form)[1] ## train <- sample(nobs, 0.7*nobs) ## }, weatherDS) ## ## weatherRPART <- new.env(parent=weatherDS) ## evalq({ ## model <- rpart(formula=form, data=data[train, vars]) ## predictions <- predict(model, data[-train, vars]) ## }, weatherRPART) ################################################### ### code chunk number 55: r:start:container_save (eval = FALSE) ################################################### ## save(weatherDS, file="weatherDS.Rdata") ################################################### ### code chunk number 56: r:start:container_load (eval = FALSE) ################################################### ## load("weatherDS.Rdata") ################################################### ### code chunk number 57: dmsurvivor.Rnw:3834-3837 (eval = FALSE) ################################################### ## attach(weatherRPART) ## print(model) ## detach(weatherRPART) ################################################### ### code chunk number 58: dmsurvivor.Rnw:3841-3844 (eval = FALSE) ################################################### ## attach(weatherRPART) ## new.model <- model ## detach(weatherRPART) ################################################### ### code chunk number 59: r:start:review:startup (eval = FALSE) ################################################### ## library(rattle) ################################################### ### code chunk number 60: r:start:review:explore (eval = FALSE) ################################################### ## dim(weather) ## weather[1:5, 1:5] ## weather[1:5, 5:10] ## weather[1:5] ## weather[1:5, "WindGustDir"] ## weather[1:5, c("MinTemp", "MaxTemp")] ## weather[7] ## weather[[7]] ## head(weather) ## tail(weather) ## c(2:21, 23) ## head(weather[c(2:21, 23)]) ################################################### ### code chunk number 61: r:start:review:plots (eval = FALSE) ################################################### ## boxplot(weather$MaxTemp) ## vars <- c("MinTemp", "MaxTemp", "Temp9am", "Temp3pm") ## boxplot(weather[vars]) ## hist(weather$MaxTemp) ## table(weather$RainToday) ## barplot(table(weather$RainToday)) ## dotchart(table(weather$RainToday)) ## table(weather$RainToday, weather$RainTomorrow) ## mosaicplot(table(weather$RainToday, weather$RainTomorrow)) ################################################### ### code chunk number 62: r:start:review:rpart (eval = FALSE) ################################################### ## library(rpart) ## vars <- c("RainTomorrow", "Sunshine", "Pressure3pm", "Cloud3pm") ## train <- sample(nrow(weather), 0.7*nrow(weather)) ## w.rpart <- rpart(RainTomorrow ~ ., data=weather[train, vars]) ## w.rpart ## print(w.rpart, digits=1) ## asRules(w.rpart) ################################################### ### code chunk number 63: r:start:review:confusion_matrix (eval = FALSE) ################################################### ## w.pr <- predict(w.rpart, weather[-train, vars], type="class") ## w.pr ## table(w.pr, weather[-train, "RainTomorrow"]) ################################################### ### code chunk number 64: r:start:review:risk_chart (eval = FALSE) ################################################### ## w.pr <- predict(w.rpart, weather[-train, vars])[,2] ## w.pr ## w.eval <- evaluateRisk(w.pr, weather[-train, "RainTomorrow"], ## weather[-train, "RISK_MM"]) ## w.eval ## plotRisk(w.eval$Caseload, w.eval$Precision, w.eval$Recall, ## w.eval$Risk) ################################################### ### code chunk number 65: r:start:exo_seq ################################################### c(120, 134, 148, 162) ################################################### ### code chunk number 66: r:start:exo_seq_one_short ################################################### n <- 10 1 : n 1 : n-1 ################################################### ### code chunk number 67: r:start:exo_seq_two_short ################################################### 2:(length(names)-1) ################################################### ### code chunk number 68: r:start:cleanup ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 69: r:data:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) ################################################### ### code chunk number 70: r:data:annotated_dataset ################################################### # 100124 Get a random collection of 9 observations from the top of # the weatherAUS dataset - thet top is not likely to change as # weatherAUS grows. set.seed(42) obs <- sort(sample(300, 9)) ds <- weather[obs,] oldpar <- par(xpd=TRUE) pdf(file="graphics/data:annotated_dataset.pdf") plot(c(0,10), c(0,0), type="l", axes=FALSE, xlab="", ylab="", xlim=c(-5,12), ylim=c(-2,12)) lines(c(0,10), c(10,10)) lines(c(0,0), c(0,10)) lines(c(10,10), c(0,10)) text(1, 9.5, "Date") lines(c(0,10), c(9,9)) text(1, seq(8.5, 0.5, -1), format(as.Date(ds$Date), "%d %b")) text(3, 9.5, "Temp") text(3, seq(8.5, 0.5, -1), round(ds$Temp3pm)) text(5, 9.5, "Wind Dir.") text(5, seq(8.5, 0.5, -1), ds$WindDir9am) text(7, 9.5, "Evap") text(7, seq(8.5, 0.5, -1), sprintf("%.1f", ds$Evaporation)) text(9, 9.5, "Rain?") text(9, seq(8.5, 0.5, -1), c("Y", "Y", "N", "N", "N", "Y", "N", "N", "Y")) text(-4, 9.5, "Variables") arrows(-2.5, 9.5, -0.2, 9.5, code=2, lwd=0.5, length=0.1) text(3, 11.5, "Numeric") arrows(3, 11, 3, 10.2, code=2, lwd=0.5, length=0.1) text(5, 12, "Categoric") arrows(5, 11.5, 5, 10.2, code=2, lwd=0.5, length=0.1) text(7, 11.5, "Numeric") arrows(7, 11, 7, 10.2, code=2, lwd=0.5, length=0.1) text(9, 12, "Categoric") arrows(9, 11.5, 9, 10.2, code=2, lwd=0.5, length=0.1) text(-4, 5, "Observations") arrows(-2, 5, -0.22, 5, code=2, lwd=0.5, length=0.1) text(1, -1, "Identifier") text(5, -1, "Input") text(9, -1, "Output") lines(c(2.2,2.2), c(0,10)) lines(c(8.2,8.2), c(0,10)) dev.off() par(oldpar) dev.off() ################################################### ### code chunk number 71: r:data:weather_index ################################################### library(rattle) weather[100:105, 5:6] dim(weather) dim(weather[100:105, 5:6]) dim(weather[100:105,]) dim(weather[,5:6]) dim(weather[5:6]) dim(weather[,]) ################################################### ### code chunk number 72: r:data:seq ################################################### 100:105 seq(100, 105) c(100, 101, 102, 103, 104, 105) ################################################### ### code chunk number 73: r:data:weather_index_names ################################################### vars <- c("Evaporation", "Sunshine") weather[100:105, vars] ################################################### ### code chunk number 74: r:data:names_weather_head ################################################### head(names(weather)) ################################################### ### code chunk number 75: r:data:names_weather_index ################################################### names(weather)[1:6] ################################################### ### code chunk number 76: r:data:single_versus_double_brackets ################################################### head(weather[2]) head(weather[[2]]) ################################################### ### code chunk number 77: r:data:using_dollar_notation ################################################### head(weather$MinTemp) ################################################### ### code chunk number 78: r:data:weather_summary ################################################### sw <- capture.output(str(weather, vec.len=1)) cat(sw[1]) ################################################### ### code chunk number 79: r:data:weather_summary ################################################### swa <- sprintf("%2d", 1:length(sw[-1])) ################################################### ### code chunk number 80: r:data:weather_summary ################################################### swa <- paste(swa, sw[-1], sep="", collapse="\n") ################################################### ### code chunk number 81: dmsurvivor.Rnw:4914-4915 ################################################### swa <- gsub("\\.\\.: [0-9]+ [0-9]+ \\.\\.\\.", "..", swa) ################################################### ### code chunk number 82: dmsurvivor.Rnw:4922-4923 ################################################### swa <- gsub("( \\$|:|)", "", swa) ################################################### ### code chunk number 83: r:data:weather_summary ################################################### cat(swa) ################################################### ### code chunk number 84: r:data:review_data_frame (eval = FALSE) ################################################### ## ds <- data.frame(x=c(1,2,3,4,5), y=c(4,2,7,3,5)) ################################################### ### code chunk number 85: r:data:cleanup ################################################### rmobj(pkgs, "detach"); rmobj(objs, "rm") ################################################### ### code chunk number 86: r:load:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() ################################################### ### code chunk number 87: r:load:startup_rattle ################################################### library(rattle) rattle() ################################################### ### code chunk number 88: r:load:setup_rattle ################################################### crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 89: r:load:setup_rattle_annotate ################################################### system(paste("cd graphics;", "convert start:rattle_startup_weather.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 15,51 77,104 5,5"', '-draw "roundrectangle 4,109 43,131 5,5"', '-draw "roundrectangle 81,176 227,202 5,5"', "load:rattle_startup_weather_annotate.png")) # system("display graphics/load:rattle_startup_weather_annotate.png") ################################################### ### code chunk number 90: r:load:rattle_startup_annotate_csv ################################################### system(paste("cd graphics;", "convert start:rattle_startup.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 69,139 186,161 5,5"', '-draw "roundrectangle 78,173 227,200 5,5"', "-crop 100%x31.5%+0+0", "load:rattle_startup_annotate_csv.png")) # system("display graphics/load:rattle_startup_annotate_csv.png") ################################################### ### code chunk number 91: load:rattle_weather_csv_file_select ################################################### fs <- gtkFileChooserDialog("Select a CSV File", NULL, "open", "gtk-cancel", GtkResponseType["cancel"], "gtk-open", GtkResponseType["accept"]) fs$setIcon(gdkPixbufNewFromFile(system.file("etc/Rlogo.png", package="rattle"))$retval) # Ensure all the datasets have today's date! # system("touch data/*.csv") system("touch /usr/local/lib/R/site-library/rattle/csv/*.csv") # Ensure we use an absolute path to the folder command. require(tools) # file_path_as_absolute #fs$setCurrentFolder(file_path_as_absolute("./data")) fs$setCurrentFolder(file_path_as_absolute("/usr/local/lib/R/site-library/rattle/csv/")) rattle:::updateFilenameFilters(fs, "CSV") # Ensure we select the weather dataset. window.id <- unlist(strsplit(system(paste("xwininfo -name 'Select a CSV File'", "| grep 'Window id'"), intern=TRUE), " "))[4] system(sprintf("xdotool windowmove %s 0 0", window.id)) system(sprintf("xdotool windowsize %s 840 600", window.id)) #system("xdotool mousemove 230 230") #system("xdotool click 1") Sys.sleep(1) # Capture the screen screenShot("load:rattle_weather_csv_file_select", title="Select a CSV File") fs$destroy() ################################################### ### code chunk number 92: r:load:rattle_weather_csv_file_select_annotate ################################################### system(paste("cd graphics;", "convert load:rattle_weather_csv_file_select.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 732,540 830,569 5,5"', "load:rattle_weather_csv_file_select_annotate.png")) # system("display graphics/load:rattle_weather_csv_file_select_annotate.png") ################################################### ### code chunk number 93: r:load:system_file_weather_csv ################################################### system.file("csv", "weather.csv", package="rattle") ################################################### ### code chunk number 94: load:weather_csv_show_file (eval = FALSE) ################################################### ## fn <- system.file("csv", "weather.csv", package="rattle") ## file.show(fn) ################################################### ### code chunk number 95: r:load:scan_weather ################################################### fs <- scan(system.file("csv", "weather.csv", package="rattle"), character(0), nlines=4, sep="\n", quiet=TRUE, skip=0) fs[1] <- sub('(,[^,]+){18}$', '...', (gsub('"', '', fs[1]))) fs[-1] <- sub('(,[^,]+){13}$', '...', (gsub('"', '', fs[-1]))) cat(paste(fs, collapse="\n")) ################################################### ### code chunk number 96: load:read_csv_weather (eval = FALSE) ################################################### ## crs$dataset <- read.csv("file:.../weather.csv", ## na.strings=c(".", "NA", "", "?"), ## strip.white=TRUE) ################################################### ### code chunk number 97: r:load:read_csv (eval = FALSE) ################################################### ## ds <- read.csv(".../weather.csv") ################################################### ### code chunk number 98: r:load:read_csv_url (eval = FALSE) ################################################### ## ds <- read.csv("http://rattle.togaware.com/weather.csv") ################################################### ### code chunk number 99: r:load:head_weather_create ################################################### ds <- crs$dataset ################################################### ### code chunk number 100: r:load:head_weather ################################################### head(crs$dataset[1:5], 6) ################################################### ### code chunk number 101: r:load:head_weather_remove ################################################### rm(ds) ################################################### ### code chunk number 102: r:load:dfedit (eval = FALSE) ################################################### ## rattle:::viewData() ## screenShot("load:dfedit", title="Rattle Dataset", close=TRUE) ################################################### ### code chunk number 103: r:load:read_csv_tab (eval = FALSE) ################################################### ## ds <- read.csv("mydata.txt", sep="\t") ################################################### ### code chunk number 104: r:load:read_csv_no_header (eval = FALSE) ################################################### ## ds <- read.csv("mydata.csv", header=FALSE) ################################################### ### code chunk number 105: r:load:rattle_arff ################################################### rattle:::theWidget("data_arff_radiobutton")$setActive(TRUE) rattle:::theWidget("data_filechooserbutton")$ setFilename(system.file("arff", "weather.arff", package="rattle")) while (gtkEventsPending()) gtkMainIteration() Sys.sleep(2) rattle:::executeDataTab() screenShot("load:rattle_arff", title="R Data Miner - [Rattle (weather.arff)]") ################################################### ### code chunk number 106: r:load:rattle_data_arff_annotate ################################################### system(paste("cd graphics;", "convert load:rattle_arff.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 194,142 254,159 5,5"', "-crop 1000x215+0+0", "load:rattle_arff_annotate.png")) # system("display graphics/load:rattle_arff_annotate.png") ################################################### ### code chunk number 107: r:load:weather_arff ################################################### cat("@relation weather", "@attribute Date date", "@attribute Location {Adelaide, Albany, ...}", "@attribute MinTemp numeric", "@attribute MaxTemp numeric", "...", "@attribute RainTomrrow {No, Yes}", "@data", "2010-11-01,Canberra,8,24.3,0,...,Yes", "2010-11-02,Canberra,14,26.9,3.6,...,Yes", "2010-11-03,Canberra,?,23.4,3.6,...,Yes", "...", sep="\n") ################################################### ### code chunk number 108: load:rattle_odbc ################################################### rattle:::newProject() rattle:::theWidget("data_odbc_radiobutton")$setActive(TRUE) rattle:::theWidget("data_odbc_dsn_entry")$setText("weather") while (gtkEventsPending()) gtkMainIteration() screenShot("load:rattle_odbc", title="RattleStart") ################################################### ### code chunk number 109: r:load:rattle_data_odbc_annotate ################################################### system(paste("cd graphics;", "convert load:rattle_odbc.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 262,142 330,159 5,5"', '-draw "roundrectangle 5,174 140,205 5,5"', "-crop 1100x220+0+0", "load:rattle_odbc_annotate.png")) # system("display graphics/load:rattle_odbc_annotate.png") ################################################### ### code chunk number 110: r:load:odbc_connect (eval = FALSE) ################################################### ## library(RODBC) ## channel <- odbcConnect("myDWH", uid="kayon", pwd="toga") ################################################### ### code chunk number 111: r:load:rodbc_list_tables (eval = FALSE) ################################################### ## tables <- sqlTables(channel) ################################################### ### code chunk number 112: r:load:rodbc_sql_columns (eval = FALSE) ################################################### ## columns <- sqlColumns(channel, "clients") ################################################### ### code chunk number 113: r:load:rodbc_sql_query (eval = FALSE) ################################################### ## query <- "SELECT * FROM clients WHERE cost > 2500" ## myds <- sqlQuery(channel, query) ################################################### ### code chunk number 114: r:load:read_spss (eval = FALSE) ################################################### ## library(foreign) ## mydataset <- read.spss(file="mydataset.sav") ################################################### ### code chunk number 115: load:rattle_rdataset ################################################### mydataset <- data.frame(a=1:10, b=11:20) rattle:::newProject() rattle:::theWidget("data_rdataset_radiobutton")$setActive(TRUE) rattle:::theWidget("data_name_combobox")$setActive(0) Sys.sleep(2) while (gtkEventsPending()) gtkMainIteration() screenShot("load:rattle_rdataset", title="RattleStart") ################################################### ### code chunk number 116: r:load:rattle_data_rdataset_annotate ################################################### system(paste("cd graphics;", "convert load:rattle_rdataset.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 337,142 430,161 5,5"', "-crop 1100x215+0+0", "load:rattle_rdataset_annotate.png")) # system("display graphics/load:rattle_rdataset_annotate.png") ################################################### ### code chunk number 117: r:load:read.table.clipboard (eval = FALSE) ################################################### ## expenses <- read.table(file("clipboard"), header=TRUE) ################################################### ### code chunk number 118: r:load:create.expenses ################################################### con <- textConnection("Date Expense Total 17-Nov-2005 19.50 19.50 23-Nov-2005 -15.00 4.50 10-Dec-2005 30.00 34.50 23-Jan-2006 -110.00 -75.50 28-Jan-2006 -20.00 -95.50 14-Feb-2006 -10.00 -105.50 14-Feb-2006 300.00 194.50 26-Feb-2006 220.41 414.91 03-Mar-2006 -20.00 394.91 14-Jul-2006 50.00 444.91 17-Jul-2006 -5.00 439.91 08-Sep-2006 -120.00 319.91 08-Sep-2006 -130.00 189.91 22-Oct-2006 55.00 244.91 23-Nov-2006 135.00 379.91 11-Jan-2007 -90.00 289.91 22-Jan-2007 -20.00 269.91") expenses <- read.table(con, header=TRUE) write.csv(expenses, file="expenses.csv", row.names=FALSE) ################################################### ### code chunk number 119: r:load:expenses.date.show ################################################### expenses$Date <- as.Date(expenses$Date, format="%d-%b-%Y") head(expenses) ################################################### ### code chunk number 120: r:load:gnumeric.expenses (eval = FALSE) ################################################### ## system("libreoffice expenses.csv") ################################################### ### code chunk number 121: r:load:rattle_rdataset_expenses ################################################### rattle:::newProject() rattle:::theWidget("data_rdata_radiobutton")$setActive(TRUE) rattle:::theWidget("data_rdataset_radiobutton")$setActive(TRUE) rattle:::theWidget("data_name_combobox")$setActive(0) while (gtkEventsPending()) gtkMainIteration() rattle:::executeDataTab() Sys.sleep(2) screenShot("load:rattle_rdataset_expenses", title="R Data Miner - [Rattle (expenses)]") ################################################### ### code chunk number 122: r:load:rattle_rdataset_expenses_annotate ################################################### system(paste("cd graphics;", "convert load:rattle_rdataset_expenses.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 94,176 169,203 5,5"', "-crop 1100x410+0+0", "load:rattle_rdataset_expenses_annotate.png")) # system("display graphics/load:rattle_rdataset_expenses_annotate.png") ################################################### ### code chunk number 123: r:load:html_google_setup ################################################### library(XML) google <- "http://www.google.com/" path <- "adplanner/static/top1000/" top1000urls <- paste(google, path, sep="") ################################################### ### code chunk number 124: r:load:html_google_read ################################################### tables <- readHTMLTable(top1000urls) top1000 <- tables[[2]] colnames(top1000) <- c('Rank', 'Site', 'Category', 'Users', 'Reach', 'Views', 'Advertising') ################################################### ### code chunk number 125: r:load:html_google_head ################################################### head(top1000) ################################################### ### code chunk number 126: r:load:rattle_rdata ################################################### rattle:::newProject() rattle:::theWidget("data_rdata_radiobutton")$setActive(TRUE) rattle:::theWidget("data_filechooserbutton")$setFilename("cardiac.RData") Sys.sleep(2) while (gtkEventsPending()) gtkMainIteration() rattle:::updateRDataNames("cardiac.RData") rattle:::theWidget("data_name_combobox")$setActive(0) rattle:::executeDataTab() screenShot("load:rattle_rdata_cardiac", title="R Data Miner - [Rattle (risk)]") ################################################### ### code chunk number 127: r:load:rattle_rdata_cardiac_annotate ################################################### system(paste("cd graphics;", "convert load:rattle_rdata_cardiac.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 79,176 227,203 5,5"', '-draw "roundrectangle 319,176 355,203 5,5"', "-crop 1000x510+0+0", "load:rattle_rdata_cardiac_annotate.png")) # system("display graphics/load:rattle_rdata_cardiac_annotate.png") ################################################### ### code chunk number 128: r:load:rattle_audit_sample ################################################### rattle:::newProject() rattle:::theWidget("data_csv_radiobutton")$setActive(TRUE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) screenShot("load:rattle_weather_sample", title="RattleWeather") ################################################### ### code chunk number 129: r:load:rattle_weather_sample_annotate ################################################### system(paste("cd graphics;", "convert load:rattle_weather_sample.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 7,216 184,249 5,5"', '-draw "roundrectangle 194,216 361,249 5,5"', "-crop 1000x510+0+0", "load:rattle_weather_sample_annotate.png")) # system("display graphics/load:rattle_weather_sample_annotate.png") ################################################### ### code chunk number 130: dmsurvivor.Rnw:6401-6401 ################################################### ################################################### ### code chunk number 131: r:load:close_rattle ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") ################################################### ### code chunk number 132: r:explore:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 133: r:explore:option ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.EXPLORE.NAME)) rattle:::switchToPage(crv$NOTEBOOK.EXPLORE.NAME) rattle:::executeExploreTab() screenShot("explore:rattle_weather_summary", title="RattleWeather") system(paste("cd graphics;", "convert explore:rattle_weather_summary.png", "-crop 100%x30%+0+0", "explore:rattle_weather_summary_option.png")) ################################################### ### code chunk number 134: r:explore:sample_example ################################################### library(rattle) dim(weather) set.seed(42) smpl <- sample(nrow(weather), 0.2*nrow(weather)) dim(weather[smpl,]) ################################################### ### code chunk number 135: r:explore:summary ################################################### summary(weather[7:9]) ################################################### ### code chunk number 136: dmsurvivor.Rnw:6651-6652 ################################################### library(Hmisc) ################################################### ### code chunk number 137: r:explore:descibe_weather_hmisc_numeric ################################################### describe(weather[7]) ################################################### ### code chunk number 138: r:explore:descibe_weather_hmisc_categoric ################################################### describe(weather[8]) ################################################### ### code chunk number 139: r:explore:basicStats_weather_store ################################################### require(fBasics) bs <- basicStats(weather$Sunshine) ################################################### ### code chunk number 140: r:explore:basicStats_weather ################################################### library(fBasics) basicStats(weather$Sunshine) ################################################### ### code chunk number 141: r:explore:skewness_weather ################################################### skewness(weather[,c(7,9,12,13)], na.rm=TRUE) ################################################### ### code chunk number 142: r:explore:skewness_weather ################################################### kurtosis(weather[,c(7,9,12,13)], na.rm=TRUE) ################################################### ### code chunk number 143: r:explore:missing_weather ################################################### library(mice) md.pattern(weather[,7:10]) ################################################### ### code chunk number 144: r:explore:missing_weather_silent ################################################### md <- md.pattern(weather[,7:10]) ################################################### ### code chunk number 145: r:explore:rattle_distr ################################################### rattle:::theWidget("explore_distr_radiobutton")$setActive(TRUE) screenShot("explore:rattle_distr", title="RattleWeather") ################################################### ### code chunk number 146: r:explore:rattle_distr_sample_plots ################################################### WindGustDirMod <- crs$dataset$WindGustDir WindGustDirMod[crs$dataset$WindGustDir=="ENE"] <- "NE" WindGustDirMod[crs$dataset$WindGustDir=="ESE"] <- "SE" WindGustDirMod[crs$dataset$WindGustDir=="NNE"] <- "NE" WindGustDirMod[crs$dataset$WindGustDir=="NNW"] <- "NW" WindGustDirMod[crs$dataset$WindGustDir=="SSE"] <- "SE" WindGustDirMod[crs$dataset$WindGustDir=="SSW"] <- "SW" WindGustDirMod[crs$dataset$WindGustDir=="WNW"] <- "NW" WindGustDirMod[crs$dataset$WindGustDir=="WSW"] <- "SW" WindGustDirMod <- as.factor(as.character(WindGustDirMod)) crs$dataset$WindGustDirMod <- WindGustDirMod rattle:::theWidget("data_sample_checkbutton")$setActive(FALSE) rattle:::executeExplorePlot("crs$dataset", boxplots="MinTemp", hisplots="Sunshine", cumplots="WindGustSpeed", mosplots="WindGustDirMod") system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,900,600') screenShot("explore:rattle_distr_sample_plots", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 147: r:explore:rattle_distr_boxplot_Humidity3pm ################################################### ds <- rbind(data.frame(dat=crs$dataset[,"Humidity3pm"], grp="All"), data.frame(dat=crs$dataset[crs$dataset$RainTomorrow=="No","Humidity3pm"], grp="No"), data.frame(dat=crs$dataset[crs$dataset$RainTomorrow=="Yes","Humidity3pm"], grp="Yes")) bp <- boxplot(formula=dat ~ grp, data=ds, col=rainbow_hcl(3), xlab="RainTomorrow", ylab="Humidity3pm", varwidth=TRUE, notch=TRUE) require(doBy, quietly=TRUE) points(1:3, summaryBy(dat ~ grp, data=ds, FUN=mean, na.rm=TRUE)$dat.mean, pch=8) for (i in seq(ncol(bp$stats))) { text(x=i, y=bp$stats[,i] - 0.02*(max(ds$dat, na.rm=TRUE) - min(ds$dat, na.rm=TRUE)), labels=bp$stats[,i]) } if (length(bp$out)) text(x=bp$group+0.1, y=bp$out, labels=bp$out, cex=0.7) ################################################### ### code chunk number 148: r:explore:rattle_distr_boxplot_Humidity3pm_plot ################################################### ds <- rbind(data.frame(dat=crs$dataset[,"Humidity3pm"], grp="All"), data.frame(dat=crs$dataset[crs$dataset$RainTomorrow=="No","Humidity3pm"], grp="No"), data.frame(dat=crs$dataset[crs$dataset$RainTomorrow=="Yes","Humidity3pm"], grp="Yes")) bp <- boxplot(formula=dat ~ grp, data=ds, col=rainbow_hcl(3), xlab="RainTomorrow", ylab="Humidity3pm", varwidth=TRUE, notch=TRUE) require(doBy, quietly=TRUE) points(1:3, summaryBy(dat ~ grp, data=ds, FUN=mean, na.rm=TRUE)$dat.mean, pch=8) for (i in seq(ncol(bp$stats))) { text(x=i, y=bp$stats[,i] - 0.02*(max(ds$dat, na.rm=TRUE) - min(ds$dat, na.rm=TRUE)), labels=bp$stats[,i]) } if (length(bp$out)) text(x=bp$group+0.1, y=bp$out, labels=bp$out, cex=0.7) ################################################### ### code chunk number 149: r:explore:rattle_distr_boxplot_Humidity3pm_ds (eval = FALSE) ################################################### ## ds <- with(crs$dataset[crs$train,], ## rbind(data.frame(dat=Humidity3pm, ## grp="All"), ## data.frame(dat=Humidity3pm[RainTomorrow=="No"], ## grp="No"), ## data.frame(dat=Humidity3pm[RainTomorrow=="Yes"], ## grp="Yes"))) ################################################### ### code chunk number 150: r:explore:rattle_distr_boxplot_Humidity3pm_bp (eval = FALSE) ################################################### ## bp <- boxplot(formula=dat ~ grp, data=ds, ## col=rainbow_hcl(3), ## xlab="RainTomorrow", ylab="Humidity3pm", ## notch=TRUE) ################################################### ### code chunk number 151: r:explore:rattle_distr_boxplot_Humidity3pm_points (eval = FALSE) ################################################### ## library(doBy) ## points(x=1:3, y=summaryBy(formula=dat ~ grp, data=ds, ## FUN=mean, na.rm=TRUE)$dat.mean, pch=8) ################################################### ### code chunk number 152: r:explore:rattle_distr_boxplot_Humidity3pm_outliers (eval = FALSE) ################################################### ## for (i in seq(ncol(bp$stats))) ## { ## text(x=i, y=bp$stats[,i] - ## 0.02*(max(ds$dat, na.rm=TRUE) - ## min(ds$dat, na.rm=TRUE)), ## labels=bp$stats[,i]) ## } ################################################### ### code chunk number 153: r:explore:rattle_distr_boxplot_Humidity3pm_labels (eval = FALSE) ################################################### ## text(x=bp$group+0.1, y=bp$out, labels=bp$out, cex=0.6) ################################################### ### code chunk number 154: r:explore:rattle_distr_boxplot_Humidity3pm_title (eval = FALSE) ################################################### ## title(main="Distribution of Humidity3pm (sample)", ## sub=paste("Rattle", ## format(Sys.time(), "%Y-%b-%d %H:%M:%S"), ## Sys.info()["user"])) ################################################### ### code chunk number 155: r:explore:bpplot_Humidity3pm ################################################### library(Hmisc) h3 <- weather$Humidity3pm hn <- h3[weather$RainTomorrow=="No"] hy <- h3[weather$RainTomorrow=="Yes"] ds <- list(h3, hn, hy) bpplot(ds, name=c("All", "No", "Yes"), ylab="Humidity3pm", xlab="RainTomorrow") ################################################### ### code chunk number 156: r:explore:bpplot_Humidity3pm_plot ################################################### library(Hmisc) h3 <- weather$Humidity3pm hn <- h3[weather$RainTomorrow=="No"] hy <- h3[weather$RainTomorrow=="Yes"] ds <- list(h3, hn, hy) bpplot(ds, name=c("All", "No", "Yes"), ylab="Humidity3pm", xlab="RainTomorrow") ################################################### ### code chunk number 157: r:explore:rattle_distr_hist_WindSpeed9am ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="WindSpeed9am", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 158: r:explore:rattle_distr_hist_WindSpeed9am_plot ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="WindSpeed9am", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 159: r:explore:rattle_distr_hist_Sunshine ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="Sunshine", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 160: r:explore:rattle_distr_hist_Sunshine_plot ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="Sunshine", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 161: r:explore:rattle_distr_cum_WS9am ################################################### rattle:::executeExplorePlot("crs$dataset", cumplots="WindSpeed9am", newplot=FALSE) ################################################### ### code chunk number 162: r:explore:rattle_distr_cum_Sunshine ################################################### rattle:::executeExplorePlot("crs$dataset", cumplots="Sunshine", newplot=FALSE) ################################################### ### code chunk number 163: r:explore:rattle_distr_cum_WS9am_plot ################################################### rattle:::executeExplorePlot("crs$dataset", cumplots="WindSpeed9am", newplot=FALSE) ################################################### ### code chunk number 164: r:explore:rattle_distr_cum_Sunshine_plot ################################################### rattle:::executeExplorePlot("crs$dataset", cumplots="Sunshine", newplot=FALSE) ################################################### ### code chunk number 165: r:explore:rattle_distr_ecdf_Sunshine (eval = FALSE) ################################################### ## library(rattle) ## library(Hmisc) ## su <- weather$Sunshine ## sn <- su[weather$RainTomorrow=="No"] ## sy <- su[weather$RainTomorrow=="Yes"] ## Ecdf(su, col="#E495A5", xlab="Sunshine", subtitles=FALSE) ## Ecdf(sn, col="#86B875", lty=2, add=TRUE, subtitles=FALSE) ## Ecdf(sy, col="#7DB0DD", lty=3, add=TRUE, subtitles=FALSE) ################################################### ### code chunk number 166: r:explore:rattle_distr_ecdf_Sunshine (eval = FALSE) ################################################### ## legend("bottomright", c("All","No","Yes"), bty="n", ## col=c("#E495A5", "#86B875", "#7DB0DD"), ## lty=1:3, inset=c(0.05,0.05)) ## title(main=paste("Distribution of Sunshine (sample)", ## "by RainTomorrow", sep="\n"), ## sub=paste("Rattle", format(Sys.time(), ## "%Y-%b-%d %H:%M:%S"))) ################################################### ### code chunk number 167: r:explore:rattle_distr_benfords_income ################################################### rattle:::newProject() rattle:::executeDataTab(system.file("csv", "audit.csv", package="rattle")) rattle:::theWidget("data_sample_checkbutton")$setActive(FALSE) rattle:::executeExplorePlot("crs$dataset", benplots="Income", newplot=FALSE) #screenShot("explore:rattle_distr_benfords_income", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_benfords_income.png", # "-crop 95%x85%+10+40", # "explore:rattle_distr_benfords_income_cropped.png")) ################################################### ### code chunk number 168: r:explore:rattle_distr_benfords_income_plot ################################################### rattle:::newProject() rattle:::executeDataTab(system.file("csv", "audit.csv", package="rattle")) rattle:::theWidget("data_sample_checkbutton")$setActive(FALSE) rattle:::executeExplorePlot("crs$dataset", benplots="Income", newplot=FALSE) #screenShot("explore:rattle_distr_benfords_income", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_benfords_income.png", # "-crop 95%x85%+10+40", # "explore:rattle_distr_benfords_income_cropped.png")) ################################################### ### code chunk number 169: r:explore:rattle_distr_bar_windgustdir ################################################### rattle:::newProject() rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) rattle:::theWidget("data_sample_checkbutton")$setActive(FALSE) crs$dataset$WindGustDirMod <- WindGustDirMod rattle:::executeExplorePlot("crs$dataset", barplots="WindGustDir", newplot=FALSE) #system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1000,600') #screenShot("explore:rattle_distr_bar_windgustdir", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_bar_windgustdir.png", # "-crop 95%x85%+10+40", # "explore:rattle_distr_bar_windgustdir_cropped.png")) ################################################### ### code chunk number 170: r:explore:rattle_distr_bar_windgustdir_plot ################################################### rattle:::newProject() rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) rattle:::theWidget("data_sample_checkbutton")$setActive(FALSE) crs$dataset$WindGustDirMod <- WindGustDirMod rattle:::executeExplorePlot("crs$dataset", barplots="WindGustDir", newplot=FALSE) #system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1000,600') #screenShot("explore:rattle_distr_bar_windgustdir", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_bar_windgustdir.png", # "-crop 95%x85%+10+40", # "explore:rattle_distr_bar_windgustdir_cropped.png")) ################################################### ### code chunk number 171: r:explore:rattle_distr_dot_windgustdir ################################################### rattle:::executeExplorePlot("crs$dataset", dotplots="WindGustDir", newplot=FALSE) #system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1000,600') #screenShot("explore:rattle_distr_dot_windgustdir", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_dot_windgustdir.png", # "-crop 97%x85%+10+40", # "explore:rattle_distr_dot_windgustdir_cropped.png")) ################################################### ### code chunk number 172: r:explore:rattle_distr_dot_windgustdir_plot ################################################### rattle:::executeExplorePlot("crs$dataset", dotplots="WindGustDir", newplot=FALSE) #system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1000,600') #screenShot("explore:rattle_distr_dot_windgustdir", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_dot_windgustdir.png", # "-crop 97%x85%+10+40", # "explore:rattle_distr_dot_windgustdir_cropped.png")) ################################################### ### code chunk number 173: r:explore:rattle_distr_mos_windgustdir ################################################### rattle:::executeExplorePlot("crs$dataset", mosplots="WindGustDir", newplot=FALSE) #system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1000,400') #screenShot("explore:rattle_distr_mos_windgustdir", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_mos_windgustdir.png", # "-crop 95%x85%+10+40", # "explore:rattle_distr_mos_windgustdir_cropped.png")) ################################################### ### code chunk number 174: r:explore:rattle_distr_mos_windgustdir_plot ################################################### rattle:::executeExplorePlot("crs$dataset", mosplots="WindGustDir", newplot=FALSE) #system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1000,400') #screenShot("explore:rattle_distr_mos_windgustdir", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_mos_windgustdir.png", # "-crop 95%x85%+10+40", # "explore:rattle_distr_mos_windgustdir_cropped.png")) ################################################### ### code chunk number 175: dmsurvivor.Rnw:7701-7722 ################################################### panel.hist <- function(x, ...) { usr <- par("usr"); on.exit(par(usr)) par(usr=c(usr[1:2], 0, 1.5) ) h <- hist(x, plot=FALSE) breaks <- h$breaks; nB <- length(breaks) y <- h$counts; y <- y/max(y) rect(breaks[-nB], 0, breaks[-1], y, col="grey90", ...) } panel.cor <- function(x, y, digits=2, prefix="", cex.cor, ...) { usr <- par("usr"); on.exit(par(usr)) par(usr = c(0, 1, 0, 1)) r <- (cor(x, y, use="complete")) txt <- format(c(r, 0.123456789), digits=digits)[1] txt <- paste(prefix, txt, sep="") if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt) text(0.5, 0.5, txt) } ################################################### ### code chunk number 176: r:explore:change_font_size ################################################### panel.cor <- function(x, y, digits=2, prefix="", cex.cor, ...) { usr <- par("usr"); on.exit(par(usr)) par(usr = c(0, 1, 0, 1)) r <- (cor(x, y, use="complete")) txt <- format(c(r, 0.123456789), digits=digits)[1] txt <- paste(prefix, txt, sep="") if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt) text(0.5, 0.5, txt, cex=3) } ################################################### ### code chunk number 177: r:explore:pairs_weather_png (eval = FALSE) ################################################### ## png("graphics/explore:pairs_weather.png", width=1200, height=600) ################################################### ### code chunk number 178: r:explore:pairs_weather_plot ################################################### vars <- c(5, 7, 8, 9, 15, 24) pairs(weather[vars], diag.panel=panel.hist, upper.panel=panel.smooth, lower.panel=panel.cor) ################################################### ### code chunk number 179: r:explore:pairs_weather_off_touched (eval = FALSE) ################################################### ## dev.off() ## ## xrowoff <- 8 ## yrowoff <- 87.5 ## yrowgap <- 87.5 ## yrowpos <- seq(yrowoff, 81+(6*yrowgap), by=yrowgap) ## ## rows <- paste(sprintf("-draw 'text %d,%s \"%d\"'", rep(xrowoff, 6), yrowpos, 1:6), ## collapse=" ") ## ## ycoloff <- 20 ## xcoloff <- 131 ## xcolgap <- 178+9 ## xcolpos <- seq(xcoloff, xcoloff+(5*xcolgap), by=xcolgap) ## ## cols <- paste(sprintf("-draw 'text %s,%d \"%d\"'", xcolpos, rep(ycoloff, 6), 1:6), ## collapse=" ") ## ## system(paste("cd graphics;", ## "convert explore:pairs_weather.png", ## "-fill black -pointsize 18", ## rows, cols, ## "explore:pairs_weather_touched.png")) ################################################### ### code chunk number 180: r:explore:pairs_weather_plot_plot ################################################### opar <- par(xpd=NA) vars <- c(5, 7, 8, 9, 15, 24) pairs(weather[vars], diag.panel=panel.hist, upper.panel=panel.smooth, lower.panel=panel.cor) text(seq(0.1, 1.0, 0.162), 1.05, 1:6) text(-0.03, seq(0.1, 1.0, 0.162), 6:1) par(opar) ################################################### ### code chunk number 181: r:explore:rattle_distr_box_suncloud ################################################### rattle:::executeExplorePlot("crs$dataset", boxplots="Sunshine", target="Cloud9am", newplot=FALSE) #system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1000,400') #screenShot("explore:rattle_distr_box_suncloud", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_box_suncloud.png", # "-crop 97%x85%+10+40", # "explore:rattle_distr_box_suncloud_cropped.png")) ################################################### ### code chunk number 182: r:explore:rattle_distr_box_suncloud_plot ################################################### rattle:::executeExplorePlot("crs$dataset", boxplots="Sunshine", target="Cloud9am", newplot=FALSE) #system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1000,400') #screenShot("explore:rattle_distr_box_suncloud", title="RattlePlot", close=TRUE) #system(paste("cd graphics;", # "convert explore:rattle_distr_box_suncloud.png", # "-crop 97%x85%+10+40", # "explore:rattle_distr_box_suncloud_cropped.png")) ################################################### ### code chunk number 183: r:explore:cor ################################################### vars <- c(5, 6, 7, 9, 15) cor(weather[vars], use="pairwise", method="pearson") ################################################### ### code chunk number 184: r:explore:correlation ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.EXPLORE.NAME)) rattle:::switchToPage(crv$NOTEBOOK.EXPLORE.NAME) rattle:::theWidget("explore_correlation_radiobutton")$setActive(TRUE) rattle:::executeExploreTab() screenShot("explore:rattle_weather_correlation", title="RattleWeather") #system(paste("cd graphics;", # "convert explore:rattle_weather_correlation.png", # "-crop 100%x32%+0+0", # "explore:rattle_weather_correlation_option.png")) ################################################### ### code chunk number 185: r:explore:correlation_plot ################################################### #screenShot("explore:rattle_weather_correlation_plot", title="RattlePlot", close=TRUE) opar <- par(cex.lab=1, cex.main=1) rattle:::executeExploreCorrelation("crs$dataset[crs$numeric]", newplot=FALSE) par(opar) ################################################### ### code chunk number 186: r:explore:correlation_plot_plot ################################################### #screenShot("explore:rattle_weather_correlation_plot", title="RattlePlot", close=TRUE) opar <- par(cex.lab=1, cex.main=1) rattle:::executeExploreCorrelation("crs$dataset[crs$numeric]", newplot=FALSE) par(opar) ################################################### ### code chunk number 187: r:explore:correlation_na_plot ################################################### naids <- attr(na.omit(t(crs$dataset[, c(crs$input, crs$risk, crs$target)])), "na.action") crs$cor <- cor(is.na(crs$dataset[, c(crs$input, crs$risk, crs$target)][naids]), use="pairwise", method="pearson") # Order the correlations by their strength. crs$ord <- order(crs$cor[1,]) crs$cor <- crs$cor[crs$ord, crs$ord] # Graphically display the correlations. plotcorr(crs$cor, col=colorRampPalette(c("red", "white", "blue"))(11)[5*crs$cor + 6]) title(main="Correlation of Missing Values\nweather.csv using Pearson", sub=) #rattle:::theWidget("explore_correlation_na_checkbutton")$setActive(TRUE) #rattle:::executeExploreTab() #screenShot("explore:rattle_weather_correlation_na_plot", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 188: r:explore:correlation_na_plot ################################################### naids <- attr(na.omit(t(crs$dataset[, c(crs$input, crs$risk, crs$target)])), "na.action") crs$cor <- cor(is.na(crs$dataset[, c(crs$input, crs$risk, crs$target)][naids]), use="pairwise", method="pearson") # Order the correlations by their strength. crs$ord <- order(crs$cor[1,]) crs$cor <- crs$cor[crs$ord, crs$ord] # Graphically display the correlations. plotcorr(crs$cor, col=colorRampPalette(c("red", "white", "blue"))(11)[5*crs$cor + 6]) title(main="Correlation of Missing Values\nweather.csv using Pearson", sub=) #rattle:::theWidget("explore_correlation_na_checkbutton")$setActive(TRUE) #rattle:::executeExploreTab() #screenShot("explore:rattle_weather_correlation_na_plot", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 189: r:explore:correlation_missing ################################################### screenShot("explore:rattle_weather_correlation_na", title="RattleWeather") ################################################### ### code chunk number 190: dmsurvivor.Rnw:8255-8259 ################################################### set.seed(42) obs <- sample(nrow(weather), 256) vars <- c(3:7, 9, 12:21) cc <- round(cor(weather[obs, vars], use="pairwise", method="pearson"), 2) ################################################### ### code chunk number 191: r:explore:correlation_hier_plot (eval = FALSE) ################################################### ## cc <- cor(crs$dataset[, crs$numeric], use="pairwise", method="pearson") ## ## # Generate hierarchical cluster of variables. ## ## hc <- hclust(dist(cc), method="average") ## ## # Generate the dendrogram. ## ## dn <- as.dendrogram(hc) ## ## # Now draw the dendrogram. ## ## op <- par(mar = c(3, 4, 3, 4.29)) ## plot(dn, horiz = TRUE, nodePar = list(col = 3:2, cex = c(2.0, 0.75), pch = 21:22, bg= c("light blue", "pink"), lab.cex = 0.75, lab.col = "tomato"), edgePar = list(col = "gray", lwd = 2), xlab="Height") ## title(main="Variable Correlation Clusters ## weather.csv using Pearson", ## sub=) ## par(op) ## #rattle:::theWidget("explore_correlation_hier_checkbutton")$setActive(TRUE) ## #rattle:::executeExploreTab() ## #screenShot("explore:rattle_weather_correlation_hier_plot", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 192: r:explore:correlation_hier_plot_plot ################################################### cc <- cor(crs$dataset[, crs$numeric], use="pairwise", method="pearson") # Generate hierarchical cluster of variables. hc <- hclust(dist(cc), method="average") # Generate the dendrogram. dn <- as.dendrogram(hc) # Now draw the dendrogram. op <- par(mar = c(3, 4, 3, 4.29)) plot(dn, horiz = TRUE, nodePar = list(col = 3:2, cex = c(2.0, 0.75), pch = 21:22, bg= c("light blue", "pink"), lab.cex = 0.75, lab.col = "tomato"), edgePar = list(col = "gray", lwd = 2), xlab="Height") title(main="Variable Correlation Clusters weather.csv using Pearson", sub=) par(op) #rattle:::theWidget("explore_correlation_hier_checkbutton")$setActive(TRUE) #rattle:::executeExploreTab() #screenShot("explore:rattle_weather_correlation_hier_plot", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 193: dmsurvivor.Rnw:8318-8322 ################################################### numerics <- c(3:7, 9, 12:21) cc <- cor(weather[numerics], use="pairwise", method="pearson") ################################################### ### code chunk number 194: dmsurvivor.Rnw:8327-8328 ################################################### hc <- hclust(dist(cc), method="average") ################################################### ### code chunk number 195: dmsurvivor.Rnw:8333-8334 ################################################### dn <- as.dendrogram(hc) ################################################### ### code chunk number 196: dmsurvivor.Rnw:8337-8338 (eval = FALSE) ################################################### ## plot(dn, horiz = TRUE) ################################################### ### code chunk number 197: explore:pca_pre_process (eval = FALSE) ################################################### ## pc <- prcomp(na.omit(ds), scale=TRUE, center=TRUE, tol=0) ## str(pc) ## pc$center == apply(na.omit(crs$dataset[crs$sample,c(2:6,8:9)]), 2, mean) ## pc$scale == apply(na.omit(crs$dataset[crs$sample,c(2:6,8:9)]), 2, sd) ################################################### ### code chunk number 198: r:explore:cleanup ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") ################################################### ### code chunk number 199: r:interact:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) rattle:::theWidget("data_sample_checkbutton")$setActive(FALSE) ################################################### ### code chunk number 200: r:interact:rattle_interactive ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.EXPLORE.NAME)) rattle:::switchToPage(crv$NOTEBOOK.EXPLORE.NAME) rattle:::theWidget("explore_interactive_radiobutton")$setActive(TRUE) screenShot("explore:rattle_interactive", title="RattleWeather") system(paste("cd graphics;", "convert explore:rattle_interactive.png", "-crop 100%x30%+0+0", "explore:rattle_interactive_cropped.png")) ################################################### ### code chunk number 201: r:interact:rattle_interactive_latticist ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.EXPLORE.NAME)) rattle:::switchToPage(crv$NOTEBOOK.EXPLORE.NAME) rattle:::theWidget("explore_interactive_radiobutton")$setActive(TRUE) rattle:::theWidget("explore_interactive_latticist_radiobutton")$setActive(TRUE) rattle:::executeExploreTab() system("wmctrl -r 'Latticist: crs$dataset[, c(' -e 0,-1,-1,1500,1000") # 101106 Close the window after this screen shot since I now do not evaluate # the next screenshot since Latticist is freezing up. Should be fixed now 101110. screenShot("explore:rattle_interactive_latticist", title="Latticist: crs$dataset[, c(") ################################################### ### code chunk number 202: r:interact:rggobi (eval = FALSE) ################################################### ## library(latticist) ## latticist(weather) ################################################### ### code chunk number 203: r:interact:rattle_interactive_latticist_parallel ################################################### # 101106 Do not run this for now - latticist seems to generate an error and freezes # and thus the screenShot can not execute, nor anything else. Make sure we # close the prvious screenshot though. 101110 Now seems to be fixed. # 100124 Move to using substrings to get win id. # window.id <- unlist(strsplit(system(paste("xwininfo -name 'Latticist:", # "crs$dataset[, c(2:23)]' |", # "grep 'Window id'"), # intern=TRUE), " "))[4] window.id <- system(paste("wmctrl -l | grep -F 'Latticist:", "crs$dataset[, c(' | head -1", "| awk '{print $1}'"), intern=TRUE) # Click the "parallel" button system(sprintf("xdotool windowmove %s 0 0", window.id)) system("xdotool mousemove 230 950") system("xdotool click 1") Sys.sleep(2) # 100124 Increased to 2 because of a failure to find the window. # Now select the variables to plot window.id <- unlist(strsplit(system(paste("xwininfo -name 'Choose variables", "to plot' | grep 'Window id'"), intern=TRUE), " "))[4] system(sprintf("xdotool windowmove %s 0 0", window.id)) # Choose None system("xdotool mousemove 65 65") system("xdotool click 1") # Choose Variables system("xdotool mousemove 25 105") # MinTemp system("xdotool click 1") system("xdotool mousemove 25 130") # MaxTemp system("xdotool click 1") system("xdotool mousemove 25 155") # Rainfall system("xdotool click 1") system("xdotool mousemove 25 190") # Sunshine system("xdotool click 1") system("xdotool mousemove 25 570") # RainTomorrow system("xdotool click 1") system("xdotool mousemove 150 650") # OK system("xdotool click 1") screenShot("explore:rattle_interactive_latticist_parallel", title="Latticist: crs$dataset[, c(", close=TRUE) ################################################### ### code chunk number 204: r:interact:rattle_interactive_ggobi ################################################### rattle:::theWidget("explore_interactive_ggobi_radiobutton")$setActive(TRUE) screenShot("explore:rattle_interactive_ggobi", title="RattleWeather") system(paste("cd graphics;", "convert explore:rattle_interactive_ggobi.png", "-crop 100%x30%+0+0", "explore:rattle_interactive_ggobi_cropped.png")) ################################################### ### code chunk number 205: r:interact:rggobi (eval = FALSE) ################################################### ## library(rggobi) ## gg <- rggobi(weather[-c(1,2)]) ################################################### ### code chunk number 206: r:interact:rggobi ################################################### rattle:::executeExploreTab() screenShot("explore:ggobi_control", title="GGobi", pause=2) screenShot("explore:ggobi_scatter_maxmintemp", title="weather.csv: Scatterplot (current)", pause=2) system(paste("cd graphics;", "convert explore:ggobi_scatter_maxmintemp.png", "-fill '#efebe7' -opaque '#333333'", "-draw 'roundrectangle 8,50 80,70 5,5'", "-draw 'roundrectangle 300,365 368,385 5,5'", "-fill black -pointsize 18 -weight 400 -style Normal", "-draw 'text 8,70 MaxTemp'", "-draw 'text 295,380 MinTemp'", "explore:ggobi_scatter_maxmintemp_touched.png")) ################################################### ### code chunk number 207: r:interact:ggobi_second_scatterplot_console (eval = FALSE) ################################################### ## display(gg[1], vars=list(X="Evaporation", Y="Sunshine")) ################################################### ### code chunk number 208: r:interact:ggobi_second_scatterplot ################################################### display(crs$gg[1], vars=list(X="Evaporation", Y="Sunshine")) screenShot("explore:ggobi_scatter_maxmintemp_notcurrent", title="weather.csv: Scatterplot ") system(paste("cd graphics;", "convert explore:ggobi_scatter_maxmintemp_notcurrent.png", "-fill '#efebe7' -opaque '#333333'", "-draw 'roundrectangle 8,50 80,70 5,5'", "-draw 'roundrectangle 300,365 368,385 5,5'", "-fill black -pointsize 18 -weight 400 -style Normal", "-draw 'text 8,70 MaxTemp'", "-draw 'text 295,380 MinTemp'", "explore:ggobi_scatter_maxmintemp_notcurrent_touched.png")) screenShot("explore:ggobi_scatter_evsun", title="weather.csv: Scatterplot (current)") system(paste("cd graphics;", "convert explore:ggobi_scatter_evsun.png", "-fill '#efebe7' -opaque '#333333'", "-draw 'roundrectangle 24,55 90,70 5,5'", "-draw 'roundrectangle 280,350 368,370 5,5'", "-fill black -pointsize 18 -weight 400 -style Normal", "-draw 'text 24,70 Sunshine'", "-draw 'text 270,365 Evaporation'", "explore:ggobi_scatter_evsun_touched.png")) ################################################### ### code chunk number 209: r:interact:ggobi_autobrush ################################################### # Open the automatic brushing window window.id <- unlist(strsplit(system("xwininfo -name 'GGobi' | grep 'Window id'", intern=TRUE), " "))[4] system(sprintf("xdotool windowactivate %s; xdotool key 'alt+t' 'a'", window.id)) # Wait for the window to display Sys.sleep(2) # scroll down and select RainTomorrow window.id <- unlist(strsplit(system(paste("xwininfo -name 'Automatic Brushing by", "Variable' | grep 'Window id'"), intern=TRUE), " "))[4] system(sprintf("xdotool windowmove %s 0 0", window.id)) system("xdotool mousemove 428 110") for (i in 1:7) system("xdotool click 1") system("xdotool mousemove 400 110") system("xdotool click 1") # Apply system("xdotool mousemove 100 410") system("xdotool click 1") screenShot("explore:ggobi_autobrush", title="Automatic Brushing by Variable") ################################################### ### code chunk number 210: r:interact:ggobi_second_scatterplot_br ################################################### screenShot("explore:ggobi_scatter_maxmintemp_notcurrent_br", title="weather.csv: Scatterplot ", pause=2) system(paste("cd graphics;", "convert explore:ggobi_scatter_maxmintemp_notcurrent_br.png", "-fill '#cfcbc7' -opaque '#333333'", "-draw 'roundrectangle 8,50 80,70 5,5'", "-draw 'roundrectangle 300,365 368,385 5,5'", "-fill black -pointsize 18 -weight 400 -style Normal", "-draw 'text 8,70 MaxTemp'", "-draw 'text 295,380 MinTemp'", "explore:ggobi_scatter_maxmintemp_notcurrent_touched_br.png")) screenShot("explore:ggobi_scatter_evsun_br", title="weather.csv: Scatterplot (current)", pause=2) system(paste("cd graphics;", "convert explore:ggobi_scatter_evsun_br.png", "-fill '#cfcbc7' -opaque '#333333'", "-draw 'roundrectangle 24,55 90,70 5,5'", "-draw 'roundrectangle 280,350 368,370 5,5'", "-fill black -pointsize 18 -weight 400 -style Normal", "-draw 'text 24,70 Sunshine'", "-draw 'text 270,365 Evaporation'", "explore:ggobi_scatter_evsun_touched_br.png")) ################################################### ### code chunk number 211: r:interact:ggobi_second_scatterplot_br_sunshine ################################################### system("xdotool mousemove 100 100") system("xdotool click 1") system(sprintf(paste("xdotool windowactivate %s; xdotool key 'Home' 'Down' 'Down'", "'Down' 'Down'"), window.id)) # Apply system("xdotool mousemove 100 410") system("xdotool click 1") screenShot("explore:ggobi_scatter_maxmintemp_notcurrent_br_sun", title="weather.csv: Scatterplot ", pause=2) system(paste("cd graphics;", "convert explore:ggobi_scatter_maxmintemp_notcurrent_br_sun.png", "-fill '#cfcbc7' -opaque '#333333'", "-draw 'roundrectangle 8,50 80,70 5,5'", "-draw 'roundrectangle 300,365 368,385 5,5'", "-fill black -pointsize 18 -weight 400 -style Normal", "-draw 'text 8,70 MaxTemp'", "-draw 'text 295,380 MinTemp'", "explore:ggobi_scatter_maxmintemp_notcurrent_touched_br_sun.png")) screenShot("explore:ggobi_scatter_evsun_br_sun", title="weather.csv: Scatterplot (current)", pause=2) system(paste("cd graphics;", "convert explore:ggobi_scatter_evsun_br_sun.png", "-fill '#cfcbc7' -opaque '#333333'", "-draw 'roundrectangle 24,55 90,70 5,5'", "-draw 'roundrectangle 280,350 368,370 5,5'", "-fill black -pointsize 18 -weight 400 -style Normal", "-draw 'text 24,70 Sunshine'", "-draw 'text 270,365 Evaporation'", "explore:ggobi_scatter_evsun_touched_br_sun.png")) ################################################### ### code chunk number 212: r:interact:ggobi_scatterplot_matrix ################################################### display(crs$gg[1], pmode="Scatterplot Matrix", vars=list(X=c("Evaporation", "Sunshine", "MinTemp", "MaxTemp"))) screenShot("explore:ggobi_scatter_matrix", title="weather.csv: Scatterplot Matrix (current)") system(paste("cd graphics;", "convert explore:ggobi_scatter_matrix.png", "-fill '#cfcbc7' -opaque '#333333'", # "-draw 'roundrectangle 8,50 80,70 5,5'", # "-draw 'roundrectangle 300,365 368,385 5,5'", # "-fill black -pointsize 18 -weight 400 -style Normal", # "-draw 'text 8,70 MaxTemp'", # "-draw 'text 295,380 MinTemp'", "explore:ggobi_scatter_matrix_touched.png")) ################################################### ### code chunk number 213: r:interact:ggobi_parallel ################################################### display(crs$gg[1], pmode="Parallel Coordinates Display", vars=list(X=c("Sunshine", "Evaporation", "MinTemp", "MaxTemp", "Rainfall"))) screenShot("explore:ggobi_parallel", title="weather.csv: Parallel Coordinates (current)") system(paste("cd graphics;", "convert explore:ggobi_parallel.png", "-fill '#cfcbc7' -opaque '#333333'", # "-draw 'roundrectangle 8,50 80,70 5,5'", # "-draw 'roundrectangle 300,365 368,385 5,5'", # "-fill black -pointsize 18 -weight 400 -style Normal", # "-draw 'text 8,70 MaxTemp'", # "-draw 'text 295,380 MinTemp'", "explore:ggobi_parallel_touched.png")) ################################################### ### code chunk number 214: dmsurvivor.Rnw:9295-9297 (eval = FALSE) ################################################### ## install.packages("DescribeDisplay") ## library(DescribeDisplay) ################################################### ### code chunk number 215: dmsurvivor.Rnw:9305-9310 (eval = FALSE) ################################################### ## pd <- dd_load("ggobi-saved-display-description.R") ## pdf("ggobi-rplot-deductions-outliers") ## plot(pd) ## dev.off() ## ggplot(pd) ################################################### ### code chunk number 216: r:interact:cleanup ################################################### close(crs$gg) rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") ################################################### ### code chunk number 217: r:transform:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 218: r:transform:rescale_options ################################################### crv$NOTEBOOK$setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.TRANSFORM.NAME)) rattle:::switchToPage(crv$NOTEBOOK.TRANSFORM.NAME) screenShot("transform:rattle_default_window", title="RattleWeather") system(paste("cd graphics;", "convert transform:rattle_default_window.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 141,108 217,129 5,5"', '-draw "roundrectangle 60,138 140,158 5,5"', "-crop 1000x250+0+0", "transform:rattle_default_window_annotate.png")) # system("display graphics/transform:rattle_default_window_annotate.png") ################################################### ### code chunk number 219: r:transform_rescale_mintemp3pm ################################################### var <- "Temp3pm" rattle:::executeTransformNormalisePerform(var, "recenter", "RRC") rattle:::executeTransformNormalisePerform(var, "scale01", "R01") rattle:::executeTransformNormalisePerform(var, "medianad", "RMD") rattle:::executeTransformNormalisePerform(var, "log", "RLG") rattle:::executeTransformNormalisePerform(var, "rank", "RRK") # Scroll down to display the transforms. window.id <- unlist(strsplit(system(paste("xwininfo -name 'R Data Miner -", "[Rattle (weather.csv)]' | grep 'Window id'"), intern=TRUE), " "))[4] system(sprintf("xdotool windowmove %s 0 0", window.id)) system("xdotool mousemove 920 400") for (i in 1:10) system("xdotool click 5") #system("xdotool mousemove 400 110") #system("xdotool click 1") screenShot("transform:weather_transform_rescale_temp3pm", title="RattleWeather") ################################################### ### code chunk number 220: r:transform:weather_transform_rescale_temp3pm_plots (eval = FALSE) ################################################### ## vars <- c("Temp3pm", "RRC_Temp3pm", "R01_Temp3pm", "RMD_Temp3pm", ## "RLG_Temp3pm", "RRK_Temp3pm") ## rattle:::theWidget("plots_per_page_spinbutton")$setValue(6) ## rattle:::executeExplorePlot("crs$dataset", hisplots=vars, stratify=FALSE, newplot=FALSE) ## ## # Maximise the plot window. ## ## window.id <- unlist(strsplit(system(paste("xwininfo -name 'Rattle: Plot 2'", ## "| grep 'Window id'"), ## intern=TRUE), " "))[4] ## system(sprintf("xdotool windowactivate %s; xdotool key 'alt+F10'", window.id)) ## #system(sprintf("xdotool windowsize %s 800 800", window.id)) ## Sys.sleep(2) ## screenShot("transform:weather_transform_rescale_temp3pm_plots", ## title="RattlePlot", close=TRUE) ## ## # Crop the titlebar and footer. ## ## system(paste("cd graphics;", ## "convert transform:weather_transform_rescale_temp3pm_plots.png", ## "-crop 780x760+5+25", ## "transform:weather_transform_rescale_temp3pm_plots_crop.png")) ## # system("display graphics/transform:weather_transform_rescale_temp3pm_plots_crop.png") ################################################### ### code chunk number 221: r:transform:rescale_temp3pm_orig ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 222: r:transform:rescale_temp3pm_rrc ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="RRC_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 223: r:transform:rescale_temp3pm_r01 ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="R01_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 224: r:transform:rescale_temp3pm_rmd ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="RMD_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 225: r:transform:rescale_temp3pm_rlg ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="RLG_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 226: r:transform:rescale_temp3pm_rrk ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="RRK_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 227: r:transform:rescale_temp3pm_orig_plot ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 228: r:transform:rescale_temp3pm_rrc_plot ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="RRC_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 229: r:transform:rescale_temp3pm_r01_plot ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="R01_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 230: r:transform:rescale_temp3pm_rmd_plot ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="RMD_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 231: r:transform:rescale_temp3pm_rlg_plot ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="RLG_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 232: r:transform:rescale_temp3pm_rrk_plot ################################################### rattle:::executeExplorePlot("crs$dataset", hisplots="RRK_Temp3pm", stratify=FALSE, newplot=FALSE) ################################################### ### code chunk number 233: dmsurvivor.Rnw:9991-9993 ################################################### library(rattle) ds <- weather ################################################### ### code chunk number 234: dmsurvivor.Rnw:9996-9999 ################################################### ds <- crs$dataset vars <- c("Temp3pm", "RRC_Temp3pm", "R01_Temp3pm", "RMD_Temp3pm", "RLG_Temp3pm", "RRK_Temp3pm") ################################################### ### code chunk number 235: r:transform:recenter ################################################### ds$RRC_Temp3pm <- scale(ds$Temp3pm) ################################################### ### code chunk number 236: r:transform:recenter_weather_evaporation ################################################### weather$RRC_Evaporation <- scale(weather$Evaporation)[,1] summary(weather$RRC_Evapration) ################################################### ### code chunk number 237: r:transform:scale ################################################### library(reshape) ds$R01_Temp3pm <- rescaler(ds$Temp3pm, "range") ################################################### ### code chunk number 238: r:transform:scale ################################################### library(reshape) ds$RMD_Temp3pm <- rescaler(ds$Temp3pm, "robust") ################################################### ### code chunk number 239: r:transform:scale ################################################### ds$RLG_Temp3pm <- log(ds$Temp3pm) ds$RLG_Temp3pm[ds$RLG_Temp3pm == -Inf] <- NA ################################################### ### code chunk number 240: r:transform:scale ################################################### library(reshape) ds$RRK_Temp3pm <- rescaler(ds$Temp3pm, "rank") ################################################### ### code chunk number 241: r:transform:nolan ################################################### library(reshape) ds$RBG_SpeedByDir <- ds$WindGustSpeed bylevels <- levels(ds$WindGustDir) for (vl in bylevels) { grp <- sapply(ds$WindGustDir == vl, isTRUE) ds[grp, "RBG_SpeedByDir"] <- round(rescaler(ds[grp, "WindGustSpeed"], "range") * 99) } ds[is.nan(ds$RBG_SpeedByDir), "RBG_SpeedByDir"] <- 50 v <- c("WindGustSpeed", "WindGustDir", "RBG_SpeedByDir") ################################################### ### code chunk number 242: dmsurvivor.Rnw:10168-10169 ################################################### head(ds[ds$WindGustDir %in% c("NW", "SE"), v], 10) ################################################### ### code chunk number 243: dmsurvivor.Rnw:10172-10174 ################################################### ds$RBG_SpeedByDir <- as.integer(ds$RBG_SpeedByDir) xtable(head(ds[ds$WindGustDir %in% c("NW", "SE"), v], 10), align="rccc") ################################################### ### code chunk number 244: dmsurvivor.Rnw:10232-10236 ################################################### mds <- head(ds[,vars]) mds$RRK_Temp3pm <- as.integer(mds$RRK_Temp3pm) names(mds) <- sub("_Temp3pm", "_", names(mds)) print(xtable(mds, align="rcccccc"), math.style.negative=TRUE) ################################################### ### code chunk number 245: r:transform:impute_options ################################################### rattle:::theWidget("impute_radiobutton")$setActive(TRUE) screenShot("transform:impute_options", title="RattleWeather") system(paste("cd graphics;", "convert transform:impute_options.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 141,108 219,133 5,5"', '-draw "roundrectangle 148,138 220,160 5,5"', "-crop 1000x250+0+0", "transform:impute_options_annotate.png")) # system("display graphics/transform:impute_options_annotate.png") ################################################### ### code chunk number 246: r:transform:scale (eval = FALSE) ################################################### ## ds$IZR_Sunshine <- ds$Sunshine ## ds$IZR_Sunshine[is.na(ds$IZR_Sunshine)] <- 0 ################################################### ### code chunk number 247: r:transform:scale (eval = FALSE) ################################################### ## ds$IMN_Sunshine <- ds$Sunshine ## ds$IMN_Sunshine[is.na(ds$IMN_Sunshine)] <- ## mean(ds$Sunshine, na.rm=TRUE) ################################################### ### code chunk number 248: r:transform:scale (eval = FALSE) ################################################### ## ds$IZR_Sunshine <- ds$Sunshine ## ds$IZR_Sunshine[is.na(ds$IZR_Sunshine)] <- 0 ################################################### ### code chunk number 249: r:transform:recode_options ################################################### rattle:::theWidget("remap_radiobutton")$setActive(TRUE) screenShot("transform:remap_options", title="RattleWeather") system(paste("cd graphics;", "convert transform:remap_options.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 141,108 219,133 5,5"', '-draw "roundrectangle 228,138 305,158 5,5"', "-crop 1000x250+0+0", "transform:remap_options_annotate.png")) # system("display graphics/transform:remap_options_annotate.png") ################################################### ### code chunk number 250: dmsurvivor.Rnw:10585-10590 ################################################### ds$TJN <- interaction(paste(ds$RainToday, "_", ds$RainTomorrow, sep="")) ds$TJN[grepl("^NA_|_NA$", ds$TJN)] <- NA ds$TJN <- as.factor(as.character(ds$TJN)) head(ds[c("RainToday", "RainTomorrow", "TJN")]) ################################################### ### code chunk number 251: r:transform:type (eval = FALSE) ################################################### ## ds$TFC_Cloud3pm <- as.factor(ds$Cloud3pm) ## ds$TNM_RainToday <- as.numeric(ds$RainToday) ################################################### ### code chunk number 252: dmsurvivor.Rnw:10626-10629 ################################################### library(zoo) v1 <- c(1, 2, 3, NA, 4, 5, 6, NA, NA, 7, 8, 9, 10) na.locf(v1) ################################################### ### code chunk number 253: dmsurvivor.Rnw:10709-10717 (eval = FALSE) ################################################### ## with(weather, ## {WindSpeedC <- WindSpeed9am-weather$WindSpeed3pm ## } ## ) ## weather$HumidityC <- weather$Humidity9am-weather$Humidity3pm ## weather$PressureC <- weather$Pressure9am-weather$Pressure3pm ## weather$CloudC <- weather$Cloud9am-weather$Cloud3pm ## weather$TempC <- weather$Temp9am - weather$Temp3pm ################################################### ### code chunk number 254: r:transform:remove_duplicates_vector ################################################### x <- c(1, 1, 1, 2, 2, 2, 3, 3, 3) duplicated(x) x <- x[!duplicated(x)] x ################################################### ### code chunk number 255: r:transform:remove_duplicated_hours ################################################### crs$dataset <- crs$dataset[!duplicated(crs$dataset$Hours),] ################################################### ### code chunk number 256: r:transform:execute_and_show_window_with_status_updated ################################################### #rattle:::executeDataTab() #screenShot("rattle_transform_remove_duplicates", title="RattleAudit") ################################################### ### code chunk number 257: deducorrect_example_editmatrix_rules ################################################### library(deducorrect) E <- editmatrix(c("cost > 0", "profit > 0", "turnover > 0", "cost + profit == turnover", "0.6*turnover >= profit")) ################################################### ### code chunk number 258: deducorrect_example_dataset ################################################### dat <- data.frame(cost = c(-100, 325, 326 ), profit = c( 150, 457, 475 ), turnover = c( 250, 800, 800 )) dat ################################################### ### code chunk number 259: deducorrect_example_correct_sign ################################################### dat <- correctSigns(E, dat)$corrected dat ################################################### ### code chunk number 260: deducorrect_example_correct_typos ################################################### dat <- correctTypos(E, dat)$corrected dat ################################################### ### code chunk number 261: deducorrect_example_correct_rounding ################################################### dat <- correctRounding(E, dat)$corrected dat ################################################### ### code chunk number 262: r:transform:duplicated_01 ################################################### x <- c(1,2,1,3,2,4) y <- c(5,4,5,2,4,6) ds <- data.frame(x, y) ds ################################################### ### code chunk number 263: r:transform:duplicated_02 ################################################### ds1 <- ds[do.call(order, ds), ] ds[-as.integer(row.names(ds1)[duplicated(ds1)]),] ################################################### ### code chunk number 264: r:transform:cleanup ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 265: r:model:initialise ################################################### #source("utility.R") #pkgs <- lspkgs(); objs <- ls() #require(rattle) #rattle() #crv$close <- "close" #rattle:::theWidget("verbose_menuitem")$setActive(FALSE) #rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 266: r:model:explore_age_height ################################################### set.seed(123) # To ensure repeatability. ages <- runif(10, 1, 20) # Random ages between 1 and 20 heights <- 30 + rnorm(10, 1, as.integer(ages)) + ages*5 plot(ages, heights) ################################################### ### code chunk number 267: r:model:fit_age_height ################################################### my.model <- approxfun(ages, heights) my.model(15) plot(ages, heights) plot(my.model, add=TRUE, col=2, ylim=c(20,200), xlim=c(1,20)) ################################################### ### code chunk number 268: r:model:spline_age_height ################################################### my.spline <- splinefun(ages, heights) ################################################### ### code chunk number 269: r:template:close_rattle ################################################### #rattle:::close_rattle() #rmobj(pkgs, "detach"); rmobj(objs, "rm") #while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 270: r:cluster:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 271: r:cluster:rattle_weather_kmeans ################################################### crv$NOTEBOOK$setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.CLUSTER.NAME)) rattle:::switchToPage(crv$NOTEBOOK.CLUSTER.NAME) rattle:::executeClusterTab() screenShot("cluster:rattle_weather_kmeans", title="RattleWeather") ################################################### ### code chunk number 272: r:cluster:small_random_cluster ################################################### library(rattle) set.seed(42) obs1 <- sample(1:nrow(weather), 5) vars <- c("MinTemp", "MaxTemp", "Rainfall", "Evaporation") cluster1 <- weather[obs1, vars] ################################################### ### code chunk number 273: r:cluster:one_mean ################################################### mean(cluster1) ################################################### ### code chunk number 274: r:cluster:small_random_cluster ################################################### obs2 <- setdiff(sample(1:nrow(weather), 20), obs1) cluster2 <- weather[obs2, vars] mean(cluster2) ################################################### ### code chunk number 275: r:cluster:two_weather_points ################################################### x <- round(weather$MinTemp[1:2]) y <- round(weather$MaxTemp[1:2]) plot(x, y, ylim=c(23, 29), pch=4, lwd=5, xlab="MinTemp", ylab="MaxTemp", bty="n") round(x) round(y) ################################################### ### code chunk number 276: r:cluster:two_weather_points_plot ################################################### x <- round(weather$MinTemp[1:2]) y <- round(weather$MaxTemp[1:2]) plot(x, y, ylim=c(23, 29), pch=4, lwd=5, xlab="MinTemp", ylab="MaxTemp", bty="n") round(x) round(y) ################################################### ### code chunk number 277: r:cluster:two_weather_points_plot_grid ################################################### x <- round(weather$MinTemp[1:2]) y <- round(weather$MaxTemp[1:2]) plot(x, y, ylim=c(23, 29), pch=4, lwd=5, xlab="MinTemp", ylab="MaxTemp", bty="n") round(x) round(y) grid(col="black") lines(x, y) lines(c(x[1], x[2], x[2]), c(y[1], y[1], y[2])) ################################################### ### code chunk number 278: r:cluster:rattle_weather_kmeans_annotate ################################################### system(paste("cd graphics;", "convert cluster:rattle_weather_kmeans.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 14,51 77,102 5,5"', '-draw "roundrectangle 217,108 275,131 5,5"', '-draw "roundrectangle 5,137 128,160 5,5"', "cluster:rattle_weather_kmeans_annotate.png")) # system("display graphics/cluster:rattle_weather_kmeans_annotate.png") ################################################### ### code chunk number 279: r:cluster:extract_textview ################################################### TV <- strsplit(rattle:::getTextviewContent("kmeans_textview"), "\n")[[1]] ################################################### ### code chunk number 280: r:cluster:textview_top ################################################### cat(paste(TV[1:3], collapse="\n")) ################################################### ### code chunk number 281: r:cluster:textview_means ################################################### cat(paste(TV[5:12], collapse="\n")) ################################################### ### code chunk number 282: r:cluster:textview_cluster_means ################################################### cat(paste(TV[16:28], collapse="\n")) ################################################### ### code chunk number 283: r:cluster:textview_cluster_sum_of_squares ################################################### cat(paste(TV[63:66], collapse="\n")) ################################################### ### code chunk number 284: r:cluster:textview_time ################################################### cat(paste(TV[68], collapse="\n")) ################################################### ### code chunk number 285: r:cluster:r ################################################### weatherDS <- new.env() ################################################### ### code chunk number 286: r:cluster:weatherDS ################################################### library(rattle) evalq({ data <- weather nobs <- nrow(data) }, weatherDS) ################################################### ### code chunk number 287: r:cluster:weatherKMEANS ################################################### weatherKMEANS <- new.env(parent=weatherDS) evalq({ model <- kmeans(x=na.omit(data[, vars]), centers=10) }, weatherKMEANS) ################################################### ### code chunk number 288: r:cluster:simple_illustration ################################################### set.seed(42) hc <- hclust(dist(weather[sample(nrow(weather), 50), 3:7]), "ave") plot(hc) ################################################### ### code chunk number 289: cluster:show_hclust_options (eval = FALSE) ################################################### ## rattle:::on_tools_cluster_activate(NULL, NULL) ## rattle:::theWidget("hclust_radiobutton")$setActive(TRUE) ################################################### ### code chunk number 290: r:cluster:hclust_iris ################################################### iris.hc <- hclust(dist(iris), "ave") plot(iris.hc) ################################################### ### code chunk number 291: cluster:cmeans (eval = FALSE) ################################################### ## library(e1071) ## crs$cmeans <- cmeans(na.omit(crs$dataset[crs$sample,c(2:6,8,11:21)]), 10) ################################################### ### code chunk number 292: r:cluster:hclust_dendrogram ################################################### rattle:::on_tools_cluster_activate(NULL, NULL) rattle:::theWidget("hclust_radiobutton")$setActive(TRUE) rattle:::executeClusterTab() rattle:::theWidget("hclust_clusters_spinbutton")$setValue(3) rattle:::plotDendrogram() screenShot("cluster:hclust_dendrogram", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 293: r:cluster:cleanup ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") ################################################### ### code chunk number 294: r:arules:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 295: r:arules:load_dvd_trans ################################################### rattle:::newProject() rattle:::executeDataTab(system.file("csv", "dvdtrans.csv", package="rattle")) rattle:::theWidget("data_sample_checkbutton")$setActive(FALSE) rattle:::executeDataTab() system("wmctrl -r 'R Data Miner - [Rattle (dvdtrans.csv)]' -e 0,0,0,-1,-1") system("xdotool mousemove 310 400") system("xdotool click 1") rattle:::executeDataTab(system.file("csv", "dvdtrans.csv", package="rattle")) screenShot("arules:rattle_arules_dvdtrans_target_item", title="RattleDVDTrans") system(paste("cd graphics;", "convert arules:rattle_arules_dvdtrans_target_item.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 14,51 78,100 5,5"', '-draw "roundrectangle 5,108 45,131 5,5"', '-draw "roundrectangle 80,175 227,202 5,5"', '-draw "roundrectangle 300,363 325,385 5,5"', "-crop 1000x400+0+0", "arules:rattle_arules_dvdtrans_target_item_annotate.png")) # system("display graphics/arules:rattle_arules_dvdtrans_target_item_annotate.png") ################################################### ### code chunk number 296: r:arules:rattle_dvdrans_arules_build ################################################### crv$NOTEBOOK$setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.ASSOCIATE.NAME)) rattle:::switchToPage(crv$NOTEBOOK.ASSOCIATE.NAME) system("xdotool mousemove 15 180") system("xdotool click 1") Sys.sleep(1) rattle:::executeAssociateTab() screenShot("arules:rattle_arules_dvdtrans_arules", title="RattleDVDTrans") system(paste("cd graphics;", "convert arules:rattle_arules_dvdtrans_arules.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 14,51 78,100 5,5"', '-draw "roundrectangle 275,108 348,132 5,5"', '-draw "roundrectangle 6,138 90,165 5,5"', "arules:rattle_arules_dvdtrans_arules_annotate.png")) # system("display graphics/arules:rattle_arules_dvdtrans_arules_annotate.png") ################################################### ### code chunk number 297: r:arules:extract_textview ################################################### TV <- strsplit(rattle:::getTextviewContent("associate_textview"), "\n")[[1]] ################################################### ### code chunk number 298: r:arules:textview_top ################################################### cat(paste(TV[1:3], collapse="\n")) ################################################### ### code chunk number 299: r:arules:textview_top ################################################### cat(paste(TV[5:13], collapse="\n")) ################################################### ### code chunk number 300: r:arules:textview_top ################################################### cat(paste(TV[15:21], collapse="\n")) ################################################### ### code chunk number 301: r:arules:textview_top ################################################### cat(paste(TV[23:25], collapse="\n")) ################################################### ### code chunk number 302: r:arules:textview_top ################################################### cat(gsub("transaction\\(s\\)", "trans", gsub(" \\(c\\)", "(c)", paste(TV[27:36], collapse="\n")))) ################################################### ### code chunk number 303: r:arules:rattle_dvdtrans_show_rules ################################################### cat(paste(sub(" 0.1 1", " 0.1 1", sub("support confidence", "supp conf", capture.output(inspect(sort(crs$apriori, by="confidence")[1:5])))), collapse="\n")) ################################################### ### code chunk number 304: r:arules:load_dvdtrans ################################################### library(arules) library(rattle) dvdtrans <- read.csv(system.file("csv", "dvdtrans.csv", package="rattle")) dvdDS <- new.env() dvdDS$data <- as(split(dvdtrans$Item, dvdtrans$ID), "transactions") dvdDS$data ################################################### ### code chunk number 305: r:arules:dvdtrans_apriori ################################################### dvdAPRIORI <- new.env(parent=dvdDS) evalq({ model <- apriori(data, parameter=list(support=0.2, confidence=0.1)) }, dvdAPRIORI) ################################################### ### code chunk number 306: r:arules:dvdtrans_rules ################################################### inspect(sort(dvdAPRIORI$model, by="confidence")[1:5]) ################################################### ### code chunk number 307: r:arules:close_rattle ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 308: r:dtrees:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 309: r:dtrees:tree_draw ################################################### crv$NOTEBOOK$setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.MODEL.NAME)) rattle:::switchToPage(crv$NOTEBOOK.MODEL.NAME) rattle:::executeModelTab() png("graphics/dtrees:rattle_weather_rpart_draw.png") drawTreeNodes(crs$rpart, cex=1.5, decimals=0, cases="days") dev.off() ################################################### ### code chunk number 310: r:dtrees:crop_rpart_tree ################################################### system(paste("cd graphics;", "convert dtrees:rattle_weather_rpart_draw.png", "-fill white -draw \"rectangle 10,299 600,350\"", "-fill black -background white -pointsize 20 -weight 400 -style Normal", "-draw 'text 75,310 \"No\"'", "-draw 'text 185,310 \"Yes\"'", "-draw 'text 295,310 \"No\"'", "-draw 'text 400,310 \"Yes\"'", "-crop 380x280+70+70", "dtrees:rattle_weather_rpart_draw_crop.png")) # system("display graphics/dtrees:rattle_weather_rpart_draw_crop.png") ################################################### ### code chunk number 311: r:dtrees:relabel_rpart_tree ################################################### system(paste("cd graphics;", "convert dtrees:rattle_weather_rpart_draw.png", "-fill white -draw \"rectangle 10,299 600,350\"", "-draw \"rectangle 155,75 360,100\"", "-draw \"rectangle 77,187 433,209\"", "-fill black -background white -pointsize 20 -weight 400 -style Normal", "-draw 'text 75,310 \"Leaf\"'", "-draw 'text 185,310 \"Leaf\"'", "-draw 'text 295,310 \"Leaf\"'", "-draw 'text 400,310 \"Leaf\"'", "-draw 'text 230,100 \"Root\"'", "-draw 'text 120,205 \"Node\"'", "-draw 'text 335,205 \"Node\"'", "-crop 380x280+70+70", "dtrees:tree_relabel.png")) ################################################### ### code chunk number 312: r:dtrees:weather_rpart_rules ################################################### asRules(crs$rpart) ################################################### ### code chunk number 313: r:dtrees:weather_train ################################################### # set.seed(42) # ds <- weather[sample(nrow(weather), 0.7*nrow(weather)),] # Use all of weather since results are similar. ds <- weather ################################################### ### code chunk number 314: r:dtress:weather_split_sunshine9_ds ################################################### var <- "Sunshine" val <- 9 dslt <- ds[ds[[var]]=val & !is.na(ds[[var]]),] ################################################### ### code chunk number 315: r:dtrees:relabel_rpart_tree ################################################### system(paste("cd graphics;", "convert dtrees:rattle_weather_rpart_draw.png", "-fill white -draw \"rectangle 10,299 600,350\"", "-draw \"rectangle 155,75 360,100\"", "-draw \"rectangle 77,187 433,209\"", "-fill black -background white -pointsize 20 -weight 400 -style Normal", "-draw 'text 75,310 \"Leaf\"'", "-draw 'text 185,310 \"Leaf\"'", "-draw 'text 295,310 \"Leaf\"'", "-draw 'text 400,310 \"Leaf\"'", "-draw 'text 200,80 \"366 (66/300)\"'", "-draw 'text 190,100 \"Test Sunshine\"'", "-draw 'text 150,150 \"< 9\"'", "-draw 'text 315,150 \">= 9\"'", "-draw 'text 100,205 \"201 (57/144)\"'", "-draw 'text 315,205 \"162 (8/154)\"'", "-crop 380x155+70+55", "dtrees:tree_relabel_proportions.png")) ################################################### ### code chunk number 316: r:dtress:weather_split_sunshine5_ds ################################################### var <- "Sunshine" val <- 5 dslt <- ds[ds[[var]]=val & !is.na(ds[[var]]),] ################################################### ### code chunk number 317: r:dtress:weather_split_cloud6_ds ################################################### var <- "Cloud3pm" val <- 6 dslt <- ds[ds[[var]]=val & !is.na(ds[[var]]),] ################################################### ### code chunk number 318: r:dtress:weather_split_pressure1012_ds ################################################### var <- "Pressure3pm" val <- 1012 dslt <- ds[ds[[var]]=val & !is.na(ds[[var]]),] ################################################### ### code chunk number 319: r:dtrees:tree_relabel_proportions_4 ################################################### system(paste("cd graphics;", "convert dtrees:rattle_weather_rpart_draw.png", "-fill white -draw \"rectangle 10,299 600,350\"", "-draw \"rectangle 155,75 360,100\"", "-draw \"rectangle 77,187 433,209\"", "-fill black -background white -pointsize 20 -weight 400 -style Normal", "-draw 'text 55,310 \"Dataset\"'", "-draw 'text 165,310 \"Dataset\"'", "-draw 'text 275,310 \"Dataset\"'", "-draw 'text 390,310 \"Dataset\"'", "-draw 'text 200,80 \"366 (66/300)\"'", "-draw 'text 190,100 \"Test Sunshine\"'", "-draw 'text 150,150 \"< 9\"'", "-draw 'text 315,150 \">= 9\"'", "-draw 'text 100,205 \"201 (57/144)\"'", "-draw 'text 315,205 \"162 (8/154)\"'", "-crop 410x265+55+55", "dtrees:tree_relabel_proportions_4.png")) ################################################### ### code chunk number 320: r:dtrees:plogp_info_plot ################################################### p <- seq(0, 1, 0.01) n <- 1-p plot(p, -p*log2(p)-n*log2(n), type="l") ################################################### ### code chunk number 321: r:dtrees:rattle_weather_rpart_annotate ################################################### system(paste("cd graphics;", "convert start:rattle_weather_rpart.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 14,51 78,103 5,5"', '-draw "roundrectangle 350,109 399,132 5,5"', '-draw "roundrectangle 5,138 101,159 5,5"', "dtrees:rattle_weather_rpart_annotate.png")) # system("display graphics/dtrees:rattle_weather_rpart_annotate.png") ################################################### ### code chunk number 322: r:dtrees:extract_textview ################################################### TV <- strsplit(rattle:::getTextviewContent("rpart_textview"), "\n")[[1]] ################################################### ### code chunk number 323: r:dtrees:textview_top ################################################### cat(sub("\\(built using 'rpart'\\):", "...", paste(TV[1:3], collapse="\n"))) ################################################### ### code chunk number 324: r:dtrees:textview_legend ################################################### cat(paste(TV[5:6], collapse="\n")) ################################################### ### code chunk number 325: r:dtrees:textview_root ################################################### cat(paste(TV[8], collapse="\n")) ################################################### ### code chunk number 326: r:dtrees:textview_root ################################################### cat(paste(TV[9], collapse="\n")) ################################################### ### code chunk number 327: r:dtrees:textview_root ################################################### cat(paste(TV[12], collapse="\n")) ################################################### ### code chunk number 328: r:dtrees:textview_root ################################################### cat(paste(TV[9:11], collapse="\n")) ################################################### ### code chunk number 329: r:dtrees:textview_root ################################################### cat(paste(TV[12:14], collapse="\n")) ################################################### ### code chunk number 330: r:dtrees:textview_root ################################################### cat(gsub(", ", ",", gsub(" c", " c", gsub("22, 24", "22,24", gsub(" = ", "=", paste(TV[16:19], collapse="\n")))))) ################################################### ### code chunk number 331: r:dtrees:textview_root ################################################### cat(paste(TV[21:22], collapse="\n")) ################################################### ### code chunk number 332: r:dtrees:textview_root ################################################### cat(paste(TV[24:31], collapse="\n")) ################################################### ### code chunk number 333: r:dtrees:textview_time ################################################### cat(paste(TV[33], collapse="\n")) ################################################### ### code chunk number 334: r:dtrees:library_rpart ################################################### library(rpart) ################################################### ### code chunk number 335: r:dtrees:w_new_env ################################################### weatherDS <- new.env() ################################################### ### code chunk number 336: r:dtrees:library_rattle ################################################### library(rattle) evalq({ data <- weather nobs <- nrow(data) vars <- -grep('^(Date|Locat|RISK)', names(weather)) }, weatherDS) ################################################### ### code chunk number 337: r:dtrees:library_rattle_train ################################################### evalq({ set.seed(42) train <- sample(nobs, 0.7*nobs) }, weatherDS) ################################################### ### code chunk number 338: r:dtrees:weather_train ################################################### evalq({ form <- formula(RainTomorrow ~ .) }, weatherDS) ################################################### ### code chunk number 339: r:dtrees:weather_train ################################################### weatherRPART <- new.env(parent=weatherDS) ################################################### ### code chunk number 340: r:dtrees:weather_ignore ################################################### evalq({ model <- rpart(formula=form, data=data[train, vars]) }, weatherRPART) ################################################### ### code chunk number 341: r:dtrees:print_w_rpart_print ################################################### print(weatherRPART$model) ################################################### ### code chunk number 342: r:dtrees:print_w_rpart_printcp ################################################### printcp(weatherRPART$model) ################################################### ### code chunk number 343: r:dtrees:capture_summary ################################################### TV <- capture.output(summary(weatherRPART$model)) ################################################### ### code chunk number 344: r:dtrees:summary (eval = FALSE) ################################################### ## summary(weatherRPART$model) ################################################### ### code chunk number 345: r:dtrees:summary_call ################################################### cat(gsub("n, i", "n,i", gsub(" = ", "=", paste(TV[1:4], collapse="\n")))) cat(paste(TV[5:8], collapse="\n")) ################################################### ### code chunk number 346: r:dtrees:summary_call ################################################### cat(gsub("tions, c", "tions, c", gsub(", \\(0 split\\)", ",...", gsub("(\\.[0-9]{2})[0-9]{4}", "\\1", gsub("to the ", "", paste(gsub("^ ", " ", TV[10:26]), collapse="\n")))))) ################################################### ### code chunk number 347: r:dtrees:summary_call ################################################### cat(gsub("LLLLLLL", "...", gsub(", \\(22 missing\\)", ",...", gsub("tions, c", "tions, c", gsub(", \\(0 split\\)", ",...", gsub("(\\.[0-9]{2})[0-9]{4}", "\\1", gsub("to the ", "", paste(gsub("^ ", " ", TV[27:38]), collapse="\n")))))))) cat("...\n") ################################################### ### code chunk number 348: r:dtrees:WindDir9am ################################################### levels(weather$WindDir9am) ################################################### ### code chunk number 349: r:dtrees:node7 ################################################### cat("...\n") cat(paste(TV[77:80], collapse="\n")) ################################################### ### code chunk number 350: r:dtrees:where ################################################### head(weatherRPART$model$where, 12) ################################################### ### code chunk number 351: r:dtrees:plot_text_code ################################################### opar <- par(xpd=TRUE) plot(weatherRPART$model) text(weatherRPART$model) par(opar) ################################################### ### code chunk number 352: r:dtrees:plot_text_figure ################################################### opar <- par(xpd=TRUE) plot(weatherRPART$model) text(weatherRPART$model) par(opar) ################################################### ### code chunk number 353: r:dtrees:path_rpart (eval = FALSE) ################################################### ## path.rpart(weatherRPART$model) ################################################### ### code chunk number 354: r:dtrees:rpart_example_arguments (eval = FALSE) ################################################### ## evalq({ ## control <- rpart.control(minsplit=10, ## minbucket=5, ## maxdepth=20, ## usesurrogate=0, ## maxsurrogate=0) ## model <- rpart(formula=form, ## data=data[train, vars], ## method="class", ## parms=list(split="information"), ## control=control) ## }, weatherRPART) ################################################### ### code chunk number 355: r:dtrees:compare_information_gini_information ################################################### evalq({ rpart(formula=form, data=data[train, vars], parms=list(split="information")) }, weatherRPART) ################################################### ### code chunk number 356: r:dtrees:compare_information_gini_gini (eval = FALSE) ################################################### ## evalq({ ## rpart(formula=form, ## data=data[train, vars], ## parms=list(split="gini")) ## }, weatherRPART) ################################################### ### code chunk number 357: r:dtrees:rpart_weather_minsplit_53 ################################################### evalq({ rpart(formula=form, data=data[train, vars], control=rpart.control(minsplit=53)) }, weatherRPART) ################################################### ### code chunk number 358: r:dtrees:rpart_weather_minsplit_52 ################################################### evalq({ rpart(formula=form, data=data[train, vars], control=rpart.control(minsplit=52)) }, weatherRPART) ################################################### ### code chunk number 359: r:dtrees:rpart_weather_minbucket ################################################### ops <- options(digits=2) evalq({ rpart(formula=form, data=data[train, vars], control=rpart.control(minbucket=10)) }, weatherRPART) evalq({ rpart(formula=form, data=data[train, vars], control=rpart.control(minbucket=5)) }, weatherRPART) options(ops) ################################################### ### code chunk number 360: r:dtrees:plotcp ################################################### set.seed(41) evalq({ control <- rpart.control(cp=0, minbucket=0) model <- rpart(formula=form, data=data[train, vars], control=control) }, weatherRPART) print(weatherRPART$model$cptable) plotcp(weatherRPART$model) grid() ################################################### ### code chunk number 361: r:dtrees:plotcp_figure ################################################### set.seed(41) evalq({ control <- rpart.control(cp=0, minbucket=0) model <- rpart(formula=form, data=data[train, vars], control=control) }, weatherRPART) print(weatherRPART$model$cptable) plotcp(weatherRPART$model) grid() ################################################### ### code chunk number 362: r:dtrees:choose_min_cp ################################################### xerr <- weatherRPART$model$cptable[,"xerror"] minxerr <- which.min(xerr) mincp <- weatherRPART$model$cptable[minxerr, "CP"] weatherRPART$model.prune <- prune(weatherRPART$model, cp=mincp) ################################################### ### code chunk number 363: r:dtrees:prune_stats (eval = FALSE) ################################################### ## # From Roberto Perdisci on R-help Date: Thu 15 Feb 2007 ## ## # Iterate over cp and show improvment. ## ## prune.stats.rpart <- function(unpruned.tree, testset, class.index.name, cp) ## { ## acc.rpart.pruned <- list() ## nnodes <- NULL ## ## rpart.pruned <- unpruned.tree ## for(i in 1:length(cp)) ## { ## print(paste("cp =", cp[i])) ## ## rpart.pruned <- prune(rpart.pruned, cp[i]) ## pred.rpart.pruned <- predict(rpart.pruned, testset, type="class") ## acc <- sum(pred.rpart.pruned==testset[,class.index.name])/nrow(testset) ## acc.rpart.pruned <- c(acc.rpart.pruned, list(acc)) ## nnodes <- c(nnodes, nrow(rpart.pruned$frame)) ## } ## return(list(acc=acc.rpart.pruned, nnodes=nnodes)) ## } ## ## plot.prune.results.rpart <- function(formula, traininingset, testset, class.index.name, ## dataset.name, cp, add=FALSE, ylim=NULL) ## { ## ## rpart.unpruned <- rpart(formula, data=traininingset, ## control=rpart.control(minsplit=2, cp=0)) ## ## res <- prune.stats.rpart(rpart.unpruned, testset, class.index.name, cp) ## ## x <- unlist(res$acc) ## y <- unlist(res$nnodes) ## ## print(x) ## print(y) ## ## if(add) par(new=TRUE) ## ## plot(cp, x, type="l", col="blue", ylim=ylim, ann=FALSE) ## text(cp[c(seq(1, length(cp), by=5))], x[c(seq(1, length(cp), by=5))], ## paste("(", y[seq(1,length(cp),by=5)], ")", sep=""), pos=3, cex=0.5) ## title(main=dataset.name, xlab="cp", ylab="Accuracy", font=3, cex=0.5) ## } ## plot.prune.results.rpart(weatherRPART$form, ## weatherAUS[weatherDS$train, weatherDS$vars], ## weatherAUS[-weatherDS$train, weatherDS$vars], ## "RainTomorrow", "Weather", cp=seq(0,0.005,by=0.0001)) ################################################### ### code chunk number 364: r:dtrees:weather_rpart_prior_dataset ################################################### wausDS <- new.env() evalq({ data <- weatherAUS nobs <- nrow(data) form <- formula(RainTomorrow ~ RainToday) target <- all.vars(form)[1] set.seed(42) train <- sample(nobs, 0.5*nobs) }, wausDS) ################################################### ### code chunk number 365: r:dtrees:weather_rpart_prior_build ################################################### wausRPART <- new.env(parent=wausDS) evalq({ model <- rpart(formula=form, data=data[train,]) model }, wausRPART) ################################################### ### code chunk number 366: r:dtrees:weather_rpart_prior_table ################################################### evalq({ freq <- table(data[train, target]) round(100*freq/length(train), 2) }, wausRPART) ################################################### ### code chunk number 367: r:dtrees:weather_rpart_prior_rpart2 ################################################### evalq({ model <- rpart(formula=form, data=data[train,], parm=list(prior=c(0.5, 0.5))) model }, wausRPART) ################################################### ### code chunk number 368: r:dtrees:ctree ################################################### library(party) weatherCTREE <- new.env(parent=weatherDS) evalq({ model <- ctree(formula=form, data=data[train, vars]) }, weatherCTREE) ################################################### ### code chunk number 369: r:dtrees:ctree_output ################################################### cat(paste(capture.output(weatherCTREE$model)[8:17], collapse="\n")) ################################################### ### code chunk number 370: dmsurvivor.Rnw:15880-15896 (eval = FALSE) ################################################### ## plot(weatherCTREE$model) ## screenShot("dtrees:party_plot", title="RPlot", close=TRUE) ## # party 0.9-99992 replace '<=' with '"' ## system(paste("cd graphics;", ## "convert dtrees:party_plot.png", ## "-fill '#ffffff'", ## "-draw 'roundrectangle 215,160 230,180 5,5'", ## "-draw 'roundrectangle 120,315 130,325 5,5'", ## "-draw 'roundrectangle 425,315 435,325 5,5'", ## "-fill black -pointsize 16 -weight 400 -style Normal", ## "-draw 'text 218,180 <'", ## "-draw 'text 120,329 <'", ## "-draw 'text 424,329 <'", ## "-crop 98%x95%+10+30", ## "dtrees:party_plot_cropped.png")) ## # system("display graphics/dtrees:party_plot_cropped.png") ################################################### ### code chunk number 371: r:dtrees:rpart_iris (eval = FALSE) ################################################### ## irisDS <- new.env() ## evalq({ ## data <- iris ## nobs <- nrow(data) ## vars <- 1:ncol(data) ## form <- formula(Species ~ .) ## target <- all.vars(form)[1] ## set.seed(42) ## train <- c(sample(nobs, 0.7*nobs)) ## }, irisDS) ## ## irisRPART <- new.env(parent=irisDS) ## evalq({ ## model <- rpart(formula=form, data=data[train, vars]) ## model ## }, irisRPART) ## ## evalq({ ## plot(model) ## text(model) ## table(predict(model, data[-train, vars], type="class"), ## data[-train, "Species"]) ## }, irisRPART) ################################################### ### code chunk number 372: r:dtrees:rpart_wine (eval = FALSE) ################################################### ## library(rpart) ## wineDS <- new.env() ## evalq({ ## data <- wine ## nobs <- nrow(data) ## vars <- 1:ncol(data) ## form <- formula(as.factor(Type) ~ .) ## target <- all.vars(form)[1] ## train <- c(sample(nobs, 0.7*nobs)) ## }, wineDS) ## ## wineRPART <- new.env(parent=wineDS) ## evalq({ ## model <- rpart(formula=form, data=data[train, vars]) ## model ## }, wineRPART) ################################################### ### code chunk number 373: r:dtrees:rpart_wine_information (eval = FALSE) ################################################### ## printcp(wineRPART$model) ## formula(wineRPART$model) ## wineRPART$model$where ################################################### ### code chunk number 374: r:dtrees:rpart_wine_plot (eval = FALSE) ################################################### ## evalq({ ## plot(model) ## text(model) ## path.rpart(model) ## }, wineRPART) ################################################### ### code chunk number 375: r:dtrees:rpart_wine_confusion matrix (eval = FALSE) ################################################### ## evalq({ ## table(predict(model, data[-train,], type="class"), ## data[-train, target]) ## }, wineRPART) ################################################### ### code chunk number 376: r:dtrees:mvpart_wine (eval = FALSE) ################################################### ## library(mvpart) ## wineMVP <- new.env(parent=wineDS) ## evalq({ ## mvp <- mvpart(formula=form, data=data[train, vars]) ## }, wineMVP) ################################################### ### code chunk number 377: r:dtrees:exo_different_tree (eval = FALSE) ################################################### ## library(rpart) ## ignore <- grep('^(Date|Location|RISK_)', names(weather)) ## my.rpart <- rpart(RainTomorrow ~ ., data=weather[,-ignore]) ## my.rpart ################################################### ### code chunk number 378: r:dtrees:close_rattle ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 379: r:rf:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 380: r:rf:rattle_weather_rf_annotate ################################################### oldopt <- options(width=240) # Otherwise Gini column in importance is wrapped crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.MODEL.NAME)) rattle:::switchToPage(crv$NOTEBOOK.MODEL.NAME) rattle:::theWidget("rf_radiobutton")$setActive(TRUE) rattle:::executeModelTab() TV <- strsplit(rattle:::getTextviewContent("rf_textview"), "\n")[[1]] screenShot("rf:rattle_weather_rf", title="RattleWeather") system(paste("cd graphics;", "convert rf:rattle_weather_rf.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 14,51 79,102 5,5"', '-draw "roundrectangle 105,138 177,158 5,5"', '-draw "roundrectangle 349,108 401,131 5,5"', "rf:rattle_weather_rf_annotate.png")) # system("display graphics/rf:rattle_weather_rf_annotate.png") options(oldopt) ################################################### ### code chunk number 381: r:rf:textview_info ################################################### cat(paste(TV[1:4], collapse="\n")) ################################################### ### code chunk number 382: r:rf:textview_call ################################################### cat(sub(", data", ",\n data", sub(", ntree", ",\n ntree", sub(", replace", ",\n replace", gsub(" ", " ", paste(TV[6:7], collapse="\n")))))) ################################################### ### code chunk number 383: r:rf:textview_info ################################################### cat(paste(TV[8:10], collapse="\n")) ################################################### ### code chunk number 384: r:rf:textview_oob ################################################### cat(paste(TV[12], collapse="\n")) ################################################### ### code chunk number 385: r:rf:textview_confusion ################################################### cat(paste(TV[13:16], collapse="\n")) ################################################### ### code chunk number 386: r:rf:plot_oob_roc (eval = FALSE) ################################################### ## library(ROCR) ## crs$pr <- predict(crs$rf, type="prob")[,2] ## pred <- prediction(crs$pr, crs$dataset[crs$sample, crs$target]) ## perf <- performance(pred, "tpr", "fpr") ## plot(perf, col=4) ################################################### ### code chunk number 387: r:rf:weather_sample_size_35_35 ################################################### set.seed(42) tmp.rf <- randomForest(RainTomorrow ~ ., data=crs$dataset[crs$sample,c(3:22,24)], ntree=500, mtry=4, sampsize=c(35,35), importance=TRUE, na.action=na.roughfix, replace=FALSE) cat(" OOB estimate of error rate: ", round(tmp.rf$err.rate[tmp.rf$ntree, "OOB"] * 100, dig = 2), "%\n", sep = "") cat("Confusion matrix:\n") print(tmp.rf$confusion) ################################################### ### code chunk number 388: r:rf:textview_importance ################################################### cat(sub("No", " No", gsub(" ", " ", gsub(" ", " ", sub("MeanDecreaseGini", " Gini", sub("MeanDecreaseAccuracy", " Accu", paste(TV[18:30], collapse="\n"))))))) ################################################### ### code chunk number 389: r:rf:importance_plot ################################################### rattle:::plotRandomForestImportance() system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1200,600') screenShot("rf:rattle_weather_rf_importance", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 390: r:rf:textview_time ################################################### cat(paste(TV[41], collapse="\n")) ################################################### ### code chunk number 391: r:rf:error_plot ################################################### rattle:::plotRandomForestError() system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1200,600') screenShot("rf:rattle_weather_rf_error", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 392: r:rf:print_rf ################################################### result <- capture.output(printRandomForests(crs$rf, 1))[1:18] cat(gsub('"SW", "WNW", "WSW"', '...', gsub('"NNW", "NW", "SE", "SSE", "SSW", "SW", "WNW", "WSW"', '...', paste(capture.output(printRandomForests(crs$rf, 1))[c(1,2,4:10,5,12:18)], collapse="\n")))) ################################################### ### code chunk number 393: r:rf:weatherDS_new_env ################################################### library(rattle) weatherDS <- new.env() evalq({ data <- na.omit(weather) nobs <- nrow(data) form <- formula(RainTomorrow ~ .) target <- all.vars(form)[1] vars <- -grep('^(Date|Location|RISK_)', names(data)) set.seed(42) train <- sample(nobs, 0.7*nobs) }, weatherDS) ################################################### ### code chunk number 394: r:rf:build_random_forest ################################################### library(randomForest) weatherRF <- new.env(parent=weatherDS) evalq({ model <- randomForest(formula=form, data=data[train, vars], ntree=500, mtry=4, importance=TRUE, localImp=TRUE, na.action=na.roughfix, replace=FALSE) }, weatherRF) ################################################### ### code chunk number 395: r:rf:model_str_command (eval = FALSE) ################################################### ## str(weatherRF$model) ## ?randomForest ################################################### ### code chunk number 396: r:rf:model_predicted ################################################### head(weatherRF$model$predicted, 10) ################################################### ### code chunk number 397: r:rf:model_independence ################################################### head(weatherRF$model$importance) ################################################### ### code chunk number 398: dmsurvivor.Rnw:16860-16861 ################################################### head(weatherRF$model$localImp)[,1:4] ################################################### ### code chunk number 399: r:rf:model_err.rate_example (eval = FALSE) ################################################### ## weatherRF$model$err.rate ################################################### ### code chunk number 400: r:rf:head_error_rate ################################################### round(head(weatherRF$model$err.rate, 15), 4) ################################################### ### code chunk number 401: r:rf:minimum_error_rate ################################################### evalq({ min.err <- min(data.frame(model$err.rate)["OOB"]) min.err.idx <- which(data.frame(model$err.rate)["OOB"] == min.err) }, weatherRF) ################################################### ### code chunk number 402: dmsurvivor.Rnw:16888-16890 ################################################### weatherRF$min.err weatherRF$min.err.idx ################################################### ### code chunk number 403: dmsurvivor.Rnw:16893-16894 ################################################### weatherRF$model$err.rate[weatherRF$min.err.idx,] ################################################### ### code chunk number 404: dmsurvivor.Rnw:16903-16904 ################################################### head(weatherRF$model$votes) ################################################### ### code chunk number 405: dmsurvivor.Rnw:16908-16909 ################################################### head(apply(weatherRF$model$votes, 1, sum)) ################################################### ### code chunk number 406: r:rf:randomForest_example_arguments (eval = FALSE) ################################################### ## evalq({ ## model <- randomForest(formula=form, ## data=data[train, vars], ## ntree=500, ## mtry=4, ## replace=FALSE, ## sampsize=.632*nobs, ## importance=TRUE, ## localImp=FALSE, ## na.action=na.roughfix) ## }, weatherRF) ################################################### ### code chunk number 407: r:rf:weatherAUS_samplesize (eval = FALSE) ################################################### ## wa <- new.env() ## wa$data <- na.omit(weatherAUS) ## wa$nr <- nrow(wa$data) ## set.seed(42) ## wa$train <- sample(wa$nr, 0.7*wa$nr) ## wa$ignore <- -grep('^(Date|Location|RISK_)', ## names(wa$data)) ## wa$samples <- rep(min(table(wa$data$Location)), ## nlevels(wa$data$Location)) ## evalq(rf <- randomForest(RainTomorrow ~ ., ## data=data[train, ignore], ## ntree=500, mtry=4, ## importance=TRUE, ## na.action=na.omit, ## strata=data$Location, ## sampsize=samples, ## replace=FALSE), wa) ################################################### ### code chunk number 408: r:rf:cforest ################################################### library(party) weatherCFOREST <- new.env(parent=weatherDS) ################################################### ### code chunk number 409: dmsurvivor.Rnw:17272-17278 ################################################### evalq({ model <- cforest(form, data=data[vars], controls=cforest_unbiased(ntree=50, mtry=4)) }, weatherCFOREST) ################################################### ### code chunk number 410: dmsurvivor.Rnw:17283-17289 ################################################### evalq({ varimp <- as.data.frame(sort(varimp(model), decreasing=TRUE)) names(varimp) <- "Importance" head(round(varimp, 4), 3) }, weatherCFOREST) ################################################### ### code chunk number 411: r:rf:iris_sampsize ################################################### sampsize <- c(10, 20, 10) model <- randomForest(Species ~ ., iris, sampsize=sampsize) model ################################################### ### code chunk number 412: r:rf:iris_sampsize_samples ################################################### sampsize <- c(setosa=10, versicolor=20, virginica=10) model <- randomForest(Species ~ ., iris, sampsize=sampsize) ################################################### ### code chunk number 413: r:rf:audit_one_tree ################################################### library(rattle) audit$Adjusted <- as.factor(audit$TARGET_Adjusted) auditDS <- new.env() evalq({ data <- na.omit(audit) nobs <- nrow(data) vars <- c(2:10, 14) form <- formula(Adjusted ~ .) target <- all.vars(form)[1] set.seed(42) train <- sample(nobs, 0.7*nobs) }, auditDS) auditRF <- new.env(parent=auditDS) evalq({ set.seed(42) model <- randomForest(form, data[train, vars], ntree=1) predictions <- predict(model, data[-train,vars], type="prob") summary(as.factor(predictions[,2])) }, auditRF) ################################################### ### code chunk number 414: r:rf:iris_two_trees ################################################### evalq({ set.seed(42) model <- randomForest(form, data[train, vars], ntree=2) predictions <- predict(model, data[-train, vars], type="prob") summary(as.factor(predictions[,2])) }, auditRF) ################################################### ### code chunk number 415: r:rf:iris_four_trees ################################################### evalq({ set.seed(42) model <- randomForest(form, data[train, vars], ntree=4) predictions <- predict(model, data[-train, vars], type="prob") summary(as.factor(predictions[,2])) }, auditRF) ################################################### ### code chunk number 416: r:rf:iris:ten_trees ################################################### evalq({ set.seed(42) rf10 <- randomForest(form, data[train, vars], ntree=10) summary(as.factor(predict(rf10, data[-train, vars], type="prob")[,2])) }, auditRF) ################################################### ### code chunk number 417: r:rf:close_rattle ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 418: r:boost:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 419: r:boost:rattle_weather_boost ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.MODEL.NAME)) rattle:::switchToPage(crv$NOTEBOOK.MODEL.NAME) rattle:::theWidget("boost_radiobutton")$setActive(TRUE) rattle:::executeModelTab() TV <- strsplit(rattle:::getTextviewContent("ada_textview"), "\n")[[1]] screenShot("rf:rattle_weather_boost", title="RattleWeather") system(paste("cd graphics;", "convert rf:rattle_weather_boost.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 14,51 77,103 5,5"', '-draw "roundrectangle 182,139 246,158 5,5"', '-draw "roundrectangle 350,108 399,133 5,5"', "rf:rattle_weather_boost_annotate.png")) # system("display graphics/rf:rattle_weather_boost_annotate.png") ################################################### ### code chunk number 420: r:boost:textview_call ################################################### cat(sub(", data", ",\n data", sub(", minsplit =", ",\n minsplit =", sub(", iter", ",\n iter", sub(", \n xval", ", xval", paste(TV[1:6], collapse="\n")))))) ################################################### ### code chunk number 421: r:boost:textview_loss ################################################### cat(paste(TV[7], collapse="\n")) ################################################### ### code chunk number 422: r:boost:textview_info ################################################### cat(paste(TV[9:15], collapse="\n")) ################################################### ### code chunk number 423: r:boost:textview_info ################################################### cat(paste(TV[17:23], collapse="\n")) ################################################### ### code chunk number 424: r:boost:textview_info ################################################### cat(paste(TV[25:26], collapse="\n")) ################################################### ### code chunk number 425: r:boost:textview_info ################################################### cat(paste(TV[28], collapse="\n")) ################################################### ### code chunk number 426: r:boost:error_plot ################################################### rattle:::plotErrorsAda() system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1200,600') screenShot("rf:rattle_weather_boost_error", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 427: r:boost:importance_plot ################################################### rattle:::plotImportanceAda() system('wmctrl -r "Rattle: Plot 2" -e 0,-1,-1,1200,600') screenShot("rf:rattle_weather_boost_importance", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 428: r:boost:we_new_env ################################################### library(rattle) weatherDS <- new.env() evalq({ data <- weather nobs <- nrow(weather) vars <- -grep('^(Date|Location|RISK_)', names(data)) form <- formula(RainTomorrow ~ .) target <- all.vars(form)[1] set.seed(42) train <- sample(nobs, 0.7*nobs) }, weatherDS) ################################################### ### code chunk number 429: r:boost:build_ada ################################################### library(ada) weatherADA <- new.env(parent=weatherDS) ################################################### ### code chunk number 430: dmsurvivor.Rnw:18099-18109 ################################################### evalq({ control <- rpart.control(maxdepth=30, cp=0.010000, minsplit=20, xval=10) model <- ada(formula=form, data=data[train, vars], control=control, iter=50) }, weatherADA) ################################################### ### code chunk number 431: r:boost:ada_print ################################################### weatherADA$model ################################################### ### code chunk number 432: r:boost:ada_summary ################################################### summary(weatherADA$model) ################################################### ### code chunk number 433: r:boost:use_rpart_data ################################################### library(rpart) weatherBRP <- new.env() evalq({ data <- weather vars <- -grep('^(Date|Location|RISK_)', names(data)) target <- "RainTomorrow" N <- nrow(data) M <- ncol(data) - length(vars) data$Target <- rep(-1, N) data$Target[data[target] == "Yes"] <- 1 vars <- c(vars, -(ncol(data)-1)) # Remove old target form <- formula(Target ~ .) target <- all.vars(form)[1] }, weatherBRP) ################################################### ### code chunk number 434: r:boost:use_rpart_data_head ################################################### head(weatherBRP$data[c("RainTomorrow", "Target")]) ################################################### ### code chunk number 435: r:boost:use_rpart_data_names ################################################### head(names(weatherBRP$data)) weatherBRP$vars ################################################### ### code chunk number 436: r:boost:use_rpart_create_weights ################################################### evalq({ w <- rep(1/N, N) }, weatherBRP) round(head(weatherBRP$w), 4) ################################################### ### code chunk number 437: r:boost:use_rpart_build_m1 ################################################### evalq({ control <- rpart.control(maxdepth=1) M1 <- rpart(formula=form, data=data[vars], weights=w/mean(w), control=control, method="class") }, weatherBRP) ################################################### ### code chunk number 438: r:boost:use_rpart_build_m1_show ################################################### weatherBRP$M1 ################################################### ### code chunk number 439: r:boost:use_rpart_predict ################################################### evalq({ ms <- which(((predict(M1)[,2]>0.5)*2)-1 != data[target]) names(ms) <- NULL }, weatherBRP) ################################################### ### code chunk number 440: r:boost:use_rpart_predict ################################################### evalq({ cat(paste(length(ms), "observations incorrectly classified:\n")) head(ms) }, weatherBRP) ################################################### ### code chunk number 441: r:boost:use_rpart_boost ################################################### evalq({e1 <- sum(w[ms])/sum(w); e1}, weatherBRP) ################################################### ### code chunk number 442: dmsurvivor.Rnw:18242-18243 ################################################### evalq({a1 <- log((1-e1)/e1); a1}, weatherBRP) ################################################### ### code chunk number 443: dmsurvivor.Rnw:18246-18249 ################################################### round(head(weatherBRP$w[weatherBRP$ms]), 4) evalq({w[ms] <- w[ms]*exp(a1)}, weatherBRP) round(head(weatherBRP$w[weatherBRP$ms]), 4) ################################################### ### code chunk number 444: r:boost:use_rpart_build_m1 ################################################### evalq({ M2 <- rpart(formula=form, data=data[vars], weights=w/mean(w), control=control, method="class") }, weatherBRP) ################################################### ### code chunk number 445: dmsurvivor.Rnw:18264-18265 ################################################### weatherBRP$M2 ################################################### ### code chunk number 446: dmsurvivor.Rnw:18268-18273 ################################################### evalq({ ms <- which(((predict(M2)[,2]>0.5)*2)-1 != data[target]) names(ms) <- NULL }, weatherBRP) ################################################### ### code chunk number 447: dmsurvivor.Rnw:18277-18278 ################################################### evalq({length(ms)}, weatherBRP) ################################################### ### code chunk number 448: dmsurvivor.Rnw:18281-18282 ################################################### evalq({head(ms)}, weatherBRP) ################################################### ### code chunk number 449: r:boost:use_rpart_boost2 ################################################### evalq({e2 <- sum(w[ms])/sum(w); e2}, weatherBRP) ################################################### ### code chunk number 450: dmsurvivor.Rnw:18291-18292 ################################################### evalq({a2 <- log((1-e2)/e2); a2}, weatherBRP) ################################################### ### code chunk number 451: dmsurvivor.Rnw:18296-18299 ################################################### round(head(weatherBRP$w[weatherBRP$ms]), 4) evalq({w[ms] <- w[ms]*exp(a2)}, weatherBRP) round(head(weatherBRP$w[weatherBRP$ms]), 4) ################################################### ### code chunk number 452: r:boost:use_rpart_build_m3 ################################################### evalq({ M3 <- rpart(formula=form, data=data[vars], weights=w/mean(w), control=control, method="class") ms <- which(((predict(M3)[,2]>0.5)*2)-1 != data[target]) names(ms) <- NULL }, weatherBRP) ################################################### ### code chunk number 453: dmsurvivor.Rnw:18316-18317 ################################################### evalq({length(ms)}, weatherBRP) ################################################### ### code chunk number 454: dmsurvivor.Rnw:18320-18321 ################################################### evalq({e3 <- sum(w[ms])/sum(w); e3}, weatherBRP) ################################################### ### code chunk number 455: dmsurvivor.Rnw:18324-18325 ################################################### evalq({a3 <- log((1-e3)/e3); a3}, weatherBRP) ################################################### ### code chunk number 456: dmsurvivor.Rnw:18330-18333 ################################################### round(head(weatherBRP$w[weatherBRP$ms]), 4) evalq({w[ms] <- w[ms]*exp(a3)}, weatherBRP) round(head(weatherBRP$w[weatherBRP$ms]), 4) ################################################### ### code chunk number 457: r:boost:rweka_adt_library (eval = FALSE) ################################################### ## library(RWeka) ## WPM("refresh-cache") ## WPM("install-package", "alternatingDecisionTrees") ################################################### ### code chunk number 458: r:boost:rweka_adt_library_only ################################################### library(RWeka) ################################################### ### code chunk number 459: r:boost:rweka_adt_function ################################################### WPM("load-package", "alternatingDecisionTrees") cpath <- "weka/classifiers/trees/ADTree" ADT <- make_Weka_classifier(cpath) ################################################### ### code chunk number 460: r:boost:rweka_adt_function_wow ################################################### WOW(ADT) ################################################### ### code chunk number 461: r:boost:rweka_adt_build ################################################### weatherADT <- new.env(parent=weatherDS) ################################################### ### code chunk number 462: dmsurvivor.Rnw:18506-18509 ################################################### evalq({ model <- ADT(formula=form, data=data[train, vars]) }, weatherADT) ################################################### ### code chunk number 463: dmsurvivor.Rnw:18513-18514 ################################################### weatherADT$model ################################################### ### code chunk number 464: r:boost:rweka_adt_predict ################################################### evalq({ predictions <- predict(model, data[-train, vars]) table(predictions, data[-train, target], dnn=c("Predicted", "Actual")) }, weatherADT) ################################################### ### code chunk number 465: r:boost:rweka_adt_predict_ada ################################################### evalq({ predictions <- predict(model, data[-train, vars]) table(predictions, data[-train, target], dnn=c("Predicted", "Actual")) }, weatherADA) ################################################### ### code chunk number 466: r:boost:close_rattle ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 467: r:svm:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 468: r:svm:demo_2d_code ################################################### library(rattle) obs <- with(weather, Pressure3pm+Sunshine > 1032 | (Pressure3pm+Sunshine < 1020 & RainTomorrow == "Yes")) ds <- weather[obs,] with(ds, plot(Pressure3pm, Sunshine, pch=as.integer(RainTomorrow), col=as.integer(RainTomorrow)+1)) lines(c(1016.2, 1019.6), c(0, 12.7)) lines(c(1032.8, 1001.5), c(0, 12.7)) legend("topleft", c("Yes", "No"), pch=2:1, col=3:2) ################################################### ### code chunk number 469: r:svm:demo_2d_figure ################################################### library(rattle) obs <- with(weather, Pressure3pm+Sunshine > 1032 | (Pressure3pm+Sunshine < 1020 & RainTomorrow == "Yes")) ds <- weather[obs,] with(ds, plot(Pressure3pm, Sunshine, pch=as.integer(RainTomorrow), col=as.integer(RainTomorrow)+1)) lines(c(1016.2, 1019.6), c(0, 12.7)) lines(c(1032.8, 1001.5), c(0, 12.7)) legend("topleft", c("Yes", "No"), pch=2:1, col=3:2) ################################################### ### code chunk number 470: r:svm:demo_2d_max_fig ################################################### with(ds, plot(Pressure3pm, Sunshine, pch=as.integer(RainTomorrow), col=as.integer(RainTomorrow)+1)) polygon(c(1017.5, 1030, 1019, 1007.3), c(-0.2, -0.2, 12.9, 12.9), lty=0, col="grey") lines(c(1017.2+(1030-1017.2)/2, 1007.3+(1019-1007.3)/2), c(-0.2, 12.9)) legend("topleft", c("Yes", "No"), pch=2:1, col=3:2) ################################################### ### code chunk number 471: r:svm:demo_2d_all_code ################################################### ds <- weather with(ds, plot(Pressure3pm, Sunshine, pch=as.integer(RainTomorrow), col=as.integer(RainTomorrow)+1)) legend("topleft", c("Yes", "No"), pch=2:1, col=3:2) ################################################### ### code chunk number 472: r:svm:demo_2d_all_figure ################################################### ds <- weather with(ds, plot(Pressure3pm, Sunshine, pch=as.integer(RainTomorrow), col=as.integer(RainTomorrow)+1)) legend("topleft", c("Yes", "No"), pch=2:1, col=3:2) ################################################### ### code chunk number 473: r:svm:demo_2d_map_code ################################################### ds <- weather ds$p3sq <- ds$Pressure3pm^2 ds$p3su <- ds$Pressure3pm*ds$Sunshine keep <- 1:nrow(ds) keep <- setdiff(keep, which(ds$p3su < 4000 & ds$RainTomorrow == "No")) keep <- setdiff(keep, which(ds$p3su > 4000 & ds$p3su < 8000 & ds$p3sq < 1030000 & ds$RainTomorrow == "No")) with(ds[keep,], plot(p3sq, p3su, pch=as.integer(RainTomorrow), col=as.integer(RainTomorrow)+1)) legend("topleft", c("Yes", "No"), pch=2:1, col=3:2) ################################################### ### code chunk number 474: r:svm:demo_2d_map_figure ################################################### ds <- weather ds$p3sq <- ds$Pressure3pm^2 ds$p3su <- ds$Pressure3pm*ds$Sunshine keep <- 1:nrow(ds) keep <- setdiff(keep, which(ds$p3su < 4000 & ds$RainTomorrow == "No")) keep <- setdiff(keep, which(ds$p3su > 4000 & ds$p3su < 8000 & ds$p3sq < 1030000 & ds$RainTomorrow == "No")) with(ds[keep,], plot(p3sq, p3su, pch=as.integer(RainTomorrow), col=as.integer(RainTomorrow)+1)) legend("topleft", c("Yes", "No"), pch=2:1, col=3:2) ################################################### ### code chunk number 475: r:svm:rattle_weather_svm ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.MODEL.NAME)) rattle:::switchToPage(crv$NOTEBOOK.MODEL.NAME) rattle:::theWidget("svm_radiobutton")$setActive(TRUE) rattle:::executeModelTab() TV <- strsplit(rattle:::getTextviewContent("ksvm_textview"), "\n")[[1]] screenShot("svm:rattle_weather_svm", title="RattleWeather") system(paste("cd graphics;", "convert svm:rattle_weather_svm.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 14,51 77,103 5,5"', '-draw "roundrectangle 253,138 308,158 5,5"', '-draw "roundrectangle 350,108 399,133 5,5"', "svm:rattle_weather_svm_annotate.png")) # system("display graphics/svm:rattle_weather_svm_annotate.png") ################################################### ### code chunk number 476: r:boost:textview_call ################################################### cat(paste(TV[1:3], collapse="\n")) ################################################### ### code chunk number 477: r:boost:textview_input ################################################### cat(paste(TV[5:6], collapse="\n")) ################################################### ### code chunk number 478: r:boost:textview_parameters ################################################### cat(paste(TV[8:9], collapse="\n")) ################################################### ### code chunk number 479: r:boost:textview_model_info ################################################### cat(paste(TV[11:15], collapse="\n")) ################################################### ### code chunk number 480: r:svm:textview_time ################################################### cat(paste(TV[17], collapse="\n")) ################################################### ### code chunk number 481: r:svm:we_new_env ################################################### library(rattle) weatherDS <- new.env() evalq({ data <- weather nobs <- nrow(weather) target <- "RainTomorrow" vars <- -grep('^(Date|Location|RISK_)', names(data)) set.seed(42) train <- sample(nobs, 0.7*nobs) form <- formula(RainTomorrow ~ .) }, weatherDS) ################################################### ### code chunk number 482: r:svm:build_svm ################################################### library(kernlab) weatherSVM <- new.env(parent=weatherDS) evalq({ model <- ksvm(form, data=data[train, vars], kernel="rbfdot", prob.model=TRUE) }, weatherSVM) ################################################### ### code chunk number 483: r:svm:ksvm_print ################################################### weatherSVM$model ################################################### ### code chunk number 484: r:svm:close_rattle ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 485: r:evaluate:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) crv$NOTEBOOK$setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.MODEL.NAME)) rattle:::switchToPage(crv$NOTEBOOK.MODEL.NAME) rattle:::theWidget("all_models_radiobutton")$setActive(TRUE) rattle:::executeModelTab() ################################################### ### code chunk number 486: r:evaluate:show_options ################################################### crv$NOTEBOOK$setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.EVALUATE.NAME)) rattle:::switchToPage(crv$NOTEBOOK.EVALUATE.NAME) rattle:::executeEvaluateTab() screenShot("evaluate:rattle_default_window", title="RattleWeather") system(paste("cd graphics;", "convert evaluate:rattle_default_window.png", "-fill none -stroke red -strokewidth 3", '-draw "roundrectangle 400,108 466,133 5,5"', "-crop 1000x250+0+0", "evaluate:rattle_default_window_annotate.png")) # system("display graphics/evaluate:rattle_default_window_annotate.png") ################################################### ### code chunk number 487: r:evaluate:help_performance (eval = FALSE) ################################################### ## library(ROCR) ## help(performance) ################################################### ### code chunk number 488: r:evaluate:rattle_tree_confusion_matrix ################################################### crs$pr <- predict(crs$rpart, crs$dataset[crs$validate, c(3:22, 24)], type="class") tb <- table(crs$pr, crs$dataset[crs$validate, c(3:22, 24)]$RainTomorrow, dnn=c("Predicted", "Actual")) TN <- tb[1,1] TP <- tb[2,2] FN <- tb[1,2] FP <- tb[2,1] overall <- function(x) { if (nrow(x) == 2) (x[1,2] + x[2,1]) / sum(x) else 1 - (x[1,rownames(x)]) / sum(x) } OV <- overall(table(crs$pr, crs$dataset[crs$validate, c(3:22, 24)]$RainTomorrow, dnn=c("Predicted", "Actual"))) ################################################### ### code chunk number 489: r:evaluate:rattle_weather_evaluate_rf ################################################### system("wmctrl -r 'R Data Miner - [Rattle (weather.csv)]' -e 0,0,0,-1,-1") system("xdotool mousemove 305 380") for (i in 1:11) system("xdotool click 5") screenShot("evaluate:rattle_weather_evaluate_rf", title="RattleWeather") ################################################### ### code chunk number 490: r:evaluate:rattle_rf_confusion_matrix ################################################### crs$pr <- predict(crs$rf, crs$dataset[crs$validate, c(3:22, 24)]) tb <- table(crs$pr, crs$dataset[crs$validate, c(3:22, 24)]$RainTomorrow, dnn=c("Predicted", "Actual")) TN <- tb[1,1] TP <- tb[2,2] FN <- tb[1,2] FP <- tb[2,1] overall <- function(x) { if (nrow(x) == 2) (x[1,2] + x[2,1]) / sum(x) else 1 - (x[1,rownames(x)]) / sum(x) } OV <- overall(table(crs$pr, crs$dataset[crs$validate, c(3:22, 24)]$RainTomorrow, dnn=c("Predicted", "Actual"))) ################################################### ### code chunk number 491: r:evaluate:rattle_audit_rf_evaluate ################################################### rattle:::newProject(ask.overwrite=FALSE) rattle:::executeDataTab(system.file("csv", "audit.csv", package="rattle")) rattle:::executeDataTab() rattle:::theWidget("rf_radiobutton")$setActive(TRUE) rattle:::executeModelTab() rattle:::theWidget("evaluate_risk_radiobutton")$setActive(TRUE) rattle:::executeEvaluateTab() # Resize the window so the title looks okay. Sys.sleep(1) window.id <- unlist(strsplit(system(paste("xwininfo -name 'Rattle: Plot 2'", "| grep 'Window id'"), intern=TRUE), " "))[4] system(sprintf("xdotool windowsize %s 1000 600", window.id)) screenShot("evaluate:rattle_audit_rf_risk", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 492: r:evaluate:rattle_audit_rf_evaluate ################################################### rattle:::theWidget("rpart_radiobutton")$setActive(TRUE) rattle:::executeModelTab() rattle:::theWidget("boost_radiobutton")$setActive(TRUE) rattle:::executeModelTab() rattle:::theWidget("svm_radiobutton")$setActive(TRUE) rattle:::executeModelTab() rattle:::theWidget("evaluate_risk_radiobutton")$setActive(TRUE) rattle:::executeEvaluateTab() # Resize the window so the title looks okay. Sys.sleep(1) window.id <- unlist(strsplit(system(paste("xwininfo -name 'Rattle: Plot 2'", "| grep 'Window id'"), intern=TRUE), " "))[4] system(sprintf("xdotool windowsize %s 800 800", window.id)) screenShot("evaluate:rattle_audit_four_risks", title="RattlePlot", close=TRUE) ################################################### ### code chunk number 493: r:evaluate:close_rattle ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 494: r:deploy:initialise ################################################### pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 495: r:deploy:build_rf_model ################################################### crv$NOTEBOOK$ setCurrentPage(rattle:::getNotebookPage(crv$NOTEBOOK, crv$NOTEBOOK.MODEL.NAME)) rattle:::switchToPage(crv$NOTEBOOK.MODEL.NAME) rattle:::theWidget("rf_radiobutton")$setActive(TRUE) rattle:::executeModelTab() ################################################### ### code chunk number 496: r:deploy:save_rf_model ################################################### myrf <- crs$rf save(myrf, file="model01_110501.RData") ################################################### ### code chunk number 497: r:deploy:save_dataset ################################################### write.csv(crs$dataset, file="cases_110601.csv") ################################################### ### code chunk number 498: r:deploy:load_rf_model ################################################### library(randomForest) (load("model01_110501.RData")) dataset <- read.csv("cases_110601.csv") pr <- predict(myrf, dataset, type="prob")[,2] write.csv(cbind(dataset, pr), file="scores_110601.csv", row.names=FALSE) head(cbind(Actual=dataset$TARGET_Adjusted, Predicted=pr)) ################################################### ### code chunk number 499: r:deploy:pmml_rpart_dataset ################################################### library(rattle) weatherDS <- new.env() evalq({ data <- weather nobs <- nrow(data) vars <- -grep('^(Date|Locat|RISK)', names(weather)) set.seed(42) train <- sample(nobs, 0.7*nobs) form <- formula(RainTomorrow ~ .) }, weatherDS) ################################################### ### code chunk number 500: r:deploy:pmml_rpart_model ################################################### library(rpart) weatherRPART <- new.env(parent=weatherDS) evalq({ model <- rpart(formula=form, data=data[train, vars]) }, weatherRPART) ################################################### ### code chunk number 501: r:deploy:pmml_rpart_pmml ################################################### library(pmml) p <- pmml(weatherRPART$model) r <- c(1:4, 7, 12, 35, 36, 69, 71, 137:139) cat(paste(strsplit(toString(p), "\n")[[1]][r], collapse="\n")) ################################################### ### code chunk number 502: r:deploy:cleanup ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") ################################################### ### code chunk number 503: r:install:simple_install (eval = FALSE) ################################################### ## install.packages("rattle") ################################################### ### code chunk number 504: r:install:rattle_info ################################################### rattleInfo() ################################################### ### code chunk number 505: r:datasets:initialise ################################################### source("utility.R") pkgs <- lspkgs(); objs <- ls() require(rattle) rattle() crv$close <- "close" rattle:::theWidget("verbose_menuitem")$setActive(FALSE) rattle:::executeDataTab(system.file("csv", "weather.csv", package="rattle")) ################################################### ### code chunk number 506: r:datasets:available_datasets ################################################### library(rattle) dim(weather) dim(weatherAUS) dim(audit) ################################################### ### code chunk number 507: r:datasets:sys_date ################################################### Sys.Date() ################################################### ### code chunk number 508: r:datasets:format ################################################### today <- format(Sys.Date(), format="%Y%m") ################################################### ### code chunk number 509: r:datasets:today ################################################### today ################################################### ### code chunk number 510: r:datasets:read_weather_data_bom ################################################### bom <- paste("http://www.bom.gov.au/climate/dwo/", today, "/text/IDCJDW2801.", today, ".csv", sep="") ################################################### ### code chunk number 511: r:datasets:bom ################################################### bom ################################################### ### code chunk number 512: r:datasets:read_weather_data_bom_show_example (eval = FALSE) ################################################### ## dsw <- read.csv(bom, skip=6, check.names=FALSE) ################################################### ### code chunk number 513: r:datasets:read_weather_data_bom_show ################################################### twbom <- "http://rattle.togaware.com/IDCJDW2801.200906.csv" dsw <- read.csv(twbom, skip=5, check.names=FALSE) ################################################### ### code chunk number 514: r:datasets:weather_data_names ################################################### dim(dsw) head(names(dsw)) ################################################### ### code chunk number 515: r:datasets:read_weather_new_data_frame ################################################### ndsw <- dsw[-c(1, 10)] names(ndsw) <- c("Date", "MinTemp", "MaxTemp", "Rainfall", "Evaporation", "Sunshine", "WindGustDir", "WindGustSpeed", "Temp9am", "Humidity9am", "Cloud9am", "WindDir9am", "WindSpeed9am", "Pressure9am", "Temp3pm", "Humidity3pm", "Cloud3pm", "WindDir3pm", "WindSpeed3pm", "Pressure3pm") ################################################### ### code chunk number 516: r:datasets:weather_names ################################################### dim(ndsw) names(ndsw) ################################################### ### code chunk number 517: r:datasets:weather_head_wind_speed ################################################### vars <- c("WindGustSpeed","WindSpeed9am","WindSpeed3pm") head(ndsw[vars]) ################################################### ### code chunk number 518: r:datasets:class_ndsw ################################################### class(ndsw) ################################################### ### code chunk number 519: r:datasets:weather_wind_speed_class ################################################### apply(ndsw[vars], MARGIN=2, FUN=class) ################################################### ### code chunk number 520: r:datasets:weather_wind_speed_transform ################################################### ndsw$WindSpeed9am <- as.character(ndsw$WindSpeed9am) ndsw$WindSpeed3pm <- as.character(ndsw$WindSpeed3pm) ndsw$WindGustSpeed <- as.character(ndsw$WindGustSpeed) head(ndsw[vars]) ################################################### ### code chunk number 521: r:datasets:weather_wind_speed_transform ################################################### ndsw <- within(ndsw, { WindSpeed9am[WindSpeed9am == ""] <- NA WindSpeed3pm[WindSpeed3pm == ""] <- NA WindGustSpeed[WindGustSpeed == ""] <- NA }) ################################################### ### code chunk number 522: r:datasets:weather_wind_speed_transform ################################################### ndsw <- within(ndsw, { WindSpeed9am[WindSpeed9am == "Calm"] <- "0" WindSpeed3pm[WindSpeed3pm == "Calm"] <- "0" WindGustSpeed[WindGustSpeed == "Calm"] <- "0" }) ################################################### ### code chunk number 523: r:datasets:weather_wind_speed_transform ################################################### ndsw <- within(ndsw, { WindSpeed9am <- as.numeric(WindSpeed9am) WindSpeed3pm <- as.numeric(WindSpeed3pm) WindGustSpeed <- as.numeric(WindGustSpeed) }) apply(ndsw[vars], 2, class) ################################################### ### code chunk number 524: r:datasets:weather_clean_wind_info ################################################### vars <- c("WindSpeed9am","WindSpeed3pm","WindGustSpeed") head(ndsw[vars]) apply(ndsw[vars], 2, class) levels(ndsw$WindDir9am) ################################################### ### code chunk number 525: r:datasets:weather_clean_wind_dir ################################################### ndsw <- within(ndsw, { WindDir9am[WindDir9am == " "] <- NA WindDir9am[is.na(WindSpeed9am) | (WindSpeed9am == 0)] <- NA WindDir3pm[WindDir3pm == " "] <- NA WindDir3pm[is.na(WindSpeed3pm) | (WindSpeed3pm == 0)] <- NA WindGustDir[WindGustDir == " "] <- NA WindGustDir[is.na(WindGustSpeed) | (WindGustSpeed == 0)] <- NA }) ################################################### ### code chunk number 526: r:dataset ################################################### ndsw$RainToday <- ifelse(ndsw$Rainfall > 1, "Yes", "No") vars <- c("Rainfall", "RainToday") head(ndsw[vars]) ################################################### ### code chunk number 527: r:datasets:weather_create_target ################################################### ndsw$RainTomorrow <- c(ndsw$RainToday[2:nrow(ndsw)], NA) vars <- c("Rainfall", "RainToday", "RainTomorrow") head(ndsw[vars]) ################################################### ### code chunk number 528: r:datasets:weather_create_risk ################################################### ndsw$RISK_MM <- c(ndsw$Rainfall[2:nrow(ndsw)], NA) vars <- c("Rainfall", "RainToday", "RainTomorrow", "RISK_MM") head(ndsw[vars]) ################################################### ### code chunk number 529: r:datasets:weatherAUS_subset_canberra ################################################### cbr <- subset(weatherAUS, Location == "Canberra" & Date >= "2007-11-01" & Date <= "2008-10-31") ################################################### ### code chunk number 530: r:datasets:compare_datasets (eval = FALSE) ################################################### ## cbr == weather ################################################### ### code chunk number 531: r:datasets:count_compare_datasets_dim ################################################### dim(cbr) dim(weather) ################################################### ### code chunk number 532: r:datasets:count_compare_datasets_size ################################################### dim(cbr)[1] * dim(cbr)[2] nrow(cbr) * ncol(cbr) ################################################### ### code chunk number 533: r:datasets:count_compare_datasets_count ################################################### sum(cbr == weather, na.rm=TRUE) sum(is.na(cbr)) sum(is.na(weather)) sum(cbr == weather, na.rm=TRUE) + sum(is.na(cbr)) ################################################### ### code chunk number 534: r:datasets:read_csv_togaware_weather (eval = FALSE) ################################################### ## twweather <- "http://rattle.togaware.com/weather.csv" ## myweather <- read.csv(twweather) ################################################### ### code chunk number 535: r:datasets:download_file_audit (eval = FALSE) ################################################### ## uci <- paste("ftp://ftp.ics.uci.edu/pub", ## "machine-learning-databases", ## "adult/adult.data", sep="/") ## download.file(uci, "survey.csv") ################################################### ### code chunk number 536: r:datasets:create_audit_from_survey ################################################### survey <- read.csv("survey.csv", header=FALSE, strip.white=TRUE, na.strings="?", col.names=c("Age", "Workclass", "fnlwgt", "Education", "Education.Num", "Marital.Status", "Occupation", "Relationship", "Race", "Gender", "Capital.Gain", "Capital.Loss", "Hours.Per.Week", "Native.Country", "Salary.Group")) ################################################### ### code chunk number 537: r:datasets:survey_rename_variables ################################################### audit <- survey[,c(1:2,4,6:8,10,12:14,11,15)] names(audit)[c(seq(2, 8, 2), 9:12)] <- c("Employment", "Marital", "Income", "Deductions", "Hours", "Accounts", "Adjustment", "Adjusted") ################################################### ### code chunk number 538: r:datasets:audit_names ################################################### names(audit) ################################################### ### code chunk number 539: r:datasets:audit:levels_target ################################################### class(audit$Adjusted) levels(audit$Adjusted) table(audit$Adjusted) ################################################### ### code chunk number 540: r:datasets:audit:binary_adjustment ################################################### audit$Adjusted <- as.integer(audit$Adjusted)-1 class(audit$Adjusted) table(audit$Adjusted) ################################################### ### code chunk number 541: r:datasets:vector_subtraction ################################################### 11:20 - 1:10 11:20 - 1:5 11:20 - 1 ################################################### ### code chunk number 542: r:datasets:audit_fix_adjustments ################################################### prod <- sum(audit$Adjusted == 1 & audit$Adjustment == 0) prod nonp <- sum(audit$Adjusted == 0 & audit$Adjustment != 0) nonp ################################################### ### code chunk number 543: r:datasets:audit:vector_comparison ################################################### obs <- 1:9 audit$Adjusted[obs] audit$Adjusted[obs]==1 audit$Adjustment[obs] audit$Adjustment[obs] == 0 audit$Adjusted[obs] == 1 & audit$Adjustment[obs] == 0 ################################################### ### code chunk number 544: r:datasets:audit:sum_example_10 ################################################### sum(audit$Adjusted[obs]==1 & audit$Adjustment[obs]==0) ################################################### ### code chunk number 545: r:datasets:audit:sum_example ################################################### sum(audit$Adjusted == 1 & audit$Adjustment == 0) ################################################### ### code chunk number 546: r:datasets:audit:adjust_adjustment ################################################### adj <- (prod %/% nonp) * nonp ################################################### ### code chunk number 547: r:datasets:audit:temp_div ################################################### tmp <- prod %/% nonp ################################################### ### code chunk number 548: r:datasets:audit:adjusted_adjustments ################################################### set.seed(12345) audit[audit$Adjusted == 1 & audit$Adjustment == 0, 'Adjustment'][sample(prod, adj)] <- as.integer(audit[audit$Adjusted == 0 & audit$Adjustment != 0, 'Adjustment'] * rnorm(adj, 2)) ################################################### ### code chunk number 549: r:datasets:audit:zero_for_non_productive ################################################### audit[audit$Adjusted == 0 & audit$Adjustment != 0, 'Adjustment'] <- 0 ################################################### ### code chunk number 550: r:datasets:audit:deductions ################################################### audit[audit$Adjusted==0, 'Deductions'] <- audit[audit$Adjusted==0, 'Deductions']/1.5 ################################################### ### code chunk number 551: r:datasets:audit:sample_20000 ################################################### set.seed(12345) cases <- sample(nrow(audit), 2000) ################################################### ### code chunk number 552: r:datasets:audit:identifiers ################################################### set.seed(12345) idents <- as.integer(sort(runif(2000, 1000000, 9999999))) audit <- cbind(ID=idents, audit[cases,]) ################################################### ### code chunk number 553: r:datasets:read_csv_togaware_audit (eval = FALSE) ################################################### ## twaudit <- "http://rattle.togaware.com/audit.csv" ## myaudit <- read.csv(twaudit) ################################################### ### code chunk number 554: r:template:close_rattle ################################################### rattle:::close_rattle() rmobj(pkgs, "detach"); rmobj(objs, "rm") while (dev.cur() > 1) dev.off() ################################################### ### code chunk number 555: generate_bibliography ################################################### source("generateBib.R")