Data Mining Judicial 1 - Introdução

1. A estratégia modular de trabalho

A coleta de dados é sempre uma operação complexa e consome tempo precioso. Por isso, trabalhar com dados previamente organizados em bancos de dados relacionais (em uma tabela ou conjunto de tabelas) é a saída mais eficiente. Todavia, dependendo da pesquisa que você deseja fazer, não existem bancos de dados que permitam que você se concentre apenas na atividade de análise.

Quando isso ocorre, busque sempre entrar em contato com os órgãos que fazem a gestão dos dados, pois muitas vezes eles podem oferecer a vocês os dados tabulados, pois esse tipo de base pode ser construída a partir de pesquisas feitas diretamente nos bancos de dados institucionais, por meio de ferramentas que não são abertas ao público em geral.

Ocorre que, especialmente no que toca ao Poder Judiciário, a Resolução 215/2015 do CNJ exime os órgãos de prestar informações que exijam trabalhos de consolidação e organização dos dados:

Art. 12. Não serão atendidos pedidos de acesso à informação:
I – insuficientemente claros ou sem delimitação temporal;
II – desproporcionais ou desarrazoados;
III – que exijam trabalhos adicionais de análise, interpretação ou consolidação de dados e informações, serviço de produção ou tratamento de dados que não seja de competência do órgão ou entidade;

Existem certos dados que não estão disponíveis, e quanto a esses não há muito o que fazer no caso de uma resposta negativa às solicitações de informações baseadas lei de transparência. Mas há outros que estão disponíveis na internet, mas de forma dispersa, o que ocorre especialmente com as informações processuais, que se encontram em páginas vinculadas a cada processo, sem que normalmente haja ferramentas públicas que permitam agregá-los em uma tabela unificada.

É nesses casos que pode ser útil você produzir um extrator de dados capaz de obter as informações contidas nas páginas e transferi-las para o seu computador. É possível fazer extratores que já organizem os dados de forma adequada, mas essa estratégia de condensação de atividades somente é indicada quando você já tem um modelo de dados robusto. No caso específico das pesquisas com informações contidas nos sistemas judiciais, essa opção normalmente não é a mais indicada, pois as informações são basicamente arquivos de texto, que ocupam relativamente pouco espaço.

Nossa experiência indica que existe um gargalo no acesso aos dados contidos nos servidores judiciais, o que dificulta estratégias baseadas em uma consulta repetida a eles. O  desafio maior da coleta de dados judiciais não é a quantidade de informações a serem analisadas, mas a nossa capacidade de obter esses dados por meio de uma conexão com a internet que é restrita. Raspar milhares de processos é uma atividade que seria rápida se tivéssemos acesso a uma API ligada diretamente aos bancos de dados judiciais, mas essa é uma possibilidade que não está no horizonte.

Se você não tiver possibilidade de obter os dados diretamente do órgão (mediante pedidos feitos com base na Lei de Acesso à Informação, ou mediante solicitações internas), a coleta de dados de milhares de processos é uma atividade que levará dias de processamento, mesmo com um acesso rápido à internet. Por esse motivo, nossa escolha é buscar todos os dados que sejam potencialmente relevantes, gravá-los no seu computador. Com isso, você pode trabalhar essas informações em um segundo momento, categorizando e organizando seus vários elementos, sem que seja necessário um novo acesso ao servidor. Por isso, a solução que encontramos foi realizar a coleta de dados pela combinação de dois módulos autônomos:

  1. Extrator: Um módulo de extração de dados, que resulta em uma série de arquivos com dados específicos de cada unidade de análise. O resultado é um conjunto de arquivos com dados não estruturado, visto que os vários atributos estarão misturados dentro de uma longa "string", correspondente ao arquivo HTML que o sistema de dados do órgão judiciário retorna à pesquisa referente a cada um dos objetos.
  2. Organizador: Um modo de organização dos dados, que converta os dados não-estruturados obtidos em um conjunto estruturado de dados, ou seja, em uma tabela. O desenvolvimento desse módulo será feito dentro da sua máquina, já

Como a extração é feita em uma comunicação direta do seu computador com o servidor do órgão judicial, sugerimos que você solicite o máximo de informação por cada consulta. Esse é um cuidado necessário porque vários sistemas são programados para "derrubar" consultas muito longas, que pesquisam um número grande de páginas em sequência.

Se esse problema da conexão limitada não existisse, você poderia escolher uma variável e buscá-la em cada uma das páginas processuais. Todavia, no cenário atual, a estratégia que parece mais promissora não é a de multiplicar o número de consultas simples (uma consulta para cada variável processual, em vez de uma consulta por processo), mas concentrar as consultas, realizando de preferência uma única consulta por cada página.

Dada a complexidade dos nossos objetos, fazer múltiplas extrações, no processo natural de aprimoramento dos instrumentos de organização dos dados, termina por ser uma opção mais onerosa do que extrair todo o material e depois fazer o desenvolvimento dos programas de geração das tabelas de maneira offline.

A organização dos dados envolve, o desenvolvimento de estratégias para identificar os valores de cada variável, dentro dos dados extraídos, criando um banco de dados relacional (uma tabela em .csv) que você poderá analisar com os partir dos instrumentos de sua preferência, seja desenvolvendo códigos em Python ou R, seja utilizando programas como o Excel, o Tableau ou o PowerBI.

4. O módulo dsd.py

Para facilitar as nossas extrações, criamos módulo com várias funções de data science e direito: o módulo dsd.py, disponível no github.

Grave este módulo no seu diretório de trabalho, para ter acesso às funções que estão definidas nele. Para fazer isso, basta:

  1. entrar no link do módulo,
  2. pressionar o botão direito do mouse e
  3. clicar sobre o Salvar Como, escolhendo como pasta para salvar o diretório de trabalho do Spyder.

Para ter certeza de qual é o seu diretório de trabalho, basta observar na parte superior direita do Spyder qual é o diretório que você está usando.

Uma vez que você salve o dsd.py no seu diretório de trabalho, você pode utilizar em seus programas as funções disponíveis nele, desde que utilize o comando import dsd, no início dos seus códigos, como explicado no último módulo do Curso de Programação para Juristas.

5. Programas Básicos, Intermediários e Avançados

Nesta abordagem, trabalharemos com graus crescentes de complexidade. Pressupõe-se que os interessados nesse módulo já realizaram o Curso de Programação para Juristas ou que já têm um domínio básico de programação (não necessariamente em Python).

5.1. Extrator Básico

O Extrator Básico é capaz de extrair dados contidos no código fonte das páginas acessíveis por meio de uma query simples. Embora boa parte dos dados reais seja mais complexo, há informações que podem ser obtidas por meio dessa abordagem mais simples, como os dados contidos na página ADI, ADC, ADO e ADPF, que nos servirá como fonte de dados.

5.2 Extrator Intermediário

O Extrator Intermediário lidará com os dados mais gerais do STF, contidos na pesquisa de Acompanhamento Processual. Embora essa página já conte com scripts em Javascript, não será necessário utilizar instrumentos específicos para lidar com essa linguagem de programação. Nesse caso, lidaremos com a necessidade de extrair dados simultaneamente de várias páginas e combiná-los em documentos estruturados de forma a facilitar a sua organização.

5.3 Organizador Básico

Com base nos dados obtidos com o Extrator Intermediário, será construído um Gerador Básico, capaz de processar as informações e gerar uma tabela em formato CSV, com todos os campos relevantes contidos nas informações.

5.4 Organizador Intermediário

Enquanto o Organizador Básico lida apenas com campos simples, o Organizdor Intermediário de CSV tem uma complexidade maior, pois ele precisa gerar campos complexos, formados por listas (por exemplo, listas de partes e listas de andamentos) e não apenas por objetos unitários (como é o caso das datas de distribuição  ou mesmo das decisões finais).

5.5 Extrator Avançado (em construção)

O extrator avançado é capaz de lidar diretamente com o Javascript, por meio da utilização das bibliotecas Selenium e Scrapy.

5.6 Organizador Avançado (em construção)

O Organizador avançado integra as informações aos data-frames da biblioteca Pandas, que possibilita formas mais ágeis de tratar os dados e a utilizar estruturas da estatística.