sexta-feira, 9 de outubro de 2015

WordClouds em R

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

Para tal, utilizei 2 R packages para a realização deste trabalho:
  1. Package tm (documentação) - "A framework for text mining applications within R"
  2. 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.

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)

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()).

# (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

Sem comentários:

Enviar um comentário