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

quarta-feira, 7 de outubro de 2015

A ciência de dar sentido a Dados

A ciência de dar sentido a Dados é realmente interessante e desafiante.

Há anos que me dedico a perceber, transformar e embelezar informação. Busco também formas novas de o fazer.

Assim, é mais uma peça desta pessoa que sou. E, sabendo de antemão que já existe tantas páginas online com este tipo de informação, achei que seria ainda assim uma informação útil. Para mim porque estruturo aquilo que faço e o que aprendo, para vós porque podem aprender com as minhas tentativas também.


Aqui ficam as coisas giras apenas. :)

sexta-feira, 2 de outubro de 2015

Este ser humano.

Também de sonhos era feito este ser humano. De sonhos e de tanto, tanto mais. Focou-se um ponto e não um todo, uma visão distanciada e integrada de um ser.
Quem sois vós para o tentar espezinhar? Determinar de quê ou não ele é capaz?
Digo-vos eu, nesta pressa humana de julgar sem conhecer, não sois aquilo que pensais que sois.
Um mundo só é mágico enquanto as pessoas que nele habitam, nele também acreditarem.
Temo conseguir adivinhar que o vosso mundo já não é mágico... Que ruiu, com essa crença mundana que não podemos sonhar.

quinta-feira, 1 de outubro de 2015

As pessoas que nos recheiam a vida

Imagino frequentemente as pessoas que me rodeiam sob a forma de pequenos duendes com alguma coisa na sua personalidade extremamente vincada. O melhor de tudo é que sabemos que é no todo que se encontra a riqueza.
Apresento-vos então:

  • A OPTIMISTA - é sempre tão optimista, com tudo. Além de que segue o lema "acontece tudo o que tem de acontecer", com uma visão determinista da vida. A vida é bela e aceita aquilo que te dá. Nunca a ouvirás a dizer que deves ficar sentado à espera, contudo, ela sabe que quando uma porta se fecha se abre a porta certa de cada vida. É bonita a sua forma de viver.
  • O CAUTELOSO - pouco entusiasta quando lhe relevamos uma novidade, não deve ser abordado em 1º lugar quando recebemos uma boa notícia. Não é que não fique contente por nós ou entusiasmado, simplesmente não o demonstra. Segue-se, quase sempre, a reação cautelosa, "mas e se...", "tens de ter atenção a...". Assim que se certifica das nossas motivações e já conseguiu perceber as intenções dos outros, é capaz de revelar que está contente.
  • O CONSELHEIRO - por vezes chego-lhe a ralhar porque quando lhe fazemos uma pergunta nos responde com outra. Contudo é a sua forma de ajudar, ele ajuda dando-nos ouvidos para pensarmos em voz alta, mas gosta que cheguemos sozinhos às nossas próprias conclusões porque sabe que estas são mais duradouras. 
  • A RECONFORTADORA - esta pessoa chega sempre numa fase do processo posterior, sendo que a culpa não é sua, simplesmente tem demasiadas coisas que a entusiasmam na vida. Ouve mais a parte da queixa, reconforta com palavras meigas e gentis e, ouve as alegrias sobre a forma de relato. E tem muita paciência, mesmo quando ouve que cometemos os mesmos erros. Ela sabe-se humana e sabe-nos a nós também.
  • A ENTUSIASTA - independentemente de o tema em partilha seja ou não do seu interesse, a entusiasta consegue entusiasmar-se por nós se nos vir felizes. Tem uma grande empatia pelos outros em sentir a sua energia positiva a fluir e consegue realmente ficar feliz pelos outros. É das primeiras pessoas a quem contamos uma boa nova, até porque a sabemos vibrar com a nossa alegria.