#Filtro:
opcoes_cidade = 'Cuiabá'
mostrar_graficos_em_png = True
import pandas as pd
import numpy as np
import glob
import os
import plotly.express as px
import plotly.graph_objects as go
import plotly.figure_factory as ff
import geopy
from geopy.geocoders import Nominatim
from IPython.display import clear_output, Image, Markdown as md
# caso true, gera os gráficos em formato png
try: mostrar_graficos_em_png
except NameError: mostrar_graficos_em_png = False
# Carrega arquivo .feather GEO
geo_polos = pd.read_feather('./dados/geo_polos.feather')
geo_polos = geo_polos.drop(columns=['index'])
# Carrega arquivo .feather MENSALIDADES
polos_mensalidades = pd.read_feather('./dados/mensalidades_polos.feather')
polos_mensalidades = polos_mensalidades.drop(columns=['index'])
# funcção para adicionar casas decimais
def real(valor):
a = "{:,.0f}".format(float(valor))
b = a.replace(',','v')
c = b.replace('.',',')
return c.replace('v','.')
#Lista de Cidades
lista_cidades = ['ALTAMIRA','AMERICANA','ANÁPOLIS','ARAQUARI','BELO HORIZONTE','BELÉM','BENEVIDES','BRASÍLIA''CAMPINAS','CAMPO GRANDE''CARAGUATATUBA''CARUARU','CASCAVEL''CODÓ','COLATINA','CUIABÁ','CURITIBA','DIADEMA','DUQUE DE CAXIAS','ENGENHEIRO COELHO''FLORIANÓPOLIS','FORTALEZA','GOIÂNIA''GRAVATAÍ','GUARULHOS','HORTOLÂNDIA','IMPERATRIZ','ITABORAÍ''ITARARÉ','JACAREÍ','JI-PARANÁ''JOINVILLE','JUIZ DE FORA','JUNDIAÍ','LAVRAS''LIMEIRA','MACAPÁ','MACEIÓ','MANAUS','MARABÁ','MOGI GUAÇU','OSASCO''PALMAS''PARAUAPEBAS','PAULÍNIA','PORTO VELHO','PRESIDENTE PRUDENTE','RECIFE','REGISTRO','RIO BRANCO''RIO CLARO','RIO DE JANEIRO','SAIRÉ','SALVADOR''SANTARÉM','SANTOS','SOROCABA''SÃO JOSÉ DO RIO PRETO','SÃO JOSÉ DOS CAMPOS''SÃO JOSÉ DOS PINHAIS''SÃO LUÍS','SÃO PAULO','TATUÍ','TELÊMACO BORBA''UBERABA','UBERLÂNDIA','URUARÁ''VITÓRIA DA CONQUISTA','VITÓRIA',]
lista_cidades.sort()
demanda = geo_polos[geo_polos.cidade == opcoes_cidade]
demanda = demanda[['pop-renda-a-partir-1/2salario', 'pop-renda-a-partir-1/2salario-18a44anos', 'pessoas-medio-completo-superior-incompleto-18a44anos', 'frequentando-graduacao-18a44anos', 'mercado']].copy()
pop_com_renda = demanda['pop-renda-a-partir-1/2salario'].iloc[0]
pop_com_renda_e_idade_univ = demanda['pop-renda-a-partir-1/2salario-18a44anos'].iloc[0]
pop_com_ensino_medio = demanda['pessoas-medio-completo-superior-incompleto-18a44anos'].iloc[0]
alu_ensino_sup = demanda['frequentando-graduacao-18a44anos'].iloc[0]
mercado = demanda['mercado'].iloc[0]
# adiciona casas decimais
pop_com_renda = float(pop_com_renda)
pop_com_renda = real(pop_com_renda)
pop_com_renda_e_idade_univ = float(pop_com_renda_e_idade_univ)
pop_com_renda_e_idade_univ = real(pop_com_renda_e_idade_univ)
pop_com_ensino_medio = float(pop_com_ensino_medio)
pop_com_ensino_medio = real(pop_com_ensino_medio)
alu_ensino_sup = float(alu_ensino_sup)
alu_ensino_sup = real(alu_ensino_sup)
mercado = float(mercado)
mercado = real(mercado)
# md("### População com renda: {} <br> (população com renda a partir de 1/2 salário mínimo.)<br><br> População com renda e idade universitária: {} <br> (Pessoas de 18 até 44 anos e com renda a partir e 1/2 salário mínimo)<br><br> População com ensino médio: {} <br> (Pessoas de 18 até 44 anos com ensino médio completo ou superior incompleto) <br><br> Cursando ensino superior: {} <br> (Alunos do ensino superior de 18 até 44 anos que residem na região) <br><br> Mercado potencial: {} <br> (Pessoas de 18 até 44 anos, com médio completo que não estão cursando o ensino superior)".format(pop_com_renda, pop_com_renda_e_idade_univ, pop_com_ensino_medio, alu_ensino_sup, mercado))
# percentual da população ente 18 e 44 anos
geo_polos['percentual_18a24'] = round(geo_polos['idade-18a24'] * 100 / geo_polos['populacao'])
# percentual da população homem
geo_polos['percentual_m'] = round(geo_polos['pop-masculino'] * 100 / geo_polos['populacao'])
# percentual da população mulher
geo_polos['percentual_f'] = round(geo_polos['pop-feminino'] * 100 / geo_polos['populacao'])
pop = geo_polos['populacao'].iloc[0]
pop_m = geo_polos['pop-masculino'].iloc[0]
pop_f = geo_polos['pop-feminino'].iloc[0]
pop_perc_18a44 = geo_polos['percentual_18a24'].iloc[0]
pop_perc_m = geo_polos['percentual_m'].iloc[0]
pop_perc_f = geo_polos['percentual_f'].iloc[0]
# adiciona casas decimais
pop = float(pop)
pop = real(pop)
pop_m = float(pop_m)
pop_m = real(pop_m)
pop_f = float(pop_f)
pop_f = real(pop_f)
# md("## População total: {} <br><br>Homens: {} ({}%) <br> Mulheres: {} ({}%) <br><br> {}% com idade entre 18 e 44 anos".format(pop, pop_m, pop_perc_m, pop_f, pop_perc_f, pop_perc_18a44))
lista_a = list()
lista_a.append("População total:")
lista_a.append("Homens:")
lista_a.append("Mulheres:")
lista_a.append("População com renda:")
lista_a.append("População com renda e idade universitária:")
lista_a.append("População com ensino médio:")
lista_a.append("Cursando ensino superior:")
lista_a.append("Mercado potencial:")
lista_b = list()
lista_b.append("{}".format(pop))
lista_b.append("{} ({}%)".format(pop_m, pop_perc_m))
lista_b.append("{} ({}%)".format(pop_f, pop_perc_f))
lista_b.append("{}".format(pop_com_renda))
lista_b.append("{}".format(pop_com_renda_e_idade_univ))
lista_b.append("{}".format(pop_com_ensino_medio))
lista_b.append("{}".format(alu_ensino_sup))
lista_b.append("{}".format(mercado))
lista_c = list()
lista_c.append("{}% com idade entre 18 e 44 anos".format(pop_perc_18a44))
lista_c.append(" - ")
lista_c.append(" - ")
lista_c.append("população com renda a partir de 1/2 salário mínimo")
lista_c.append("pessoas de 18 até 44 anos e com renda a partir e 1/2 salário mínimo")
lista_c.append("pessoas de 18 até 44 anos com ensino médio completo ou superior incompleto")
lista_c.append("alunos do ensino superior de 18 até 44 anos que residem na região")
lista_c.append("pessoas de 18 até 44 anos, com médio completo que não estão cursando o ensino superior")
df = pd.DataFrame(list(zip(lista_a,lista_b,lista_c)),columns=['Indicador','Valor','Obs'])
fig = go.Figure(data=[go.Table(
columnwidth = [50,35,100],
header=dict(
fill_color='#6BAED6',
align='left',
height=0),
cells=dict(values=[df.Indicador,df.Valor,df.Obs],
fill_color='lavender',
align=['left','left','left'],
fill=dict(color=['#6BAED6', 'white']),
font_size=[15,15,15],
height=60))
])
fig.add_annotation(
xref='x domain', yref='y2 domain', x=1.0, y=1, text='Fonte: INEP - Censo Educacional (2019), IBGE - Censo (2010)',
showarrow=False, arrowhead=1
)
if(mostrar_graficos_em_png):
grafico_png = fig.to_image(format="png", width=1200, height=700, engine="kaleido")
display(Image(grafico_png))
del grafico_png
else:
fig.show()
renda = geo_polos[['cidade', '1-salario', '1ate2-salarios', '2ate5-salarios', '5ate10-salarios', '10ate20-salarios', '20-salarios']].copy()
# rename colunas
renda.rename(columns={'1-salario':'Mais de 1/2 até 1 salário mínimo',
'1ate2-salarios':'Mais de 1 até 2 salários mínimos',
'2ate5-salarios':'Mais de 2 até 5 salários mínimos',
'5ate10-salarios':'Mais de 5 até 10 salários mínimos',
'10ate20-salarios':'Mais de 10 até 20 salários mínimos',
'20-salarios':'Mais de 20 salários mínimos'
},inplace=True)
# transpor colunas em linhas
renda1= renda.set_index('cidade').stack().reset_index(name='value')
fig = px.bar(renda1,
y= 'value',
x= 'level_1',
text= 'value',
title= 'Distribuição de Renda da população - ' + opcoes_cidade,
color='level_1',
color_discrete_sequence=px.colors.sequential.Blues_r,
labels={
'value':'População',
'level_1':'Classe social'
}, height=600
)
fig.add_annotation(
xref='paper', yref='paper', x=1.0, y=-0.5, text='Fonte: IBGE - Censo (2010)',
showarrow=False, arrowhead=1
)
fig.update_traces(texttemplate='%{text:.2s}', textposition='outside')
fig.update_layout(uniformtext_minsize=8, uniformtext_mode='hide')
if(mostrar_graficos_em_png):
grafico_png = fig.to_image(format="png", width=1000, height=550, engine="kaleido")
display(Image(grafico_png))
del grafico_png
else:
fig.show()
# percentual da população matriculados
geo_polos['percentual_matriculados'] = round(geo_polos['Matriculados'] * 100 / geo_polos['populacao'])
educacao = geo_polos[['cidade', 'Matriculados', 'Concluintes', 'Ingressantes']].copy()
# transpor colunas em linhas
educacao = educacao.set_index('cidade').stack().reset_index(name='value')
matri = geo_polos['Matriculados'].iloc[0]
# adiciona casas decimais
matri = float(matri)
matri = real(matri)
matri
fig = px.bar(educacao,
y='value',
x='level_1',
text='value',
title= (str(matri))+' alunos estão matriculados no ensino superior e o total representa aproximadamente '+ str(round(geo_polos['percentual_matriculados'].iloc[0],2))+'% da População de '+opcoes_cidade,
color='level_1',
color_discrete_sequence=px.colors.sequential.Blues_r,
labels={'level_1':'Alunos', 'value':'Quantidade'},
height=550
)
fig.add_annotation(xref='paper', yref='paper', x=1.0, y=-0.2, text='Fonte: INEP - Censo Educacional (2019)', showarrow=False, arrowhead=1)
fig.update_traces(texttemplate='%{text:.2s}', textposition='outside')
fig.update_layout(uniformtext_minsize=8, uniformtext_mode='hide')
if(mostrar_graficos_em_png):
grafico_png = fig.to_image(format="png", width=1000, height=550, engine="kaleido")
display(Image(grafico_png))
del grafico_png
else:
fig.show()
modalidade = geo_polos[['cidade', 'matriculados-ead', 'matriculados-presencial',]].copy()
# rename colunas
modalidade.rename(columns={
'matriculados-ead':'EAD',
'matriculados-presencial':'Presencial',
},inplace=True)
# transpor colunas em linhas
modalidade = modalidade.set_index('cidade').stack().reset_index(name='value')
# total de matriculados do município
total_matriculados = geo_polos['matriculados-ead'].iloc[0] + geo_polos['matriculados-ead'].iloc[0]
# adiciona casas decimais
total_matriculados = float(total_matriculados)
total_matriculados = real(total_matriculados)
fig = px.pie(modalidade,
values='value',
names='level_1',
title=' Total de '+ str(total_matriculados) + ' alunos matriculados no município de ' +str(opcoes_cidade),
color='level_1',
# color_discrete_map={'EAD':'#6cbcff',
# 'Presencial':'#a0a7d6'},
color_discrete_sequence=px.colors.sequential.Blues_r,
labels={'level_1':'Modalidade','value':'Alunos Matriculados'}
)
fig.add_annotation(
xref='paper', yref='paper', x=1.0, y=0, text='Fonte: INEP - Censo Educacional (2019)',
showarrow=False, arrowhead=1
)
if(mostrar_graficos_em_png):
grafico_png = fig.to_image(format="png", width=1000, height=550, engine="kaleido")
display(Image(grafico_png))
del grafico_png
else:
fig.show()
idade = geo_polos[['cidade', 'alunos-idade-65+','alunos-idade-60a64','alunos-idade-55a59','alunos-idade-50a54','alunos-idade-45a49','alunos-idade-40a44','alunos-idade-35a39','alunos-idade-30a34','alunos-idade-25a29','alunos-idade-19a24','alunos-idade-18-',]].copy()
# rename colunas''' '''
idade.rename(columns={
'alunos-idade-18-':'18 anos ou menos',
'alunos-idade-19a24':'de 19 até 24',
'alunos-idade-25a29':'de 25 até 29',
'alunos-idade-30a34':'de 30 até 34',
'alunos-idade-35a39':'de 35 até 39',
'alunos-idade-40a44':'de 40 até 44',
'alunos-idade-45a49':'de 45 até 49',
'alunos-idade-50a54':'de 50 até 54',
'alunos-idade-55a59':'de 55 até 59',
'alunos-idade-60a64':'de 60 até 64',
'alunos-idade-65+':'65 anos ou mais'
},inplace=True)
# transpor colunas em linhas
idade = idade.set_index('cidade').stack().reset_index(name='value')
idade
fig = px.bar(idade,
title=' Distribuição de alunos matriculados por idade - '+str(opcoes_cidade),
x='value',
y='level_1',
text='value',
# title= (str(geo_polos['Matriculados'].iloc[0]))+' alunos estão matriculados no ensino superior e o total representa aproximadamente '+ str(round(geo_polos['percentual_matriculados'].iloc[0],2))+'% da População.',
labels={'level_1':'Perfil', 'value':'Alunos'},
color_discrete_sequence=px.colors.sequential.Blues_r,
category_orders={"level_1": ['18 anos ou menos','de 19 até 24','de 25 até 29','de 30 até 34','de 35 até 39','de 40 até 44','de 45 até 49','de 50 até 54','de 55 até 59','de 60 até 64','65 anos ou mais']},
height=550
)
fig.add_annotation(
xref='paper', yref='paper', x=1.0, y=-0.2, text='Fonte: INEP - Censo Educacional (2019)',
showarrow=False, arrowhead=1
)
fig.update_traces(texttemplate='%{text:.2s}', textposition='outside')
fig.update_layout(uniformtext_minsize=8, uniformtext_mode='hide')
fig.update_xaxes(categoryorder='total descending')
if(mostrar_graficos_em_png):
grafico_png = fig.to_image(format="png", width=1000, height=550, engine="kaleido")
display(Image(grafico_png))
del grafico_png
else:
fig.show()
sexo = geo_polos[['cidade', 'total-alunos-masculino', 'total-alunos-feminino']].copy()
# rename colunas
sexo.rename(columns={
'total-alunos-masculino':'Masculino',
'total-alunos-feminino':'Feminino'
},inplace=True)
# transpor colunas em linhas
sexo = sexo.set_index('cidade').stack().reset_index(name='value')
# total de matriculados do município
total_sexo = geo_polos['total-alunos-masculino'].iloc[0] + geo_polos['total-alunos-feminino'].iloc[0]
# adiciona casas decimais
total_sexo = float(total_sexo)
total_sexo = real(total_sexo)
fig = px.pie(sexo,
values='value',
names='level_1',
title='Alunos no município de ' +str(opcoes_cidade),
color='level_1',
color_discrete_sequence=px.colors.sequential.Blues_r,
labels={'level_1':'Sexo','value':'Total de Alunos '}
)
fig.add_annotation(
xref='paper', yref='paper', x=1.0, y=-0.2, text='Fonte: INEP - Censo Educacional (2019)',
showarrow=False, arrowhead=1
)
if(mostrar_graficos_em_png):
grafico_png = fig.to_image(format="png", width=1000, height=550, engine="kaleido")
display(Image(grafico_png))
del grafico_png
else:
fig.show()
#carrega matriculas e filtra polos
matriculas = pd.read_csv('./dados/matriculas_municipio.csv',sep=';')
cidades = matriculas[['city_id','city_name','state_sigle']].drop_duplicates()
polos = ['CASCAVEL','SÃO JOSÉ DOS PINHAIS','TELÊMACO BORBA','PORTO VELHO','JI-PARANÁ','BRASÍLIA','MACAPÁ','CAMPO GRANDE','BELO HORIZONTE','JUIZ DE FORA','UBERABA','UBERLÂNDIA','LAVRAS','ALTAMIRA','BELÉM','BENEVIDES','MARABÁ','PARAUAPEBAS','SANTARÉM','URUARÁ','IMPERATRIZ','SÃO LUÍS','CODÓ','RIO DE JANEIRO','ITABORAÍ','DUQUE DE CAXIAS','MANAUS','JACAREÍ','HORTOLÂNDIA','ENGENHEIRO COELHO','RECIFE','CARUARU','SAIRÉ','CUIABÁ','SÃO PAULO','SÃO JOSÉ DOS CAMPOS','REGISTRO','CAMPINAS','JUNDIAÍ','AMERICANA','RIO CLARO','SOROCABA','ITARARÉ','FLORIANÓPOLIS','JOINVILLE','ARAQUARI','FORTALEZA','GOIÂNIA','ANÁPOLIS','SANTOS','SÃO JOSÉ DO RIO PRETO','DIADEMA','RIO BRANCO','MACEIÓ','PRESIDENTE PRUDENTE','TATUÍ','VITÓRIA','COLATINA','SALVADOR','VITÓRIA DA CONQUISTA','LIMEIRA','MOGI GUAÇU','PAULÍNIA','PALMAS','GRAVATAÍ','GUARULHOS','OSASCO','CARAGUATATUBA']
polos.sort()
cidades2 = cidades[(cidades.city_name.isin(polos))].copy()
cidades2.sort_values(by='city_name',inplace=True)
cidades_excluir = [2501906,2303501] #Cidades duplicadas
cidades3 = cidades2[(~cidades2.city_id.isin(cidades_excluir))]
#seleciona registros por cidade
cidade = str.lower(opcoes_cidade)
matriculas = matriculas[(matriculas.city_name.str.lower() == cidade)]
matriculas.rename(columns={'fact_student_aggregated_entrance_total_2019':'entrance','fact_student_aggregated_matriculation_total_2019':'enrollment'},inplace=True)
#total de matriculas
matriculas_ead = matriculas[(matriculas.course_modality == 1)]
matriculas_total = matriculas.groupby('ies_sigle').agg(entrance=('entrance','sum'),enrollment=('enrollment','sum'))
matriculas_total.reset_index(inplace=True)
matriculas_total.sort_values(by='enrollment',inplace=True,ascending=False)
matriculas_total['percent'] = (matriculas_total['enrollment'] / matriculas_total['enrollment'].sum()) * 100
matriculas_total['cum_sum'] = matriculas_total["enrollment"].cumsum()
matriculas_total['cum_perc'] = round(100*matriculas_total.cum_sum/matriculas_total["enrollment"].sum(),2)
matriculas_total_outros = matriculas_total[(matriculas_total.cum_perc > 80)].copy()
qtd_outros = len(matriculas_total_outros.index)
matriculas_total_outros['ies_sigle'] = 'OUTROS: ' + str(qtd_outros) + ' IES'
matriculas_total_outros = matriculas_total_outros.groupby('ies_sigle').agg(entrance=('entrance','sum'),enrollment=('enrollment','sum')).reset_index()
matriculas_total_ies = matriculas_total[(matriculas_total.cum_perc <= 80)]
matriculas_total_ies = matriculas_total_ies[['ies_sigle','entrance','enrollment']]
matriculas_total = pd.concat([matriculas_total_ies,matriculas_total_outros])
#matriculas ead
matriculas_ead = matriculas[(matriculas.course_modality == 2)]
matriculas_ead = matriculas_ead.groupby('ies_sigle').agg(entrance=('entrance','sum'),enrollment=('enrollment','sum'))
matriculas_ead.reset_index(inplace=True)
matriculas_ead.sort_values(by='enrollment',inplace=True,ascending=False)
matriculas_ead['percent'] = (matriculas_ead['enrollment'] / matriculas_ead['enrollment'].sum()) * 100
matriculas_ead['cum_sum'] = matriculas_ead["enrollment"].cumsum()
matriculas_ead['cum_perc'] = round(100*matriculas_ead.cum_sum/matriculas_ead["enrollment"].sum(),2)
matriculas_ead_outros = matriculas_ead[(matriculas_ead.cum_perc > 80)].copy()
qtd_outros = len(matriculas_ead_outros.index)
matriculas_ead_outros['ies_sigle'] = 'OUTROS: ' + str(qtd_outros) + ' IES'
matriculas_ead_outros = matriculas_ead_outros.groupby('ies_sigle').agg(entrance=('entrance','sum'),enrollment=('enrollment','sum')).reset_index()
matriculas_ead_ies = matriculas_ead[(matriculas_ead.cum_perc <= 80)]
matriculas_ead_ies = matriculas_ead_ies[['ies_sigle','entrance','enrollment']]
matriculas_ead = pd.concat([matriculas_ead_ies,matriculas_ead_outros])
#Share de alunos - EAD
fig = px.pie(matriculas_ead,
title='Share de matrículas EAD por IES - ' + opcoes_cidade,
values='enrollment',
names='ies_sigle',
# title=' Total de '+ str(total_sexo) + ' alunos no município de ' +str(opcoes_cidade),
color='ies_sigle',
color_discrete_sequence=px.colors.sequential.Blues_r,
labels={'enrollement':'Matriculados','ies_sigle':'IES'}
)
fig.add_annotation(
xref='paper', yref='paper', x=1.0, y=-0.2, text='Fonte: INEP - Censo Educacional (2019)',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='inside', textinfo='percent+label')
if(mostrar_graficos_em_png):
grafico_png = fig.to_image(format="png", width=1000, height=550, engine="kaleido")
display(Image(grafico_png))
del grafico_png
else:
fig.show()
#Share de alunos - total
fig = px.pie(matriculas_total,
title='Share de matrículas Presenciais por IES - ' + opcoes_cidade,
values='enrollment',
names='ies_sigle',
# title=' Total de '+ str(total_sexo) + ' alunos no município de ' +str(opcoes_cidade),
color='ies_sigle',
color_discrete_sequence=px.colors.sequential.Blues_r,
labels={'enrollement':'Matriculados','ies_sigle':'IES'}
)
fig.add_annotation(
xref='paper', yref='paper', x=1.0, y=-0.2, text='Fonte: INEP - Censo Educacional (2019)',
showarrow=False, arrowhead=1
)
fig.update_traces(textposition='inside', textinfo='percent+label')
if(mostrar_graficos_em_png):
grafico_png = fig.to_image(format="png", width=1000, height=550, engine="kaleido")
display(Image(grafico_png))
del grafico_png
else:
fig.show()
# Carrega arquivo do polo
mensalidades = polos_mensalidades[polos_mensalidades.cidade == opcoes_cidade]
mensalidades_agg = mensalidades.groupby(['ies','curso','modalidade']).agg(preco_cheio=('preco_cheio','mean'),preco_desconto=('preco_desconto','mean')).reset_index()
mensalidades_agg['preco_cheio'] = round(mensalidades_agg['preco_cheio'],2)
mensalidades_agg['preco_desconto'] = round(mensalidades_agg['preco_desconto'],2)
modalidades = mensalidades_agg.groupby(['modalidade']).agg(qtd_ofertas=('curso','count'),preco_cheio=('preco_cheio','mean'),preco_desconto=('preco_desconto','mean'))
modalidades['preco_cheio'] = round(modalidades['preco_cheio'],2)
modalidades['preco_desconto'] = round(modalidades['preco_desconto'],2)
df = modalidades.reset_index()
def format(x):
return "R${:.2f}".format(x)
df['preco_cheio'] = df['preco_cheio'].apply(format)
df['preco_desconto'] = df['preco_desconto'].apply(format)
fig = go.Figure(data=[go.Table(
columnwidth = [40,35,35,35],
header=dict(values=['Modalidade','Ofertas','Preço Tabela','Preço com Desconto'],
height=40,
fill_color='#6BAED6',
align='left'),
cells=dict(values=[df.modalidade,df.qtd_ofertas,df.preco_cheio,df.preco_desconto],
fill_color='lavender',
align=['left','left','left','left'],
fill=dict(color=['#6BAED6', 'white']),
font_size=[14,14,14,14],
height=60))
])
fig.add_annotation(
xref='x domain', yref='y2 domain', x=1.0, y=-1, text='Fonte: INEP - Censo Educacional (2019), IBGE - Censo (2010)',
showarrow=False, arrowhead=1
)
if len(df.index) > 0:
print(df.to_markdown(index=False))
else:
print('Não há cursos neste município.')
vcfr5vvvvvvvvfig = px.box(mensalidades_agg,
x="modalidade", y='preco_cheio', color='modalidade',
points='all',
hover_data=['ies', 'modalidade', 'preco_desconto', 'preco_cheio'],
# title='Figura 47 - Mensalidades Curso de Biomedicina | Valor tabela | Região: Estado de São Paulo',
labels={
'preco_cheio': 'Valor da Mensalidade',
'preco_desconto': 'Valor da Mensalidade com desconto',
'modalidade': 'Modalidade do Curso',
'ies': 'IES'
}
)
fig.add_annotation(
xref='paper', yref='paper', x=1.0, y=-0.2, text='Fonte: INEP - Censo Educacional (2019), IBGE - Censo (2010)',
showarrow=False, arrowhead=1
)
mensalidades_ies = mensalidades_agg[mensalidades_agg.modalidade == 'EAD']
mensalidades_ies = mensalidades_ies.groupby(['ies','modalidade']).agg(qtd_ofertas=('curso','count'),
preco_cheio_medio=('preco_cheio','mean'),
preco_desconto_medio=('preco_desconto','mean')).reset_index()
mensalidades_ies.sort_values(by='ies',ascending=True,inplace=True)
mensalidades_ies['preco_cheio_medio'] = round(mensalidades_ies['preco_cheio_medio'],2)
mensalidades_ies['preco_desconto_medio'] = round(mensalidades_ies['preco_desconto_medio'],2)
df = mensalidades_ies.reset_index()
def format(x):
return "R${:.2f}".format(x)
df['preco_cheio_medio'] = df['preco_cheio_medio'].apply(format)
df['preco_desconto_medio'] = df['preco_desconto_medio'].apply(format)
fig = go.Figure(data=[go.Table(
columnwidth = [40,35,35,35],
header=dict(values=['IES','Modalidade','Preço Tabela','Preço com Desconto'],
height=40,
fill_color='#6BAED6',
align='left'),
cells=dict(values=[df.ies,df.modalidade,df.preco_cheio_medio,df.preco_desconto_medio],
fill_color='lavender',
align=['left','left','left','left'],
fill=dict(color=['#6BAED6', 'white']),
font_size=[14,14,14,14],
height=30,
))
])
df.drop(columns=['index','qtd_ofertas'],inplace=True)
if len(df.index) > 0:
print(df.to_markdown(index=False))
else:
print('Não há cursos neste município.')
mensalidades_ies = mensalidades_agg[mensalidades_agg.modalidade == 'Presencial']
mensalidades_ies = mensalidades_ies.groupby(['ies','modalidade']).agg(qtd_ofertas=('curso','count'),
preco_cheio_medio=('preco_cheio','mean'),
preco_desconto_medio=('preco_desconto','mean')).reset_index()
mensalidades_ies.sort_values(by='ies',ascending=True,inplace=True)
mensalidades_ies['preco_cheio_medio'] = round(mensalidades_ies['preco_cheio_medio'],2)
mensalidades_ies['preco_desconto_medio'] = round(mensalidades_ies['preco_desconto_medio'],2)
# mensalidades_ies = mensalidades_ies[[]]
df = mensalidades_ies.reset_index()
def format(x):
return "R${:.2f}".format(x)
df['preco_cheio_medio'] = df['preco_cheio_medio'].apply(format)
df['preco_desconto_medio'] = df['preco_desconto_medio'].apply(format)
fig = go.Figure(data=[go.Table(
columnwidth = [40,35,35,35],
header=dict(values=['IES','Modalidade','Preço Tabela','Preço com Desconto'],
height=40,
fill_color='#6BAED6',
align='left'),
cells=dict(values=[df.ies,df.modalidade,df.preco_cheio_medio,df.preco_desconto_medio],
fill_color='lavender',
align=['left','left','left','left'],
fill=dict(color=['#6BAED6', 'white']),
font_size=[14,14,14,14],
height=30,
))
])
df.drop(columns=['index','qtd_ofertas'],inplace=True)
if len(df.index) > 0:
print(df.to_markdown(index=False))
else:
print('Não há cursos neste município.')
mensalidades_curso = mensalidades_agg[mensalidades_agg.modalidade == 'EAD']
mensalidades_curso = mensalidades_curso.groupby(['curso']).agg(qtd_ofertas=('curso','count'), preco_medio=('preco_cheio','mean'), menor_preco=('preco_cheio','min'), maior_preco=('preco_cheio','max'), desvio_padrao=('preco_cheio', np.std)).reset_index()
mensalidades_curso['preco_medio'] = round(mensalidades_curso['preco_medio'],2)
mensalidades_curso['menor_preco'] = round(mensalidades_curso['menor_preco'],2)
mensalidades_curso['maior_preco'] = round(mensalidades_curso['maior_preco'],2)
mensalidades_curso['desvio_padrao'] = round(mensalidades_curso['desvio_padrao'],2)
mensalidades_curso = mensalidades_curso.fillna(0)
df = mensalidades_curso.reset_index()
def format(x):
return "R${:.2f}".format(x)
df['preco_medio'] = df['preco_medio'].apply(format)
df['menor_preco'] = df['menor_preco'].apply(format)
df['maior_preco'] = df['maior_preco'].apply(format)
df['desvio_padrao'] = df['desvio_padrao'].apply(format)
df = df[['curso','qtd_ofertas','menor_preco','maior_preco']].copy()
fig = go.Figure(data=[go.Table(
columnwidth = [40,35,35,35],
# header=dict(values=['Curso', 'Ofertas', 'Preço Médio','Menor Preço','Maior Preço','DP'],
header=dict(values=['Curso', 'Ofertas', 'Menor Preço','Maior Preço'],
height=40,
fill_color='#6BAED6',
align='left'),
# cells=dict(values=[df.curso,df.qtd_ofertas,df.preco_medio,df.menor_preco,df.maior_preco,df.desvio_padrao],
cells=dict(values=[df.curso,df.qtd_ofertas,df.menor_preco,df.maior_preco],
fill_color='lavender',
align=['left','left','left','left'],
fill=dict(color=['#6BAED6', 'white']),
font_size=[14,14,14,14],
height=60))
])
fig.add_annotation(
xref='x domain', yref='y2 domain', x=1.0, y=-1, text='Fonte: INEP - Censo Educacional (2019), IBGE - Censo (2010)',
showarrow=False, arrowhead=1
)
if len(df.index) > 0:
print(df.to_markdown(index=False))
else:
print('Não há cursos neste município.')
mensalidades_curso = mensalidades_agg[mensalidades_agg.modalidade == 'Presencial']
mensalidades_curso = mensalidades_curso.groupby(['curso']).agg(qtd_ofertas=('curso','count'), preco_medio=('preco_cheio','mean'), menor_preco=('preco_cheio','min'), maior_preco=('preco_cheio','max'), desvio_padrao=('preco_cheio', np.std)).reset_index()
mensalidades_curso['preco_medio'] = round(mensalidades_curso['preco_medio'],2)
mensalidades_curso['menor_preco'] = round(mensalidades_curso['menor_preco'],2)
mensalidades_curso['maior_preco'] = round(mensalidades_curso['maior_preco'],2)
mensalidades_curso['desvio_padrao'] = round(mensalidades_curso['desvio_padrao'],2)
mensalidades_curso = mensalidades_curso.fillna(0)
df = mensalidades_curso.reset_index()
def format(x):
return "R${:.2f}".format(x)
df['preco_medio'] = df['preco_medio'].apply(format)
df['menor_preco'] = df['menor_preco'].apply(format)
df['maior_preco'] = df['maior_preco'].apply(format)
df['desvio_padrao'] = df['desvio_padrao'].apply(format)
df = df[['curso','qtd_ofertas','menor_preco','maior_preco']].copy()
fig = go.Figure(data=[go.Table(
columnwidth = [40,35,35,35],
header=dict(values=['Curso', 'Ofertas', 'Menor Preço','Maior Preço'],
height=40,
fill_color='#6BAED6',
align='left'),
cells=dict(values=[df.curso,df.qtd_ofertas,df.menor_preco,df.maior_preco],
fill_color='lavender',
align=['left','left','left','left'],
fill=dict(color=['#6BAED6', 'white']),
font_size=[14,14,14,14],
height=60))
])
fig.add_annotation(
xref='x domain', yref='y2 domain', x=1.0, y=-1, text='Fonte: INEP - Censo Educacional (2019), IBGE - Censo (2010)',
showarrow=False, arrowhead=1
)
if len(df.index) > 0:
print(df.to_markdown(index=False))
else:
print('Não há cursos neste município.')
mensalidades_curso = mensalidades_agg.groupby(['curso','modalidade']).agg(qtd_ofertas=('curso','count'),preco_cheio_medio=('preco_cheio','mean'),preco_desconto_medio=('preco_desconto','mean')).reset_index()
mensalidades_curso.sort_values(by='curso',ascending=True,inplace=True)
mensalidades_curso['preco_cheio_medio'] = round(mensalidades_curso['preco_cheio_medio'],2)
mensalidades_curso['preco_desconto_medio'] = round(mensalidades_curso['preco_desconto_medio'],2)
mensalidades_curso = mensalidades_curso[mensalidades_curso.modalidade == 'EAD']
mensalidades_curso = mensalidades_curso[['curso', 'qtd_ofertas', 'preco_cheio_medio', 'preco_desconto_medio']].copy()
df = mensalidades_curso.reset_index()
def format(x):
return "R${:.2f}".format(x)
df['preco_cheio_medio'] = df['preco_cheio_medio'].apply(format)
df['preco_desconto_medio'] = df['preco_desconto_medio'].apply(format)
fig = go.Figure(data=[go.Table(
columnwidth = [40,35,35,35],
header=dict(values=['Curso', 'Ofertas', 'Preço Tabela','Preço com Desconto'],
height=40,
fill_color='#6BAED6',
align='left'),
cells=dict(values=[df.curso,df.qtd_ofertas,df.preco_cheio_medio,df.preco_desconto_medio],
fill_color='lavender',
align=['left','left','left','left'],
fill=dict(color=['#6BAED6', 'white']),
font_size=[14,14,14,14],
height=60))
])
fig.add_annotation(
xref='x domain', yref='y2 domain', x=1.0, y=-1, text='Fonte: INEP - Censo Educacional (2019), IBGE - Censo (2010)',
showarrow=False, arrowhead=1
)
df.drop(columns=['index'],inplace=True)
if len(df.index) > 0:
print(df.to_markdown(index=False))
else:
print('Não há cursos neste município.')
mensalidades_curso = mensalidades_agg.groupby(['curso','modalidade']).agg(qtd_ofertas=('curso','count'),preco_cheio_medio=('preco_cheio','mean'),preco_desconto_medio=('preco_desconto','mean')).reset_index()
mensalidades_curso.sort_values(by='curso',ascending=True,inplace=True)
mensalidades_curso['preco_cheio_medio'] = round(mensalidades_curso['preco_cheio_medio'],2)
mensalidades_curso['preco_desconto_medio'] = round(mensalidades_curso['preco_desconto_medio'],2)
mensalidades_curso = mensalidades_curso[mensalidades_curso.modalidade == 'Presencial']
mensalidades_curso = mensalidades_curso[['curso', 'qtd_ofertas', 'preco_cheio_medio', 'preco_desconto_medio']].copy()
df = mensalidades_curso.reset_index()
def format(x):
return "R${:.2f}".format(x)
df['preco_cheio_medio'] = df['preco_cheio_medio'].apply(format)
df['preco_desconto_medio'] = df['preco_desconto_medio'].apply(format)
fig = go.Figure(data=[go.Table(
columnwidth = [40,35,35,35],
header=dict(values=['Curso', 'Ofertas', 'Preço Tabela','Preço com Desconto'],
height=40,
fill_color='#6BAED6',
align='left'),
cells=dict(values=[df.curso,df.qtd_ofertas,df.preco_cheio_medio,df.preco_desconto_medio],
fill_color='lavender',
align=['left','left','left','left'],
fill=dict(color=['#6BAED6', 'white']),
font_size=[14,14,14,14],
height=60))
])
fig.add_annotation(
xref='x domain', yref='y2 domain', x=1.0, y=-1, text='Fonte: INEP - Censo Educacional (2019), IBGE - Censo (2010)',
showarrow=False, arrowhead=1
)
df.drop(columns=['index'],inplace=True)
if len(df.index) > 0:
print(df.to_markdown(index=False))
else:
print('Não há cursos neste município.')