escuro proxyscrape logótipo

O que é a análise de dados?

maio-00-20215 minutos de leitura

Data Parsing is a term that you often come across when you work with large quantities of data, especially for those who scrape data from the web as well as software engineers. However, data parsing is a topic that needs to be discussed in greater depth. For instance, what exactly is data parsing, and how

A análise de dados é um termo com que se depara frequentemente quando trabalha com grandes quantidades de dados, especialmente para aqueles que extraem dados da Web, bem como para os engenheiros de software. No entanto, a análise de dados é um tópico que precisa de ser discutido em maior profundidade. Por exemplo, o que é exatamente a análise de dados e como implementá-la no mundo real.

Este artigo responderá a todas as perguntas acima e fornecerá uma visão geral das terminologias significativas associadas à análise de dados.

O que significa "parsing"?

Quando se extraem grandes quantidades de dados a partir da recolha de dados da Web, estes estão em formato HTML. Infelizmente, este não é um formato legível para qualquer não-programador. Por isso, é necessário trabalhar mais nos dados para os tornar num formato legível por humanos, tornando-os convenientes para análise por cientistas de dados. É o analisador que efectua a maior parte deste trabalho pesado de análise.

O que é que um analisador de dados faz?

Um analisador converte dados de um formato em dados de outro formato. Por exemplo, o analisador converterá os dados HTML obtidos através de scraping em JSON, CSV e até mesmo numa tabela, de modo a que fiquem num formato que possa ser lido e analisado. Também vale a pena mencionar que o analisador não está vinculado a nenhum formato de dados específico.

O analisador não analisa todas as cadeias HTML porque um bom analisador distingue os dados necessários nas etiquetas HTML do resto.

Diferentes tecnologias que utilizam o analisador

Como mencionado na secção anterior, uma vez que o analisador não está ligado a uma tecnologia específica, é excecionalmente flexível por natureza. Por conseguinte, é utilizado por uma grande variedade de tecnologias:

Linguagens de script - estas são as linguagens que não necessitam de um compilador para serem executadas, uma vez que são executadas com base numa série de comandos num ficheiro. Exemplos típicos são PHP, Python e JavaScript.

Java e outras linguagens de programação - As linguagens de programação de alto nível, como Java, utilizam um compilador para converter o código-fonte em linguagem Assembly. O analisador é um componente importante destes compiladores, que cria uma representação interna do código-fonte.

HTML e XML - no caso do HTML, o analisador extrai o texto das etiquetas HTML, como o título, os cabeçalhos, os parágrafos, etc. Já um analisador XML é uma biblioteca que facilita a leitura e a manipulação de documentos XML.

Linguagens SQL e de bases de dados - O analisador SQL, por exemplo, analisa uma consulta SQL e gera os campos definidos na consulta SQL.

Linguagens de modelação - o analisador nas linguagens de modelação permite aos programadores, analistas e partes interessadas compreender a estrutura do sistema que está a ser modelado.

Linguagens de dados interactivas - são utilizadas no processamento interativo de grandes quantidades de dados, incluindo as ciências espaciais e a física solar. 

Porque é que é necessária a análise de dados?

A principal razão para a necessidade de análise é o facto de várias entidades necessitarem de dados em formatos diferentes. Assim, a análise permite transformar os dados de modo a que um ser humano ou, nalguns casos, o software os possa compreender. Um exemplo proeminente deste último caso são os programas de computador. Em primeiro lugar, os seres humanos escrevem-nos num formato que possam compreender com uma linguagem de alto nível análoga a uma linguagem natural como o inglês que usamos diariamente. Depois, os computadores traduzem-nos para uma forma de código ao nível da máquina que os computadores compreendem.

A análise também é necessária para situações em que a comunicação é necessária entre dois softwares diferentes - por exemplo, serializar e desserializar uma classe.

A terminologia de análise e a estrutura do analisador

Até este momento, conhece os conceitos fundamentais da análise de dados. Agora é hora de explorar os conceitos significativos associados à análise de dados e como o analisador funciona. 

Terminologia

  1. Expressões regulares

As expressões regulares são uma série de caracteres que definem um determinado padrão. São mais frequentemente utilizadas por linguagens de alto nível e de scripting para validar um endereço de correio eletrónico ou uma data de nascimento. Embora sejam consideradas inadequadas para a análise de dados, podem ser utilizadas para analisar dados simples. Este equívoco surge porque alguns programadores utilizam expressões regulares para todas as tarefas de análise, mesmo quando não é suposto serem utilizadas. Nessas circunstâncias, o resultado é uma série de expressões regulares que são combinadas.

Pode utilizar expressões regulares para analisar algumas linguagens de programação simples, também conhecidas como linguagens regulares. No entanto, isto não inclui o HTML, que pode ser considerado como uma linguagem simples. Isto deve-se ao facto de, dentro das etiquetas HTML, encontrar um grande número de etiquetas arbitrárias. Além disso, de acordo com a sua gramática, tem elementos recursivos e aninhados que não se podem classificar como linguagem regular. Por conseguinte, não é possível analisá-los, por muito inteligente que seja. 

  1. Gramáticas

A gramática é um conjunto de regras que descreve uma língua do ponto de vista sintático. Assim, aplica-se apenas à sintaxe e não à semântica de uma língua. Por outras palavras, a gramática aplica-se à estrutura de uma língua e não ao seu significado. Vejamos o exemplo abaixo:

HI: "HI"

NOME: [a-zA-z] +

Saudação: HI NOME

Dois dos resultados possíveis para o código acima podem ser "HI SARA" ou "HI Coding". No que diz respeito à estrutura da língua, ambas estão correctas. No entanto, no segundo resultado, como "Codificação" não é o nome de uma pessoa, é semanticamente incorreto.

Anatomia da gramática

Podemos ver a anatomia da gramática com as formas mais utilizadas, como a Forma Backus-Naur (BNF). Esta forma tem as suas variantes, que é a Forma Backus-Naur Alargada, e indica repetição. Outra variante da BNF é a Forma Backus-Naur Aumentada. É utilizada na descrição de protocolos de comunicação bidireccionais.

Quando se utiliza uma regra típica na forma Backus-Naur, o seu aspeto é o seguinte:

<symbol> : : _expression_

The <symbol> is nonterminal, which means you can replace it with elements on the right,  _expression_. The _expression_ could contain terminal symbols as well as nonterminal symbols. 

Agora pode estar a perguntar o que são símbolos terminais? Bem, são aqueles que não aparecem como símbolo em nenhum componente da gramática. Um exemplo típico de um símbolo terminal é uma sequência de caracteres como "Programa".

Uma vez que a regra como a acima referida define tecnicamente a transformação entre o não-terminal e o grupo de não-terminal e terminal à direita, pode ser designada por regra de produção.

Tipos de gramáticas 

Existem dois tipos de gramáticas: as gramáticas regulares e as gramáticas livres de contexto. As gramáticas regulares são utilizadas para definir uma linguagem comum. Há também um tipo de gramática mais recente, conhecida como Parsing Expression Grammar (PEG), que representa linguagens livres de contexto e que também são poderosas como gramáticas livres de contexto. De qualquer modo, a diferença entre os dois tipos depende da notação e da forma como as regras estão a ser implementadas.

Uma forma mais fácil de distinguir duas gramáticas é a _expressão_, ou o lado direito da regra pode ter a forma de :

  • Uma cadeia vazia
  • Um símbolo de terminal único
  • Um único símbolo terminal é seguido por um símbolo não terminal.

Na realidade, isto é mais fácil de dizer do que de fazer, porque uma determinada ferramenta pode permitir mais símbolos terminais numa definição. Assim, poderia transformar a expressão numa série correcta de expressões que pertencem a qualquer um dos casos acima referidos.

Assim, mesmo uma expressão vulgar que escreva será transformada numa forma correcta, embora não seja compatível com uma língua natural.

Componentes de um analisador

Como o analisador é responsável pela análise de uma cadeia de símbolos numa linguagem de programação em conformidade com as regras gramaticais que acabámos de discutir, podemos dividir a funcionalidade do analisador num processo de duas etapas. Normalmente, o analisador é instruído para ler, analisar e transformar programaticamente os dados não estruturados num formato estruturado.

Os dois principais componentes de um analisador são a análise lexical e a análise sintáctica. Além disso, alguns analisadores também implementam um componente de análise semântica que pega nos dados estruturados e filtra-os como: positivos ou negativos, completos ou incompletos. Embora se possa assumir que este processo melhora ainda mais o processo de análise de dados, nem sempre é esse o cenário.  

A análise semântica não está incorporada na maioria dos analisadores devido às práticas mais favoráveis da análise semântica humana. Por conseguinte, a análise semântica deve ser um passo adicional e, se planear realizá-la, deve complementar os seus objectivos comerciais.

Vamos então discutir os dois principais processos do analisador.

  1. Análise lexical

É efectuada pelo Lexar, que também é designado por scanners ou tokenizadores, e a sua função é transformar uma sequência de dados brutos não estruturados ou caracteres em tokens. Muitas vezes, esta sequência de caracteres que entra no analisador está em formato HTML. Em seguida, o analisador cria tokens utilizando unidades léxicas, incluindo palavras-chave, identificadores e delimitadores. Simultaneamente, o analisador ignora os dados lexicalmente irrelevantes que abordámos na secção introdutória. Por exemplo, estes incluem espaços em branco e comentários num documento HTML.

Depois de o analisador descartar os tokens irrelevantes durante o processo lexical, o resto do processo de análise lida com a análise sintáctica.

  1. Análise sintáctica

Esta fase da análise de dados consiste na construção de uma árvore de análise. Isto implica que, depois de o analisador criar os tokens, os organiza numa árvore. Durante este processo, os tokens irrelevantes são também capturados na estrutura de encaixe da própria árvore. Os tokens irrelevantes incluem parênteses, ponto e vírgula e chavetas.

Para que compreenda melhor esta questão, vamos ilustrá-la com uma simples equação matemática: (a*2)+4

  1. o Lexer do analisador irá então dividi-los em tokens da seguinte forma:

( => Parênteses

a => Valor

* => Multiplicar

2 => Valor

 )=> Parêntesis

+ => Mais

4 => Valor

  1. Depois disso, a árvore de análise será construída da seguinte forma:

    Quando o analisador extrai dados de elementos HTML, segue o mesmo princípio.

Analisador interno ou externo?

Agora já compreendeu os aspectos fundamentais de um analisador. Chegou a altura do aspeto emocionante de decidir se quer construir o seu analisador ou subcontratar um. Primeiro, vamos analisar os prós e os contras de cada método. 

Vantagens de um analisador interno

Existem inúmeras vantagens quando se constrói um analisador interno. Uma das principais vantagens é o facto de ter mais controlo sobre as especificações. Além disso, uma vez que os analisadores não estão limitados a um único formato de dados, pode dar-se ao luxo de os personalizar para se adaptarem a diferentes formatos de dados. 

Algumas das outras vantagens significativas incluem a poupança de custos e o controlo da atualização e manutenção do analisador incorporado. 

Contras do analisador interno

O analisador interno tem as suas desvantagens. Um dos principais inconvenientes é o facto de consumir muito do seu precioso tempo quando tem um controlo substancial sobre a sua manutenção, actualizações e testes. O outro inconveniente seria a possibilidade de comprar e construir um servidor potente para analisar todos os seus dados mais rapidamente do que o necessário. Por último, teria de formar todo o seu pessoal interno para construir o analisador e dar-lhe formação. 

Prós de um analisador externo

Quando se subcontrata um analisador, poupa-se o dinheiro que se gasta em recursos humanos, uma vez que a empresa compradora lhe fornecerá todas as tarefas, incluindo os servidores e o analisador. Além disso, é menos provável que se depare com erros significativos, uma vez que a empresa que o construiu tem mais probabilidades de testar todos os cenários antes de o lançar no mercado.

Se surgir algum erro, a empresa a quem adquiriu o analisador presta-lhe apoio técnico. Também poupará muito tempo, uma vez que a tomada de decisões sobre a construção do melhor analisador será efectuada em regime de outsourcing. 

Contras de um analisador externo

Embora a subcontratação tenha inúmeras vantagens, também tem as suas desvantagens. Os principais inconvenientes são a possibilidade de personalização e o custo. Uma vez que a empresa de análise criou a funcionalidade completa, o custo seria mais elevado. Além disso, o controlo total da funcionalidade do analisador seria limitado.

Conclusão

Neste extenso artigo, ficou a saber como funciona o analisador e o processo de análise de dados em geral, bem como os seus fundamentos. A análise de dados é um processo longo e complicado. Quando tiver a oportunidade de experimentar a análise de dados na prática, estará agora bem equipado com uma grande quantidade de conhecimentos sobre como realizá-la eficazmente.

Esperamos que utilize estes conhecimentos de forma eficaz.