Análise Temática das Leis Ordinárias Federais de 2023

Leonardo Sales
datacoffee
Published in
7 min readFeb 29, 2024

No ano de 2023 o Congresso Nacional aprovou 275 leis ordinárias. Esta é a distribuição das leis pelos temas abordados:

Número de leis por categoria

Vou explicar como usei técnicas de Mineração de Textos para chegar nesses números a partir do texto das ementas das leis, e detalhar tudo. Nosso artigo se concentra na análise dos principais temas tratados nessas leis, ou seja, preciso fazer um computador identificar pautas, assuntos.

Dataset

Usei dados publicados no Planalto.gov.

Criei uma tabela com o número das leis, link e ementa. Em regra, a ementa resume o principal objetivo e mudanças trazidas pela lei, então já se presta ao objetivo deste estudo, que foi captar os principais grupos temáticos.

A tabela está disponível em meu github. Aqui, um extrato:

Extrato da base de leis ordinárias de 2023

Abordagem: Clusterização

Inicialmente, fiz a clusterização dos textos das ementas das 275 normas, para vislumbrar quais grupos surgiriam e, a partir disso, identificar temas e palavras-chave relativos a cada grupo. Para tanto, foi necessário fazer a vetorização do texto, para permitir o uso do algoritmo de clusterização k-means.

No bloco de código abaixo (código completo aqui), em python, subo a tabela, faço o tratamento do texto da coluna de assunto, para eliminar acentuação, pontuação e maiúsculas, e vetorizo o texto.

# Carregando base de leis 2023 e tratando campo assunto
leis = pd.read_excel('_planilha_leis.xlsx')
leis['assunto_limpo'] = leis['assunto'].apply(lambda x: unidecode(x).lower())
leis['assunto_lista_termos'] = leis['assunto_limpo'].apply(lambda x: x.replace(',', '').replace(';', '').replace(':', '').replace('.', '').replace('"', '').replace('-', '').replace('(', '').replace(')', '').split(' '))

# Vetorização, usando SBERT-Sentence Transformers
model_path="paraphrase-distilroberta-base-v1"
model = SentenceTransformer(model_path)
corpus = leis['assunto_limpo']
corpus_embeddings = model.encode(corpus)

A vetorização é o processo pelo qual transformamos a linguagem humana em algo inteligível pelo computador. Diversos algoritmos são destinados a esse fim. Utilizei o Sentence Transformers SBERT. Não vou me aprofundar sobre ele neste texto, até porque não conseguiria ser mais claro que aqui, só destaco que o SBERT (e outros algoritmos da família BERT) possuem a grande vantagem de captar semântica (sentido) nos textos.

O processo de clusterização visa agrupar os textos das ementas pela similaridade semântica. Um passo preparatório é entender qual seria o número ideal de clusters (grupos) para análise. Para isso, optei por analisar a variação do grau de consistência dos grupos na medida em que se aumenta o número de clusters. O gráfico abaixo apresenta a soma do quadrado das distâncias dos textos aos centróides¹ (medida WCSS, que é equivalente a uma medida de erro) para diferentes números de clusters:

Curva do "cotovelo", ajuda a identificar o número ideal de clusters

A ideia desse gráfico é mostrar a partir de que ponto um aumento no número de clusters não produz mais uma razoável redução do WCSS. Tendo em vista a curva (embora suave) observada, me pareceu razoável utilizar 12 clusters nesse caso.

No bloco de código abaixo, faço a clusterização.

# Clusterização, usando K-Means
k = 12 # Número esperado de clusters
kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
kmeans.fit(corpus_embeddings)

Neste gráfico, é possível visualizar a distribuição dos clusters em 2 dimensões².

Diagrama dos 12 clusters identificados

Por essa imagem dá pra ver que alguns grupos ficaram bem destacados dos demais, mas tem outros ficam bem próximos. Vamos aprofundar!

-> Analisando os clusters

Primeiramente, iremos analisar quais palavras são mais representativas em cada cluster inicialmente identificado. Farei isso da maneira mais simples e visual possível, usando nuvens de palavras.

Palavras mais recorrentes, por cluster identificado

Esta é a distribuição dos documentos pelos clusters criados:

Número de leis por cluster

Visão geral sobre cada cluster:

  • Cluster 1: Denominação de rodovias e obras
  • Cluster 2: Criação e alteração de cargos do governo, aparentemente misturado com outros assuntos relacionados a políticas públicas
  • Cluster 3 e 12: Orçamento Público
  • Cluster 4 e 10: Designação de datas disso e daquilo (e.g. dia nacional da doceira)
  • Cluster 5: Designação de heróis e heroínas nacionais
  • Cluster 6, 7 e 9: Zona de sombreamento, temas diversos relativos a programas governamentais
  • Cluster 8: Serviço público
  • Cluster 11: Denominação temática de localidades (e.g. lei define que o Itajaí-SC é a capital nacional da pesca).

Aparentemente, os clusters foram eficazes em delimitar, de maneira geral, os principais temas das legislações aprovadas em 2023. Mas percebemos que alguns são menos consistentes (trazem temas variados).

Um exemplo são os clusters 6, 7 e 9, que parecem misturar diversos assuntos diferentes relativos a políticas públicas e programas governamentais. Além disso, percebo redundância entre os clusters 3 e 12 (orçamento) e 4 e 10 (datas comemorativas). Veja como isso se reflete no diagrama de clusters anterior!

Resultados

Após a análise dos clusters criados, incluí na base de dados uma coluna com o cluster ao qual cada lei foi relacionada. Fiz alguns ajustes:

  • Considerei os clusters 3 e 12 como uma classe só (Orçamento) e os clusters 4 e 10 como Datas Comemorativas
  • Considerei os clusters 1, 5 e 11 como uma classe só: Denominações Simbólicas
  • Os clusters 6, 7 e 9, por sua vez, foram inicialmente agrupados e em seguida desmembrados nos seguintes grupos: Tributação e Benefícios Fiscais e Políticas Públicas

Além disso, corrigi classificações imprecisas.

Após os ajustes, nossa base de dados ficou com mais uma coluna adicionada, classe_assunto, conforme abaixo:

Tabela de leis com designação do assunto

Assim, chegamos na distribuição das leis ordinárias de 2023 pelos temas finais (coluna "classe_assunto"):

Número de leis por categoria

-> Grupão de Políticas Públicas

A categoria "Políticas Públicas" é meio que um guarda-chuva para as alterações legislativas de inúmeros temas. Procurei identificar subdivisões (desta vez, atribuí manualmente as subclasses):

Subclasses de políticas públicas

-> Grupo de Serviço Público

Esse grupo temático abrange principalmente alterações na estrutura burocrática do governo, a maior parte referente a salários e cargos:

Subclasses de Serviço Público

-> Simbolismos (ou leis de impacto questionável)

Legislações que atribuem ou reforçam símbolos, relacionadas aos grupos "Denominações Simbólicas" e "Datas Comemorativas", têm impacto, digamos, mais simbólico mesmo, não acha? Pois bem, esses dois grupos somam 89 leis aprovadas em 2023, 11 a menos que o grupo principal, de políticas públicas.

Detalhando um pouco, as 52 leis do grupo "Denominações Simbólicas" se dividem em:

Subclasses do grupo "Denominações Simbólicas"

Fruto das inúmeras leis desse grupo, denominamos Viaduto Francisco Pereira Netto o viaduto situado sobre a rodovia BR-116, nas proximidades do km 117. Sabe, aquele mesmo do bairro Campo de Santana, em Curitiba-PR. Este aqui, ó:

O tal viaduto. Como você viveu até hoje sem saber disso, haha?

A consulta pública sobre esse projeto teve exatos ZERO votos no site do Senado:

Disputa acirrada sobre o nome do viaduto

Além disso, Lagoa Dourada, município de Minas, é agora a capital nacional do Rocambole. São Luís-MA é capital do reggae (essa eu já sabia). Guabiju-RS é a capital, adivinhem, do guabiju mesmo. Bagé, também no RS, é a capital nacional dos cavalos puro-sangue ingleses.

Padre Cícero e Irmã Dulce tiveram o nome inscrito no Livro de Heróis e Heroínas da Pátria. Este aqui. E o forró foi reconhecido como manifestação cultural nacional.

As Datas Comemorativas somaram 37 leis aprovadas. Aprovamos o Dia Nacional do Físico, das Doenças Cardiovasculares, da Doceira, do Rosário da Virgem Maria, da Neuromielite Óptica, da Água, da Diálise, dos Desbravadores, da Visão Monocular, dos Agentes de Trânsito, do Terço dos Homens, da Mulher Empresária e das Anomalias Vasculares.

-> Impacto finalístico

Arisco aqui, ainda, uma categorização dos grupos quanto à finalidade das normas:

  • Se estão diretamente ligadas a impactos nas políticas públicas, as leis foram classificadas como "Finalísticas"
  • Se estão relacionadas a simbolismos, datas, denominações etc, recebem a tag de "Simbólicas"
  • Se dizem respeito a etapas preparatórias e de suporte das políticas, como regulamentações da burocracia estatal, cargos, remunerações, orçamento e tributos, são categorizadas como "Atividades Meio".

Aqui o resultado:

Classificação dos assuntos quanto à finalidade das 275 leis ordinárias de 2023

Possibilidades de trabalhos futuros

Vejo como possíveis aprofundamentos, a ver se invisto nisso no futuro, ou fica a ideia outros analistas:

  • Criar um "classificador" de leis, a partir de uma base anotada como esta.
  • Analisar distribuição dos grupos temáticos em anos eleitorais.
  • Numa abordagem similar, talvez usando Topic Modeling, analisar os textos das justificativas (documento preparatório ao PL) para os projetos e verificar seus principais fundamentos

É isso. O que achou desse estudo? Código e planilha utilizada em meu github.

Segue lá o @_Datacoffee_ e o @politica.com.dados no insta.

Notas

[1] Centróides são, dentro de um espaço multidimensional, o ponto onde se minimiza a média das distâncias entre os pontos.

[2] Numa análise de texto como esta, temos inúmeras dimensões. Para permitir a visualização dos clusters aqui, precisei reduzi-las a duas. Para isso usei um algoritmo de redução de dimensionalidade chamado Uniform Manifold Approximation and Projection (UMAP), melhor explicado aqui.

--

--

Leonardo Sales
datacoffee

Egresso das humanas, mestre em economia do setor público, apaixonado por dados, python e música, intrigado com política.