Created
August 9, 2018 17:09
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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