<jupyter_start><jupyter_text>Target Population Nesse notebook vamos combinar diferentes fontes de dados a nível de cidade para extrair alguns indicadores (features) dos municípios. Para contextualizar a análise comparativa entre as cidades e facilitar o entendimento, foram aplicados os seguintes critérios para realizar um recorte nos dados:- Considerar ano mais atual de cada base, devido a dificuldade de históricos mais recentes - Considerar apenas municípios do Nordeste, devido a semelhança regional (comportamento, dialeto, temperatura, clima, etc.)- Considerar apenas homicídios de Jovens (15 a 29 anos), conforme desafio proposto- Considerar faixas de populacao com maiores quantidades de cidades com alto nível de homicídios No final, teremos um conjunto rótulado e balanceado de dados com as cidades mais/menos violentas   Target Users - Ministério da Justiça e Segurança Pública- Departamento de defesa e segurança estadual- Secretaria da Segurança e da Defesa Social- Igarapé  Intro Ingerindo alguns dados básicos. Considerando apenas o último snapshot (ou seja, ano em [de 2020, 2019, 2018]) para cada conjunto de dados **Dados mais recentes de municípios do IBGE**<jupyter_code>municipio = pd.read_parquet('../data/handled/ibge_municipio.parquet')
# municipio = municipio[(municipio['uf'].isin(UFS))]

inspect(municipio);<jupyter_output>shape: (5570, 7)
columns: ['uf', 'ufCodigo', 'nomeUf', 'nomeMunicipio', 'nomeMunicipioNorm', 'municipioCodigo', 'municipioCodigo6d']<jupyter_text>**PIB mais recente dos municípios**<jupyter_code>municipio_pib = pd.read_parquet('../data/handled/ibge_municipio_pib.parquet')

print(municipio_pib['ano'].unique())

municipio_pib = (
    municipio_pib[
        # (municipio_pib['uf'].isin(UFS)) &
        (municipio_pib['ano'] == 2017) # existe PIB 2018, mas nao tivemos tempo de coletar
    ]
    .drop(columns=['ano'])
)

inspect(municipio_pib);<jupyter_output>[2017]
shape: (5570, 17)
columns: ['uf', 'ufCodigo', 'nomeUf', 'nomeMunicipio', 'municipioCodigo', 'valorBrutoAgropecuraria1000', 'valorBrutoIndustria1000', 'valorBrutoServicos1000', 'valorBrutoUtilidade1000', 'valorBruto1000', 'impostosProdutos1000', 'pib1000', 'pibPerCapita', 'atividadeMaisRelevanteValorBruto1', 'atividadeMaisRelevanteValorBruto2', 'atividadeMaisRelevanteValorBruto3', 'municipioCodigo6d']<jupyter_text>**Atividades mais relevantes do PIB dos municípios**<jupyter_code>municipio_pib_atividades_relevantes = (
    municipio_pib
    .groupby('atividadeMaisRelevanteValorBruto1')
    .agg(count=('municipioCodigo', 'count'))
    .sort_values(by='count', ascending=False)
    .reset_index()
)

inspect(municipio_pib_atividades_relevantes);<jupyter_output>shape: (10, 2)
columns: ['atividadeMaisRelevanteValorBruto1', 'count']<jupyter_text>**Quantidade de pessoas com emprego formal nos municípios, em 2018 (conforme data mais atual do SIM)**<jupyter_code>municipio_funcionarios = pd.read_parquet('../data/handled/rais_caged_municipio_funcionarios.parquet')

print(municipio_funcionarios['ano'].sort_values().unique())

municipio_funcionarios = (
    municipio_funcionarios[
        # (municipio_funcionarios['uf'].isin(UFS)) &
        (municipio_funcionarios['ano'] == 2018)
    ]
    .drop(columns=['ano'])
)

inspect(municipio_funcionarios);<jupyter_output>[2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020]
shape: (5502, 6)
columns: ['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d', 'totalFuncionarios']<jupyter_text>**Quantidade de empresas ativas nos municípios por divisão de atividade econômica, antes da pandemia (< 2020)**<jupyter_code># dados agregados apartir de atividades de empresas ativas do Nordeste antes de 2020 (pandemia)
ne_municipio_cnaes = pd.read_parquet('../data/handled/rfb_municipio_cnaes.parquet')

# fazendo transição de linhas para colunas, os indicadores de quantidade de empresas por divisao
divisao_cnae_aliases = list(ne_municipio_cnaes['divisaoCnaeAlias'].unique().tolist())

ne_municipio_cnaes_pivoted = (
    ne_municipio_cnaes.pivot(
        index=['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d'],
        columns='divisaoCnaeAlias',
        values='qtEmpresas'
    )
    .reset_index()
    .rename(columns={d: f'qtEmpresas{d.title()}' for d in divisao_cnae_aliases})
)

# inspect(ne_municipio_cnaes);
inspect(ne_municipio_cnaes_pivoted);<jupyter_output>shape: (1767, 27)
columns: ['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d', 'qtEmpresasAdmicomp', 'qtEmpresasAgropecu', 'qtEmpresasAguaesgo', 'qtEmpresasAlojalim', 'qtEmpresasArtcules', 'qtEmpresasAutomoto', 'qtEmpresasConstruc', 'qtEmpresasDomestic', 'qtEmpresasEducacao', 'qtEmpresasEletrgas', 'qtEmpresasFinanseg', 'qtEmpresasImobilia', 'qtEmpresasIndextra', 'qtEmpresasIndtrans', 'qtEmpresasInfocomu', 'qtEmpresasInternac', 'qtEmpresasOngassoc', 'qtEmpresasOutrserv', 'qtEmpresasProcient', 'qtEmpresasPublsoci', 'qtEmpresasSaudsoci', 'qtEmpresasTranspor']<jupyter_text>**Quantidade estimada de habitantes nos municípios, em 2020**<jupyter_code>municipio_populacao_estimada = pd.read_parquet('../data/handled/ibge_municipio_populacao_estimada.parquet')

print(municipio_populacao_estimada['ano'].sort_values().unique())

municipio_populacao_estimada = (
    municipio_populacao_estimada[
        # (municipio_populacao_estimada['uf'].isin(UFS)) & 
        (municipio_populacao_estimada['ano'] == 2020)
    ]
    .drop(columns=['ano'])
)

inspect(municipio_populacao_estimada);<jupyter_output>[2020]
shape: (5570, 7)
columns: ['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'populacaoEstimada', 'municipioCodigo6d', 'faixaPopulacaoEstimada']<jupyter_text>**Quantidade homicídios nos municípios, em 2018**<jupyter_code># homicídios de jovens e adultos agregados por cidade
municipio_homicidios = pd.read_parquet('../data/handled/sim_municipio_homicidios.parquet')

print((municipio_homicidios['dtobito_year']).unique())

municipio_homicidios = (
    municipio_homicidios[
        # (municipio_homicidios['uf'].isin(UFS)) & 
        (municipio_homicidios['dtobito_year'] == 2018)
    ]
    .drop(columns=['dtobito_year'])
)

inspect(municipio_homicidios);<jupyter_output>[2013 2014 2016 2017 2018 2015]
shape: (2677, 12)
columns: ['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d', 'qtHomicidios', 'qtHomicidiosFeminino', 'qtHomicidiosMasculino', 'qtHomicidiosComAssistmed', 'qtHomicidiosSemAssistmed', 'qtHomicidiosSemOcupacao', 'qtHomicidiosComOcupacao']<jupyter_text>**Quantidade homicídios nos estados, em 2018**<jupyter_code># homicídios de jovens e adultos agregados por estado

estado_homicidios = (
    municipio_homicidios
    .groupby(['uf', 'ufCodigo'])
    .agg(
        ufQtHomicidios=('qtHomicidios', 'sum'),
        ufQtHomicidiosFeminino=('qtHomicidiosFeminino', 'sum'),
        ufQtHomicidiosMasculino=('qtHomicidiosMasculino', 'sum'),

        # TODO homicidios por racacor
        # TODO homicidios por lococor

        ufQtHomicidiosComAssistmed=('qtHomicidiosComAssistmed', 'sum'),
        ufQtHomicidiosSemAssistmed=('qtHomicidiosSemAssistmed', 'sum'),
        ufQtHomicidiosSemOcupacao=('qtHomicidiosSemOcupacao', 'sum'),
        ufQtHomicidiosComOcupacao=('qtHomicidiosComOcupacao', 'sum'),
    )
    .reset_index()
)

inspect(estado_homicidios);<jupyter_output>shape: (27, 9)
columns: ['uf', 'ufCodigo', 'ufQtHomicidios', 'ufQtHomicidiosFeminino', 'ufQtHomicidiosMasculino', 'ufQtHomicidiosComAssistmed', 'ufQtHomicidiosSemAssistmed', 'ufQtHomicidiosSemOcupacao', 'ufQtHomicidiosComOcupacao']<jupyter_text>**Alguns indicadores do censo básico IBGE agregados por município, em 2010**<jupyter_code>municipio_censo_basico = pd.read_parquet('../data/handled/ibge_municipio_censo_basico.parquet')

print((municipio_censo_basico['ano']).unique())

municipio_censo_basico = (
    municipio_censo_basico[
        (municipio_censo_basico['ano'] == 2010)
    ]
    .drop(columns=['ano'])
)

municipio_censo_basico = municipio_censo_basico[[
    'uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d', 'mediaMoradoresDomicilios',
    'mediaRendaMensalMoradores', 'partSetorUrbano', 'nivelUrbanizacao'
]]

inspect(municipio_censo_basico);<jupyter_output>[2010]
shape: (5565, 9)
columns: ['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d', 'mediaMoradoresDomicilios', 'mediaRendaMensalMoradores', 'partSetorUrbano', 'nivelUrbanizacao']<jupyter_text>**Alguns indicadores de taxa de rendimento escolar INEP por município, em 2018**<jupyter_code>municipio_rendimento_escolar = pd.read_parquet('../data/handled/inep_municipio_rendimento_escolar.parquet')

municipio_rendimento_escolar = (
    municipio_rendimento_escolar[
        (municipio_rendimento_escolar['ano'] == 2018)
    ]
    .drop(columns=['ano'])
)

municipio_rendimento_escolar = municipio_rendimento_escolar

inspect(municipio_rendimento_escolar);<jupyter_output>shape: (5570, 20)
columns: ['municipioCodigo', 'aprvEfTotal', 'reprvEfTotal', 'abdEfTotal', 'aprvEfAnosIniciais', 'reprvEfAnosIniciais', 'aprvEfAnosFinais', 'reprvEfAnosFinais', 'aprvEmTotal', 'reprvEmTotal', 'abdEmTotal', 'aprvEmNSeriado', 'reprvEmNSeriado', 'abdEmNSeriado', 'uf', 'ufCodigo', 'nomeUf', 'nomeMunicipio', 'nomeMunicipioNorm', 'municipioCodigo6d']<jupyter_text>Combinando dados Combinando informações de diferentes fontes de dados a nível de município, para o ano mais recente<jupyter_code>municipio_features = (
    municipio
    .merge(municipio_populacao_estimada, on=['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d'], how='left')
    .merge(municipio_pib, on=['uf', 'ufCodigo', 'nomeUf', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d'], how='left')
    .merge(municipio_censo_basico, on=['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d'], how='left')
    .merge(municipio_rendimento_escolar, on=['uf', 'ufCodigo', 'nomeUf', 'nomeMunicipio', 'municipioCodigo', 'nomeMunicipioNorm', 'municipioCodigo6d'], how='left')
    .merge(municipio_funcionarios, on=['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d'], how='left')
    .merge(municipio_homicidios, on=['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d'], how='left')

    .merge(estado_homicidios, on=['uf', 'ufCodigo'], how='left')
    .merge(ne_municipio_cnaes_pivoted, on=['uf', 'ufCodigo', 'nomeMunicipio', 'municipioCodigo', 'municipioCodigo6d'], how='left')
)

# algumas normalizações considerando numero de habitantes

for d in divisao_cnae_aliases:
    municipio_features[f'part_empresas_{d}_populacao1k'] = (municipio_features[f'qtEmpresas{d.title()}'] / municipio_features['populacaoEstimada']) * 1e3

# municipio_features['part_homicidios_uf'] = municipio_features['qtHomicidios'] / municipio_features['ufQtHomicidios']
#municipio_features['part_homicidios_sem_ocupacao'] = (municipio_features['qtHomicidiosSemOcupacao'] / municipio_features['qtHomicidios'])

municipio_features['part_homicidios_com_ocupacao'] = (municipio_features['qtHomicidiosComOcupacao'] / municipio_features['qtHomicidios'])

municipio_features['part_funcionarios_populacao'] = municipio_features['totalFuncionarios'] / municipio_features['populacaoEstimada']
municipio_features['part_funcionarios_populacao1k'] = municipio_features['part_funcionarios_populacao'] * 1e3
# municipio_features['part_funcionarios_populacao10k'] = municipio_features['part_funcionarios_populacao'] * 1e4
# municipio_features['part_funcionarios_populacao100k'] = municipio_features['part_funcionarios_populacao'] * 1e5

municipio_features['part_homicidios_populacao'] = municipio_features['qtHomicidios'] / municipio_features['populacaoEstimada']
municipio_features['part_homicidios_populacao1k'] = municipio_features['part_homicidios_populacao'] * 1e3
# municipio_features['part_homicidios_populacao10k'] = municipio_features['part_homicidios_populacao'] * 1e4
# municipio_features['part_homicidios_populacao100k'] = municipio_features['part_homicidios_populacao'] * 1e5

inspect(municipio_features[municipio_features['uf'].isin(config.target_ufs)]);<jupyter_output>shape: (1794, 101)
columns: ['uf', 'ufCodigo', 'nomeUf', 'nomeMunicipio', 'nomeMunicipioNorm', 'municipioCodigo', 'municipioCodigo6d', 'populacaoEstimada', 'faixaPopulacaoEstimada', 'valorBrutoAgropecuraria1000', 'valorBrutoIndustria1000', 'valorBrutoServicos1000', 'valorBrutoUtilidade1000', 'valorBruto1000', 'impostosProdutos1000', 'pib1000', 'pibPerCapita', 'atividadeMaisRelevanteValorBruto1', 'atividadeMaisRelevanteValorBruto2', 'atividadeMaisRelevanteValorBruto3', 'mediaMoradoresDomicilios', 'mediaRendaMensalMoradores', 'partSetorUrbano', 'nivelUrbanizacao', 'aprvEfTotal', 'reprvEfTotal', 'abdEfTotal', 'aprvEfAnosIniciais', 'reprvEfAnosIniciais', 'aprvEfAnosFinais', 'reprvEfAnosFinais', 'aprvEmTotal', 'reprvEmTotal', 'abdEmTotal', 'aprvEmNSeriado', 'reprvEmNSeriado', 'abdEmNSeriado', 'totalFuncionarios', 'qtHomicidios', 'qtHomicidiosFeminino', 'qtHomicidiosMasculino', 'qtHomicidiosComAssistmed', 'qtHomicidiosSemAssistmed', 'qtHomicidiosSemOcupacao', 'qtHomicidiosComOcupacao', 'ufQt[...]<jupyter_text>Categoriando em 5 níveis a taxa de homicídios por 1000 habitantes, conforme distribuição dos dados:<jupyter_code>municipio_features['nivelHomicidiosPopulacao1k'] = pd.cut(
    municipio_features['part_homicidios_populacao1k'],
    bins=[0, 0.2, 0.4, 0.6, 0.8, np.inf],
    labels=['muito baixo', 'baixo', 'médio', 'alto', 'muito alto']
)

mg.plot_hist(municipio_features, 'part_homicidios_populacao1k')<jupyter_output><empty_output><jupyter_text>Recorte de dados Selecionando apenas UFs do Nordeste, dado a semelhança regional (comportamento, dialeto, temperatura, clima, etc.)<jupyter_code>municipio_features_slice = municipio_features[municipio_features['uf'].isin(config.target_ufs)]

municipio_features_slice.head()<jupyter_output><empty_output><jupyter_text>Distribuição de cidades por faixa de população Estimada:<jupyter_code>qt_municipios_faixa_pop = (
    municipio_features_slice
    .groupby('faixaPopulacaoEstimada')
    .agg(qtMunicipios=('municipioCodigo', 'count'))
    .reset_index()
)

plot_bar(qt_municipios_faixa_pop, "faixaPopulacaoEstimada", "qtMunicipios")<jupyter_output><empty_output><jupyter_text>Identificando e selecionando faixas de população com maiores quantidades de municípios com altos níveis de homocídios:<jupyter_code>faixa_populacao_alto_nivel_homicidio = (
    municipio_features_slice[municipio_features_slice['nivelHomicidiosPopulacao1k'].isin(['alto', 'muito alto'])]
    .groupby(['faixaPopulacaoEstimada'])
    .agg(
        qtMunicAltoNivelHomicidio=('municipioCodigo', 'count'),
        qtHomicidios=('qtHomicidios', 'sum'),
        populacaoEstimada=('populacaoEstimada', 'sum'),
    )
    .reset_index()
    .merge(qt_municipios_faixa_pop, on=['faixaPopulacaoEstimada'])
    .assign(part_homicidios_populacao1k=lambda x: (x['qtHomicidios'] / x['populacaoEstimada']) * 1000)
    .assign(qtHomicidios=lambda x: (x['qtHomicidios'] / x['qtMunicAltoNivelHomicidio']))
    .assign(populacaoEstimada=lambda x: (x['populacaoEstimada'] / x['qtMunicAltoNivelHomicidio']))
    .assign(prop=lambda x: (x['qtMunicAltoNivelHomicidio'] / x['qtMunicipios']))
)

max_faixa_populacao_alto_nivel_homicidio = faixa_populacao_alto_nivel_homicidio.sort_values(by='qtMunicAltoNivelHomicidio', ascending=False).iloc[0]['faixaPopulacaoEstimada']

print('Municipios com alto nivel de homicidios por faixa de populacao:')
display(faixa_populacao_alto_nivel_homicidio)

print('Faixa de população com maior quantidade de cidades com alto nivel de homicidios:', max_faixa_populacao_alto_nivel_homicidio)

selecao_faixas_populacao = ['0:10000', '10000:20000', '20000:30000', '30000:50000']

print('Faixas de população selecionadas para recorte:', selecao_faixas_populacao)

# recorte de municipios conforme faixa de populacao selecionada
municipio_features_slice = (
    municipio_features_slice[municipio_features_slice['faixaPopulacaoEstimada'].isin(
        selecao_faixas_populacao
    )]
)

plot_bar(faixa_populacao_alto_nivel_homicidio, "faixaPopulacaoEstimada", "qtMunicAltoNivelHomicidio")<jupyter_output>Municipios com alto nivel de homicidios por faixa de populacao:<jupyter_text>- A maioria das cidades com nível de homicídio (por 1k hab.) alto ou muito estão na faixa de popoulação entre 0 e 10.000- Selecionaremos as seguintes faixas de população para estudo posterior: ['0:10000', '10000:20000', '20000:30000', '30000:50000']  Rotuluando Dados**É possível indentifiar as cidades mais violentas e menos violentas?**Para realizar as análises comparativas posteriores (data_understanding.ipynb), vamos selecionar os municípios mais violentos e os municípios menos violentos: Preenchimento básico de dados:<jupyter_code>numeric_types = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']

numeric_cols = municipio_features_slice.select_dtypes(include=numeric_types).columns.tolist()

municipio_features_slice = municipio_features_slice.fillna({c: 0.0 for c in numeric_cols})

municipio_features_slice = municipio_features_slice.fillna({
    'nivelHomicidiosPopulacao1k': 'muito baixo'
})

inspect(municipio_features_slice);<jupyter_output>shape: (1603, 102)
columns: ['uf', 'ufCodigo', 'nomeUf', 'nomeMunicipio', 'nomeMunicipioNorm', 'municipioCodigo', 'municipioCodigo6d', 'populacaoEstimada', 'faixaPopulacaoEstimada', 'valorBrutoAgropecuraria1000', 'valorBrutoIndustria1000', 'valorBrutoServicos1000', 'valorBrutoUtilidade1000', 'valorBruto1000', 'impostosProdutos1000', 'pib1000', 'pibPerCapita', 'atividadeMaisRelevanteValorBruto1', 'atividadeMaisRelevanteValorBruto2', 'atividadeMaisRelevanteValorBruto3', 'mediaMoradoresDomicilios', 'mediaRendaMensalMoradores', 'partSetorUrbano', 'nivelUrbanizacao', 'aprvEfTotal', 'reprvEfTotal', 'abdEfTotal', 'aprvEfAnosIniciais', 'reprvEfAnosIniciais', 'aprvEfAnosFinais', 'reprvEfAnosFinais', 'aprvEmTotal', 'reprvEmTotal', 'abdEmTotal', 'aprvEmNSeriado', 'reprvEmNSeriado', 'abdEmNSeriado', 'totalFuncionarios', 'qtHomicidios', 'qtHomicidiosFeminino', 'qtHomicidiosMasculino', 'qtHomicidiosComAssistmed', 'qtHomicidiosSemAssistmed', 'qtHomicidiosSemOcupacao', 'qtHomicidiosComOcupacao', 'ufQt[...]<jupyter_text>Selecionando os municipios mais violentos conforme as faixas de população selecionadas anteriormente:<jupyter_code>top_municipios_mais_violentos = (
    municipio_features_slice[
        municipio_features_slice['nivelHomicidiosPopulacao1k'].isin(['muito alto', 'alto'])
    ]
)

inspect(top_municipios_mais_violentos);<jupyter_output>shape: (40, 102)
columns: ['uf', 'ufCodigo', 'nomeUf', 'nomeMunicipio', 'nomeMunicipioNorm', 'municipioCodigo', 'municipioCodigo6d', 'populacaoEstimada', 'faixaPopulacaoEstimada', 'valorBrutoAgropecuraria1000', 'valorBrutoIndustria1000', 'valorBrutoServicos1000', 'valorBrutoUtilidade1000', 'valorBruto1000', 'impostosProdutos1000', 'pib1000', 'pibPerCapita', 'atividadeMaisRelevanteValorBruto1', 'atividadeMaisRelevanteValorBruto2', 'atividadeMaisRelevanteValorBruto3', 'mediaMoradoresDomicilios', 'mediaRendaMensalMoradores', 'partSetorUrbano', 'nivelUrbanizacao', 'aprvEfTotal', 'reprvEfTotal', 'abdEfTotal', 'aprvEfAnosIniciais', 'reprvEfAnosIniciais', 'aprvEfAnosFinais', 'reprvEfAnosFinais', 'aprvEmTotal', 'reprvEmTotal', 'abdEmTotal', 'aprvEmNSeriado', 'reprvEmNSeriado', 'abdEmNSeriado', 'totalFuncionarios', 'qtHomicidios', 'qtHomicidiosFeminino', 'qtHomicidiosMasculino', 'qtHomicidiosComAssistmed', 'qtHomicidiosSemAssistmed', 'qtHomicidiosSemOcupacao', 'qtHomicidiosComOcupacao', 'ufQtHo[...]<jupyter_text>Gerando amostra de municípios menos violentos conforme distribuicao de faixaPopulacaoEstimada dos municípios mais violentos. Para cada faixa de população, seleciona os municípios com menores índices de violência e maiores índices de pibpercapta:<jupyter_code>top_municipios_menos_violentos = strat_sample_from_base_dist(
    (
        municipio_features_slice[
           municipio_features_slice['nivelHomicidiosPopulacao1k'].isin(['muito baixo', 'baixo', 'médio'])
        ]
        .sort_values(by='pibPerCapita', ascending=False)
    ),
    top_municipios_mais_violentos,
    'faixaPopulacaoEstimada'

)<jupyter_output><empty_output><jupyter_text>Comparando distribuição dos municípios mais/menos violentos por faixaPopulacaoEstimada:<jupyter_code>print(Counter(top_municipios_mais_violentos['faixaPopulacaoEstimada']))
print(Counter(top_municipios_menos_violentos['faixaPopulacaoEstimada']))<jupyter_output>Counter({'0:10000': 14, '10000:20000': 12, '20000:30000': 10, '30000:50000': 4})
Counter({'0:10000': 14, '10000:20000': 12, '20000:30000': 10, '30000:50000': 4})<jupyter_text>Conforme a seleção anterior de municípios mais/menos violentos, vamos criar um conjunto de dados `municipios_ranking` para juntar as amostrar dos municípios e facilitar as análises posteriores. Usaremos o campo `violento == True` para rotular os municípios mais violentos nesse conjunto de dados:<jupyter_code>target_col = 'violento'

divisao_cnae_aliases = [
    'publsoci',
    'agropecu',
    'alojalim',
    'artcules',
    'admicomp',
    'ongassoc',
    'finanseg',
    'imobilia',
    'procient',
    'automoto',
    'construc',
    'educacao',
    'eletrgas',
    'indtrans',
    'infocomu',
    'outrserv',
    'saudsoci',
    'transpor',
    'aguaesgo',
    'indextra',
    'domestic',
    'internac'
]

# seleção de indicadores de diferentes fontes
municipios_features_cols_selection = (
    [
        'uf',
        'nomeMunicipio',
        'populacaoEstimada',

        'partSetorUrbano',
        'mediaMoradoresDomicilios',
        'mediaRendaMensalMoradores',

        # 'pib1000',
        'pibPerCapita',
        # 'atividadeMaisRelevanteValorBruto1', 
        # 'atividadeMaisRelevanteValorBruto2',
        # 'atividadeMaisRelevanteValorBruto3',

        # 'totalFuncionarios',
        'part_funcionarios_populacao1k',

        # 'part_homicidios_sem_ocupacao',
        'part_homicidios_com_ocupacao',

        'part_homicidios_populacao1k',
        'nivelHomicidiosPopulacao1k',
    ]
    + [f'part_empresas_{d}_populacao1k' for d in divisao_cnae_aliases]
    + [
        'aprvEfTotal', 'reprvEfTotal', 'abdEfTotal',
        'aprvEmTotal', 'reprvEmTotal', 'abdEmTotal',
        'aprvEmNSeriado', 'reprvEmNSeriado', 'abdEmNSeriado'
    ]
    + [target_col]
)

rank_col = 'part_homicidios_populacao1k'

top_municipios_mais_violentos[target_col] = True
top_municipios_menos_violentos[target_col] = False

municipios_features_labeled = pd.concat([top_municipios_mais_violentos, top_municipios_menos_violentos], axis=0)

municipios_features_labeled = municipios_features_labeled[municipios_features_cols_selection]

# print('topn', rank_size)
display('top_municipios_mais_violentos', municipios_features_labeled.sort_values(by='part_homicidios_populacao1k', ascending=False).head(5))
display('top_municipios_menos_violentos', municipios_features_labeled.sort_values(by='part_homicidios_populacao1k', ascending=True).head(5))<jupyter_output><empty_output><jupyter_text>Salvando Dados<jupyter_code>data_names = {
    'municipio_features': municipio_features,
    'municipio_features_slice': municipio_features_slice,
    'municipios_features_labeled': municipios_features_labeled
}

for name, df in data_names.items():
    df.to_parquet(f'../data/handled/{name}.parquet')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1219856336582863, 'fraction_numerical': 0.02655207798871216, 'mean_word_length': 8.04796905222437, 'pattern_counts': {'":': 0, '<': 71, '<?xml version=': 0, '>': 70, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '21', 'dir': 'jupyter-structured-clean-dedup', 'id': '424608', 'license': 'MIT', 'n_tokens_mistral': 9762, 'n_tokens_neox': 9233, 'n_words': 1337, 'path': 'notebooks/1.2_data_target_population.ipynb', 'repo_name': 'dunfrey/BCG-GAMMA-Challenge-2021', 'size': '23388'}