<jupyter_start><jupyter_text>ACIDENTES AÉREOS NO BRASIL O avião sem dúvidas, é uma das maiores invenções já feitas pelo homem.Esse gigante de metal tornou possível levar milhões de pessoas para milhares de quilômetros de distância em um curto espaço de tempo.Só para se ter uma noção de sua importância, a Agência Nacional de Aviação Civil (Anac) divulgou que entre julho de 2017 e junho de 2018 as companhias aéreas brasileiras transportaram mais de 100 milhões de pessoas!Claro que, de vez em quando, acidentes ocorrem e consequetemente várias pessoas acabam morrendo ou ficam feridas. Isso acaba reacendo discussões que destacam a segurança dos aviões e até onde o fator humano é capaz de influenciar no desenrolar de um acidente. Pensando nisso, irei realizar uma análise de dados em busca de informações mais superficiais sobre o assunto mas também não deixando de tentar de responder o questionamento acima. Para responder a essa e outras perguntas irei dividir o meu trabalho em duas partes.A parte da coleta e do processamento de dados será feita no próprio Jupypter Notebook. Já o Power BI ficará com a parte da exploração dos dados. Conjuntos de DadosPara o estudo estarei utilizando três arquivos que estão disponíveis no site abaixo, eles foram disponibilizados pelo Centro de Investigação e Prevenção de Acidentes Aeronáuticos (Cenipa).Os dados possuem informações das ocorrências como as datas e as localizações, especificações sobre as aeronaves envolvidas e também os fatores que levaram aos acidentes.http://www.dados.gov.br/dataset/ocorrencias-aeronauticas-da-aviacao-civil-brasileira Perguntas a ResponderAqui estou selecionando algumas questões que considero interessantes a se saber deste conjunto de dados:• Qual a quantidade de ocorrências e fatalidade ao longo dos últimos dez anos?• Quais as regiões e seus estados que mais possuem registros?• Qual a quantidade de aeronaves e seus tipos que mais estão envolvidas nestes acidentes?• Quais são os principais influenciadores nas causas dos acidentes?• Baseado em ocorrências onde o fator humano foi o causador, quais foram os erros mais cometidos?• Referente a pergunta anterior, em quais fases de operação eles estão mais presentes? Coleta de DadosPrimeiramente vou começar importando as bibliotecas e os arquivos que serão utilizados!<jupyter_code># Importando as biblotecas

import pandas as pd
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
# Importando os três arquivos utilizando a função read_csv do tipo (parsing) para conversão dos arquivos em Dataframes

aeronaves = pd.read_csv('./Projeto/Dados_acidentes/aeronave.csv', sep=';', encoding='utf8')

ocorrencias = pd.read_csv('./Projeto/Dados_acidentes/ocorrencia.csv', sep=';', encoding='utf8')

fatores = pd.read_csv('./Projeto/Dados_acidentes/fator_contribuinte.csv', sep=';', encoding='utf8')<jupyter_output><empty_output><jupyter_text>Arquivos e blibliotecas importados com sucesso!Agora chegou a hora de fazer a leitura de cada um deles.<jupyter_code># Verificando a quantidade de linhas e colunas de cada Dataset

print(aeronaves.shape)
print(ocorrencias.shape)
print(fatores.shape)
# Extraindo as colunas do Dataset aeronaves

aeronaves.columns
# Extraindo as colunas do Dataset ocorrencias

ocorrencias.columns
# Extraindo as colunas do Dataset fatores

fatores.columns<jupyter_output><empty_output><jupyter_text>Processamento dos Dados Eliminando algumas colunas que são consideradas irrelevantes para o estudo.<jupyter_code># Eliminando as colunas

aeronaves.drop(['aeronave_tipo_icao', 'aeronave_pmd' ,'aeronave_pmd_categoria', 'aeronave_pais_fabricante',
               'aeronave_pais_registro','aeronave_registro_categoria','aeronave_registro_segmento',
               'aeronave_tipo_operacao', 'aeronave_voo_origem', 'aeronave_voo_destino'], axis = 1, inplace = True)

ocorrencias.drop(["codigo_ocorrencia1", "codigo_ocorrencia2", "codigo_ocorrencia3", "codigo_ocorrencia4", 'ocorrencia_latitude',
                  'ocorrencia_longitude', "ocorrencia_pais", "ocorrencia_aerodromo","investigacao_aeronave_liberada", "investigacao_status", 
                  "divulgacao_relatorio_numero", "divulgacao_relatorio_publicado","divulgacao_dia_publicacao"], axis = 1, inplace = True)<jupyter_output><empty_output><jupyter_text>Renomeando as colunas restantes<jupyter_code># Renomeando as colunas restantes

aeronaves.columns = ['Ocorrencia','Matricula','Categoria','Aeronave','Fabricante','Modelo','Motor','Qnt_Motores',
                    'Assentos','Ano_Fabricacao','Fase_Operacao','Dano','Fatalidades']

ocorrencias.columns = ['Ocorrencia','Classificacao_ocorrencias', 'Cidade', 'UF', 'Dia', 'Hora',
                      'Total_Recomendacoes', 'Aeronaves_Envolvidas', 'Saida_Pista']

fatores.columns = ['Ocorrencia', 'Fator_Nome', 'Fator_Aspecto', 'Fator_Condicionante', 'Fator_Area']<jupyter_output><empty_output><jupyter_text>Dando uma olhada no resultado!<jupyter_code># Imprimindo as primeiras linhas do Dataset aeronave

aeronaves.head()
# Imprimindo as primeiras linhas do Dataset ocorrencias

ocorrencias.head()
# Imprimindo as primeiras linhas do Dataset fatores

fatores.head()<jupyter_output><empty_output><jupyter_text>Alguns erros já foram identificados!As colunas Assentos e Ano_Fabricacao do Dataset aeronaves estão no formato float64.Vou resolver esse problema transformando a coluna Assentos para o formato int64 e depois a coluna Ano_Fabricacao para o formato de texto.<jupyter_code># Convertendo os tipos das colunas

aeronaves['Assentos'] = aeronaves.Assentos.astype('int64')

aeronaves['Ano_Fabricacao'] = aeronaves.Ano_Fabricacao.astype('object')<jupyter_output><empty_output><jupyter_text>Como visto, um erro acabou de acontecer!Isso porque a coluna Assentos apresenta valores missing, ou seja nulos.<jupyter_code># Buscando por valores missing em todas as colunas da tabela aeronave

aeronaves.isnull().sum()
# Retornando algumas linhas com esses valores

aeronaves[aeronaves.isnull().any(axis=1)].head(3)
# Buscando por valores missing em todas as colunas da tabela ocorrencias

ocorrencias.isnull().sum()
# Retornando algumas linhas com esses valores

ocorrencias[ocorrencias.isnull().any(axis=1)].head(3)
# Buscando por valores missing em todas as colunas da tabela fatores

fatores.isnull().sum()<jupyter_output><empty_output><jupyter_text>Como visto o Dataset fatores é o único dos três que já está devidamente tratado!A coluna Assentos e Ano_Fabricacao da tabela aeronaves e também a coluna Hora da tabela ocorrencias apresentam o mesmo problema.Uma coisa que eu sempre faço além de buscar valores missing é tentar identificar algum outro tipo de padrão no meio dos dados, principalmente aqueles que acontecem com mais frequência.Para isso vou buscar os dez valores que mais são frequentes nestas colunas!<jupyter_code># Os dez valores mais frequentes na coluna Assentos do dataset aeronaves

aeronaves.Assentos.value_counts().head(10)<jupyter_output><empty_output><jupyter_text>Como identificado temos os valores que são "0.0" zeros, isso está certo?Lógicamente que não, pois não existe aeronave com uma quantidade de assentos igual a zero!<jupyter_code># Identificando algumas linhas que estão com os valores 0.0

aeronaves.loc[aeronaves['Assentos'] == 0.0,['Ocorrencia','Assentos']].head()<jupyter_output><empty_output><jupyter_text>Aqui farei o mesmo tipo de pesquisa para a coluna Ano_Fabricacao.<jupyter_code># Identificando algumas linhas que estão com os valores 0.0

aeronaves.loc[aeronaves['Ano_Fabricacao'] == 0.0, ['Ocorrencia', 'Ano_Fabricacao']].head()<jupyter_output><empty_output><jupyter_text>Como bem visto, a coluna Ano_Fabricacao também apresenta o mesmo problema...Como vou resolver isso? Primeiramente vou começar convertando todos os valores nulos para "0.0" zero nas colunas Assentos e Ano_Fabricacao. Farei isso utilizando uma função que aplique este processos de uma vez só em todas as colunas.<jupyter_code># Converte valores nulos para "0.0" zero

def convert_na(dataframe, column):
    for i in column:
        dataframe[i].fillna(0.0, inplace = True)

convert_na(aeronaves,['Assentos','Ano_Fabricacao'])
aeronaves[aeronaves.isnull().any(axis=1)].head(3)<jupyter_output><empty_output><jupyter_text>Agora que os valores estão convertidos, chegou a hora de reaplicar o código que tentei acima. Ele vai alterar o tipo de cada uma das colunas!<jupyter_code># Convertendo os tipos das colunas

aeronaves['Assentos'] = aeronaves.Assentos.astype('int64')

aeronaves['Ano_Fabricacao'] = aeronaves.Ano_Fabricacao.astype('int64')
# Convertendo os tipos das colunas

aeronaves['Assentos'] = aeronaves.Assentos.astype('str')

aeronaves['Ano_Fabricacao'] = aeronaves.Ano_Fabricacao.astype('str')
aeronaves.dtypes<jupyter_output><empty_output><jupyter_text>Vou trocar os valores de 0.0 da coluna Assentos e Ano_Fabricacao por "NÃO INFORMADO"<jupyter_code># Trocando os valores 0 por NÃO INFORMADOS

aeronaves['Assentos'] = aeronaves['Assentos'].replace(['0'], 'NÃO INFORMADO')

aeronaves['Ano_Fabricacao'] = aeronaves['Ano_Fabricacao'].replace(['0'], 'NÃO INFORMADO')<jupyter_output><empty_output><jupyter_text>Não posso esquecer também da coluna Hora do Dataset ocorrencias!Vou fazer a alteração de valores nulos apenas por um espaço vazio, ' '.<jupyter_code># ocorrencias['Hora'].fillna(' ', inplace=True)

# Usando uma função para se aplicar em várias colunas se fosse o caso:

def convert_na(dataframe, column):
    for i in column:
        dataframe[i].fillna(' ', inplace = True)

convert_na(ocorrencias,['Hora'])<jupyter_output><empty_output><jupyter_text>Com todas as alterações feitas, vou verififcar novamente a existência de valores missing nos dados!<jupyter_code># Verificando a quantidade de valores nulos após o processamento

print(aeronaves.isnull().sum().sum())
print(ocorrencias.isnull().sum().sum())<jupyter_output>0
0<jupyter_text>Ao que parece tudo está certo! Porém se eu puxar mais linhas dos datasets é fácil de se encontrar valores do tipo "***" nos campos de colunas.Isso pode ser deixado ou transformado e irei fazer isso dentro do Power BI.<jupyter_code># Retornando algumas linhas com esses valores

aeronaves.head(20)<jupyter_output><empty_output><jupyter_text>Agora chegou a hora de salvaros arquivos já processados e aplicá-los no Power BI.Antes de fazer isso, vou adicionar uma coluna de contagem para cada um dos datasets. Isso vai me ajudar nas visualizações.<jupyter_code># Adicionando uma coluna contagem

aeronaves['Contagem'] = 1
ocorrencias['Contagem'] = 1
fatores['Contagem'] = 1<jupyter_output><empty_output><jupyter_text>Em seguida também vou adicionar uma nova coluna no Dataset ocorrencias, essa coluna será referente a região brasileira onde a ocorrência aconteceu e irei fazer ela baseada na coluna UF.<jupyter_code>norte = ['AC', 'AP', 'AM', 'PA', 'RO', 'RR', 'TO']

nordeste = ['AL', 'BA', 'CE', 'MA', 'PB', 'PE', 'PI', 'RN', 'SE']

centro_oeste = ['GO', 'MT', 'MS', 'DF']

sudeste = ['ES', 'MG', 'RJ', 'SP']

sul = ['PR', 'SC', 'RS']

regioes = []

for x in ocorrencias.UF:
    if x in norte:
        regioes.append('NORTE')
    
    if x in nordeste:
        regioes.append('NORDESTE')
        
    if x in centro_oeste:
        regioes.append('CENTRO-OESTE')
        
    if x in sudeste:
        regioes.append('SUDESTE')
        
    if x in sul:
        regioes.append('SUL')
        
    if x == '***':
        regioes.append('***')
        
print(regioes[0:10])
print(len(regioes))
# Adicionando a nova coluna ao Dataset ocorrencias

ocorrencias['REGIOES'] = regioes

ocorrencias.head(10)
# Salvando os arquivos

aeronaves.to_csv('./Projeto/Dados/aeronaves.csv')
ocorrencias.to_csv('./Projeto/Dados/ocorrencias.csv')
fatores.to_csv('./Projeto/Dados/fatores.csv')<jupyter_output><empty_output><jupyter_text>Exploração dos dados• Qual a quantidade de ocorrências e de fatalidade ao longo dos últimos dez anos?• Quais as regiões e seus estados que mais possuem registros?• Qual a quantidade de aeronaves e seus tipos que mais estão envolvidas nestes acidentes?<jupyter_code>from IPython.display import Image

Image(filename="./dashboard/nac1.png", width=800, height=500)<jupyter_output><empty_output><jupyter_text>Para a apresentação das primeiras informações fiz este dashboard que é constituido de gráficos de mapa e de linha.Também estão presentes campos de filtros e também campos de somas encontrados na região inferior direita do dashboard que devolve o total e seus tipos de aeronaves envolvidas de acordo com as segmentações feitas.Visualizando o dashboard é possível identificar-se que os estados de São Paulo, Minas Gerais e Rio de Janeiro são os que mais possuem ocorrências.Ao lado direito temos a distribuição do total número de ocorrências registrados no Brasil ao longo do período dos últimos dez anos e abaixo é claro, a quantidade do tipo de aeronaves envolvidas. • Quais são os principais influenciadores nas causas dos acidentes?<jupyter_code>Image(filename="./dashboard/nac2.png", width=800, height=500)<jupyter_output><empty_output><jupyter_text>Para responder a essa e demais perguntas construi esse outro dashboard.Ele é constituído por três seções de filtro onde se controla os fatores que influenciaram à ocorrência dos acidentes, a categoria que aeronave estava registrada, por exemplo: agricula ou particular, e também dois gráficos de barras de colunas que devolvem os cinco maiores erros cometidos e em que fases eles mais estão presentes, isso é claro de acordo com as segmentações feitas.Aqui vai um rápido esclarimento! Na tela anterior é possível se ver que o número total de ocorrências registradas no Brasil no perído dos últimos dez anos é igual a 5307, porém aqui agora é mostrado o valor de 3717.Isso acontece porque nem todas as ocorrências retornam as possíveis causas dos acidentes, então por isso esse valor é retornado.Logo, respondendo a pergunta, os principais ocasionadores de ocorrências são os fatores de aspecto médico, psicológico, desempenho do ser humano e infraestrutura aeroportuária. • Baseado em ocorrências onde o desempenho humano foi o causador, quais foram os erros mais cometidos?<jupyter_code>Image(filename="./dashboard/nac3.png", width=800, height=500)<jupyter_output><empty_output><jupyter_text>Segmentando os dados pelos fatores humanos temos que estes são 92% do total de registros devolvidos, logo é o principal ocasionador de acidentes aéreos.Com base nisso, o gráfico de barras da esquerda devolve os cinco maiores erros cometidos que são: o julgamento de pilotagem, a aplicação de comandos, a supervisão gerencial, o planejamento de voo e por último a manutenção de aeronaves!  • Referente a pergunta anterior, quando cometido esses principais erros em quais fases de operação eles mais se apresentam?<jupyter_code>Image(filename="./dashboard/nac4.png", width=800, height=500)<jupyter_output><empty_output><jupyter_text>Destacando o principal erro cometido que é o de julgamento de pilotagem, podemos ver ao lado no outro gráfico de barras que esse erro é muito presente nas fases onde a aeronave tem que fazer o pouso, sua corrida pós ao pouso e também na fase de decolagem! O mesmo tipo de análise pode ser feito novamente, mas agora focando o estado de São Paulo!<jupyter_code>Image(filename="./dashboard/sp1.png", width=800, height=500)<jupyter_output><empty_output><jupyter_text>Visualizando o gráfico de linhas é possível identificar que o número de ocorrências a partir do ano de 2017 começou a crescer novamente.Usarei a segmentação de dados por data para olhar mais de perto essa tendência. Dashboard atualizado com os números de ocorrências acidentes e também com o número de mortes baseado no intervalo de tempo que vai do ano de 2017 ao ano de 2019.<jupyter_code>Image(filename="./dashboard/sp2.png", width=800, height=500)
Image(filename="./dashboard/sp3.png", width=800, height=500)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.07858583312326695, 'fraction_numerical': 0.008948827829594152, 'mean_word_length': 5.884598698481562, 'pattern_counts': {'":': 0, '<': 96, '<?xml version=': 0, '>': 96, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '24', 'dir': 'jupyter-structured-clean-dedup', 'id': '603201', 'license': 'Apache-2.0', 'n_tokens_mistral': 5759, 'n_tokens_neox': 5550, 'n_words': 1743, 'path': 'acidentes.ipynb', 'repo_name': 'eronsantosbetine/Acidentes-Aereos', 'size': '15868'}