[🇧🇷Português] [🇺🇸English]
Uma análise dos padrões de votação nas eleições de São Paulo em 2024, com foco no comportamento do eleitor, abstenção e tendências geográficas.
📺 Assista em Full HD no You Tube
1-video-portugues.mp4
Este projeto fornece uma análise detalhada dos padrões de votação nas eleições municipais de São Paulo de 2024, com foco no primeiro e segundo turnos das corridas para prefeito e vereador. Ele examina aspectos-chave como comportamento do eleitor, mudanças entre os turnos e variações regionais na taxa de comparecimento dos eleitores.
O conjunto de dados foi compilado manualmente a partir de fontes oficiais, inclui mais de 15.000 entradas. Para reunir os dados relevantes, o projeto utilizou técnicas de web scraping, seguidas de limpeza de dados e análise exploratória de dados (EDA). Esses métodos revelam insights valiosos sobre tendências eleitorais e fornecem orientações estratégicas para entender a dinâmica política de São Paulo, que podem informar estratégias eleitorais futuras.
Este trabalho foi desenvolvido como parte do curso de Projeto Integrado e Storytelling no segundo semestre do curso de Ciência de Dados e Inteligência Artificial da PUC-SP em 2024, sob a orientação do renomado Professor ✨ Rooney Ribeiro Albuquerque Coelho
Sua experiência e dedicação inabalável ao ensino desempenharam um papel crucial em aprofundar nossa compreensão tanto de ciência de dados quanto da arte de contar histórias.
Para acessar o Mapa completo, clique no Mapa abaixo:
Acesse o conjunto de dados e explore o dashboard interativo através do link Power BI abaixo, onde você pode usar filtros dinâmicos para obter insights e visualizações detalhadas.
A estrutura está bem organizada, mas fiz algumas sugestões para melhorar a fluidez e a clareza. Veja abaixo a versão revisada:
- Introdução
- Objetivos do Estudo
- Fundamentação Teórica
- Descrição do Conjunto de Dados
- Metodologia
- Análise Exploratória de Dados
- Gráficos e Dashboards
- 7.1. Distribuição de Votos por Município
- 7.2. Candidatos a Prefeito Mais Votados
- 7.3. Candidatos a Vereador Mais Votados
- 7.4. Prefeitos Mais Votados por Zona Eleitoral
- 7.5. Vereadores Mais Votados por Zona Eleitoral
- 7.6. Prefeitos Mais Votados por Município
- 7.7. Vereadores Mais Votados por Município
- 7.8. Distribuição de Votos por Partido Político
- Dashboards Interativos
- Conclusão
- Material Extra
- Referências
- Como Executar o Projeto
- Contribuindo
- Nossa Equipe
Este relatório apresenta uma análise detalhada dos dados das eleições municipais de São Paulo de 2024, com foco na distribuição de votos, comportamento do eleitor e o desempenho dos candidatos a prefeito e vereador. Várias visualizações e dashboards são usados para explorar os padrões de votação, tendências emergentes e os fatores que influenciam os resultados eleitorais.
O estudo tem como objetivo entender as dinâmicas eleitorais nas áreas urbanas e periféricas de São Paulo, identificando os fatores que determinam as preferências dos eleitores, como os partidos mais votados, perfis de candidatos e comportamento de voto.
Analisar dados eleitorais é crucial para entender o comportamento do eleitor, as preferências partidárias e as tendências políticas nas diferentes regiões. A visualização de dados oferece uma maneira clara e eficiente de identificar padrões que podem informar campanhas futuras.
Os dados usados neste estudo foram extraídos de fontes públicas, fornecendo informações sobre votos por município, zona eleitoral e partido político. O conjunto de dados inclui detalhes sobre os candidatos a prefeito e vereador em São Paulo, incluindo o número de votos recebidos por cada candidato.
Os seguintes arquivos CSV foram processados:
address_Mayor.csv
Mayor_by_city.csv
Mayor_by_city_round_2.csv
Mayor.csv
address_Councilor.csv
Councilor_by_city.csv
councilor.csv
Aqui está uma visão geral das principais colunas nos arquivos CSV processados:
NM_MUNICIPIO
: Nome do municípioNR_ZONA
: Número da zona eleitoralDS_CARGO_PERGUNTA
: Cargo eleitoral (Prefeito ou Vereador)NM_VOTAVEL
: Nome do candidatoSG_PARTIDO
: Sigla do partidoQT_VOTOS
: Número de votos recebidos
A metodologia foi dividida em várias etapas:
- Pré-processamento de Dados: Leitura e concatenação de conjuntos de dados, limpeza de registros inválidos.
- Análise Exploratória de Dados (EDA): Identificação de padrões e tendências de votação usando gráficos e tabelas.
- Visualização de Dados: Criação de gráficos interativos com a biblioteca Plotly para exploração dinâmica dos resultados.
A análise exploratória revelou várias tendências interessantes, como:
- A dominância de votos para partidos como MDB e PSOL.
- A distribuição geográfica dos votos mostrando uma alta concentração no centro de São Paulo e maior apoio a partidos progressistas nas áreas periféricas.
A distribuição de votos revelou uma grande concentração em São Paulo e áreas urbanas vizinhas. A análise indicou a necessidade de estratégias específicas para as áreas periféricas.
import plotly.express as px
import pandas as pd
# Leitura do conjunto de dados
election = pd.read_csv('/caminho/para/seus/dados.csv', encoding='latin-1')
# Plotando a distribuição de votos por município
fig = px.histogram(election, x="NM_MUNICIPIO", y="QT_VOTOS",
title="Votos por Município",
color_discrete_sequence=["#1f77b4"])
fig.update_layout(bargap=0.2)
fig.show()
Ricardo Nunes (MDB) se destacou nas zonas centrais, enquanto Guilherme Boulos (PSOL) teve forte apoio nas periferias.
# Filtrando candidatos a prefeito
mayor = election[(election["DS_CARGO_PERGUNTA"] == "Prefeito") &
(election["NM_MUNICIPIO"] == "SÃO PAULO") &
(election["SG_PARTIDO"] != "#NULO#")].copy()
# Agrupando e ordenando candidatos por votos
mayor = mayor.groupby(['NM_VOTAVEL', 'SG_PARTIDO']).sum().sort_values("QT_VOTOS", ascending=False)["QT_VOTOS"].reset_index()
# Calculando porcentagens de votos
total_votes = mayor["QT_VOTOS"].sum()
mayor["PERCENTAGE"] = mayor["QT_VOTOS"] / total_votes
# Gráfico de barras
fig = px.bar(mayor, x="NM_VOTAVEL", y="QT_VOTOS", color="SG_PARTIDO",
title="Candidatos a Prefeito Mais Votados",
color_discrete_sequence=px.colors.qualitative.Dark24)
fig.show()
A distribuição de votos mostrou uma concentração entre os candidatos locais, com destaques para Tabata Amaral (PSB) e Renato Sorriso (PL) nas zonas periféricas.
# Filtrando candidatos a vereador
councilor = election[(election["DS_CARGO_PERGUNTA"] == "Vereador") &
(election["NM_MUNICIPIO"] == "SÃO PAULO") &
(election["SG_PARTIDO"] != "#NULO#")].copy()
# Agrupando e ordenando candidatos por votos
councilor = councilor.groupby(['NM_VOTAVEL', 'SG_PARTIDO']).sum().sort_values('QT_VOTOS', ascending=False)["QT_VOTOS"].reset_index()
# Calculando porcentagens de votos
total_votes = councilor["QT_VOTOS"].sum()
councilor["PERCENTAGE"] = councilor["QT_VOTOS"] / total_votes
# Gráfico de barras
fig = px.bar(councilor, x="NM_VOTAVEL", y="QT_VOTOS", color="SG_PARTIDO",
title="Candidatos a Vereador Mais Votados",
color_discrete_sequence=px.colors.qualitative.Dark24)
fig.show()
As zonas centrais favoreceram Ricardo Nunes, enquanto as zonas periféricas foram dominadas por Guilherme Boulos.
# Dados das zonas e bairros
areas = pd.DataFrame({
"ZONE": [1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 246, 246, 247, 247, 248, 248, 249, 250, 250, 250, 251, 251, 252],
"NEIGHBORHOOD": ["BELA VISTA", "CONSOLACAO", "LIBERDADE", "REPUBLICA", "SE", "BARRA FUNDA", "PERDIZES", "SANTA CECILIA", "BOM RETIRO", "BRAS", "PARI", "AGUA RASA", "BELEM", "MOOCA", "JD PAULISTA"]
})
# Mesclando com dados de prefeitos
merged = mayor.merge(areas, left_on="NR_ZONE", right_on="ZONE")
# Gráfico de barras
fig = px.bar(merged, x="NEIGHBORHOOD", y="QT_VOTES", color="SG_PARTY", title="Prefeito Mais Votado por Zona")
fig.show()
The analysis revealed candidates like Márcio Chagas (PSOL) and Luana Almeida (PL) performing well in suburban areas.
# Analyzing most voted councilors by electoral zone
areas = pd.DataFrame({
"ZONE": [1, 1, 1, 2, 2, 3, 3, 4, 5, 6],
"NEIGHBORHOOD": ["BELA VISTA", "CONSOLACAO", "LIBERDADE", "MOOCA", "CAMPO BELO", "ITAQUERA", "CID DUTRA", "PIRITUBA", "VILA PRUDENTE", "TATUAPE"]
})
# Merging councilor data
councilor_merged = councilor.merge(areas, left_on="NR_ZONE", right_on="ZONE")
# Bar chart
fig = px.bar(councilor_merged, x="NEIGHBORHOOD", y="QT_VOTES", color="SG_PARTY", title="Most Voted Councilor by Zone")
fig.show()
The municipality-level analysis confirmed Ricardo Nunes' dominance in urban areas and Boulos’ strength in peripheral zones.
# Grouping mayors by municipality
municipality = mayor.groupby("NM_MUNICIPIO").sum().sort_values("QT_VOTES", ascending=False)
# Bar chart
fig = px.bar(municipality, x=municipality.index, y="QT_VOTES", title="Most Voted Mayor by Municipality")
fig.show()
The analysis showed a strong presence of candidates like Eduardo Suplicy (PT) across several municipalities, reflecting broad political support.
# Grouping councilors by municipality
municipality_councilor = councilor.groupby("NM_MUNICIPIO").sum().sort_values("QT_VOTOS", ascending=False)
# Bar chart
fig = px.bar(municipality_councilor, x=municipality_councilor.index, y="QT_VOTOS", title="Most Voted Councilor by Municipality")
fig.show()
The vote distribution charts confirmed the dominance of MDB and PSOL, with PSOL's support growing in peripheral zones.
# Analyzing distribution of votes by party
party_votes = election.groupby("SG_PARTIDO").sum().sort_values("QT_VOTOS", ascending=False)
# Bar chart
fig = px.bar(party_votes, x=party_votes.index, y="QT_VOTOS", title="Distribution of Votes by Political Party")
fig.show()
8. Interactive Power BI Dashboards: Click to access the link
This dashboard provided a detailed view of electoral preferences by region, highlighting the polarization between urban and peripheral areas.
import plotly.express as px
# Gráfico de mapa para distribuição de votos por município
df = pd.read_csv('distribution_votes.csv')
fig = px.choropleth(df, locations="municipality", color="votes", hover_name="municipality", title="Distribuição Geográfica de Votos")
fig.show()
This dashboard was essential for understanding candidate performance across regions, using heatmaps and bar charts.
import plotly.express as px
# Bar chart for vote analysis by party
df = pd.read_csv('votes_by_party.csv')
fig = px.bar(df, x="party", y="votes", color="party", title="Vote Analysis by Party")
fig.show()
The visualization allowed for identifying votes distribution by party and electoral preferences by zone.
# Dashboard for candidate performance
df = pd.read_csv('candidates_performance.csv')
fig = px.scatter(df, x="zone", y="votes", color="party", title="Candidate Performance by Electoral Zone")
fig.show()
Este dashboard analisou os votos por idade, gênero e classe social, destacando as preferências dos eleitores mais jovens e das classes sociais mais baixas pelos candidatos progressistas.
# Dashboard para comparação entre candidatos
df = pd.read_csv('candidates_comparison.csv')
fig = px.scatter(df, x="votes_mayor", y="votes_councilor", color="party", title="Comparison of Mayoral and Councilor Candidates")
fig.show()
A comparação entre as duas eleições revelou mudanças significativas nas preferências eleitorais, com o PSOL ganhando força nas periferias.
# Dashboard para votação por faixa etária
df = pd.read_csv('votes_by_age_group.csv')
fig = px.pie(df, names="age_group", values="votes", title="Voting by Age Group")
fig.show()
A análise dos dados das eleições municipais de São Paulo de 2024 forneceu valiosas percepções sobre o comportamento do eleitor e as tendências emergentes. Observou-se um aumento da polarização política, com o PSOL ganhando força nas áreas periféricas e o MDB mantendo uma base sólida nas áreas urbanas centrais. Além disso, a análise revelou uma mudança nas preferências eleitorais, com um crescente apoio a partidos mais progressistas, especialmente entre os eleitores mais jovens e das classes sociais mais baixas.
A análise dos gráficos e dashboards possibilitou uma compreensão mais detalhada da distribuição dos votos por geografia, desempenho dos candidatos por zona eleitoral e segmentação dos votos por partido e perfil demográfico. As tendências observadas sugerem que as campanhas eleitorais futuras devem focar em estratégias mais segmentadas, considerando as características sociais e econômicas de cada região.
- Personalizar a comunicação eleitoral para diferentes regiões, considerando os perfis demográficos e socioeconômicos.
- Aproveitar o crescimento das redes sociais e outras plataformas digitais para se conectar com eleitores mais jovens e aqueles com acesso limitado aos meios de comunicação tradicionais.
- Ajustar as propostas de campanha de acordo com questões locais como segurança, saúde e educação, que foram fatores decisivos para votos em várias zonas periféricas.
-
🇺🇸 Relatório de Análise de Dados: Clique 🔗
-
🇧🇷 Relatório de Análise de Dados: Clique 🔗
-
Link de Acesso ao Power BI: Clique 🔗
-
Arquivo do Power BI: Clique 🔗
- QR Code:
Escaneie o código para acessar os dados e visualizações no Power BI.
- Tribunal Superior Eleitoral (TSE)
- [Fonte de Dados Eleitorais]
- Artigos sobre análise de dados eleitorais e visualização de dados
Este projeto foi desenvolvido em Python e usa bibliotecas como Pandas, Plotly e Dash para análise e visualização de dados. Siga as instruções abaixo para configurar o ambiente e rodar o código.
Antes de rodar o projeto, você precisa ter o Python e o Git instalados no seu sistema.
Baixe o Python
Baixe o Git
Além disso, você precisará das dependências listadas no arquivo requirements.txt:
pandas
plotly
Para começar, clone o repositório no seu computador:
git clone https://github.com/your_user/elections-sp-project.git
cd elections-sp-project
Instale as dependências necessárias executando o seguinte comando:
pip install -r requirements.txt
Para criar um executável do projeto, você pode usar o PyInstaller. Execute o seguinte comando para gerar o executável:
pyinstaller --onefile electoral_analysis.py
Isso criará um arquivo executável na pasta dist/, que pode ser executado diretamente sem a necessidade de instalar o Python.
Após instalar as dependências ou criar o executável, rode o script principal para gerar as análises e visualizações:
python electoral_analysis.py
Se você deseja visualizar os dashboards interativos usando o Bash, execute o seguinte comando:
python app.py
Isso abrirá o dashboard no seu navegador.
Aqui está a tradução para o português do trecho solicitado:
Se você quiser contribuir para este projeto, fique à vontade para fazer um fork, realizar alterações e enviar pull requests. Aqui estão os passos para começar:
- Faça o fork deste repositório.
- Crie um branch para sua funcionalidade:
git checkout -b nova-funcionalidade
- Faça as alterações necessárias e commit:
git commit -am 'Adiciona nova funcionalidade'
- Faça o push do branch para o repositório remoto:
git push origin nova-funcionalidade
- Abra um pull request para revisão e integração.
Certifique-se de que suas alterações não quebrem a funcionalidade existente e que os testes estejam atualizados.
- Fabiana 🚀 Campanari - me envie um e-mail
- Pedro 🛰️ Vyctor - me envie um e-mail
Copyright 2024 Mindful-AI-Assistants. Código liberado sob a Licença MIT.