<jupyter_start><jupyter_text>Mapa Resultado eleicoes 2018 2 turno por municipiohttps://www.ibge.gov.br/busca.html?searchword=shapefilehttps://www.tse.jus.br/hotsites/pesquisas-eleitorais/resultados_anos/2018.html<jupyter_code>#importação da bibliotecas
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import geopandas as gpd
df_mapa = gpd.read_file(r'./BR_Municipios_2020/BR_Municipios_2020.shp')
#Analise do conteudo do shapefiles
df_mapa.head()
#verificar tipo das colunas e quantidade de registros
df_mapa.info()
df_mapa.plot()
#Expandir o grafico
fig, ax = plt.subplots(1, figsize=(12, 12))

#Desenha o mapa
df_mapa.plot(ax=ax)

#Retira os eixos
ax.set_axis_off()

#Mostra o mapa
plt.show()
#Carregando os arquivos da eleição do segundo turno para presidente

df = pd.read_csv(r'./votacao_candidato_munzona_2018/votacao_candidato_munzona_2018_BR.csv', 
                 encoding='latin1', 
                 sep=';')
df.head().T

#Quantidade de zonas eleitorais por estado
# ZZ representa votacao fora do Brasil
df['SG_UF'].value_counts()
#Quantidade de municipios nacionais e exterior (ZZ)
df['CD_MUNICIPIO'].nunique()
#Quantidade de municipios fora do Brasil
df[df['SG_UF'] == 'ZZ']['CD_MUNICIPIO'].nunique()
5708 - 138
#Armazenando somente dados do segundo turno, somente nos municipios nacionais
df = df[(df['NR_TURNO'] == 2) & (df['SG_UF'] != 'ZZ')]
#Quantidade de votos por candidato
df.groupby('NM_CANDIDATO')['QT_VOTOS_NOMINAIS'].sum()
#Eliminar colunas que não serão utilizadas
df_votacao = df[['SG_UF', 'CD_MUNICIPIO', 'NM_MUNICIPIO', 'NR_CANDIDATO', 'NM_CANDIDATO',
        'NM_URNA_CANDIDATO', 'QT_VOTOS_NOMINAIS']]
df_votacao.head()
#Agregação de municipios por candidatos
df_votacao.groupby(['SG_UF', 'CD_MUNICIPIO', 'NM_MUNICIPIO', 'NR_CANDIDATO', 
                    'NM_URNA_CANDIDATO']).sum()
#Reindexação do indice do dataframe
df_votacao = df_votacao.groupby(['SG_UF', 'CD_MUNICIPIO', 'NM_MUNICIPIO', 'NR_CANDIDATO', 
                    'NM_URNA_CANDIDATO']).sum().reset_index()
df_votacao.sample(4)
#Ordenar os valores e remover os municiopios duplicados mantendo o primeiro

#Ordenando valores
df_votacao.sort_values('QT_VOTOS_NOMINAIS', ascending=False, inplace=True)

#Remove duplicados e mantem o primeiro registro
df_votacao.drop_duplicates('CD_MUNICIPIO', keep='first', inplace=True)

df_votacao.head()
#Criando uma coluna com o vencedor do municipio True=Bolsonaro e False=outro
df_votacao['RESULTADO'] = df_votacao['NR_CANDIDATO'].apply(lambda x : x == 17)
#Tabela auxiliar para relacionamento das tabelas do IBGE e TSE
url = 'https://raw.githubusercontent.com/estadao/como-votou-sua-vizinhanca/master/data/votos/correspondencia-tse-ibge.csv'

df_auxiliar = pd.read_csv(url)

df_auxiliar.head()
#Reindexacao das tabelas
#df_votacao.set_index('CD_MUNICIPIO', inplace=True)
#df_auxiliar.set_index('COD_TSE', inplace=True)
#Reduzir a tabela auxiliar
df_auxiliar = df_auxiliar[['GEOCOD_IBGE', 'COD_TSE']]
#Como os registros são unicos a quantidade de registros das tabelas tem ser iguais / relacao 1 para 1

df_votacao.info()
df_auxiliar.info()
df_auxiliar.head()
#unindo tabela auxiliar na tabela votacao usando join
df_unificada = df_votacao.set_index('CD_MUNICIPIO').join(df_auxiliar.set_index('COD_TSE'))
df_unificada.head()
#Executa o relacionamento com a tabela mapa
df_mapa.info()
df_mapa.head(1)
#Convertendo o CD_MUN para o mesmo tipo da tabela de votacao
#df_mapa = df[df_mapa['GEOCOD_IBGE']].astype(str)
df_unificada.info()
df_unificada.head(1)
display(df_mapa[df_mapa['CD_MUN'] == 3550308])
display(df_mapa[df_mapa['CD_MUN'] == '3550308'])
#Unindo a tabela votacao a tabela mapa
df_unificada['GEOCOD_IBGE'] = df_unificada['GEOCOD_IBGE'].astype(str)
df_final = df_mapa.set_index('CD_MUN').join(df_unificada.set_index('GEOCOD_IBGE'))
# gdf = geopandas.GeoDataFrame(
#     df, geometry=geopandas.points_from_xy(df.Longitude, df.Latitude))
df_final = gpd.GeoDataFrame(df_final)
df_final.head()

df_final.head().T
#Verifica se em algum registro tem valor nulo
df_final[df_final['NR_CANDIDATO'].isnull()]<jupyter_output><empty_output><jupyter_text>Desenhar o Mapa<jupyter_code>#Codigo de cores False/0 = red e True/1 = green
from matplotlib.colors import ListedColormap

cmap = ListedColormap(['red', 'green']) # define as cores do mapa

#Desenha o mapa
fig, ax = plt.subplots(figsize=(12,12)) 

figura = df_final.plot(column='RESULTADO', cmap=cmap, legend=True, linewidth=0.05, ax=ax, edgecolor='gray')

ax.set_axis_off() # esconde os eixos

ax.set_title('Resultado do Segundo Turno 2018', fontdict={'fontsize':25, 'fontweight':3}) # Titulo

ax.annotate('Fontes IBGE, TSE e Estadão de São Paulo',
           xy=(0.1, 0.08), xycoords='figure fraction', horizontalalignment='left',
           verticalalignment='top', fontsize=10, color='#555555') # Rodape

legenda = figura.get_legend()
print(legenda)
# legenda.get_texts()[0].set_text('<NAME>')
# legenda.get_texts()[1].set_text('<NAME>')

plt.show()<jupyter_output>None
{'fraction_non_alphanumeric': 0.12871485943775102, 'fraction_numerical': 0.01827309236947791, 'mean_word_length': 6.2398255813953485, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 10, 'https://': 3, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '570087', 'license': 'MIT', 'n_tokens_mistral': 2140, 'n_tokens_neox': 2047, 'n_words': 396, 'path': 'EleicoesPresidenciais2018.ipynb', 'repo_name': 'robsonavr/python', 'size': '4997'}