library(dplyr)
library(tm)
library(wordcloud)
library(ggplot2)
Com o finalidade de identificar qual são o conjunto de palavas mais utilizadas pelos projetos mais ativos de 2014 criamos a análise a seguir.
Inicialmente iremos construir uma nuvem de palavras para descobrir quais são as palavras mais utilizadas e se existe alguma inconsistência nos dados
descricao.commit <- read.csv("dados/descricao-commit.csv")
review_text <- paste(unique(as.character(descricao.commit$payload_commit_msg)), collapse=" ")
review_source <- VectorSource(review_text)
corpus <- Corpus(review_source)
corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, stripWhitespace)
dtm <- DocumentTermMatrix(corpus)
dtm2 <- as.matrix(dtm)
frequency <- colSums(dtm2)
frequency <- sort(frequency, decreasing = TRUE)
words <- names(frequency)
set.seed(1363)
wordcloud(words[1:200], frequency[1:200], min.freq = 5, max.words = 150, random.order = FALSE, rot.per=0.20)
Podemos notar que as palavras FOR, UPDATE, FRAMES e STATIONS são as palavras mais utilizadas. É possível notar que aparece números com frequência, em uma investigação rápida, esses números representam datas. Eu pensei que a palavra BUG iria aparecer com mais frequência.
Analisando agora as descrições dos repositórios temos:
review_text <- paste(unique(as.character(descricao.commit$repository_description)), collapse=" ")
review_source <- VectorSource(review_text)
corpus <- Corpus(review_source)
corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, stripWhitespace)
dtm <- DocumentTermMatrix(corpus)
dtm2 <- as.matrix(dtm)
frequency <- colSums(dtm2)
frequency <- sort(frequency, decreasing = TRUE)
words <- names(frequency)
set.seed(1363)
wordcloud(words[1:38], frequency[1:38], min.freq = 0, max.words = 150, random.order = FALSE, rot.per=0.20)
A palavra FOR apareceu novamente como sendo uma das mais utilizadas nas descrições das palavras. Por se tratar de uma stopword decidimos por realizar novamente o processamento e dessa vez excluir as stopwords. No inglês temos as seguintes stopwords
stopwords("english")
## [1] "i" "me" "my" "myself" "we"
## [6] "our" "ours" "ourselves" "you" "your"
## [11] "yours" "yourself" "yourselves" "he" "him"
## [16] "his" "himself" "she" "her" "hers"
## [21] "herself" "it" "its" "itself" "they"
## [26] "them" "their" "theirs" "themselves" "what"
## [31] "which" "who" "whom" "this" "that"
## [36] "these" "those" "am" "is" "are"
## [41] "was" "were" "be" "been" "being"
## [46] "have" "has" "had" "having" "do"
## [51] "does" "did" "doing" "would" "should"
## [56] "could" "ought" "i'm" "you're" "he's"
## [61] "she's" "it's" "we're" "they're" "i've"
## [66] "you've" "we've" "they've" "i'd" "you'd"
## [71] "he'd" "she'd" "we'd" "they'd" "i'll"
## [76] "you'll" "he'll" "she'll" "we'll" "they'll"
## [81] "isn't" "aren't" "wasn't" "weren't" "hasn't"
## [86] "haven't" "hadn't" "doesn't" "don't" "didn't"
## [91] "won't" "wouldn't" "shan't" "shouldn't" "can't"
## [96] "cannot" "couldn't" "mustn't" "let's" "that's"
## [101] "who's" "what's" "here's" "there's" "when's"
## [106] "where's" "why's" "how's" "a" "an"
## [111] "the" "and" "but" "if" "or"
## [116] "because" "as" "until" "while" "of"
## [121] "at" "by" "for" "with" "about"
## [126] "against" "between" "into" "through" "during"
## [131] "before" "after" "above" "below" "to"
## [136] "from" "up" "down" "in" "out"
## [141] "on" "off" "over" "under" "again"
## [146] "further" "then" "once" "here" "there"
## [151] "when" "where" "why" "how" "all"
## [156] "any" "both" "each" "few" "more"
## [161] "most" "other" "some" "such" "no"
## [166] "nor" "not" "only" "own" "same"
## [171] "so" "than" "too" "very"
A nova nuvem de palavras agora sem as stopwords temos:
review_text <- paste(unique(as.character(descricao.commit$repository_description)), collapse=" ")
review_source <- VectorSource(review_text)
corpus <- Corpus(review_source)
corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, stripWhitespace)
corpus <- tm_map(corpus, removeWords, stopwords("english"))
dtm <- DocumentTermMatrix(corpus)
dtm2 <- as.matrix(dtm)
frequency <- colSums(dtm2)
frequency <- sort(frequency, decreasing = TRUE)
words <- names(frequency)
set.seed(1363)
wordcloud(words[1:34], frequency[1:34], min.freq = 0, max.words = 150, random.order = FALSE, rot.per=0.20)
Excluindo as stopWords ficamos com a palavra Insurance como sendo a mais usada nas descrições dos 100 projetos mais ativos do github no ano de 2014
Na lista dos 1000 users que mais contribuíram em projetos do github, apenas 70 aparecem na lista dos 1000 mais ativos entre os anos de 2011 e 2014.
user.2011 <- read.csv("dados/pessoas_mais_ativas_2011.csv")
user.2012 <- read.csv("dados/pessoas_mais_ativas_2012.csv")
user.2013 <- read.csv("dados/pessoas_mais_ativas_2013.csv")
user.2014 <- read.csv("dados/pessoas_mais_ativas_2014.csv")
user2011.2012 <- full_join(user.2011, user.2012, by = "actor")
user2013.2014 <- full_join(user.2013, user.2014, by = "actor")
user2011.2014 <- full_join(user2011.2012, user2013.2014, by = "actor")
user2011.2014 <- user2011.2014[complete.cases(user2011.2014),]
colnames(user2011.2014) <- c("user", "2011", "2012", "2013", "2014")
user2011.2014$total <- user2011.2014$"2011" + user2011.2014$"2012" + user2011.2014$"2013" + user2011.2014$"2014"
user.top10 <- head(user2011.2014[with(user2011.2014, order(-total, total)), ], 11)
ggplot(user.top10, aes(x = reorder(toupper(user), total), y = total)) +
geom_bar(stat="identity") +
labs(y='Número de Ações', x='User') +
theme_classic() +
theme(axis.ticks = element_blank()) +
coord_flip()
É possível notar que o segundo lugar é um nome em branco, por acreditar que se trata de algum erro dos dados do github decidimos por excluir.
user.top10 <- filter(user.top10, user != "")
ggplot(user.top10, aes(x = reorder(toupper(user), total), y = total)) +
geom_bar(stat="identity") +
labs(y='Número de Ações', x='User') +
theme_classic() +
theme(axis.ticks = element_blank()) +
coord_flip()
É possível notar alguns users importantes, como por exemplo o Eclipse e o OpenStack.
Analisando apenas o user Eclipse, podemos notar que:
toPlot <- head(user.top10,1)
toPlot <- data.frame(Ano = c("2011", "2012", "2013", "2014"),
Contribuicao = c(toPlot$"2011", toPlot$"2012", toPlot$"2013", toPlot$"2014"))
toPlot$user <- "eclipse"
ggplot(toPlot, aes(x = Ano, y = Contribuicao, group = user)) +
geom_line() +
geom_point() +
labs(y='Número de Ações', x='Ano') +
theme_classic() +
theme(axis.ticks = element_blank())
No ano de 2012 teve um grande volume de contribuição. A título de comparação, 2012 teve 90 vezes mais contribuição do que em 2011.