-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #222 from Winzen/br_fbsp_absp
[dados] br_fbsp_absp
- Loading branch information
Showing
6 changed files
with
296 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
{{ | ||
config( | ||
alias='uf', | ||
schema='br_fbsp_absp' | ||
) | ||
}} | ||
SELECT | ||
SAFE_CAST(ano AS INT64) ano, | ||
SAFE_CAST(sigla_uf AS STRING) sigla_uf, | ||
SAFE_CAST(quantidade_cvli AS INT64) quantidade_cvli, | ||
SAFE_CAST(quantidade_feminicidio AS INT64) quantidade_feminicidio, | ||
SAFE_CAST(quantidade_ocorrencia_homicidio_doloso AS INT64) quantidade_ocorrencia_homicidio_doloso, | ||
SAFE_CAST(quantidade_vitima_homicidio_doloso AS INT64) quantidade_vitima_homicidio_doloso, | ||
SAFE_CAST(quantidade_latrocinio AS INT64) quantidade_latrocinio, | ||
SAFE_CAST(quantidade_lesao_corporal_seguida_de_morte AS INT64) quantidade_lesao_corporal_seguida_de_morte, | ||
SAFE_CAST(quantidade_morte_a_esclarecer AS INT64) quantidade_morte_a_esclarecer, | ||
SAFE_CAST(quantidade_morte_intervencao_policial_civil_servico AS INT64) quantidade_morte_intervencao_policial_civil_servico, | ||
SAFE_CAST(quantidade_morte_intervencao_policial_civil_fora_servico AS INT64) quantidade_morte_intervencao_policial_civil_fora_servico, | ||
SAFE_CAST(quantidade_morte_intervencao_policial_militar_servico AS INT64) quantidade_morte_intervencao_policial_militar_servico, | ||
SAFE_CAST(quantidade_morte_intervencao_policial_militar_fora_servico AS INT64) quantidade_morte_intervencao_policial_militar_fora_servico, | ||
SAFE_CAST(quantidade_morte_violenta_intencional AS INT64) quantidade_morte_violenta_intencional, | ||
SAFE_CAST(quantidade_policial_civil_morto_confronto_servico AS INT64) quantidade_policial_civil_morto_confronto_servico, | ||
SAFE_CAST(quantidade_policial_civil_morto_confronto_fora_servico AS INT64) quantidade_policial_civil_morto_confronto_fora_servico, | ||
SAFE_CAST(quantidade_policial_militar_morto_confronto_servico AS INT64) quantidade_policial_militar_morto_confronto_servico, | ||
SAFE_CAST(quantidade_policial_militar_morto_confronto_fora_servico AS INT64) quantidade_policial_militar_morto_confronto_fora_servico, | ||
SAFE_CAST(quantidade_suicidio AS INT64) quantidade_suicidio, | ||
SAFE_CAST(quantidade_estupro AS INT64) quantidade_estupro, | ||
SAFE_CAST(quantidade_tentativa_estupro AS INT64) quantidade_tentativa_estupro, | ||
SAFE_CAST(quantidade_furto_veiculo AS INT64) quantidade_furto_veiculo, | ||
SAFE_CAST(quantidade_roubo_instituicao_financeira AS INT64) quantidade_roubo_instituicao_financeira, | ||
SAFE_CAST(quantidade_roubo_carga AS INT64) quantidade_roubo_carga, | ||
SAFE_CAST(quantidade_roubo_de_veiculo AS INT64) quantidade_roubo_de_veiculo, | ||
SAFE_CAST(quantidade_arma_fogo_apreendida AS INT64) quantidade_arma_fogo_apreendida, | ||
SAFE_CAST(quantidade_registro_pessoa_desaparecida AS INT64) quantidade_registro_pessoa_desaparecida, | ||
SAFE_CAST(quantidade_populacao_sistema_penitenciario AS INT64) quantidade_populacao_sistema_penitenciario, | ||
SAFE_CAST(despesa_empenhada_seguranca_publica AS FLOAT64) despesa_empenhada_seguranca_publica | ||
FROM basedosdados-staging.br_fbsp_absp_staging.uf AS t |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import os | ||
import pandas as pd | ||
from columns import columns_order, real_columns | ||
|
||
|
||
def set_row(df): | ||
keys = df.columns.tolist() | ||
modelo_dict = {keys[n]: 0 for n in range(len(keys))} | ||
return modelo_dict | ||
|
||
|
||
def get_clean_data(): | ||
|
||
arquivos = os.listdir(os.getcwd().replace("code", "input")) | ||
|
||
dfs = [pd.read_excel(f"../input/{df}") for df in arquivos] | ||
df = pd.concat(dfs) | ||
|
||
df_group = df.groupby(["ano", "uf"], group_keys=True).apply(lambda x: x)[["tipo_de_crime", "qtd"]] | ||
df_raw = pd.DataFrame(columns=columns_order) | ||
|
||
modelo_dict = set_row(df_raw) | ||
for ano in df["ano"].sort_values(ascending=False).unique(): | ||
for uf in df["uf"].unique(): | ||
condition = (df_group.index.get_level_values("uf") == uf) & (df_group.index.get_level_values("ano") == ano) | ||
modelo_dict["ano"] = ano | ||
modelo_dict["sigla_uf"] = uf | ||
for dado in df_group[condition].iloc: | ||
modelo_dict[dado[0]] = dado[1] | ||
df_raw.loc[len(df_raw)] = modelo_dict | ||
modelo_dict = set_row(df_raw) | ||
|
||
remove_list_colunas = [ | ||
"Mortes decorrentes de intervenções policiais - Total (Policiais civis e militares em serviço e fora)", | ||
"Roubo e furto de veículos"] | ||
|
||
for remove in remove_list_colunas: | ||
df_raw = df_raw.drop(remove, axis=1) | ||
|
||
for column in df_raw.columns: | ||
if column not in ["ano", "sigla_uf", "Despesas empenhadas na Função Segurança Pública"]: | ||
df_raw[column] = df_raw[column].astype("Int64") | ||
|
||
df_raw.columns = real_columns | ||
df_raw = df_raw[~df_raw["sigla_uf"].isin(["Brasil"])] | ||
|
||
df_raw.to_csv("../output/br_fbsp_absp_uf.csv", index=False) | ||
|
||
|
||
if __name__ == '__main__': | ||
get_clean_data() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
columns_order = ['ano', | ||
'sigla_uf', | ||
'CVLI Crimes violentos letais intencionais', | ||
'Feminicídios', | ||
'Homicídio doloso - N° ocorrências', | ||
'Homicídio doloso - N° vítimas', | ||
'Latrocínio', | ||
'Lesão corporal seguida de morte', | ||
'Mortes a esclarecer', | ||
'Mortes decorrentes de intervenções de Policiais Civis em serviço', | ||
'Mortes decorrentes de intervenções de Policiais Civis fora de serviço', | ||
'Mortes decorrentes de intervenções de Policiais Militares em serviço', | ||
'Mortes decorrentes de intervenções de Policiais Militares fora de serviço', | ||
'Mortes decorrentes de intervenções policiais - Total (Policiais civis e militares em serviço e fora)', | ||
'Mortes Violentas Intencionais', | ||
'Policiais Civis mortos em confronto em serviço', | ||
'Policiais Civis mortos em confronto ou por lesão não natural fora de serviço', | ||
'Policiais Militares mortos em confronto em serviço', | ||
'Policiais Militares mortos em confronto ou por lesão não natural fora de serviço', | ||
'Suicídio', | ||
'Estupro (incluindo Estupro de Vulnerável)', | ||
'Tentativa de estupro', | ||
'Furto de veículo', | ||
'Roubo a instituição financeira', | ||
'Roubo de carga', | ||
'Roubo de veículo', | ||
'Roubo e furto de veículos', | ||
'Armas de fogo apreendidas', | ||
'Registros de pessoas desaparecidas', | ||
'População do sistema penitenciário', | ||
'Despesas empenhadas na Função Segurança Pública'] | ||
|
||
real_columns = ["ano", | ||
"sigla_uf", | ||
"quantidade_cvli", | ||
"quantidade_feminicidio", | ||
"quantidade_ocorrencia_homicidio_doloso", | ||
"quantidade_vitima_homicidio_doloso", | ||
"quantidade_latrocinio", | ||
"quantidade_lesao_corporal_seguida_de_morte", | ||
"quantidade_morte_a_esclarecer", | ||
"quantidade_morte_intervencao_policial_civil_servico", | ||
"quantidade_morte_intervencao_policial_civil_fora_servico", | ||
"quantidade_morte_intervencao_policial_militar_servico", | ||
"quantidade_morte_intervencao_policial_militar_fora_servico", | ||
"quantidade_morte_violenta_intencional", | ||
"quantidade_policial_civil_morto_confronto_servico", | ||
"quantidade_policial_civil_morto_confronto_fora_servico", | ||
"quantidade_policial_militar_morto_confronto_servico", | ||
"quantidade_policial_militar_morto_confronto_fora_servico", | ||
"quantidade_suicidio", | ||
"quantidade_estupro", | ||
"quantidade_tentativa_estupro", | ||
"quantidade_furto_veiculo", | ||
"quantidade_roubo_instituicao_financeira", | ||
"quantidade_roubo_carga", | ||
"quantidade_roubo_de_veiculo", | ||
"quantidade_arma_fogo_apreendida", | ||
"quantidade_registro_pessoa_desaparecida", | ||
"quantidade_populacao_sistema_penitenciario", | ||
"despesa_empenhada_seguranca_publica"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
from selenium import webdriver | ||
from selenium.webdriver.firefox.options import Options | ||
from selenium.webdriver.support.ui import WebDriverWait | ||
from selenium.webdriver.common.by import By | ||
from selenium.webdriver.support import expected_conditions as EC | ||
from time import sleep | ||
import os | ||
|
||
|
||
def select_selection_download(website): | ||
|
||
abas_dic = [[2, 18, 'tableau_mvi-downloadData'], | ||
[7, 2, 'tableau_estupro-downloadData'], | ||
[12, 5, 'tableau_patrimonial-downloadData'], | ||
[17, 1, 'tableau_mvi_armas-downloadData'], | ||
[22, 1, 'tableau_mvi_gastos-downloadData'], | ||
[27, 1, 'tableau_mvi_desap-downloadData'], | ||
[32, 1, 'tableau_mvi_pop_pris-downloadData']] | ||
|
||
click(website, By.CSS_SELECTOR, "a.dropdown-toggle") | ||
dropdown = website.find_element(By.CSS_SELECTOR, "ul.dropdown-menu") | ||
dropdown = dropdown.find_elements(By.CSS_SELECTOR, "li a") | ||
|
||
for aba_n, aba in enumerate(dropdown): | ||
sleep(2) | ||
website.execute_script("arguments[0].click();", aba) | ||
|
||
for n in range(abas_dic[aba_n][1]): | ||
try: | ||
|
||
click(website, By.CSS_SELECTOR, f'[aria-owns="bs-select-{abas_dic[aba_n][0]}"]') | ||
|
||
click(website, By.ID, f'bs-select-{abas_dic[aba_n][0]}-{n}') | ||
|
||
click(website, By.ID, abas_dic[aba_n][2]) | ||
|
||
except Exception as Error: | ||
print(Error) | ||
break | ||
|
||
|
||
def create_website(): | ||
options = Options() | ||
options.add_argument('-headless') | ||
options.set_preference('browser.download.folderList', 2) | ||
options.set_preference('browser.download.manager.showWhenStarting', False) | ||
options.set_preference('browser.download.dir', os.getcwd().replace("code", "input")) | ||
options.set_preference('browser.helperApps.neverAsk.saveToDisk', "application/x-gzip") | ||
|
||
website = webdriver.Firefox(options=options) | ||
wait = WebDriverWait(website, 10) | ||
|
||
website.get( | ||
f"http://forumseguranca.org.br:3838/") | ||
wait.until(EC.visibility_of_element_located((By.ID, 'tableau_mvi-downloadData'))) | ||
|
||
return website | ||
|
||
|
||
def click(website, by, match, time_sleep=2): | ||
where_click = website.find_element(by, match) | ||
sleep(time_sleep) | ||
website.execute_script("arguments[0].click();", where_click) | ||
|
||
|
||
def download_data(): | ||
website = create_website() | ||
select_selection_download(website) | ||
sleep(5) | ||
website.quit() | ||
|
||
|
||
if __name__ == '__main__': | ||
download_data() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
version: 2 | ||
|
||
models: | ||
- name: br_fbsp_absp | ||
description: A base contempla as informações do Anuário de Segurança Pública a partir de 2007 com as estatísticas criminais compatibilizadas entre anos, com informações acerca dos homicídios, tráfico, furto e roubo, além da força policial, entre outros ao nível das unidades da federação. | ||
columns: | ||
- name: ano | ||
description: Ano | ||
- name: sigla_uf | ||
description: Sigla da Unidade da Federação | ||
- name: quantidade_cvli | ||
description: Quantidade de Crimes violentos letais intencionais (CVLI) | ||
- name: quantidade_feminicidio | ||
description: Quantidade de Feminicídios | ||
- name: quantidade_ocorrencia_homicidio_doloso | ||
description: Quantidade de Homicídio doloso - N° ocorrências | ||
- name: quantidade_vitima_homicidio_doloso | ||
description: Quantidade de Homicídio doloso - N° vítimas | ||
- name: quantidade_latrocinio | ||
description: Quantidade de Latrocínio | ||
- name: quantidade_lesao_corporal_seguida_de_morte | ||
description: Quantidade de Lesão corporal seguida de morte | ||
- name: quantidade_morte_a_esclarecer | ||
description: Quantidade de Mortes a esclarecer | ||
- name: quantidade_morte_intervencao_policial_civil_servico | ||
description: Quantidade de Mortes decorrentes de intervenções de Policiais | ||
Civis em servico | ||
- name: quantidade_morte_intervencao_policial_civil_fora_servico | ||
description: Quantidade de Mortes decorrentes de intervenções de Policiais | ||
Civis fora de servico | ||
- name: quantidade_morte_intervencao_policial_militar_servico | ||
description: Quantidade de Mortes decorrentes de intervenções de Policiais | ||
Militares em servico | ||
- name: quantidade_morte_intervencao_policial_militar_fora_servico | ||
description: Quantidade de Mortes decorrentes de intervenções de Policiais | ||
Militares fora de servico | ||
- name: quantidade_morte_violenta_intencional | ||
description: Quantidade de Mortes Violentas Intencionais | ||
- name: quantidade_policial_civil_morto_confronto_servico | ||
description: Quantidade de Policiais Civis mortos em confronto em servico | ||
- name: quantidade_policial_civil_morto_confronto_fora_servico | ||
description: Quantidade de Policiais Civis mortos em confronto ou por lesão | ||
não natural fora de servico | ||
- name: quantidade_policial_militar_morto_confronto_servico | ||
description: Quantidade de Policiais Militares mortos em confronto em servico | ||
- name: quantidade_policial_militar_morto_confronto_fora_servico | ||
description: Quantidade de Policiais Militares mortos em confronto ou por | ||
lesão não natural fora de servico | ||
- name: quantidade_suicidio | ||
description: Quantidade de Suicídio | ||
- name: quantidade_estupro | ||
description: Quantidade de Estupro (incluindo Estupro de Vulnerável) | ||
- name: quantidade_tentativa_estupro | ||
description: Quantidade de Tentativa de estupro | ||
- name: quantidade_furto_veiculo | ||
description: Quantidade de Furto de veículo | ||
- name: quantidade_roubo_instituicao_financeira | ||
description: Quantidade de Roubo a instituição financeira | ||
- name: quantidade_roubo_carga | ||
description: Quantidade de Roubo de carga | ||
- name: quantidade_roubo_de_veiculo | ||
description: Quantidade de Roubo de veículo | ||
- name: quantidade_arma_fogo_apreendida | ||
description: Quantidade de Armas de fogo apreendidas | ||
- name: quantidade_registro_pessoa_desaparecida | ||
description: Quantidade de Registros de pessoas desaparecidas | ||
- name: quantidade_populacao_sistema_penitenciario | ||
description: Quantidade de População do sistema penitenciário | ||
- name: despesa_empenhada_seguranca_publica | ||
description: Quantidade de Despesas empenhadas na Função Segurança Pública |