class: center, middle, title-slide .title[ # Aula 11 - Limpeza de dados ] .subtitle[ ## Jornalismo de Dados ] .author[ ### Leonardo Mancini ] .date[ ### 2024 ] --- # Limpeza de dados A limpeza de dados é uma etapa fundamental para a análise de dados. O objetivo é garantir que os dados estejam corretos, completos e consistentes. É também a etapa do trabalho com dados que costuma consumir mais tempo. .center[  ] --- class: inverse, center, middle # Problemas comuns de importação --- # Separadores As bases em CSV são, essencialmente, tabelas em texto, com separadores que podem variar ``` País,Ano,Emissão_CO2,Temp_Média,Data_Registro,Observações Brasil,2018,"2,500,000",27°C,12/31/2018,Verão muito quente brasil,2019,2500000,80°F,31-12-2019, BRAZIL,2020,"2.600.000 toneladas",28C,2020/12/31,Alta umidade BRASIL,2021,"2.700.000",82°F,31.12.2021, Brasil,2022,"2.800.000 t",29°C,31/12/2022,Ondas de calor brasil,2020,"2,650,000",27.5C,31/12/2020, BRAZIL,2021,"2.750.000 tons",81F,12-31-2021, Estados Unidos,2018,5,000,000,60°F,31/12/2018, ``` --- # Codificação de caracteres Outro problema comum é a codificação de caracteres. Dependendo do software que gerou o arquivo, os caracteres podem estar codificados de forma diferente. .center[  ] O UTF-8 (Unicode) é o padrão mais comum para codificação de caracteres. Outros padrões incluem o ISO-8859-1 (Latin-1) e o Windows-1252. --- # Tipos de variáveis Outro problema comum é a presença de variáveis com tipos de dados incorretos. Por exemplo, CEP e CPF são números, mas não devem ser tratados como números, pois não faz sentido realizar operações matemáticas com eles. Nesses casos, os zeros no início são relevantes e devem ser mantidos. Por outro lado, números configurados como texto não podem ser usados em cálculos. --- class: inverse, center, middle # Bases "sujas" --- # Bases sujas As bases de dados podem conter erros de digitação, valores ausentes, valores duplicados, valores inconsistentes, entre outros problemas. **Limpar** significa corrigir esses problemas e organizá-los (_tidy data_). .center[  ] --- # Como limpar? É possível utilizar diversas ferramentas para limpar dados, como Excel, Google Sheets, OpenRefine, Python, R... Programas como Excel e Google Sheets são mais simples, não demandam saber programar, mas não são eficientes para grandes volumes de dados. Além disso, não deixam um registro das transformações realizadas. Se for usar esses programas, é importante documentar as transformações realizadas. --- # OpenRefine O OpenRefine é uma ferramenta gratuita e de código aberto para limpeza de dados. Vantagens do OpenRefine: - Aceita diversos formatos - Mantém um log das alterações - Aceita expressões regulares - Aceita expressões GREL (General Refine Expression Language) --- # OpenRefine .center[  ] ??? 1. Contained within the red box is the data you have uploaded. 2. Beside every column header is a small drop-down arrow. This is where you will find options to edit and facet your data. --- # OpenRefine 1. Abrir o OpenRefine 3. Clique em "Create Project" (Criar Projeto). 4. Importe [estes dados aqui.](./data/emissoes_fake.csv) 5. Verifique se os dados foram importados corretamente na visualização. Ajuste as configurações de separadores se necessário. 6. Clique em "Next" (Próximo) e depois em "Create Project" (Criar Projeto). --- # Transformações 1. **Trimming Leading and Trailing Whitespace:** Remove espaços em branco no início e no final de uma string. 1. **Uppercase and Lowercase:** Padroniza a capitalização. 1. **Mudando o tipo de dado**: Em cada coluna, clique na seta e selecione "Edit cells" > "Common transforms" > "To number" ou "To date". .center[  ] --- # _Faceting_ _Faceting_ ajuda a ter uma visão geral de uma coluna, organizando os itens únicos em ordem de incidência. .center[  ] Depois de listados, é possível corrigir os valores incorretos. --- # _Clustering_ O _clustering_ é uma técnica que agrupa valores semelhantes, o que facilita a identificação de erros. Depois de fazer o _facet_, clique em "Cluster" para agrupar valores semelhantes. Existem vários métodos e parâmetros para ajustar o _clustering_. A documentação dos criadores do OpenRefine pode ser encontrada [aqui](https://openrefine.org/docs/technical-reference/clustering-in-depth) --- # GREL para edição das células GREL (General Refine Expression Language) é uma linguagem de programação que permite fazer transformações em massa nos dados. Funções comuns: - value.replace(".", "") : substitui um caractere por outro - substring(value, 0, 5) : extrai uma parte da string Grel avançado: - substring(value, length(value) - 1, length(value)) : extrai a última letra da string --- # Separando colunas 1. Clique na seta da coluna "Emissão_CO2" e selecione "Edit column" > "Add column based on this column". 1. A fórmula para converter de Fahrenheit para Celsius é: $$ Celsius= \frac{(Fahrenheit−32)×5}9 $$ 2. Na caixa de diálogo, digite o nome da nova coluna e a expressão GREL: > if(cells["escala_temp"].value == "F", (value - 32) * 5 / 9, value) --- # Corrigir dados em branco 1. Use o Facet para identificar células vazias em colunas importantes. 2. Clique na seta da coluna "Emissão_CO2", selecione "Facet" > "Customized facets" > "Facet by blank". --- # Reconcile O OpenRefine tem uma ferramenta chamada Reconcile, que permite comparar os dados com uma fonte externa. É uma forma semi-automatizada de corrigir dados, considerando que o usuário tem que aprovar as modificações. É possível adicionar novas fontes para reconciliar, como Wikidata, VIAF, Geonames, entre outros. Adicionar fontes: 1. Clique em "Reconcile" > "Start reconciling..." 2. Clique em "Add standard service" e escolha a fonte desejada. Exemplo: http://refine.codefork.com/reconcile/viaf Fontes adicionais: [Reconciliation Service Test Bench](https://reconciliation-api.github.io/testbench/#/) --- # Em caso de dúvidas - [RefinePro Knowledge Base for OpenRefine](https://kb.refinepro.com/) - [Cleaning Data with OpenRefine](https://libjohn.github.io/openrefine/index.html) - [Getting Started with Data Cleaning and OpenRefine](https://guides.library.unlv.edu/open-refine/resources) - [Data cleaning with OpenRefine for ecologists](https://datacarpentry.org/OpenRefine-ecology-lesson/index.html)