library(reshape2) library(ggplot2) library(gdata) library(grid) library(gridExtra) library(RColorBrewer) ## look at sets all_sets = by(dev_m, dev_m$project, function (dev_m_p) { #for each by(dev_m_p, dev_m_p$release0, function (dev_m_p_r) { #for each release R_0 releases = unique(dev_m_p_r$releaseDate) contribs_before = subset(dev_m_p_r, releaseDate == min(releases)) contribs_after = subset(dev_m_p_r, releaseDate == max(releases)) turn_sets = lapply(unique(dev_m_p_r$module), function(mod) { #for each module contribs_mod_before = subset(contribs_before, module == mod) contribs_mod_after = subset(contribs_after, module == mod) sets = developer_sets(contribs_mod_before, contribs_mod_after, contribs_before, contribs_after) ## do something with the sets here # eg: internal_leavers = unique(sets$IN$developer) }) }) }) plot_heatmap = function(data, metric_name, name_p) { data[is.na(data)] = 0 rownames(data) = data$module data$module = NULL cairo_pdf(paste0("patterns/", name_p,"_", metric_name, ".pdf"), width = 10, height = 5) heatmap(as.matrix(data), Rowv=NA, Colv=NA, col = brewer.pal(9, "Blues"), scale="column", margins = c(1, 16), cexRow = 0.2, add.expr = abline(h=seq(0.5, nr + 0.5, 5)) ) dev.off() } ## end look at sets by(dev_m_others, dev_m_others$project, function(dev_m_p) { releases = unique(dev_m_p$releaseDate) releases = sort(releases, decreasing = F) name_p = projects_names[[dev_m_p$project[1]]] EN = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) ENO = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) IN = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) INO = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) EL = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) ELO = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) IL = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) ILO = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) P = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) PO = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) ELA = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) ENA = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) ILA = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) INA = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) SA = data.frame(module = unique(dev_m_p$module), stringsAsFactors = F) for (i in 1:(length(releases) - 1)) { contribs_before = subset(dev_m_p, releaseDate == releases[i]) contribs_after = subset(dev_m_p, releaseDate == releases[i+1]) m = turnover_metrics_release0(rbind(contribs_before,contribs_after)) EN = merge(EN, m[,c("module", "EN")], by="module", all=T) ENO = merge(ENO, m[,c("module", "ENO")], by="module", all=T) IN = merge(IN, m[,c("module", "IN")], by="module", all=T) INO = merge(INO, m[,c("module", "INO")], by="module", all=T) EL = merge(EL, m[,c("module", "EL")], by="module", all=T) ELO = merge(ELO, m[,c("module", "ELO")], by="module", all=T) IL = merge(IL, m[,c("module", "IL")], by="module", all=T) ILO = merge(ILO, m[,c("module", "ILO")], by="module", all=T) P = merge(P, m[,c("module", "P")], by="module", all=T) PO = merge(PO, m[,c("module", "PO")], by="module", all=T) ELA = merge(ELA, m[,c("module", "ELA")], by="module", all=T) ENA = merge(ENA, m[,c("module", "ENA")], by="module", all=T) ILA = merge(ILA, m[,c("module", "ILA")], by="module", all=T) INA = merge(INA, m[,c("module", "INA")], by="module", all=T) SA = merge(SA, m[,c("module", "SA")], by="module", all=T) } if (ncol(EN) > 2) { colnames(EL) = c("module", 1:(ncol(ELO) - 1)) colnames(IL) = c("module", 1:(ncol(ELO) - 1)) colnames(EN) = c("module", 1:(ncol(ELO) - 1)) colnames(IN) = c("module", 1:(ncol(ELO) - 1)) colnames(P) = c("module", 1:(ncol(ELO) - 1)) EL$module = paste(EL$module, "EL") IL$module = paste(EL$module, "IL") EN$module = paste(EL$module, "EN") IN$module = paste(EL$module, "IN") P$module = paste(EL$module, "P") plot_heatmap(interleave(EL,EN,IL,IN,P), "", name_p) colnames(ELO) = c("module", 1:(ncol(ELO) - 1)) colnames(ILO) = c("module", 1:(ncol(ELO) - 1)) colnames(ENO) = c("module", 1:(ncol(ELO) - 1)) colnames(INO) = c("module", 1:(ncol(ELO) - 1)) colnames(PO) = c("module", 1:(ncol(ELO) - 1)) ELO$module = paste(ELA$module, "ELO") ILO$module = paste(ELA$module, "ILO") ENO$module = paste(ELA$module, "ENO") INO$module = paste(ELA$module, "INO") PO$module = paste(ELA$module, "PO") plot_heatmap(interleave(ELO,ENO,ILO,INO,PO), "O", name_p) colnames(ELA) = c("module", 1:(ncol(ELA) - 1)) colnames(ILA) = c("module", 1:(ncol(ELA) - 1)) colnames(ENA) = c("module", 1:(ncol(ELA) - 1)) colnames(INA) = c("module", 1:(ncol(ELA) - 1)) colnames(SA) = c("module", 1:(ncol(ELA) - 1)) ELA$module = paste(ELA$module, "ELA") ILA$module = paste(ELA$module, "ILA") ENA$module = paste(ELA$module, "ENA") INA$module = paste(ELA$module, "INA") SA$module = paste(ELA$module, "SA") plot_heatmap(interleave(ELA,ENA,ILA,INA,SA), "T", name_p) } }) a = by(dev_m, dev_m$project, function (dev_m_p) { metrics_per_release = by(dev_m, dev_m$release0, function (dev_m_p_r) { turnover_metrics_release0(dev_m_p_r) }) }) lapply(a, function(metrics_per_release) { lapply(metrics_per_release, function(p) { p = subset(p, NumDevsAfter > 0 & NumDevsBefore > 0) # remove modules without activity # cairo_pdf(paste("boxplots-",p@name,".pdf",sep=""),width=2.75, height=2.75) # par(mar=c(2,2,2,0.1)) m = melt(p[,c("INR", "ILR","ENR","ELR","PR","module")], id="module") # p1 = qplot(factor(variable), value, data=m, ylim=c(0,1), main=p$project[1], geom="blank", xlab=NULL, ylab=NULL) + geom_violin(adjust=.5, scale="width",fill = "grey80") + theme_bw() # dev.off() # # cairo_pdf(paste("boxplots-own-",p@name,".pdf",sep=""),width=2.75, height=2.75) m = melt(p[,c("INO", "ILO","ENO","ELO","PO","module")], id="module") p2 = qplot(factor(variable), value, data=m, ylim=c(0,1), main=p$project[1], geom="blank", xlab=NULL, ylab=NULL) + geom_violin(adjust=.5, scale="width",fill = "grey80") + theme_bw() # dev.off() # cairo_pdf(paste("bugratio-",p@name,".pdf",sep=""),width=2.75, height=2.75) # par(mar=c(2,2,2,1)) # barplot(colSums(p@bug.freq)/colSums(p@churn.freq), main=p@name) # dev.off() grid.arrange(p1, p2) }) })