Desafio:
- Analisar a evolução do pensamento do autor Ikujiro Nonaka na área de Gestão do Conhecimento no decurso de 24 anos, através da utilização de 3 trabalhos seus, publicados em 1991, 2003 e 2014.
Como dar cor a um trabalho de análise?
Utilizar WordCloud
Uma WordCloud permite uma visualização gráfica das palavras mais utilizadas num dado texto, apresentando-as a um tamanho de letra maior, sendo que o tamanho de letra vai diminuindo consoante uma dada palavra seja menos frequente no texto. É uma forma intuitiva de identificar os conceitos mais explorados por um dado autor. No caso do Nonaka e, ao combinar o texto dos 3 artigos (resultando na wordcloud acima), apresenta-se, claramente o conceito Knowledge como central ao seu trabalho.
Como fazer uma Wordcloud à nossa maneira?
Encontrei inúmeras ferramentas online para fazer wordclouds. Contudo, para ser mais flexível e "à minha maneira" decidi implementar este método em R Project.
- Package tm (documentação) - "A framework for text mining applications within R"
- Package wordcloud (documentação) - "Pretty word clouds"
A) Pré-processamento
- Utilizei uma ferramenta online para converter o .pdf em .docx
- Em word e, uma vez que os artigos sob o formato de 2 colunas, tive de garantir que as palavras estavam completas:
- Transformação do documento de 2 colunas em 1 apenas
- Eliminação, por "find/replace" dos " -" para juntar palavras que ficaram separadas entre duas linhas
- Apaguei referências, legendas e imagens
- Gravei o documento como "Plain Text" (.txt).
B) Desenvolvimento em R
1) Preparar o ambiente de trabalho
rm(list = ls()) #limpeza das variáveis de ambiente setwd('C:\\Users\\Maf\\Documents') #definição da directoria de trabalho (windows) |
2) Fazer o load das libraries
a) Se é a primeira vez que utiliza estas bibliotecas (library), tem primeiro de as instalar:
install.packages('tm') #e escolher um mirror no popup que surge install.packages('wordcloud') |
b) Carregamento das bibliotecas (para as restantes utilizações)
library(tm) library(wordcloud) |
3) Carregar os dados
Dependendo do formato da informação, poderá ser utilizada uma das seguintes opções:
artigo <- scan("artigo.txt", what = character()) #para ler .txt artigo <- read.csv("artigo.csv", stringAsFactors=FALSE) #para ler .csv |
4) Text mining
Para um resultado fidedigno da wordcloud, nomeadamente, para retirar palavras comuns na língua inglesa ("stopwords") e espaços em branco são necessários alguns passos. Na função "tm_map" existe também a opção de retirar a pontuação, sendo que não a utilizei por já os ter retirado em word.
review_text <- paste(artigo, collapse=" ")
artigo_fonte <- VectorSource(artigo)
corpus <- Corpus(artigo_fonte)
corpus <- tm_map(corpus, stripWhitespace)
#Retirar as palavras mais frequentes da língua inglesa:
corpus <- tm_map(corpus, removeWords, stopwords("english"))
#Transformação do tipo de texto:
dtm <- DocumentTermMatrix(corpus)
dtm2 <- as.matrix(dtm)
Obtenção dos vectores para a wordcloud.
Para um resultado fidedigno da wordcloud, nomeadamente, para retirar palavras comuns na língua inglesa ("stopwords") e espaços em branco são necessários alguns passos. Na função "tm_map" existe também a opção de retirar a pontuação, sendo que não a utilizei por já os ter retirado em word.
review_text <- paste(artigo, collapse=" ") artigo_fonte <- VectorSource(artigo) corpus <- Corpus(artigo_fonte) corpus <- tm_map(corpus, stripWhitespace) #Retirar as palavras mais frequentes da língua inglesa: corpus <- tm_map(corpus, removeWords, stopwords("english")) #Transformação do tipo de texto: dtm <- DocumentTermMatrix(corpus) dtm2 <- as.matrix(dtm) |
frequencytotal <- colSums(dtm2)
frequencytotal <- sort(frequencytotal, decreasing=TRUE)
wordstotal <- names(frequencytotal)
frequencytotal <- colSums(dtm2) frequencytotal <- sort(frequencytotal, decreasing=TRUE) wordstotal <- names(frequencytotal) |
5) Gravar os resultados
Para posteriormente analisar as frequências das palavras noutro software ou mesmo em R, gravei esta informação num documento de texto (.txt).
write.table(frequencytotal, "nonakatotal_target.txt", sep = "\t", quote= FALSE)
write.table(frequencytotal, "nonakatotal_target.txt", sep = "\t", quote= FALSE) |
6) Produzir a WordCloud
Para produzir a WordCloud utiliza-se a função wordcloud(), cujos argumentos são os seguintes:
wordcloud(words,freq,scale=c(4,.5),min.freq=3,max.words=Inf, random.order=TRUE, random.color=FALSE, rot.per=.1, colors="black",ordered.colors=FALSE,use.r.layout=FALSE, fixed.asp=TRUE, ...)
Nesta aplicação, testei várias combinações de cores modificando o argumento colors, para escolher a mais apelativa, sendo que utilizei duas abordagens: (1) escolher as cores de acordo com o seu código ou (2) de acordo com uma palete de cores definida (brewer.pal()).wordcloud(words,freq,scale=c(4,.5),min.freq=3,max.words=Inf, random.order=TRUE, random.color=FALSE, rot.per=.1, colors="black",ordered.colors=FALSE,use.r.layout=FALSE, fixed.asp=TRUE, ...) |
# (1) Selecção das 100 palavras mais frequentes e das cores (#e66101","#b2abd2","#5e3c99)
wordcloud(wordstotal[1:100], frequencytotal[1:100], max.words=100, random.order=FALSE, use.r.layout=FALSE, colors=c("#e66101","#b2abd2","#5e3c99"))
# (2) Utilizar a palete brewer.pal
wordcloud(wordstotal[1:100], frequencytotal[1:100], max.words=100, random.order=FALSE, use.r.layout=FALSE, colors=brewer.pal(8,"Dark2"))
# testei também:
# colors=brewer.pal(8,"Accent")
# colors=brewer.pal(12,"Paired")
# colors=brewer.pal(9,"Set1")
# colors=brewer.pal(8,"Set2")
# colors=brewer.pal(12,"Set3")
# (1) Selecção das 100 palavras mais frequentes e das cores (#e66101","#b2abd2","#5e3c99) wordcloud(wordstotal[1:100], frequencytotal[1:100], max.words=100, random.order=FALSE, use.r.layout=FALSE, colors=c("#e66101","#b2abd2","#5e3c99")) # (2) Utilizar a palete brewer.pal wordcloud(wordstotal[1:100], frequencytotal[1:100], max.words=100, random.order=FALSE, use.r.layout=FALSE, colors=brewer.pal(8,"Dark2")) # testei também: # colors=brewer.pal(8,"Accent") # colors=brewer.pal(12,"Paired") # colors=brewer.pal(9,"Set1") # colors=brewer.pal(8,"Set2") # colors=brewer.pal(12,"Set3") |
7) As coloridas nuvens de palavras:
Artigos que originaram as nuvens:
1) Nonaka, I. (1991). The knowledge creating company. Harvard Business Review, 69(6), 96-104
2) Nonaka, I., Toyama, R. (2003). The knowledge-creating theory revisited: knowledge creation as a synthesizing process. Knowledge management research & practice, 1(1), 2-10.
3) Nonaka, I., Kodama, M., Hirose, A., & Kohlbacher, F. (2014). Dynamic fractal organizations for promoting knowledge-based transformation–A new paradigm for organizational theory. European Management Journal, 32(1), 137-146.
Este tutorial foi guiado por:
1) https://cran.r-project.org/web/packages/tm/index.html - pacote tm
2) https://cran.r-project.org/web/packages/wordcloud/wordcloud.pdf - pacote wordcloud
3) https://deltadna.com/blog/text-mining-in-r-for-term-frequency/ - para a utilização da wordcloud
4) http://colorbrewer2.org/ - para aconselhamento da palete de cores
5) https://cran.r-project.org/web/packages/RColorBrewer/RColorBrewer.pdf