Você está na página 1de 20

Programação

Estatística
Material Teórico
Estudo de Caso

Responsável pelo Conteúdo:


Prof.ª Me. Jéssica Bárbara da Silva Ribas

Revisão Textual:
Prof.ª Dr.ª Luciene Oliveira da Costa Granadeiro
Estudo de Caso

• Introdução;
• Trabalhando com Dados não Estruturados – Texto;
• Analise Exploratória.

OBJETIVO DE APRENDIZADO
• Permitir que o aluno tenha uma experiência simulada com problemas reais, utilizando a
linguagem R.
Orientações de estudo
Para que o conteúdo desta Disciplina seja bem
aproveitado e haja maior aplicabilidade na sua
formação acadêmica e atuação profissional, siga
algumas recomendações básicas:
Conserve seu
material e local de
estudos sempre
organizados.
Aproveite as
Procure manter indicações
contato com seus de Material
colegas e tutores Complementar.
para trocar ideias!
Determine um Isso amplia a
horário fixo aprendizagem.
para estudar.

Mantenha o foco!
Evite se distrair com
as redes sociais.

Seja original!
Nunca plagie
trabalhos.

Não se esqueça
de se alimentar
Assim: e de se manter
Organize seus estudos de maneira que passem a fazer parte hidratado.
da sua rotina. Por exemplo, você poderá determinar um dia e
horário fixos como seu “momento do estudo”;

Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma


alimentação saudável pode proporcionar melhor aproveitamento do estudo;

No material de cada Unidade, há leituras indicadas e, entre elas, artigos científicos, livros, vídeos
e sites para aprofundar os conhecimentos adquiridos ao longo da Unidade. Além disso, você tam-
bém encontrará sugestões de conteúdo extra no item Material Complementar, que ampliarão sua
interpretação e auxiliarão no pleno entendimento dos temas abordados;

Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de discus-
são, pois irão auxiliar a verificar o quanto você absorveu de conhecimento, além de propiciar o
contato com seus colegas e tutores, o que se apresenta como rico espaço de troca de ideias e
de aprendizagem.
UNIDADE Estudo de Caso

Introdução
Um estudo de caso existe para facilitar na investigação e compreensão de fenô-
menos cotidianos, que, algumas vezes, podem não estar tão evidentes no dia a dia
(YIN, 2015).

Neste documento, iremos trabalhar com dois problemas comuns quando se tra-
balha com ciência de dados ou estatística. O primeiro deles é a necessidade de criar
uma base de dados partindo de uma fonte de dados não estruturada.

Já o segundo ocorre quando recebe uma base de dados desconhecida e precisa-se


conhecê-la para decidir que tipo de informação é possível extrair dela, ou que tipo de
combinação com outros dados são necessários para gerar a informação. Em ambos
os casos, temos um passo a passo das tarefas a serem realizadas e a interpretação
dos resultados obtidos quando necessária.

Trabalhando com Dados não


Estruturados – Texto
Nem todos os conjuntos de dados necessários para realizar determinada análise
estatística estão disponíveis em forma estruturada. Por esse motivo, nesta sessão,
serão abordados alguns conceitos relacionados a processamento de texto.

O processamento de texto pertence a uma área da inteligência artificial chama-


da Processamento de Linguagem Natural (PLN). Nos últimos anos, a PLN é um
campo da ciência em expansão devido ao aumento de nossas necessidades de in-
terações com as máquinas (e softwares) de maneira amigável, como, por exemplo,
a Siri do Iphone, ou o comando de voz OK Google – ambos são programas de
interação por voz que contêm algoritmos de PLN.

Você deve estar se perguntando como pegar um texto, como, por exemplo, este
material e fazer uma máquina entender seu conteúdo? Primeiramente, devemos
entender que, por mais sofisticados que os algoritmos de PLN possam ser, eles não
recebem como entrada um texto como este, “cru”.

NLP: O que é Processamento de Linguagem Natural e por que é o futuro? Disponível


Explor

em: https://bit.ly/31XNi9y

Como assim “cru”? É necessário realizar um pré-processamento do texto para


passar ao algoritmo, pois, com um o pré-processamento, podemos criar o Dataset
que precisamos.

8
Algumas vezes, a criação do conjunto de dados necessários por meio de dados
não estruturados ou semiestruturados levará certa quantidade de tempo e empe-
nho, que pode ou não ajudar a alcançar os resultados desejados.

A Coleta dos Dados


Uma das formas mais comuns de se capturarem dados para realizar PLN é a
utilização de tweets no Twitter. Contudo, como nem tudo nesta vida são flores,
algumas vezes (quase sempre no caso de estatísticos e economista), os dados que
eles precisam podem ser dados abertos disponibilizados pelo governo em forma de
relatórios (geralmente arquivos PDF).

Quase sempre há os microdados em TXT, ou algum arquivo XLS ou CSV.


Porém, isso não é uma regra, então tenha em mente que, a partir desse ponto, não
ter dados estruturados não será mais desculpa para abandonar o trabalho.

Para trabalhar com arquivos PDF, o R disponibiliza o pacote “pdftools”. A par-


tir desse ponto, iremos usar também os pacotes: “stringr”, “dplyr”, “NLP”, “tm”,
“wordcloud”, “RColorBrewer”, “ggplot2”. Instale todos eles.

O objetivo desse exemplo será a utilização do pré-processamento de texto para


saber a frequência de determinadas palavras em um documento, fazer uma nuvem
de palavras e gráfico de barras.

Aparentemente, nosso objetivo não é tão ambicioso, mas já adiantamos que será
divertido e trabalhoso.

O arquivo utilizado é uma pesquisa realizada pela OXFAM Brasil, chamada nós
e as desigualdades1. Neste momento, não vamos explicar sobre do que trata o rela-
tório, mas vamos ver se descobrimos ao olhar as nuvens de palavras.

Manipulação dos Dados


Na importação de um arquivo PDF, devemos atentar que não há nenhuma op-
ção no RStudio. Nós iremos criar um objeto apontando os caminhos para o(s)
arquivo(s) PDF e executar a função “pdf_text()” para extrair o conteúdo do PDF
para um objeto, podendo ser salvo em arquivo TXT sem nenhum problema.

A Figura 1 mostra a extração do texto do relatório para o objeto txt, utilizando a


função “pdf_text()”. A saída da função “pdf_text()” é um vetor do tipo “character”
em que cada posição do vetor será uma página do documento.

Caso queira dados específicos de algumas páginas, pode realizar isso facilmente
indicando a página desejada e realizando as ações necessárias, como, por exemplo,
retirar do texto somente aqueles elementos, realizando uma busca pelas palavras-
-chaves de início e fim do trecho necessário.

1
https://bit.ly/2D6Wz57

9
9
UNIDADE Estudo de Caso

Figura 1 – Utilização das funções “pdf_text()” e “cat()”

Na Figura 1, foi utilizada a função “cat()” para visualizar o valor do objeto txt, em
forma de texto, livre da estrutura de vetor. Faça um teste: visualize o objeto txt ds
em duas formas e tente notar a diferença.

Agora, vamos extrair o texto de cada índice do vetor que não está em branco (“ ”)
ou nulo, colocando tudo em um objeto String, para manipular os dados em um único
nível de hierarquia.

Figura 2 – Utilização do comando For para percorrer todo o vetor e


concatenando as posições do vetor não vazias num objeto string

Na Figura 2, temos um laço de repetição “For”, contendo uma condição, se a


posição i do vetor não estiver nula, concatena seu valor no objeto valor. A função
para concatenar, ou seja, juntar Strings no R é a função “paste()”; nessa função, é

10
necessário indicar como irá separar uma String da outra. Nesse caso, foi utilizado
o símbolo de quebra de linha “\n”.

Visualize o objeto valor, note que ele possui apenas uma posição contendo so-
mente o texto e suas marcações de quebra de linha, tabulação, alinhamento.

Agora vamos começar a manipular o texto, a primeira coisa que vamos fazer é
separar cada linha do texto em uma posição do vetor. Pode parecer absurdo juntar
as páginas e agora separar as linhas. Mas não é. Primeiro, juntar todo o documento
pode facilitar a realização de buscas nele por palavras chaves e termos.

Para partir uma String, utilizaremos a função “str_split()”, passando a ela o ob-
jeto e o critério de separação; nesse caso, será a marcação “\n”. O resultado será
uma lista com cada posição, um “pedaço” da String.

Figura 3 – A separação do texto em linhas e colocar,


onde cada uma delas será a posição de um Data Frame/Tibble

A Figura 3 apresenta três blocos de códigos para realizar a quebra da String


em linhas, depois, a conversão do vetor em data frame e a exclusão das linhas em
branco. Os três blocos seguem as recomendações para manipulação de dados do
pacote “dplyr”, utilizando o operador “%>%”, as funções “select()” e “filter()”.

No segundo bloco de código, a função “as_data_frame()” transforma o vetor


em objeto data frame e, após passar pelas funções “select()” e “filter()”, passa a
ser um Tibble.

Pré-processamento de Texto
Após a manipulação do arquivo texto, deixando na estrutura o que lhe for mais
conveniente, vamos iniciar a fase de pré-processamento de texto. Nessa fase, va-
mos retirar do texto aquilo que é considerado sujeira ou ruído, como, por exemplo,
as marcas de formatação: “\n,” “\r”, “\t”.

A Figura 4 mostra a utilização da função corpus, que transforma o data frame


em um vetor contento os metadados necessários para as funções da limpeza do
texto. A função “inspect()” irá mostrar o conteúdo do texto salvo na estrutura do
objeto corpus.

11
11
UNIDADE Estudo de Caso

Figura 4 – inserção do Texto na estrutura de Tiible no Corpus para o pré-processamento

Ainda na Figura 4, é apresentada a função tm_map(), onde irá aplicar uma


função específica ao objeto corpus. Nesse caso, começamos deixando todas as
palavras em letras minúsculas, depois, removemos a pontuação e os números.

Na Figura 5, temos a continuação do processo, onde vamos remover as palavras


chamadas StopWords, ou seja, as palavras “irrelevantes” como os conectores: e,
a, as, para, de, entre outras. Quando vamos remover as StopWords, precisamos
indicar o idioma.
Explor

Lista de StopWords. Disponível em: https://bit.ly/2ZmihKH

Após a remoção das palavras, iremos reduzir as palavras em seu radical, por
exemplo: emprego, empregado, empregador, todas as palavras possuem o radical
“empreg” e são relacionadas ao mesmo assunto. Essa fase não é obrigatória na
contagem das palavras, mas pode ser que o resultado final fique interessante, ao
agrupar as palavras com o mesmo radical.

Figura 5 – Eliminação de conectores, redução das palavras ao radical e o cálculo da frequência das palavras

Agora vamos calcular a frequência das palavras utilizando a função “TermDo-


cumentMatrix()”, onde passamos a corpus processado e será montada uma matriz
de frequência; num primeiro momento, para visualizá-la, precisa utilizar a função
“inspect()”. Contudo, basta converter para uma matriz com a função “as.matrix()”.

12
Visualização
A primeira visualização realizada é a nuvens de palavras, que nada mais é que
uma representação gráfica contendo os termos mais relevantes da lista. O tamanho
das palavras está relacionado à sua frequência, quanto maior for a frequência da
palavra, maior será o seu tamanho no diagrama.

Figura 6 – Contagem da frequência das palavras na matriz e cria duas nuvens de palavras

A Figura 6 contém os três blocos de códigos referentes à contagem dos termos


da matriz de palavras m, à transformação dessa contagem em um data frame e à
criação de duas nuvens de palavras, uma sequencial e outra com valores aleatórios.

Como precisamos converter a matriz de palavras do corpus, para uma matriz


convencional, perdemos o agrupamento automático que o corpus faz. Então preci-
samos calcular na mão.

Após isso, utilizamos a função “wordcloud()”, para gerar as nuvens de palavras


a e b da Figura 7. A nuvem contém os termos com a fremência mínima de 10
palavras. Já na nuvem b colocamos o parâmetro “rot.per=0.3”, onde diminuiu a
quantidade de palavras e a forma como se organizam; indicamos experimentar
variar esse parâmetro e ver outros layouts.

Figura 7– Nuvens de palavras resultantes após a execução da função “wordcloud()”


Explor

Gerando Nuvens de palavras no R. Disponível em: https://bit.ly/2Zkj66O

13
13
UNIDADE Estudo de Caso

Agora, vamos fazer um gráfico de barras contendo as 10 palavras mais usuais


no documento. Para tanto, vamos utilizar o pacote “ggplot2”. A primeira coisa a ser
feita é organizar a base de dados de maneira a facilitar a plotagem do gráfico para
que ele passe a mensagem desejada.

Como a contagem para a nuvem de palavras passou por algumas funções es-
pecíficas de mineração de texto, essa tinha alguns ruídos para o ggplot2, por isso
foi necessário criar um data frame chamado bd e depois selecionar somente as 10
primeiras linhas, conforme mostrado na Figura 8.

Figura 8 – Organização dos dados e plotagem do gráfico das 10 palavras mais frequentes

A Figura 9 mostra o gráfico de barras que possui um fato interessante: a segunda


palavra mais usual foi o sinal de travessão, além da presença das aspas. Logo, está
faltando algum passo no pré-processamento para evitar essa sujeira remanescente.

Figura 9 – Gráfico das 10 palavras mais frequentes

Apesar de poder verificar esse problema durante todo o processo, quando visu-
alizamos os dados no corpus, ou na matriz de frequência, deixamos esse detalhe
de lado, pois pretendíamos mostrar que esse tipo de coisa pode ocorrer, mesmo
quando tomamos todo o cuidado no trabalho com texto.

Indicamos voltar ao passo a passo do corpus e remover os sinais errados e


reprocessar o resto do script. Será um treino de criação de base de dados por con-
junto de dados não estruturado.

Após você observar as palavras da nuvem e do gráfico, juntamente com o título


do relatório, dá para ter uma ideia sobre o assunto, não é mesmo? o texto fala sobre

14
as desigualdades no Brasil em renda e acessos a recursos básicos, como saúde, edu-
cação, saneamento básico etc.

Analise Exploratória
No dia a dia, normalmente, nós nos deparamos com um conjunto desconhecido,
no qual não há menor ideia para que foi criado e o que pode ser feito com ele, no
sentido de estática ou complementação da base.

Nesses casos, o que deve ser feito é uma análise exploratória dos dados, tanto
de forma matemática quanto gráfica. Para essa tarefa, vamos utilizar os pacotes:
“mlbench”, “e1071”, “lattice”, “Amelia”, “corrplot”, “caret”, “ggplot2”. E a base de
dados “PimaIndiansDiabetes”.

A primeira coisa a ser feita é conhecer a estrutura da base de dados, por exemplo,
dimensão da base, tipo de dados, cabeçalhos, conforme mostrado na Figura 10.

Figura 10 – Conhecendo a estrutura da base de dados, cabeçalho, dimensão e tipos de dados

A função “head()” irá listar um data frame com um o cabeçalho. Nesse caso,
colocamos o parâmetro “n=3”, para exibir somente as três primeiras linhas.
A função “dim()” retorna à quantidade de linhas e colunas do objeto. A função
“sapply(PimaIndiansDiabetes, class)” está aplicando a função “class” para cada
coluna do objeto, por isso temos o retorno do tipo de casa um.
Explor

apply, lapply, sapply, tapply, mapply… Como é mesmo? Disponível em: https://bit.ly/2TSUHUN

15
15
UNIDADE Estudo de Caso

O segundo passo é conhecer os dados em si, sua estatística descritiva, distribuição,


desvio padrão, assimetria, correlação entre as variáveis. A Figura 11 mostra como
realizar essas ações. Para estatística descritiva, basta usar a função “summary()”, que
irá calcular média, mediana, menor valor, maior valor, primeiro e terceiro quartil para
cada coluna.

Figura 11 – Conhecendo os dados: estatística descritiva, desvio padrão, correlação, assimetria

A distribuição de classes refere-se ao percentual com que cada classe aparece


na base, por exemplo, a coluna $diabetes possui duas classes, pos e neg, após o
cálculo, sabemos que aproximadamente 65% é neg e 35% é pos.

A função “sapply(PimaIndiansDiabetes[,1:8], sd)” aplica a função de desvio pa-


drão sd(), no objeto entre as colunas 1 a 8. Enquanto a função “apply(PimaIndians
Diabetes[,1:8], 2, skewness)” verifica a assimetria entre as colunas 1 a 8 do objeto.

O teste de correlação verifica se existe algum tipo de relação entre as colunas


do data frame; se o resultado for 1 ou próximo a 1, existe uma relação forte, se o
valor for 0.1 ou abaixo de 0.5, a correlação é fraca ou inexistente, já em valores a
partir de 0.5, existe uma correlação moderada.

O terceiro e último passo é realizar a análise exploratória utilizando gráficos.


Aliás, podemos inverter a ordem, visualizar primeiro e calcular depois, pois ambos
são complementares.

Figura 12 – Análise gráfica de cada variável de maneira independente

16
A Figura 12 mostra a codificação para os gráficos histogramas, densidade e
boxplot, em que irá mostrar o valor de cada coluna num grupo; porém, elas são
consideradas de maneira independentes (uni variadas).

Figura 13 – Código para o gráfico de correlação multivariado

Na Figura 13, temos o código para o gráfico de correlação multivariado, ou seja, va-
mos verificar de forma gráfica, quais variáveis interagem entre si. O gráfico foi montado
como uma matriz, onde o cabeçalho e as linhas são as variáveis. O quadrado de en-
contro entre cada variável terá uma cor correspondente ao valor do teste de correlação.

O teste de correlação varia de -1 a 1, sendo que os valores negativos indicam


uma correlação negativa. Porém, a regra indica que valores menores de 0.5 são de
fraca correlação, a partir de 0.5, é moderada, e quanto mais próximo de 1 mais
forte é a correlação. Isso também vale nas correlações negativas.

Figura 14 - Gráfico de correlação

Conforme mostra a Figura 14, as correlações mais fortes foram o encontro das
variáveis com elas mesmas, na diagonal em azul escuro. O segundo valor significa-
tivo foi o encontro das variáveis idade (age) e gravidez (pregnant), resultando 0.54.

17
17
UNIDADE Estudo de Caso

Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:

Sites
Análise exploratória de dados
ECOR. Análise exploratória de dados.
https://bit.ly/2pUyxFy
WordCloud no R
FILGUEIRA, L. – WordCloud no R- SER.
https://bit.ly/2MAtqp1
Análise exploratória de dados Com R
MOURA, W. Análise exploratória de dados Com R.
https://bit.ly/31YSudb
Produção Animal dicas sobre o software R para zootecnistas. Entendendo o uso das funções apply, lapply, sapply,
tapply, mapply
PRODUÇÃO A – Produção Animal dicas sobre o software R para zootecnistas.
Entendendo o uso das funções apply, lapply, sapply, tapply, mapply.
https://bit.ly/2KP02cU
Qual a importância da analise exploratória de dados?
RAMOS, R. Qual a importância da analise exploratória de dados?
https://bit.ly/2kukNzV

18
Referências
CRAN. The Comprehensive R Archive Network. Site: <https://cran.r-project.
org>. Acesso em: 05/2019.

DA SILVA, L. A.; PERES, S. M.; BOSCARIOLI, C. Introdução à mineração de


dados: com aplicações em R. Elsevier Editora LTDA, Rio de Janeiro, Brasil, 2017.

ESTATISTIC BERKELEY, Department of Statistic Berkeley. Factors in R.


Disponível em: <https://www.stat.berkeley.edu/~s133/factors.html>. Acesso em:
06/2019.

FERREIRA, E.; LISBOA, W. Introdução ao R. Disponível em: <https://book-


down.org/wevsena/curso_r_tce/curso_r_tce.html>. Acesso em: 06/19.

OLIVEIRA, P. F. de; GUERRA, S.; MCDONNEL, R. Ciência de Dados com R –


Introdução. Brasília: IBPAD, 2018. Disponível em: <https://www.ibpad.com.br/o-
que-fazemos/publicacoes/introducao-ciencia-de-dados-com-r/>

WICKHAM, H. R for Data Science. O’Reilly, 2017. Disponível em <https://r4ds.


had.co.nz>

WICKHAM, H. Advanced R Syle Guide. Site: < http://adv-r.had.co.nz/Style.html >.


Acesso em: 05/2019.

YIN, R. K. Estudo de Caso: Planejamento e métodos. Bookman Editora LTDA,


Porto Alegre, Brasil, 2015.

19
19

Você também pode gostar