Mineração de Dados: etapas e exemplos de aplicação - Instituto Eldorado
27 de Novembro de 2020

Mineração de Dados: etapas e exemplos de aplicação

Na primeira parte deste texto publicado em nosso blog (se você ainda não leu, pode conferir aqui), falamos sobre o conceito da mineração de dados e as vantagens de sua aplicação: obter insights para tomada de decisões e resolução de problemas.

Na parte dois, por sua vez, vamos nos concentrar nas etapas de preparação, manipulação e a limpeza dos dados. Por fim, iremos mostrar dois exemplos para você entender como esse processo faz toda a diferença. Vamos lá?

O que é raspagem de dados (web scraping)? 

No processo de aprendizado de máquina a etapa de preparação dos dados é vital. Eles podem ser originados de várias fontes, inclusive de páginas de internet.  Nesse caso, precisamos realizar o que chamamos de raspagem de dados, isto é, extrair as informações  e estruturá-las, para que podemos trabalhar na nossa linguagem de programação.

Extração de dados: dificuldades

Cada caso é um caso. Em alguns deles, o dado já vem “pronto”, ou seja, em um formato acessível e de forma estruturada.  Um exemplo legal é a iniciativa do brasil.io, que disponibiliza alguns conjuntos de dados (datasets) em formato acessível e ainda possibilita acessá-los de forma programática, por meio de uma Interface de Programação de Aplicação (API).

Em outros casos, há extração é bem mais difícil, como as tabelas em PDF, por exemplo.

Exemplo 01: evolução da concorrência no vestibular da Unicamp

Lembro que quando ingressei na Unicamp, em 2013, estava sendo criado um curso novo, a engenharia física. Para ingressar nesse curso,  o vestibulando deve prestar o curso 51 (conhecido por cursão). Assim, após 3 semestres de matérias comuns, o aluno pode optar pelo curso de engenharia física, escolhendo entre cursos da matemática e da física.

Neste exemplo, buscamos responder por meio da análise dos dados qual foi o impacto da oferta da engenharia física na concorrência no vestibular do cursão. No site da Comvest há as estatísticas do vestibulares anteriores, por meio das quais podemos fazer esse levantamento.

Cada ano tem uma tabela com os valores que queremos, por exemplo:

Podemos ver como é uma tabela ao presionar Control+u para ver o código fonte da página:

<table class="tabelatexto" style="height: 3701px; width: 825px;" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr style="height: 48px;">
<td style="padding: 5px; width: 144px; height: 129px; background-color: #e0e0e0;" rowspan="2"><span style="font-size: 14px;"><strong>Curso</strong></span></td>
<td style="text-align: center; width: 272px; height: 69px; background-color: #e0e0e0;" colspan="4"><span style="font-size: 14px;"><strong>Geral</strong></span></td>
<td style="text-align: center; width: 260px; height: 69px; background-color: #e0e0e0;" colspan="4"><span style="font-size: 14px;"><strong>Cotas</strong></span></td>
<td style="text-align: center; width: 117px; height: 69px; background-color: #e0e0e0;" colspan="2"><span style="font-size: 14px;"><strong>Notas do<br />
último classificado</strong></span></td>
 
[...]
</tr>
 

Afim de estruturar essa tabela em algo que podemos consumir em python, a opção mais tradicional é o parser beautifulsoup (pip install beautifulsoup4) que permite “navegar” em elementos html.

Porém, no nosso caso, as tabelas estão formatadas “certinhas” e sem irregularidades, o que facilita muito nosso trabalho, pois o próprio pandas tem uma função que raspa automaticamente tabelas de páginas html, o read_html.

Por fim, repare no link da página. Mudando de 2006 para 2007 tivemos sorte de acessar a tabela de 2007. Então basta seguir esse padrão para pegar as informações de forma programática. Você pode acessar o código de fonte utilizado aqui.

Repare que, apesar de ser um problema simples, tivemos várias dificuldades. Tais como:

  • A coluna de cursos às vezes é chamada de Curso, Cursos ou Curso Unicamp. Assim, tivemos que deixar sempre o mesmo nome para “encaixar” os anos;
  • O nome do “cursão” mudou;
  • Os cursos antes seguiam o padrão Curso (I), depois Curso (Integral);
  • O padrão das URLs mudou.

Isso mostra que sempre precisamos inspecionar os dados e ver se estamos tendo o resultado esperado. Uma vez com os dados extraídos e colocados em um dataframe do pandas, agora podemos analisá-los.

Imagem 1: Evolução da concorrência do cursão

Como podemos ver no gráfico acima, a concorrência do cursão estava em queda. Porém, desde de 2013 (ano que eng física foi criada), a procura tem crescido muito.

Como correlação não implica em causa, vamos comparar com outros cursos “próximos” ao cursão para vermos se existe uma tendência geral de aumento da concorrência ou se a causa foi realmente a criação do novo curso.

Imagem 2: Comparação de concorrência do cursão com cursos “próximos”.

Podemos ver que os quatro cursos estão em uma queda até 2012. No entanto, após 2013, apenas o cursão obteve aumento na concorrência, evidenciando que a eng física, de fato, causou a alta procura.

Exemplo 02: campanhas de financiamento da Cryptorave

cryptorave é um evento anual que ocorre na cidade de São Paulo, com 24 horas de atividades sobre segurança, criptografia, hacking, anonimato, privacidade e liberdade na rede.

O evento é aberto, gratuito e organizado de maneira independente por vários coletivos. Seu financiamento se dá por meio de campanhas online.

Imagem 3: navegador com valores arrecadados por dia na campanha de 2018

O print acima ilustra os valores arrecadados para o evento por dia. Dessa forma, podemos raspar essas informações e comparar as campanhas. Esse exemplo será mais fácil que o anterior.

Imagem 4: Comparação das campanhas da Cryptorave

A campanha de 2015 teve apenas 30 dias de duração, enquanto todas as outras tiveram 60.  Repare como as campanhas acabam em alturas diferentes, ou seja, tem metas de arrecadação diferentes. Então como podemos comparar de forma justa as campanhas, sendo que em cada ano houve prazos e metas diferentes?

Uma transformação comum é normalizar os valores, ou seja, ao invés de comparar os valores absolutos vamos comparar o percentual da meta.

Imagem 5: Comparação normalizada das campanhas da Cryptorave

Como podemos ver, as campanhas possuem um comportamento similar. Ao final, podemos concluir que quase ao final do prazo, ainda há muito por vender.

Cadastre-se em nossa newsletter

Created By Avanti