<jupyter_start><jupyter_text>Exemplo 1  Problema Considere um arquivo de entrada no formato CSV (comma separated values) com informações relativas a acidentes na aviação civil brasileira nos últimos 10 anos (arquivo anv.csv)As informações estão separadas pelo caracter separador ~ e entre “” (aspas) conforme o exemplo abaixo:```javascript"201106142171203"~"PPGXE"~"AEROCLUBE"~"AVIÃO"~"NEIVA INDUSTRIA AERONAUTICA"~"56- C"~"PAUL"~"PISTÃO"~"MONOMOTOR"~"660"~"LEVE"~"2"~"1962"~"BRASIL"~"BRASIL"~"PRI"~" INSTRUÇÃO"~"SDPW"~"SDPW"~"INDETERMINADA"~"UNKNOWN"~"VOO DE INSTRUÇÃO"~"SUBSTANCIAL"~"0"~"2018-07-09“"201707111402595"~"PPNCG"~"OPERADOR PARTICULAR"~"AVIÃO"~"PIPER AIRCRAFT"~"PA-46- 350P"~"PA46"~"TURBOÉLICE"~"MONOMOTOR"~"1950"~"LEVE"~"6"~"1990"~"NULL"~"BRASIL"~" TPP"~"PARTICULAR"~"SBBR"~"SBGR"~"POUSO"~"LANDING"~"VOO PRIVADO"~"NENHUM"~"0"~"2018-07-09"'''```O arquivo é composto das seguintes colunas:1. codigo_ocorrencia2. aeronave_matricula3. aeronave_operador_categoria 4. aeronave_tipo_veiculo5. aeronave_fabricante6. aeronave_modelo7. aeronave_tipo_icao8. aeronave_motor_tipo9. aeronave_motor_quantidade 10. aeronave_pmd 11. aeronave_pmd_categoria 12. aeronave_assentos 13. aeronave_ano_fabricacao14. aeronave_pais_fabricante 15. aeronave_pais_registro 16. aeronave_registro_categoria 17. aeronave_registro_segmento 18. aeronave_voo_origem 19. aeronave_voo_destino 20. aeronave_fase_operacao 21. aeronave_fase_operacao_icao 22. aeronave_tipo_operacao 23. aeronave_nivel_dano 24. total_fatalidades25. aeronave_dia_extracaoCrie uma função que efetue a leitura do arquivo, sem a utilização de bibliotecas externas, e processe o arquivo produzindo dois novos arquivos.OBS: Efetuar apenas uma leitura do arquivo de entrada  Arquivo 1 O primeiro arquivo deve ter seu conteúdo em formato JSON, com o nome statistics.json, e deve possuir as as estatísticas: * fase de operação* número de total de ocorrências* percentual de quanto essa fase representa dentro de todos os dadosExemplo de como deve estar o arquivo:```json[  {    "fase_operacao": "APROXIMAÇÃO FINAL",     "ocorrencias": 234,    "percentual": "4,51%"  },  {    "fase_operacao": "INDETERMINADA",     "ocorrencias": 180,    "percentual": "2,43%"  },  {    "fase_operacao": "MANOBRA",     "ocorrencias": 80,    "percentual": "0,95%"  }]```  Arquivo 2 Crie um arquivo de saida (formato CSV) com nome levels.csv contendo as seguintes informações:* operation -> aeronave_operador_categoria* type -> aeronave_tipo_veiculo* manufacturer -> aeronave_fabricante* engine_type aeronave_motor_tipo* engines -> aeronave_motor_quantidade* year_manufacturing -> aeronave_ano_fabricacao* seating -> aeronave_assentos* fatalities -> total_fatalidadesConsiderando apenas acidentes cujo nível de dano da aeronave tenha sido LEVE ou NENHUM (coluna aeronave_nivel_dano) e que o número de fatalidades (total_fatalidades) tenha sido superior à 0 (zero)  Análise Receberemos um arquio de entrada no formato CSV, com o caractere separador ~ e entre “”.O arquivo possuí 25 colunasDevemos criar uma função que lê e processa o arquivo, sem a utilizaão de bibliotecas, e cria outros dois arquivos de saída.Temos que efetuar a leitura do arquivo uma única vez.  Implicações / Proposições / Afirmações * Receberemos um arquivo de entrada* O arquivo contém 10 anos de dados de acidentes de avição* O arquivo contém 25 colunas* O caractere separado do arquivo é `~` e `""`* Devemos criar uma função que irá ler e precessar o arquivo de entrada* Devemos criar dois arquivo de saída: um `.json`, com o nome `statistics.json`; e outro arquivo `.csv` com o nome `levels.csv`* O arquivo `.json` deve ter um formato específico* O arquivo `.json` deve conter as seguintes informações:    * fase de operação    * número de total de ocorrências    * percentual de quanto essa fase representa dentro de todos os dados  Resolução e Resposta<jupyter_code># import das bibliotecas
import csv
import json
# Função que irá processar o Arquivo
def read_file(file_path):
    """Função que irá processar o arquivo de entrada para ajustar
    as informações requisitadas de saída.
    
    Argumentos:
    file_path -- Caminho do arquivo de entrada
    """
    
    # Estruturas que serão utilizadas para produzir as respostas
    map_of_incidents = {} # Arquivo que produzirá a saída JSON
    list_of_incidents = [] # Arquivo que produzirá a saída CSV
    count = 0 # Variável utilizada para contarmos a quantidade de elementos
    
    # Abre e processa o arquivo
    with open(file_path, 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f, delimiter='~', quotechar='"')
        
        # Itera pelas linhas do arquivo para 
        for row in reader:
            count += 1 
            key = row['aeronave_fase_operacao']
            
            # Verifica se a chave ja existe no dicionário que será
            # utilizado para escrever o arquivo JSON
            
            if key in map_of_incidents:
                map_of_incidents[key] += 1 # Se existir, incrementa mais mais um acidente
            else:
                map_of_incidents[key] = 1 # Se não existir, cria a chave e adiciona um acidente
                
            # Verifica se o dano na aeronave foi leve ou nenhum E se as
            # fatalidades foram maiores que zero
            if ( 
                (row['aeronave_nivel_dano'] == 'LEVE' or row['aeronave_nivel_dano'] == 'NENHUM' ) and
                (int(row['total_fatalidades']) > 0) 
            ):
                # Se sim, adiciona as informações pertinentes na lista que 
                # será utilizada para escrever o arquivo CSV
                list_of_incidents.append([row['aeronave_operador_categoria'],
                                          row['aeronave_tipo_veiculo'],
                                          row['aeronave_fabricante'],
                                          row['aeronave_motor_tipo'],
                                          row['aeronave_motor_quantidade'],
                                          row['aeronave_ano_fabricacao'],
                                          row['aeronave_assentos'],
                                          row['total_fatalidades']])
                
    # Assim que juntarmos todas as informações, vamos criar os
    # arquivos necessários
    save_json(map_of_incidents, count)
    save_csv(list_of_incidents)
# Função que irá criar o arquivo JSON
def save_json(data, count):
    """Função resposável por criar o arquivo JSON
    
    Argumentos:
    data -- Dados que será escritos no arquivo
    count -- Quantidade de acidentes registrados no arquivo de entrada
    """
    
    # Lista que será escrita dentro do arquivo JSON
    array_of_incidents = []
    
    # Itera sobre o dicionário com os dados
    for key, value in data.items():
        array_of_incidents.append(
            {
                "fase_operacao": key,
                "ocorrencias": value,
                "percentual":  '{:.3%}'.format(value / count)
            }
        )
    
    # Cria o arquivo com os dados ajustados
    with open('statistics.json', 'w', encoding='utf8') as outfile:
        json.dump(array_of_incidents, outfile, ensure_ascii=False, indent=4) 
# Função que irá criar o arquivo CSV
def save_csv(data):
    """Função responsável por criar o arquivo .csv
    
    Argumentos
    data -- dados que serão escritos no arquivo
    """
    
    # Cabeçalho do arquivo .csv
    header = [
        'operation',
        'type',
        'manufacturer',
        'engine_type',
        'engines',
        'year_manufacturing',
        'seating',
        'fatalities'
    ]
    
    # Cria o arquivo com os dados ajustados
    with open('levels.csv', 'w', encoding='utf8', newline='') as outfile:
        w = csv.writer(outfile)
        w.writerow(header)
        w.writerows(data)
# Execução da Aplicação
read_file('csv/anv.csv')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09048460373548713, 'fraction_numerical': 0.019434628975265017, 'mean_word_length': 3.031027466937945, 'pattern_counts': {'":': 12, '<': 5, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 14, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '8146', 'license': 'MIT', 'n_tokens_mistral': 2902, 'n_tokens_neox': 2727, 'n_words': 751, 'path': '01-Fundamentos-Programacao-DS/Scripts/Mod-01/aula_04/.ipynb_checkpoints/exemplos_resolvidos-checkpoint.ipynb', 'repo_name': 'fgandrade/Estudos-Comunidade-DS', 'size': '7924'}