2. Análise do perfil das famílias acolhedoras#

Nesta análise faremos um apanhados das variáveis principais relacionadas às características das famílias acolhedoras que estão aptas ou acolhendo no momento.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df_dados_gerais = pd.read_csv('../data/familia_acolhedora/dados_gerais_tratado.csv')
df_dados_gerais.head()
IBGE NU_IDENTIFICADOR municipio uf data_implementacao_unidade Latitude Longitude natureza_unidade custo_manutencao servico_regulamentado ... coordenador_saf_situacao capaci_equipe_tec_saf_presencial capaci_equipe_tec_saf_ead capaci_equipe_tec_saf_nao_faz capaci_equipe_tec_saf_presencial_qtd capaci_equipe_tec_saf_ead_qtd IBGE7 nome_da_uf Regiao Município
0 110011 1,10011E+12 JARU RO 29/03/2023 -10.439 -62.466 Governamental NaN Sim, por lei ... Exerce concomitantemente a função de coordenad... Não Não Não NaN NaN 1100114 Rondonia Região Norte Jaru
1 110012 1,10012E+12 JI-PARANA RO 02/01/2022 -10.876.486.067.028.500 -619.596.290.588.379 Governamental NaN Sim, por lei ... Exerce exclusivamente a função de coordenador(... Sim Sim Não 3.0 4.0 1100122 Rondonia Região Norte Ji-Paraná
2 110020 1,1002E+12 PORTO VELHO RO 13/12/2017 -915.359.258.390.788 -643.068.141.967.022 Governamental NaN Sim, por lei ... Exerce exclusivamente a função de coordenador(... Sim Sim Não 5.0 5.0 1100205 Rondonia Região Norte Porto Velho
3 120040 1,2004E+12 RIO BRANCO AC 17/05/2013 -9.948.852.227.687.540 -6.785.414.814.949.030 Governamental NaN Sim, por lei ... Exerce exclusivamente a função de coordenador(... Não Não Sim NaN NaN 1200401 Acre Região Norte Rio Branco
4 130170 1,3017E+12 HUMAITA AM 28/12/2020 -7.519.639.784.496.380 -63.031.353.950.500.400 Governamental NaN Sim, por lei ... Exerce exclusivamente a função de coordenador(... Não Não Sim NaN NaN 1301704 Amazonas Região Norte Humaitá

5 rows × 174 columns

df_dados_gerais.columns.tolist()
['IBGE',
 'NU_IDENTIFICADOR',
 'municipio',
 'uf',
 'data_implementacao_unidade',
 'Latitude',
 'Longitude',
 'natureza_unidade',
 'custo_manutencao',
 'servico_regulamentado',
 'ano_implementacao_servico',
 'subsidio_valor_mensal',
 'subsidio_itens_manutencao',
 'subsidio_mobiliario_transporte',
 'subsidio_isencao_imposto_taxa',
 'subsidio_outros',
 'subsidio_nao_repassa',
 'subsidio_outros_quais',
 'fam_aceita_vinculo_irmaos',
 'qtd_criancas_acolhidas',
 'qtd_criancas_acolhidas_12meses',
 'qtd_masc_0_2',
 'qtd_masc_3_5',
 'qtd_masc_6_11',
 'qtd_masc_12_13',
 'qtd_masc_14_15',
 'qtd_masc_16_17',
 'qtd_masc_acima_18',
 'qtd_masc_total',
 'qtd_fem_0_2',
 'qtd_fem_3_5',
 'qtd_fem_6_11',
 'qtd_fem_12_13',
 'qtd_fem_14_15',
 'qtd_fem_16_17',
 'qtd_fem_acima_18',
 'qtd_refugiados_imigrantes',
 'qtd_venezuelanos',
 'qtd_criancas_tempo_servico_menos_1mes',
 'qtd_criancas_tempo_servico_1_3meses',
 'qtd_criancas_tempo_servico_4_6meses',
 'qtd_criancas_tempo_servico_7_12meses',
 'qtd_criancas_tempo_servico_13_18meses',
 'qtd_criancas_tempo_servico_19_24meses',
 'qtd_criancas_tempo_servico_25_48meses',
 'qtd_criancas_tempo_servico_49_72meses',
 'qtd_criancas_tempo_mais_72meses',
 'qtd_criancas_deficiencia',
 'qtd_criancas_transt_sofri_psiquico',
 'qtd_criancas_necessidade_especial',
 'qtd_adoles_socioeducativo',
 'qtd_criancas_traj_de_rua',
 'qtd_criancas_indigenas',
 'qtd_criancas_outros_povos_trad',
 'qtd_criancas_dependencia_drogas',
 'qtd_criancas_gestantes',
 'qtd_criancas_pretas',
 'qtd_criancas_pardas',
 'qtd_criancas_brancas',
 'qtd_criancas_amarelas',
 'qtd_criancas_raca_indigenas',
 'qtd_motivo_entrega_voluntaria_adocao',
 'qtd_motivo_orfandade',
 'qtd_motivo_abandono',
 'qtd_motivo_pais_usuarios',
 'qtd_motivo_pais_com_deficiencia',
 'qtd_motivo_pais_transt_sofri_psiquicos',
 'qtd_motivo_pais_ausentes_doenca',
 'qtd_motivo_pais_prisao_ou_internacao',
 'qtd_motivo_violencia_domestica_fisica',
 'qtd_motivo_violencia_domestica_psicologica',
 'qtd_motivo_abuso_sex_intrafamiliar',
 'qtd_motivo_exploracao_sex',
 'qtd_motivo_conflito_familiar',
 'qtd_motivo_exploracao_trabalho',
 'qtd_motivo_pais_cond_especif_saude',
 'qtd_motivo_pais_s_condicoes_depend_quim',
 'qtd_motivo_ameaca_morte',
 'qtd_motivo_situacao_rua',
 'qtd_motivo_negligencia_familia',
 'qtd_motivo_fam_situacao_rua',
 'qtd_motivo_fam_moradia_insalubre',
 'qtd_motivo_fam_carencia_rec_materiais',
 'qtd_oriundos_pbf',
 'qtd_oriundos_fam_menos_1sm',
 'divulgacao_outdoors_busdoors',
 'divulgacao_materiais_grande_circ',
 'divulgacao_radio_tv_impressa',
 'divulgacao_eventos_palestras',
 'divulgacao_redes_sociais',
 'divulgacao_articulacao_liderancas',
 'divulgacao_outros',
 'divulgacao_nao_faz',
 'divulgacao_outros_quais',
 'ch_capacitacao_inicial',
 'selecao_fam_reunioes',
 'selecao_fam_analise_doc',
 'selecao_fam_entrevistas',
 'selecao_fam_visitas_domiciliares',
 'selecao_fam_outros',
 'selecao_fam_nao_faz',
 'selecao_fam_outros_quais',
 'capac_ini_conti_fam_encontros_grupos',
 'capac_ini_conti_fam_encontros_indivi',
 'capac_ini_conti_fam_paletras',
 'capac_ini_conti_fam_rodas_conversa',
 'capac_ini_conti_fam_outros',
 'capac_ini_conti_fam_nao_faz',
 'capac_ini_conti_fam_outros_quais',
 'acompanhamento_fam_aprox_supervi',
 'acompanhamento_fam_visitas_domicil',
 'acompanhamento_fam_aten_psicoss',
 'acompanhamento_fam_contato_tel',
 'acompanhamento_fam_outros',
 'acompanhamento_fam_outros_quais',
 'ativi_sistematicas_atend_psicosso_indivi',
 'ativi_sistematicas_escuta_qualific',
 'ativi_sistematicas_acompanh_escolar',
 'ativi_sistematicas_acompanh_saude',
 'ativi_sistematicas_encaminhc_docs',
 'ativi_sistematicas_encaminhc_qualif_prof',
 'ativi_sistematicas_identifi_fam_nat_exten',
 'ativi_sistematicas_viabili_encon_fam_ori',
 'ativi_sistematicas_constr_plano_acomp_fam_ori',
 'ativi_sistematicas_atend_psicosso_indiv_fam_ori',
 'ativi_sistematicas_reunioes_fam_ori',
 'ativi_sistematicas_entrevis_fam_ori',
 'ativi_sistematicas_visi_domic_fam_ori',
 'ativi_sistematicas_genograma_ecomapa',
 'ativi_sistematicas_relat_trimes_judic',
 'ativi_sistematicas_estudo_caso',
 'ativi_sistematicas_encaminhc_rede',
 'ativi_sistematicas_discuss_casos_rede',
 'ativi_sistematicas_outros',
 'ativi_sistematicas_nao_faz',
 'ativi_sistematicas_outros_quais',
 'retorno_fam_ori_fam_ado_judic_informa_decisoes',
 'retorno_fam_ori_fam_ado_judic_nao_informa_decisoes',
 'retorno_fam_ori_fam_ado_tempo_prepar_suficiente',
 'retorno_fam_ori_fam_ado_tempo_prepar_insuficiente',
 'freq_acompanh_fam_acolhedora',
 'qtd_fam_processo_habilitacao',
 'qtd_fam_aptas_ou_acolhendo',
 'num_atual_fam_suficiente',
 'imovel_sede_saf',
 'espaco_fisico_sala_atendimento',
 'espaco_fisico_espaco_reunioes',
 'espaco_fisico_sala_equip_tec',
 'espaco_fisico_sala_coord_adm',
 'espaco_fisico_area_recepcao',
 'espaco_fisico_copa',
 'equipamentos_veiculo_exclusivo',
 'equipamentos_veiculo_compartilhado',
 'equipamentos_acervo_bibliog',
 'equipamentos_mater_pedago',
 'equipamentos_tel_fixo',
 'equipamentos_cel',
 'equipamentos_impressora',
 'equipamentos_de_som',
 'equipamentos_proj_imagens',
 'equipamentos_bebedouro',
 'equipamentos_comput_internet',
 'equipamentos_qtd_comput_internet',
 'equipe_tec_exclusiva_saf',
 'coordenador_saf_situacao',
 'capaci_equipe_tec_saf_presencial',
 'capaci_equipe_tec_saf_ead',
 'capaci_equipe_tec_saf_nao_faz',
 'capaci_equipe_tec_saf_presencial_qtd',
 'capaci_equipe_tec_saf_ead_qtd',
 'IBGE7',
 'nome_da_uf',
 'Regiao',
 'Município']

2.1. Variável ‘fam_aceita_vinculo_irmaos’#

Essa variável refere-se a se há famílias acolhedoras que aceitam acolher grupo de crianças/adolescentes com grupo de irmãos/vínculos afetivos.

freq_aceita_irmaos = df_dados_gerais['fam_aceita_vinculo_irmaos'].value_counts(dropna=True)
# Plotando o gráfico de barras
plt.figure(figsize=(8, 5))
ax = sns.barplot(x=freq_aceita_irmaos.index, y=freq_aceita_irmaos.values, color='skyblue')

# Adicionando as quantidades dentro das barras
for i, v in enumerate(freq_aceita_irmaos.values):
    ax.text(i, v - 0.1, str(v), color='black', ha='center', va='center') 
    
plt.title(f'A família acolhedora aceita irmãos?')
plt.xlabel('Resposta')
plt.ylabel('Contagem')
plt.xticks(rotation=45)

plt.show()
_images/c6d70875d5354fc4e1bbea211f35d305b21aa71aabc28c86ea6e4438cdc56eb2.png

2.2. Variáveis relacionadas à quantidade de família acolhedora - em processo e aptas/acolhendo#

Aqui utilizaremos duas variáveis: a ‘qtd_fam_aptas_ou_acolhendo’ que refere-se à quantidade de famílhas aptas ou que estão acolhendo no momento e a ‘qtd_fam_processo_habilitacao’ que refere-se à quantidade de famílias em processo de habilitação.

df_dados_gerais['qtd_fam_aptas_ou_acolhendo'].apply(type).unique()
array([<class 'int'>], dtype=object)
df_qtd_fam = df_dados_gerais.groupby(['uf', 'Regiao'])['qtd_fam_aptas_ou_acolhendo'].sum().reset_index()
df_qtd_fam.sort_values(by='qtd_fam_aptas_ou_acolhendo', ascending=False)
uf Regiao qtd_fam_aptas_ou_acolhendo
16 PR Região Sul 817
9 MG Região Sudeste 522
21 SC Região Sul 432
22 SP Região Sudeste 410
17 RJ Região Sudeste 200
20 RS Região Sul 178
10 MS Região Centro Oeste 81
3 BA Região Nordeste 75
13 PB Região Nordeste 61
1 AM Região Norte 51
4 CE Região Nordeste 50
6 ES Região Sudeste 50
5 DF Região Centro Oeste 45
12 PA Região Norte 34
14 PE Região Nordeste 34
8 MA Região Nordeste 31
18 RN Região Nordeste 24
11 MT Região Centro Oeste 24
15 PI Região Nordeste 20
23 TO Região Norte 18
19 RO Região Norte 13
7 GO Região Centro Oeste 9
0 AC Região Norte 4
2 AP Região Norte 1
# Define cores para cada região
cores_regiao = {
    'Região Norte': 'blue', 'Região Nordeste': 'green', 'Região Centro Oeste': 'orange',
    'Região Sudeste': 'red', 'Região Sul': 'purple'
}
# Cria o gráfico de barras para a quantidade de famílias aptas/acolhendo por UF
plt.figure(figsize=(12, 8))
for regiao, cor in cores_regiao.items():
    subset = df_qtd_fam[df_qtd_fam['Regiao'] == regiao]
    plt.bar(subset['uf'], subset['qtd_fam_aptas_ou_acolhendo'], label=regiao, color=cor)

# Configurações do gráfico
plt.title('Quantidade de famílias aptas/que estão acolhendo por UF')
plt.xlabel('UF')
plt.ylabel('Quantidade de famílias')
plt.xticks(rotation=45)
plt.legend(title='Região')
plt.tight_layout()
plt.show()
_images/0338ac3cfc2834abd30ea9679c5cb27216efc4ccb5ab756d4fc1e18a76af3640.png
df_qntd_fam = df_dados_gerais.groupby('uf')[['qtd_fam_processo_habilitacao', 'qtd_fam_aptas_ou_acolhendo']].sum().reset_index()
# Reorganizando o DataFrame para que as colunas 'qtd_fam_processo_habilitacao' e 'qtd_fam_aptas_ou_acolhendo'
# fiquem em uma única coluna para facilitar a plotagem
df_agrupado_melted = df_qntd_fam.melt(id_vars='uf', value_vars=['qtd_fam_processo_habilitacao', 'qtd_fam_aptas_ou_acolhendo'], 
                                      var_name='Categoria', value_name='Quantidade')
# Plotando o gráfico de barras
plt.figure(figsize=(10, 6))
sns.barplot(x='uf', y='Quantidade', hue='Categoria', data=df_agrupado_melted, palette='Set2')

# Adicionando título e rótulos
plt.title('Comparação entre Famílias em Processo de Habilitação e Famílias Aptas/Acolhendo por UF')
plt.xlabel('UF')
plt.ylabel('Quantidade de Famílias')

# Exibindo o gráfico
plt.show()
_images/a082fbdbfbe6be692f34c65f4262dfe71bbb232f402742f07c2c11c2be65ee29.png
df_dados_gerais['num_atual_fam_suficiente'].value_counts()
num_atual_fam_suficiente
Não                  299
Sim                  265
Não sabe informar     56
Name: count, dtype: int64
df_agrupado_suficiente = df_dados_gerais.groupby(['uf', 'num_atual_fam_suficiente']).size().reset_index(name='contagem')
# Plotando o gráfico de barras
plt.figure(figsize=(10, 6))
sns.barplot(x='uf', y='contagem', hue='num_atual_fam_suficiente', data=df_agrupado_suficiente, palette='Set1')

# Adicionando título e rótulos
plt.title('Distribuição de Famílias com Suficiência Atual por UF')
plt.xlabel('UF')
plt.ylabel('Contagem')

# Exibindo o gráfico
plt.show()
_images/0b12a5727bc58606b52fe4a2ebfbd9f14dfecd84e7a4ca20036fa825ac962b31.png

2.3. Variáveis relacionadas ao perfil dos responsáveis familiares cadastrados#

Aqui utilizou-se a base de dados referente às informações do responsável familiar que cadastrou a família para a SFA. Isso quer dizer que foi uma pessoa escolhida na família para se tornar a responsável pelo cadastro, mas não necessariamente reflete o perfil característico da família acolhedora.

df_resp_familiar = pd.read_csv('../data/familia_acolhedora/resp_familiar_tratado.csv')
df_resp_familiar.head()
IBGE NU_IDENTIFICADOR rf_sexo rf_escolaridade rf_profissao rf_vinculo Nome_UF Código Município Completo Nome_Município
0 291270 2,9127E+12 Feminino Médio Completo Profissional de nível médio Outro vínculo não permanente Bahia 291270 Ibirapitanga
1 311910 3,1191E+12 Feminino Fundamental Completo Sem formação profissional Voluntária(o) Minas Gerais 311910 Corinto
2 330350 3,3035E+12 Feminino Médio Completo Profissional de nível médio Servidor(a) Estatutário(a) Rio de Janeiro 330350 Nova Iguaçu
3 351040 3,5104E+12 Feminino Superior Completo Profissional de nível médio Voluntária(o) São Paulo 351040 Capivari
4 353440 3,5344E+12 Feminino Especialização Advogada(o) Sem Vínculo São Paulo 353440 Osasco
# Definir a ordem personalizada para a coluna 'rf_escolaridade'
ordem_escolaridade = [
    'Sem Escolaridade', 'Fundamental Incompleto', 'Fundamental Completo',
    'Médio Incompleto', 'Médio Completo', 'Superior Incompleto',
    'Superior Completo', 'Especialização', 'Mestrado', 'Doutorado'
]
# Criar a tabela de contingência e ordenar as colunas conforme a ordem definida
escolaridade_por_uf = pd.crosstab(df_resp_familiar['Nome_UF'], df_resp_familiar['rf_escolaridade'])[ordem_escolaridade]

# Criar o heatmap com a nova ordem
plt.figure(figsize=(18, 10))
sns.heatmap(escolaridade_por_uf, annot=True, fmt="d", cmap='YlGnBu', linewidths=0.5)
plt.title('Mapa de Calor da Escolaridade por UF (Ordenado)', fontsize=16)
plt.xlabel('Escolaridade', fontsize=14)
plt.ylabel('UF', fontsize=14)
plt.xticks(rotation=45, fontsize=12)
plt.yticks(fontsize=12)
plt.show()
_images/f5a992603cba0039e2a7141b9514173367302685759fdac975b82f6419223cf2.png
# Configurar o estilo do Seaborn
sns.set(style="whitegrid")

# Ordenar o dataframe por Nome_UF em ordem alfabética
df = df_resp_familiar.sort_values(by="Nome_UF")

# Definir a paleta de cores manualmente
palette = {"Masculino": "skyblue", "Feminino": "lightcoral"}

# Criar o FacetGrid para o gráfico de sexo
g_sexo = sns.FacetGrid(df, col="Nome_UF", col_wrap=4, height=4, sharey=False, legend_out=True)
g_sexo.map_dataframe(
    sns.countplot,
    x="rf_sexo",
    hue="rf_sexo",
    palette=palette
)

# Ajustar os rótulos do eixo X e título
g_sexo.set_xticklabels(rotation=45, ha="right")
g_sexo.set_axis_labels("Sexo", "Quantidade")

# Criar a legenda manualmente fora do grid
handles = [plt.Line2D([0], [0], color="skyblue", lw=4, label="Masculino"),
           plt.Line2D([0], [0], color="lightcoral", lw=4, label="Feminino")]
plt.legend(handles=handles, title="Sexo", loc='upper right', bbox_to_anchor=(1.15, 1))

# Remover "Nome_UF = ..." e exibir apenas o nome do estado
for ax in g_sexo.axes.flat:
    titulo = ax.get_title().split('=')[1].strip()
    ax.set_title(titulo)

# Ajustar o layout e exibir o gráfico
plt.subplots_adjust(top=0.9, hspace=0.4, right=0.85)
g_sexo.fig.suptitle("Distribuição de Sexo por UF", fontsize=16)
plt.show()
_images/850102b9dcb8a714c80461aab119e3d8ee51b8da2ec45696d2aa7f002d60dc33.png