import os #para carregar variaveis de ambiente
import geopy
import plotly.express as px
import numpy as np
import pandas as pd
import sqlalchemy as sqla
import nbconvert
from geopy.geocoders import Nominatim, GoogleV3
from plotly import graph_objects as go
from plotly.subplots import make_subplots
from datetime import datetime, timedelta
from dotenv import load_dotenv, find_dotenv
from IPython.display import display, HTML, clear_output, Image
import datetime as dt
import plotly.figure_factory as ff
# Processamento dos dados sps
query_sps_geral = pd.read_feather('./dados/sps_geral.feather')
#processo_bk
# converte: '2019-S1-B' em '2019-S1-A'
sps_geral_converte = query_sps_geral.apply(lambda row: row.replace('2019-S1-B','2019-S1-A'))
# converte: '2019-S1-C' em '2019-S1-A'
sps_geral_converte = sps_geral_converte.apply(lambda row: row.replace('2019-S1-C','2019-S1-A'))
# converte: '2020-S1' em '2020-S1-A'
sps_geral_converte = sps_geral_converte.apply(lambda row: row.replace('2020-S1','2020-S1-A'))
# define filtros de processo - 1° Semestre
# processos 2021 - v_processo_bk
processo_2021 = ['2021-S1-N','2021-S1-T','2021-M1']
# processos 2020 - v_processo_bk_a
processo_2020 = ['2020-S1-A','2020-S1-N','2020-S1-T','2020-M1','2020-M2']
# processos 2019 - v_processo_bk_b
processo_2019 = ['2019-S1-A','2019-S1-N','2019-M1','2019-M2']
# campus - v_campus_bk
campus = ['EC','SP','HT','EAD']
v_processo_bk_anterior = processo_2020
# inscricoes por ano | carrega historico
historico_inscricoes = pd.read_csv('historico.inscricoes.csv', sep=';')
# copia
sps_inscritos_ano = sps_geral_converte.copy()
# cria campo modalidade. Se campus_bk for EAD preenche modalidade com EAD se não preenche com PRESENCIAL
sps_inscritos_ano['modalidade'] = sps_inscritos_ano.apply(lambda row: 'EAD' if row['campus_bk'] == 'EAD' else 'PRESENCIAL', axis=1)
# agrupa ano e modalidade
sps_inscritos_ano = sps_inscritos_ano.groupby(by=['ano', 'modalidade'], as_index=False).sum()
# define inscritos e avaliados
inscritos_ano = sps_inscritos_ano.assign(
inscritos = sps_inscritos_ano.inscricao_paga
).assign(
avaliados = sps_inscritos_ano.candidato_aprovado + sps_inscritos_ano.candidato_excedente
)
# cria dataframe
inscritos_ano = pd.DataFrame(inscritos_ano)
# junta as bases (SPS + Historico de inscrições)
sps_geral_inscritos_ano = pd.concat([inscritos_ano, historico_inscricoes])
# altera o tipo do ano e modalidade
sps_geral_inscritos_ano['ano'] = pd.Categorical(sps_geral_inscritos_ano.ano)
sps_geral_inscritos_ano['modalidade'] = pd.Categorical(sps_geral_inscritos_ano.modalidade)
# # ordena coluna modalidade
sps_geral_inscritos_ano.sort_values(by=['modalidade'], inplace=True, ascending=False)
# plot
fig = px.bar(sps_geral_inscritos_ano,
x='ano', y='inscritos', color='modalidade', text='inscritos',
title='Inscrições por ano',
labels={'ano': 'Ano', 'inscritos': 'Inscritos','modalidade':'Modalidade'},height=650
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside')
# fig.update_traces(marker_color=sps_geral_inscritos_ano['colors'])
fig.show()
# seleciona os campus para uso e faz copia do banco
sps_primeiro_semestre = sps_geral_converte.copy()
# mutate(ano_processo=substr(processo_bk,1,4))%>%
sps_primeiro_semestre['ano_processo'] = sps_primeiro_semestre.apply(lambda row: row['processo_bk'][0:4], axis=1)
# filter(ano_processo != '2018') %>%
sps_primeiro_semestre = sps_primeiro_semestre[~sps_primeiro_semestre.ano_processo.isin(['2018'])]
# mutate(semestre=substr(processo_bk,6,7))%>%
sps_primeiro_semestre['semestre'] = sps_primeiro_semestre.apply(lambda row: row['processo_bk'][5:7], axis=1)
# filter(semestre %in% c('S1','M1','M2')) %>%
sps_primeiro_semestre = sps_primeiro_semestre[sps_primeiro_semestre.semestre.isin(['S1','M1','M2'])]
# mutate(modalidade=case_when(campus_bk == 'EAD' ~ 'EAD',
# TRUE ~ 'PRESENCIAL'))%>%
# OK cria campo modalidade. Se campus_bk for EAD preenche modalidade com EAD se não preenche com PRESENCIAL - não excluir
sps_primeiro_semestre['modalidade'] = sps_primeiro_semestre.apply(lambda row: 'EAD' if (row['campus_bk'] == 'EAD') else 'PRESENCIAL',axis=1)
# group_by(ano_processo,modalidade) %>%
sps_primeiro_semestre = sps_primeiro_semestre.groupby(by=['ano_processo', 'modalidade'], as_index=False).sum()
# summarise(inscritos=sum(inscricao_paga),avaliados=sum(candidato_aprovado)+sum(candidato_excedente))
sps_primeiro_semestre = sps_primeiro_semestre.assign(
inscritos = sps_primeiro_semestre.inscricao_paga
).assign(
avaliados = sps_primeiro_semestre.candidato_aprovado + sps_primeiro_semestre.candidato_excedente
)
# # cria dataframe
sps_semestre = pd.DataFrame(sps_primeiro_semestre)
# altera o tipo do ano_processo e modalidade
sps_semestre['ano_processo'] = pd.Categorical(sps_semestre.ano_processo)
sps_semestre['modalidade'] = pd.Categorical(sps_semestre.modalidade)
# # ordena coluna modalidade
sps_semestre.sort_values(by=['modalidade'], inplace=True, ascending=False)
#### plot
fig = px.bar(sps_semestre,
x='ano_processo',
y='inscritos',
title='Inscrições entrada primeiro semestre',
color='modalidade',
text='inscritos',
labels={
'ano_processo':'Ano',
'inscritos':'Inscritos',
'modalidade': 'Modalidades'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside')
fig.show()
# sps_semestre = sps_semestre[['ano', 'modalidade','inscritos','avaliados']].copy()
# sps_semestre
# sps_semestre.processo_bk.tolist()
# filter (processo_bk %in% v_processo_bk) %>%
sps_filter_ano = sps_geral_converte[sps_geral_converte.processo_bk.isin(processo_2021)]
# filter (campus_bk %in% v_campus_bk) %>%
sps_filter = sps_filter_ano[sps_geral_converte.campus_bk.isin(campus)]
# sps_filter = pd.concat([sps_filter_ano,sps_filter_campus], ignore_index=True)
# summarise
sps_filter = sps_filter.groupby('processo_bk', as_index=False).agg({
'inscricao_iniciada': 'sum',
'aguarda_pgto': 'sum',
'aguarda_confirmacao_pgto': 'sum',
'aguarda_prova': 'sum',
'aguarda_info_prova': 'sum',
'nao_compareceu': 'sum',
'aguarda_correcao_prova': 'sum',
'aguarda_conferencia_enem': 'sum',
'candidato_aprovado': 'sum',
'candidato_nao_aprovado': 'sum',
'inscricao_abandonada': 'sum',
'inscricao_cancelada': 'sum',
'candidato_matriculado': 'sum',
'candidato_excedente': 'sum',
'aguarda_resultado': 'sum',
'candidato_desclassificado': 'sum',
'candidato_pre_matriculado': 'sum',
'inscricao_paga': 'sum',
'inscricao_paga_enem': 'sum',
'candidato_presente': 'sum',
'candidato_ausente': 'sum',
'inscricao_pendente': 'sum',
'anjo': 'sum'
})#.sum()#.reset_index(name='counts')
sps_filter1 = sps_filter.sum().reset_index(name='counts')
# cria dataframe
sps_indicadores = sps_filter.copy()
# mutate(pre_inscritos=aguarda_pgto+aguarda_confirmacao_pgto+inscricao_paga)%>%
sps_indicadores['pre_inscritos'] = sps_indicadores.eval('aguarda_pgto + aguarda_confirmacao_pgto + inscricao_paga')
# mutate(iniciaram_inscricao=inscricao_iniciada+aguarda_pgto+aguarda_confirmacao_pgto+inscricao_paga)
sps_indicadores['iniciaram_inscricao'] = sps_indicadores.eval('inscricao_iniciada + aguarda_pgto + aguarda_confirmacao_pgto + inscricao_paga')
#select(iniciaram_inscricao,pre_inscritos,inscricao_paga,candidato_aprovado) %>%
sps_indicadores = sps_indicadores[['iniciaram_inscricao','pre_inscritos','inscricao_paga','candidato_aprovado']]
# rename(inscritos=inscricao_paga, avaliados=candidato_aprovado)
sps_indicadores = sps_indicadores.rename(columns={'inscricao_paga': 'inscritos','candidato_aprovado': 'avaliados'})
#
sps_indicadores = sps_indicadores.sum().reset_index(name='counts')
# renomeia colunas index e counts
sps_indicadores = sps_indicadores.rename(columns={'index': 'fases','counts': 'candidatos'})
# plot
fig = px.bar(sps_indicadores,
x='fases',
y='candidatos',
title='Principais Indicadores',
# color='processo_bk',
text='candidatos',
labels={
'fases':'Etapas',
'candidatos':'Inscrições'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside', marker_color='#053061')
# fig.update_xaxes(categoryorder='total descending')
fig.show()
# Inscrições por processo
inscritos_processo = sps_geral_converte.copy()
inscritos_processo = inscritos_processo[inscritos_processo.processo_bk.isin(processo_2021)]
inscritos_processo = inscritos_processo[inscritos_processo.campus_bk.isin(campus )]
inscritos_processo = inscritos_processo.groupby('processo_bk', as_index=False).agg({"inscricao_paga": "sum"})
fig = px.bar(inscritos_processo,
x='processo_bk',
y='inscricao_paga',
title='Inscrições por Processo',
color='processo_bk',
text='inscricao_paga',
labels={
'processo_bk':'Processo',
'inscricao_paga':'Inscrições'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside')
# fig.update_xaxes(categoryorder='total descending')
fig.show()
# i_campus
inscricoes_campus = sps_geral_converte.copy()
inscricoes_campus = inscricoes_campus[inscricoes_campus.processo_bk.isin(processo_2021)]
inscricoes_campus = inscricoes_campus[inscricoes_campus.campus_bk.isin(campus)]
inscricoes_campus = inscricoes_campus.groupby('campus_bk', as_index=False).agg({"inscricao_paga": "sum"})
c = {'EAD': 'A', 'EC': 'B', 'HT': 'C', 'SP': 'D'}
inscricoes_campus['campus_bk'] = inscricoes_campus['campus_bk'].map(c)
# Inscrições por campus
fig = px.bar(inscricoes_campus,
x='campus_bk',
y='inscricao_paga',
title='Inscrições por Campus',
color='campus_bk',
text='inscricao_paga',
labels={
'campus_bk':'Campus',
'inscricao_paga':'Inscrições'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside')
# fig.update_xaxes(categoryorder='total descending')
fig.show()
avaliados_campus = sps_geral_converte.copy()
avaliados_campus = avaliados_campus[avaliados_campus.processo_bk.isin(processo_2021)]
avaliados_campus = avaliados_campus[avaliados_campus.campus_bk.isin(campus)]
avaliados_campus = avaliados_campus.groupby('campus_bk', as_index=False).agg({
'candidato_aprovado': 'sum',
'candidato_excedente': 'sum',
})
c = {'EAD': 'A', 'EC': 'B', 'HT': 'C', 'SP': 'D'}
avaliados_campus['campus_bk'] = avaliados_campus['campus_bk'].map(c)
# Avaliados por campus
avaliados_campus = avaliados_campus.assign(
avaliados = avaliados_campus.candidato_aprovado + avaliados_campus.candidato_excedente
)
# plot
fig = px.bar(avaliados_campus,
x='campus_bk',
y='avaliados',
title='Avaliados por Campus',
color='campus_bk',
text='avaliados',
labels={
'campus_bk':'Campus',
'avaliados':'Avaliados'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside')
# fig.update_xaxes(categoryorder='total descending')
fig.show()
# avaliados_campus
taxa_conversao = sps_geral_converte.copy()
taxa_conversao = taxa_conversao[taxa_conversao.processo_bk.isin(processo_2021)]
taxa_conversao = taxa_conversao[taxa_conversao.campus_bk.isin(campus)]
taxa_conversao = taxa_conversao.groupby('campus_bk', as_index=False).agg({
'inscricao_paga': 'sum',
'candidato_aprovado': 'sum',
'candidato_excedente': 'sum',
})
c = {'EAD': 'A', 'EC': 'B', 'HT': 'C', 'SP': 'D'}
taxa_conversao['campus_bk'] = taxa_conversao['campus_bk'].map(c)
# Avaliados por campus
# summarise(inscritos=sum(inscricao_paga),avaliados=sum(candidato_aprovado)+sum(candidato_excedente))
taxa_conversao = taxa_conversao.assign(
tx_conversao = taxa_conversao.candidato_aprovado / taxa_conversao.inscricao_paga
)
# plot
fig = px.bar(taxa_conversao,
x='campus_bk',
y='tx_conversao',
title='Taxa de conversão por Campus',
color='campus_bk',
text='tx_conversao',
labels={
'campus_bk':'Campus',
'tx_conversao':'Taxa'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(texttemplate='%{text:,.0%}', textposition='outside')
fig.update_xaxes(categoryorder='total descending')
fig.show()
#
sps_filter1 = sps_filter1[sps_filter1['index'].isin(['inscricao_iniciada','aguarda_pgto', 'aguarda_confirmacao_pgto', 'aguarda_prova', 'aguarda_info_prova','nao_compareceu','aguarda_correcao_prova','aguarda_conferencia_enem','aguarda_resultado','candidato_aprovado','candidato_nao_aprovado','candidato_excedente','candidato_pre_matriculado','candidato_matriculado','inscricao_abandonada','candidato_desclassificado'])]
#
sps_filter1['total'] = sps_filter1.counts.cumsum()
#
sps_filter1 = sps_filter1.rename(columns={'index': 'etapas','counts': 'candidatos'})
# ordena as etapas
sps_filter1['etapas'] = pd.Categorical(sps_filter1['etapas'],categories=['inscricao_iniciada','aguarda_pgto', 'aguarda_confirmacao_pgto', 'aguarda_prova', 'aguarda_info_prova','nao_compareceu','aguarda_correcao_prova','aguarda_conferencia_enem','aguarda_resultado','candidato_aprovado','candidato_nao_aprovado','candidato_excedente','candidato_pre_matriculado','candidato_matriculado','inscricao_abandonada','candidato_desclassificado'],ordered=True)
sps_filter1 = sps_filter1.sort_values('etapas')
# sps_filter1 = sps_filter1.copy()
# Initialize a figure with ff.create_table(table_data)
fig = ff.create_table(sps_filter1)
# Make traces for graph
trace1 = go.Bar(x=sps_filter1.etapas, y=sps_filter1.candidatos, xaxis='x2', yaxis='y2',
marker=dict(color='#053061'),
name='',
text=sps_filter1.candidatos,
textposition='outside')
# Add trace data to figure
fig.add_traces([trace1])
# initialize xaxis2 and yaxis2
fig['layout']['xaxis2'] = {}
fig['layout']['yaxis2'] = {}
# Edit layout for subplots
fig.layout.yaxis.update({'domain': [0, .45]})
fig.layout.yaxis2.update({'domain': [.6, 1]})
# The graph's yaxis2 MUST BE anchored to the graph's xaxis2 and vice versa
fig.layout.yaxis2.update({'anchor': 'x2'})
fig.layout.xaxis2.update({'anchor': 'y2'})
fig.layout.yaxis2.update({'title': 'Candidatos'})
fig.layout.xaxis2.update({'title': 'Etapas'})
# Update the margins to add a title and see graph x-labels.
fig.layout.margin.update({'t':75, 'l':50})
fig.layout.update({'title': 'Candidatos por Etapas'})
# Update the height because adding a graph vertically will interact with
# the plot height calculated for the table
fig.layout.update({'height':800})
# Plot!
fig.show()
######### Inscritos 1 - 2021
inscritos1 = sps_geral_converte.copy()
# filter (processo_bk %in% v_processo_bk) %>%
inscritos1 = inscritos1[inscritos1.processo_bk.isin(processo_2021)]
# filter (campus_bk %in% v_campus_bk) %>%
inscritos1 = inscritos1[inscritos1.campus_bk.isin(campus)]
# mutate(ano_processo=substr(processo_bk,1,4)) %>%
inscritos1['ano_processo'] = inscritos1.apply(lambda row: row['processo_bk'][0:4], axis=1)
# mutate(ano_grafico=ano)%>%
inscritos1 = inscritos1.assign(ano_grafico = inscritos1.ano)
# group_by(dia, mes, ano, ano_processo,ano_grafico) %>%
inscritos1 = inscritos1.groupby(by=['dia', 'mes', 'ano', 'ano_processo', 'ano_grafico'], as_index=False).sum()
# summarise(inscritos=sum(inscricao_paga), presentes=sum(candidato_presente)) %>%
inscritos1 = inscritos1.assign(inscritos = inscritos1.inscricao_paga).assign(presentes = inscritos1.candidato_presente)
# arrange(ano, mes,dia) %>%
inscritos1.sort_values(by=['ano','mes','dia'], inplace=True)
# ungroup %>%
inscritos1.reset_index(inplace=True, drop=True)
# mutate(inscritos.a=cumsum(inscritos),presentes.a=cumsum(presentes)) %>%
inscritos1['inscritos.a'] = inscritos1['inscritos'].cumsum()
inscritos1['presentes.a'] = inscritos1['presentes'].cumsum()
######### Inscritos 2 - 2020
inscritos2 = sps_geral_converte.copy()
# filter (processo_bk %in% v_processo_bk_anterior) %>%
inscritos2 = inscritos2[inscritos2.processo_bk.isin(v_processo_bk_anterior)]
# filter (campus_bk %in% v_campus_bk) %>%
inscritos2 = inscritos2[inscritos2.campus_bk.isin(campus)]
# mutate(ano_processo=substr(processo_bk,1,4)) %>%
inscritos2['ano_processo'] = inscritos2.apply(lambda row: row['processo_bk'][0:4], axis=1)
# mutate(ano_grafico=ano)%>%
inscritos2 = inscritos2.assign(ano_grafico = inscritos2.ano + 1)
# group_by(dia, mes, ano, ano_processo,ano_grafico) %>%
inscritos2 = inscritos2.groupby(by=['dia', 'mes', 'ano', 'ano_processo', 'ano_grafico'], as_index=False).sum()
# summarise(inscritos=sum(inscricao_paga), presentes=sum(candidato_presente)) %>%
inscritos2 = inscritos2.assign(inscritos = inscritos2.inscricao_paga).assign(presentes = inscritos2.candidato_presente)
# arrange(ano, mes,dia) %>%
inscritos2.sort_values(by=['ano','mes','dia'], inplace=True)
# ungroup %>%
inscritos2.reset_index(inplace=True, drop=True)
# mutate(inscritos.a=cumsum(inscritos),presentes.a=cumsum(presentes)) %>%
inscritos2['inscritos.a'] = inscritos2['inscritos'].cumsum()
inscritos2['presentes.a'] = inscritos2['presentes'].cumsum()
######### Inscritos 3b - 2019
inscritos3b = sps_geral_converte.copy()
# filter (processo_bk %in% v_processo_bk_b) %>%
inscritos3b = inscritos3b[inscritos3b.processo_bk.isin(processo_2019)]
# filter (campus_bk %in% v_campus_bk) %>%
inscritos3b = inscritos3b[inscritos3b.campus_bk.isin(campus)]
# mutate(ano_processo=substr(processo_bk,1,4)) %>%
inscritos3b['ano_processo'] = inscritos3b.apply(lambda row: row['processo_bk'][0:4], axis=1)
# mutate(ano_grafico=ano+2)%>%
inscritos3b = inscritos3b.assign(ano_grafico = inscritos3b.ano + 2)
# group_by(dia, mes, ano, ano_processo,ano_grafico) %>%
inscritos3b = inscritos3b.groupby(by=['dia', 'mes', 'ano', 'ano_processo', 'ano_grafico'], as_index=False).sum()
# summarise(inscritos=sum(inscricao_paga), presentes=sum(candidato_presente)) %>%
inscritos3b = inscritos3b.assign(inscritos = inscritos3b.inscricao_paga).assign(presentes = inscritos3b.candidato_presente)
# arrange(ano, mes,dia) %>%
inscritos3b.sort_values(by=['ano','mes','dia'], inplace=True)
# ungroup %>%
inscritos3b.reset_index(inplace=True, drop=True)
# mutate(inscritos.a=cumsum(inscritos),presentes.a=cumsum(presentes)) %>%
inscritos3b['inscritos.a'] = inscritos3b['inscritos'].cumsum()
inscritos3b['presentes.a'] = inscritos3b['presentes'].cumsum()
# i3 <- rbind(i1,i2,i3b) 2019,2020,2021
i3 = pd.concat([inscritos1,inscritos2,inscritos3b])
# i3 <- i3 %>%
i3 = i3.copy()
# select(dia,mes,ano,ano_processo,ano_grafico, inscritos,presentes,inscritos.a,presentes.a)%>%
i3 = i3[['dia','mes','ano','ano_processo','ano_grafico','inscritos','presentes','inscritos.a','presentes.a']]
# mutate(dia.mes=as.factor(paste(dia,"-",mes))) %>%
i3['dia_mes'] = i3[['dia','mes']].apply(lambda row: '{}-{}'.format(row[0],row[1]), axis=1)
# i3['dia_mes'] = i3['dia'].astype(str) + '-' + i3['mes'].astype(str)
# mutate(ano=as.factor(ano))%>%
i3['ano'] = pd.Categorical(i3.ano)
# mutate(ano_processo=as.factor(ano_processo))%>%
i3['ano_processo'] = pd.Categorical(i3.ano_processo)
# mutate(ano_grafico=as.factor(ano_grafico))
i3['ano_grafico'] = pd.Categorical(i3.ano_grafico)
#seq <- i3%>%
seq = i3.copy()
# select(dia_mes,mes,dia,ano_grafico) %>%
seq = seq[['dia_mes','mes','dia','ano_grafico']]
# # group_by(dia_mes,ano_grafico,mes,dia) %>%
seq = seq.groupby(['dia_mes', 'ano_grafico', 'mes', 'dia'], as_index=False).sum()
# seq = seq.groupby('dia_mes', as_index=False)['mes', 'dia','ano_grafico'].sum()
# Processamento para gráfico de evolução das inscrições
inscritos_por_dia_sps = pd.read_feather('./dados/inscritos_por_dia_sps_geral.feather')
avaliados_por_dia_sps = pd.read_feather('./dados/avaliados_por_dia_sps_geral.feather')
#junta as listas de inscritos e avaliados
inscritos_e_matriculados_por_dia = inscritos_por_dia_sps.merge(avaliados_por_dia_sps, how='outer', on=['data_conversao', 'group_processo', 'processo', 'data_abertura_processo'])
#preenche com zero os campos nulos
inscritos_e_matriculados_por_dia = inscritos_e_matriculados_por_dia.fillna(0)
#função retorna uma série com todos os dias entre duas datas
def get_date_range(start_date, end_date):
df_todas_datas = pd.Index([pd.Timestamp(start_date), pd.Timestamp(end_date)])
df_todas_datas = pd.Series([0, 0], df_todas_datas)
return df_todas_datas.asfreq('D').keys()
#agrupa inscritos e matriculados em grupos por processo
agrupado_por_processo = inscritos_e_matriculados_por_dia[inscritos_e_matriculados_por_dia['group_processo'].isin(['2021-S1','2021-M1','2020-S1','2020-M1','2020-M2','2019-S1','2019-M1','2019-M2'])]
agrupado_por_processo['ano_processo'] = agrupado_por_processo.apply(lambda row: row['group_processo'][0:4], axis=1)
inscritos_avaliados_sum = agrupado_por_processo.copy()
agrupado_por_processo = agrupado_por_processo.groupby('ano_processo')
inscritos_e_matriculados_por_dia = pd.DataFrame()
#laço utilizado para preencher todos os dias do histórico do processo
for processo in agrupado_por_processo.groups.keys() :
df_processo = agrupado_por_processo.get_group(processo)
#ordena e pega data da primeira inscrição
data_primeira_inscricao = df_processo[df_processo['inscritos'] > 0]
data_primeira_inscricao = data_primeira_inscricao.sort_values(by=['data_conversao'], ascending=True)
data_primeira_inscricao = data_primeira_inscricao.iloc[0]['data_conversao']
df_processo.loc[:, ('data_primeira_inscricao')] = data_primeira_inscricao
del data_primeira_inscricao
#ordena por data de conversao
df_processo = df_processo.sort_values(by=['data_conversao'], ascending=True)
start_date = df_processo.iloc[0]['data_conversao']
end_date = df_processo.iloc[-1]['data_conversao']
#cria o dataframe com o range de datas e mescla com o dataframe do processo
df_todas_datas = pd.DataFrame({'data_conversao': get_date_range(start_date, end_date)})
df_processo['data_conversao'] = pd.to_datetime(df_processo['data_conversao'], format='%Y-%m-%d')
df_processo = df_processo.merge(df_todas_datas, how='outer', on=['data_conversao'])
#preenche com zero os nulos das colunas inscritos e matriculados
df_processo[['inscritos', 'avaliados']] = df_processo[['inscritos', 'avaliados']].fillna(value=0)
#ordena por data de conversao
df_processo = df_processo.sort_values(by=['data_conversao'], ascending=True)
#transforma valor diário em valor acumulativo com dias anteriores
df_processo = df_processo.groupby(['ano_processo', 'data_conversao', 'data_abertura_processo', 'data_primeira_inscricao']).sum().groupby('ano_processo').cumsum().reset_index()
#preenche os nulos com a informação da linha acima
df_processo = df_processo.fillna(method='ffill')
#concatena dateframe geral com df do processo já com todas as datas
inscritos_e_matriculados_por_dia = pd.concat([inscritos_e_matriculados_por_dia, df_processo], ignore_index=True, sort=False)
#função que calcula diferença em dias entre duas datas
def get_diff_days(start_date_str, end_date_str) :
date_format = "%Y-%m-%d"
start_date = start_date_str if isinstance(start_date_str, datetime) else datetime.strptime(str(start_date_str), date_format)
end_date = end_date_str if isinstance(end_date_str, datetime) else datetime.strptime(str(end_date_str), date_format)
delta = start_date - end_date
return delta.days
#ordena por processo e data de conversao
inscritos_e_matriculados_por_dia = inscritos_e_matriculados_por_dia.sort_values(by=['ano_processo', 'data_conversao'], ascending=True)
#calcula coluna dias_apos_abertura
inscritos_e_matriculados_por_dia['dias_apos_abertura'] = inscritos_e_matriculados_por_dia.apply(lambda row: get_diff_days(row['data_conversao'], row['data_abertura_processo']), axis=1)
inscritos_e_matriculados_por_dia['dias_apos_abertura'] = inscritos_e_matriculados_por_dia.apply(lambda row: 0 if row['dias_apos_abertura'] < 0 else row['dias_apos_abertura'], axis=1)
#calcula coluna dias_apos_primeira_inscricao
inscritos_e_matriculados_por_dia['dias_apos_primeira_inscricao'] = inscritos_e_matriculados_por_dia.apply(lambda row: get_diff_days(row['data_conversao'], row['data_primeira_inscricao']), axis=1)
inscritos_e_matriculados_por_dia['dias_apos_primeira_inscricao'] = inscritos_e_matriculados_por_dia.apply(lambda row: 0 if row['dias_apos_primeira_inscricao'] < 0 else row['dias_apos_primeira_inscricao'], axis=1)
#ordena lista por processo e contagem de dias apos abertura
inscritos_e_matriculados_por_dia = inscritos_e_matriculados_por_dia.sort_values(by=['ano_processo', 'dias_apos_abertura'], ascending=True)
#Ajusta coluna conversao
def ajuste(dia,mes):
if mes < 6:
return dt.date(2000,mes,dia)
else:
return dt.date(1999,mes,dia)
i = inscritos_e_matriculados_por_dia.copy()
# i = i[i['matriculados'] > 0]
i['mes']=pd.DatetimeIndex(i['data_conversao']).month
i['dia']=pd.DatetimeIndex(i['data_conversao']).day
i['dia_e_mes_plot'] = i.apply(lambda row: ajuste(row['dia'],row['mes']), axis=1)
i = i.sort_values(by=['ano_processo', 'dias_apos_abertura'], ascending=True)
i.sort_values(by=['data_conversao'],ascending=True,inplace=True)
i.reset_index(inplace=True, drop=True)
# remove linha infinita de inscritos pós fechamento de processo
inscritos_e_matriculados_1 = i[i['dias_apos_abertura'] < 200]
fig = px.line(inscritos_e_matriculados_1,
x='dia_e_mes_plot',
y='inscritos',
color='ano_processo',
labels={
'dia_e_mes_plot': 'Data da conversão',
'inscritos': 'Inscritos',
'ano_processo': 'Ano Processo'
}
)
# cria o traço no dia 15/03 (final previsto do processo 2021-S1)
# data_final_processo_2021_S1 = pd.to_datetime('2000-03-15')
# fig.add_shape(type="line",
# x0=data_final_processo_2021_S1, y0=0, x1=data_final_processo_2021_S1, y1=200,
# line=dict(
# color="Grey", width=3, dash="dot"
# )
# )
# fig.add_annotation(
# x=(data_final_processo_2021_S1 - timedelta(days=2)), y=170,
# text='Final previsto do processo 2021-S1', showarrow=True, arrowhead=1
# )
fig.add_annotation(
text="Fonte: Sistema de Processo Seletivo Próprio", xref="paper", yref="paper", x=1, y=1.06,
showarrow=False
)
fig.update_xaxes(
tickformat="%d/%b"
)
fig.update_layout(
title_text="Evolução Comparativa de Inscritos",
)
fig.show()
#
inscritos_avaliados_sum = inscritos_avaliados_sum.groupby(by=['ano_processo'], as_index=False).sum()
inscritos_avaliados_sum
# usado nas células seguintes
# # inscritos <- i3
inscritos_e_matriculados_1 = inscritos_e_matriculados_1.copy()
# ultimo_registro <- tail(i1,n=1)
ultimo_registro = inscritos_e_matriculados_1.tail(1)
# prepara dados
# dia_ref <- ultimo_registro$dia
dia_ref = ultimo_registro.dia
# mes_ref <- ultimo_registro$mes
mes_ref = ultimo_registro.mes
titulo = ultimo_registro[['dia','mes']].apply(lambda row: '{}/{}'.format(row[0],row[1]), axis=1).iloc[0]
# plot
fig = px.bar(inscritos_avaliados_sum,
x='ano_processo',
y='inscritos',
title='Comparativo de inscritos até dia: '+ titulo,
color='ano_processo',
text='inscritos',
labels={
'ano_processo':'Ano',
'inscritos':'Inscritos'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside')
# fig.update_xaxes(categoryorder='total descending')
fig.show()
# plot
fig = px.line(inscritos_e_matriculados_1,
x='dia_e_mes_plot',
y='avaliados',
color='ano_processo',
labels={
'dia_e_mes_plot': 'Data da conversão',
'avaliados': 'Avaliados',
'ano_processo': 'Ano Processo'
}
)
# cria o traço no dia 15/03 (final previsto do processo 2021-S1)
# data_final_processo_2021_S1 = pd.to_datetime('2000-03-15')
# fig.add_shape(type="line",
# x0=data_final_processo_2021_S1, y0=0, x1=data_final_processo_2021_S1, y1=200,
# line=dict(
# color="Grey", width=3, dash="dot"
# )
# )
# fig.add_annotation(
# x=(data_final_processo_2021_S1 - timedelta(days=2)), y=170,
# text='Final previsto do processo 2021-S1', showarrow=True, arrowhead=1
# )
fig.add_annotation(
text="Fonte: Sistema de Processo Seletivo Próprio", xref="paper", yref="paper", x=1, y=1.06,
showarrow=False
)
fig.update_xaxes(
tickformat="%d/%b"
)
fig.update_layout(
title_text="Evolução Comparativa de Avaliados",
)
fig.show()
# plot
fig = px.bar(inscritos_avaliados_sum,
x='ano_processo',
y='avaliados',
title='Comparativo de Avaliados até dia: '+ titulo,
color='ano_processo',
text='avaliados',
labels={
'ano_processo':'Ano',
'avaliados':'Avaliados'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside')
# fig.update_xaxes(categoryorder='total descending')
fig.show()
# # prepara dados para comparativo de avaliados dia a dia
########### kpi1 <- sps %>%
inscritos2021 = sps_geral_converte.copy()
# filter (processo_bk %in% v_processo_bk) %>%
inscritos2021 = inscritos2021[inscritos2021.processo_bk.isin(processo_2021)]
# filter (campus_bk %in% v_campus_bk) %>%
inscritos2021 = inscritos2021[inscritos2021.campus_bk.isin(campus)]
# mutate(ano_processo=substr(processo_bk,1,4))%>%
inscritos2021['ano_processo'] = inscritos2021.apply(lambda row: row['processo_bk'][0:4], axis=1)
# group_by(ano_processo) %>%
inscritos2021 = inscritos2021.groupby('ano_processo', as_index=False).agg({
'inscricao_paga': 'sum',
'candidato_aprovado': 'sum',
'candidato_excedente': 'sum',
})
# summarise(inscritos=sum(inscricao_paga),avaliados=sum(candidato_aprovado)+sum(candidato_excedente))
inscritos2021 = inscritos2021.assign(
inscritos = inscritos2021.inscricao_paga
).assign(
avaliados = inscritos2021.candidato_aprovado + inscritos2021.candidato_excedente
)
########### kpi2 <- sps %>%
inscritos2020 = sps_geral_converte.copy()
# filter (processo_bk %in% v_processo_bk_a) %>%
inscritos2020 = inscritos2020[inscritos2020.processo_bk.isin(processo_2020)]
# filter (campus_bk %in% v_campus_bk) %>%
inscritos2020 = inscritos2020[inscritos2020.campus_bk.isin(campus)]
# mutate(ano_processo=substr(processo_bk,1,4))%>%
inscritos2020['ano_processo'] = inscritos2020.apply(lambda row: row['processo_bk'][0:4], axis=1)
# group_by(ano_processo) %>%
inscritos2020 = inscritos2020.groupby('ano_processo', as_index=False).agg({
'inscricao_paga': 'sum',
'candidato_aprovado': 'sum',
'candidato_excedente': 'sum',
})
# summarise(inscritos=sum(inscricao_paga),avaliados=sum(candidato_aprovado)+sum(candidato_excedente))
inscritos2020 = inscritos2020.assign(
inscritos = inscritos2020.inscricao_paga
).assign(
avaliados = inscritos2020.candidato_aprovado + inscritos2020.candidato_excedente
)
########### kpi2b <- sps %>%
inscritos2019 = sps_geral_converte.copy()
# filter (processo_bk %in% v_processo_bk_b) %>%
inscritos2019 = inscritos2019[inscritos2019.processo_bk.isin(processo_2019)]
# filter (campus_bk %in% v_campus_bk) %>%
inscritos2019 = inscritos2019[inscritos2019.campus_bk.isin(campus)]
# mutate(ano_processo=substr(processo_bk,1,4))%>%
inscritos2019['ano_processo'] = inscritos2019.apply(lambda row: row['processo_bk'][0:4], axis=1)
# group_by(ano_processo) %>%
inscritos2019 = inscritos2019.groupby('ano_processo', as_index=False).agg({
'inscricao_paga': 'sum',
'candidato_aprovado': 'sum',
'candidato_excedente': 'sum',
})
# summarise(inscritos=sum(inscricao_paga),avaliados=sum(candidato_aprovado)+sum(candidato_excedente))
inscritos2019 = inscritos2019.assign(
inscritos = inscritos2019.inscricao_paga
).assign(
avaliados = inscritos2019.candidato_aprovado + inscritos2019.candidato_excedente
)
########### kpi3 <- rbind(kpi1,kpi2,kpi2b)
inscritos_2019_2020_2021 = pd.concat([inscritos2019,inscritos2020,inscritos2021])
########### kpi3 <- kpi3 %>%
inscritos_2019_2020_2021 = inscritos_2019_2020_2021.copy()
# mutate(tx.conversao=avaliados/inscritos) %>%
inscritos_2019_2020_2021['tx.conversao'] = inscritos_2019_2020_2021.avaliados/inscritos_2019_2020_2021.inscritos
# mutate(tx.conversao=round(tx.conversao,2))
# plot
fig = px.bar(inscritos_2019_2020_2021,
x='ano_processo',
y='tx.conversao',
title='Taxa de conversão por Processo ',
color='ano_processo',
text='tx.conversao',
labels={
'ano_processo':'Ano',
'tx.conversao':'tx.conversao'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside')
# fig.update_xaxes(categoryorder='total descending')
fig.update_traces(texttemplate='%{text:,.0%}', textposition='outside')
fig.show()
# inscritos_2019_2020_2021
# copia dataframe
sps_cursos = sps_geral_converte.copy()
# busca os processos de 2021
sps_cursos = sps_cursos[sps_cursos.processo_bk.isin(processo_2021)]
# compara os campus
sps_cursos = sps_cursos[sps_cursos.campus_bk.isin(campus)]
# agrupa por curso, campus e turno. Somando as inscrições pagas e exibindo o numero de vagas de cada curso
sps_cursos = sps_cursos.groupby(['curso','campus_bk','turno'], as_index=False).agg({"inscricao_paga": "sum", "vagas": "max"})
# cria coluna relação
sps_cursos = sps_cursos.assign(relacao = round(sps_cursos.inscricao_paga / sps_cursos.vagas, 2))
# ordena coluna relação em ordem crescente
sps_cursos.sort_values(by=['relacao'], inplace=True, ascending=False)
# renomeia as colunas campus_bk e inscricoes_paga
sps_cursos = sps_cursos.rename(columns={'campus_bk': 'campus','inscricao_paga': 'inscricoes','curso': 'cursos',})
# sps_cursos.cursos.tolist()
# carrega dicionário para converter nome no siga para bk_curso_geral do sps
cast_cursos = pd.read_csv('./cast_cursos_siga.csv')
cast_cursos.set_index('nome_siga', inplace=True)
cast_cursos = cast_cursos.to_dict()
# converte nome no siga para bk_curso_geral do sps
sps_cursos.loc[:, 'bk_curso_geral'] = sps_cursos.apply(lambda row: cast_cursos['bk_curso_geral'][row['cursos']], axis=1)
# junta as bases de inscrição e matrícula
sps_cursos = sps_cursos.merge(sps_cursos, how='left', on=['bk_curso_geral', 'cursos', 'campus', 'turno', 'inscricoes', 'vagas', 'relacao'])
sps_cursos1 = sps_cursos.groupby(['bk_curso_geral'], as_index=False).sum()
fig = px.bar(sps_cursos1,
x='bk_curso_geral',
y='inscricoes',
title='Inscrições por Curso',
color='relacao',
# color_continuous_scale='cividis',
text='inscricoes',
labels={
'bk_curso_geral':'Cursos',
'inscricoes':'Inscrições'
},
height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='outside')
fig.update_xaxes(categoryorder='total descending')
fig.show()
# df = px.data.tips()
fig = px.treemap(sps_cursos,
path=['bk_curso_geral'],
values='inscricoes',
color='relacao',
color_continuous_scale='RdBu',
height=650,
title="Inscrições por Curso",
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.data[0].textinfo = 'label+text+value'
fig.show()
# df
sps_cursos
c = {'EAD': 'A', 'EC': 'B', 'HT': 'C', 'SP': 'D'}
sps_cursos['campus'] = sps_cursos['campus'].map(c)
fig = px.treemap(sps_cursos,
path=['bk_curso_geral','campus'],
# labels = 'bk_curso_geral',
values='inscricoes',
color='relacao',
color_continuous_scale='RdBu',
height=650,
title="Inscrições por Curso e Campus",
# names = {'relacao': 'Relação'}
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.data[0].textinfo = 'label+text+value'
fig.show()
# monta endereço
def monta_endereco_completo(row):
if(row['país'] == 'Brasil'):
return str(row['cidade']) + ', ' + str(row['estado']) + ', ' + str(row['país'])
else:
return str(row['país'])
# cria coluna 'endereco_completo'
sps_geral_converte['endereco_completo'] = sps_geral_converte.apply(lambda row: monta_endereco_completo(row), axis=1)
# carrega endereços
todos_enderecos = pd.read_csv('todos_enderecos.csv')
# limpa os duplicados
todos_enderecos = todos_enderecos[['endereco_completo','latitude','longitude']].drop_duplicates()
# junta os dados da query com os da planilha 'todos_endereços'
sps_geral_converte = pd.merge(sps_geral_converte,todos_enderecos,left_on='endereco_completo',right_on='endereco_completo',how='inner')
# Inscrições por paises
inscritos_paises = sps_geral_converte.copy()
# busca por processo 2021
inscritos_paises = inscritos_paises[inscritos_paises.processo_bk.isin(processo_2021)]
# busca paises diferente de Brasil e que não são nan
inscritos_paises = inscritos_paises[(inscritos_paises.país.isin(['Brasil']) == False) & (~inscritos_paises.país.isna())]
# busca campus
inscritos_paises = inscritos_paises[inscritos_paises.campus_bk.isin(campus)]
# agrupa por país. Somando as inscrições pagas
inscritos_paises = inscritos_paises.groupby(['país','latitude','longitude'], as_index=False).agg({"inscricao_paga": "sum"})
# busca por inscricao_paga maior que 0
inscritos_paises = inscritos_paises[inscritos_paises.inscricao_paga > 0]
# ordena coluna inscricao_paga em ordem crescente
inscritos_paises.sort_values(by=['inscricao_paga'], inplace=True, ascending=False)
# renomeia as colunas inscricoes_paga
inscritos_paises = inscritos_paises.rename(columns={'inscricao_paga': 'inscricoes'})
# g_pais=as.data.frame(g_pais)
inscritos_paises = pd.DataFrame(inscritos_paises)
# inscritos_paises
#
fig = go.Figure(data=go.Choropleth(
locations=inscritos_paises['país'], # Spatial coordinates
z = inscritos_paises['inscricoes'], # Data to be color-coded
locationmode = 'country names', # set of locations match entries in `locations`
colorscale = 'bluered',
colorbar_title = "Inscrições",
))
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.update_layout(
title_text = 'Inscrições por País',
geo_scope='world',
)
fig.show()
fig = px.treemap(inscritos_paises,
path=['país'],
values='inscricoes',
color='inscricoes',
color_continuous_scale='RdBu',
height=600,
title="Inscrições por País",
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.data[0].textinfo = 'label+text+value'
fig.show()
inscritos_paises = inscritos_paises[['país','inscricoes']].copy()
# Initialize a figure with ff.create_table(table_data)
fig = ff.create_table(inscritos_paises)
fig.show()
# Inscrições por Estados
inscritos_estados = sps_geral_converte.copy()
# busca por processo 2021
inscritos_estados = inscritos_estados[inscritos_estados.processo_bk.isin(processo_2021)]
# busca estados do Brasil e que não são nan
inscritos_estados = inscritos_estados[(inscritos_estados.país.isin(['Brasil']) == True) & (~inscritos_estados.estado.isna())]
# busca campus
inscritos_estados = inscritos_estados[inscritos_estados.campus_bk.isin(campus)]
# agrupa por estado. Somando as inscrições pagas
inscritos_estados = inscritos_estados.groupby(['estado'], as_index=False).agg({"inscricao_paga": "sum"})
# busca por inscricao_paga maior que 0
inscritos_estados = inscritos_estados[inscritos_estados.inscricao_paga > 0]
# ordena coluna inscricao_paga em ordem crescente
inscritos_estados.sort_values(by=['inscricao_paga'], inplace=True, ascending=False)
# renomeia as colunas inscricoes_paga
inscritos_estados = inscritos_estados.rename(columns={'inscricao_paga': 'inscricoes'})
# g_estado=as.data.frame(g_estado)
inscritos_estados = pd.DataFrame(inscritos_estados)
# carrega endereços
coordenadas_estados = pd.read_csv('coordenadas_estados.csv')
# limpa os duplicados
coordenadas_estados = coordenadas_estados[['uf','estado','latitude','longitude']].drop_duplicates()
# junta os dados da query com os da planilha 'todos_endereços'
inscritos_estados = pd.merge(inscritos_estados,coordenadas_estados,left_on='estado',right_on='estado',how='inner')
# inscritos_estados
fig = px.scatter_mapbox(inscritos_estados,
lat='latitude',
lon='longitude',
hover_name='estado',
hover_data=['inscricoes'],
zoom=3,
height=600,
size='inscricoes',
color='estado'
)
# fig.add_annotation(
# xref='paper', yref='paper', x=1, y=1.06, text='Fonte: SPS',
# showarrow=False, arrowhead=1
# )
fig.update_layout(mapbox_style='carto-positron')
fig.update_layout(margin={'r':0, 't':0, 'l':0, 'b':0})
fig.show()
inscritos_estados = inscritos_estados[['estado','inscricoes']].copy()
# Initialize a figure with ff.create_table(table_data)
fig = ff.create_table(inscritos_estados)
# Plot!
fig.show()
# Inscrições por cidades
inscritos_cidades = sps_geral_converte.copy()
# busca por processo 2021
inscritos_cidades = inscritos_cidades[inscritos_cidades.processo_bk.isin(processo_2021)]
# busca cidades que não são nan
# inscritos_cidades = inscritos_cidades[(inscritos_cidades.país.isin(['Brasil']) == True) & (~inscritos_cidades.cidade.isna())]
inscritos_cidades = inscritos_cidades[~inscritos_cidades.cidade.isna()]
# busca campus
inscritos_cidades = inscritos_cidades[inscritos_cidades.campus_bk.isin(campus)]
# agrupa por cidades. Somando as inscrições pagas
inscritos_cidades = inscritos_cidades.groupby(['cidade','estado','endereco_completo','latitude','longitude'], as_index=False).agg({"inscricao_paga": "sum"})
# busca por inscricao_paga maior que 0
inscritos_cidades = inscritos_cidades[inscritos_cidades.inscricao_paga > 0]
# ordena coluna inscricao_paga em ordem crescente
inscritos_cidades.sort_values(by=['inscricao_paga'], inplace=True, ascending=False)
# renomeia as colunas inscricoes_paga
inscritos_cidades = inscritos_cidades.rename(columns={'inscricao_paga': 'inscricoes'})
# g_estado=as.data.frame(g_estado)
inscritos_cidades = pd.DataFrame(inscritos_cidades)
fig = px.treemap(inscritos_cidades,
path=['estado','cidade'],
values='inscricoes',
color='inscricoes',
color_continuous_scale='RdBu',
height=700,
title="Inscrições por Cidade",
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.data[0].textinfo = 'label+text+value'
fig.show()
inscritos_cidades = inscritos_cidades[['cidade','inscricoes']].copy().head(20)
# Initialize a figure with ff.create_table(table_data)
fig = ff.create_table(inscritos_cidades)
# Plot!
fig.show()
inscritos_outras_cidades = inscritos_cidades[(inscritos_cidades.cidade.isin(['Engenheiro Coelho','Hortolândia','São Paulo']) == False)]
inscritos_outras_cidades
fig = px.treemap(inscritos_outras_cidades,
path=['cidade'],
values='inscricoes',
color='inscricoes',
color_continuous_scale='RdBu',
height=700,
title="Inscrições por outros municipios além das sedes",
)
fig.add_annotation(
xref='paper', yref='paper', x=1, y=1.06, text='Fonte: Sistema de Processo Seletivo Próprio',
showarrow=False, arrowhead=1
)
fig.data[0].textinfo = 'label+text+value'
fig.show()