Skip to content

Instantly share code, notes, and snippets.

@vhcandido
Created August 9, 2018 17:09
Show Gist options
  • Select an option

  • Save vhcandido/d3ae226a51b47d4cf714e4dd4caeb98e to your computer and use it in GitHub Desktop.

Select an option

Save vhcandido/d3ae226a51b47d4cf714e4dd4caeb98e to your computer and use it in GitHub Desktop.
Estimativa de tempo de TV (em um bloco de 12m30s) para cada candidato à Presidência do Brasil nas eleições de 2018.
#!/usr/env python3
# Formatted by Black: https://github.com/ambv/black
################################################################################
# PARTIDOS E REPRESENTAÇÃO NA CÂMARA
# http://www.camara.leg.br/Internet/Deputado/bancada.asp
partidos = 'PP PODE AVANTE PT MDB PSDB DEM PR PSD PTB PROS PSB PRB PDT SD PCDOB PSC PSL PPS PSOL PATRI PV PHS REDE PPL'
partidos = partidos.split()
n_deputados = '49 16 5 61 51 49 43 40 38 16 11 26 21 19 11 10 9 8 8 6 5 4 4 2 1'
n_deputados = [int(n) for n in n_deputados.split()]
# Mapeando cada partido ao número de deputados
bancada = dict(zip(partidos, n_deputados))
################################################################################
# CANDIDATOS E COLIGAÇÕES
# https://g1.globo.com/politica/eleicoes/2018/noticia/2018/08/06/eleicoes-2018-veja-como-estao-as-coligacoes-dos-candidatos-a-presidencia-da-republica.ghtml
candidatos = 'DIAS DACIOLO GOMES ALCKMIN BOULOS MEIRELLES BOLSONARO AMOEDO GOULART EYMAEL LULA MARINA VERA'
candidatos = candidatos.split()
coligacoes = 'PODE,PSC,PRP,PTC PATRI PDT,AVANTE PSDB,PP,PTB,PSD,SD,PRB,DEM,PPS,PR PSOL,PCB MDB,PHS PSL,PRTB NOVO PPL DC PT,PROS,PCDOB REDE,PV PSTU'
coligacoes = [col.split(',') for col in coligacoes.split()]
# Adicionando os partidos que não possuem deputados
for coligacao in coligacoes:
for partido in coligacao:
if not partido in partidos:
bancada[partido] = 0
# Mapeando cada candidato à sua coligação
cand_coligacao = dict(zip(candidatos, coligacoes))
# Filtrando os 6 maiores partidos de cada coligação
for candidato in cand_coligacao.keys():
cand_coligacao[candidato] = sorted(
cand_coligacao[candidato], key=bancada.__getitem__, reverse=True
)[:6]
# Somando os deputados dos partidos que participam da eleição (lançando ou apoiando um candidato)
n_deputados_eleicao = sum(
[bancada[partido] for coligacao in cand_coligacao.values() for partido in coligacao]
)
################################################################################
# TEMPO DE INSERÇÃO EM 12m30s
# https://www.huffpostbrasil.com/2018/07/20/entenda-como-e-feita-a-divisao-do-tempo-de-tv-no-horario-eleitoral_a_23485856/
tempo = {}
tempo['TOTAL'] = 12.5 * 60 # tempo total em segundos
tempo['RELATIVO'] = 0.9 * tempo['TOTAL'] # 90% do tempo total
tempo['IGUAL'] = 0.1 * tempo['TOTAL'] # 10% do tempo total
# Tempo mínimo, dividido igualmente entre todos os candidatos
tempo_minimo = tempo['IGUAL'] / len(candidatos)
print('Tempo mínimo para cada candidato: {:.2f}s\n'.format(tempo_minimo))
# Somando o tempo dos candidatos (tempo mínimo + tempo relativo ao tamanho da bancada)
tempo_candidato = {}
for candidato, coligacao in cand_coligacao.items():
n_deputados_coligacao = sum([bancada[partido] for partido in coligacao])
perc = n_deputados_coligacao / n_deputados_eleicao
tempo_candidato[candidato] = perc * tempo['RELATIVO'] + tempo_minimo
def format_segundos(seg):
minutos = seg // 60
segundos = seg - minutos * 60
return '{:02.0f}:{:02.0f}'.format(minutos, segundos)
# Visualização
for candidato in sorted(tempo_candidato, key=tempo_candidato.__getitem__, reverse=True):
print(
'{} ({}): {}'.format(
candidato,
', '.join(partido for partido in cand_coligacao[candidato]),
format_segundos(tempo_candidato[candidato]),
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment