Data Warehousing

Estimated read time 5 min read

O que é Data Warehousing?

Data warehousing é o processo de coletar, integrar, organizar e analisar dados de diversas fontes para apoiar a tomada de decisões baseadas em dados. Um data warehouse é um sistema que armazena os dados em um formato estruturado e otimizado para consultas e análises avançadas, podendo oferecer vários benefícios para as organizações, tais como:

  • Tomada de decisão adequada: o DW permite que os usuários de negócios acessem e explorem dados relevantes, confiáveis e consistentes para obter insights e orientações sobre as melhores ações a serem tomadas;
  • Dados consolidados de várias fontes: integração de dados de sistemas transacionais, bancos de dados relacionais e outras fontes, criando uma visão unificada e abrangente dos dados da organização;
  • Análise de séries temporais: o data warehouse mantém um registro histórico dos dados, permitindo que os usuários analisem as tendências, os padrões e as mudanças ao longo do tempo;
  • Qualidade, consistência e precisão de dados: o DW aplica processos de extração, transformação e carregamento (ETL) para limpar, padronizar e enriquecer os dados, garantindo que eles estejam livres de erros, duplicações e inconsistências.

Um data warehouse típico geralmente inclui os seguintes elementos:

  • Um banco de dados relacional para armazenar e gerenciar dados;
  • Uma solução de extração, carregamento e transformação (ETL) para preparar os dados para análise;
  • Análise estatística, relatórios e recursos de mineração de dados;
  • Ferramentas de análise de clientes para visualizar e apresentar dados aos usuários de negócios.

Exemplo prático

Ao explorar dados sobre ocorrências criminais em São Paulo, empregamos técnicas de ETL, conhecidas como Extract, Transform, Load. Essas técnicas permitem a extração de dados brutos de diferentes fontes (Extract), no nosso caso do Google Drive, a transformação para garantir que estejam consistentes e prontos para análise (Transform), e o carregamento desses dados em um formato adequado para serem utilizados em ferramentas de análise (Load), no nosso caso o carregamento em um arquivo JSON.

Antes de mergulharmos nos detalhes da análise, precisamos estabelecer uma conexão com os arquivos armazenados no drive.

from google.colab import drive
drive.mount('/content/drive')

Nós utilizamos a funcionalidade do Colab demonstrada acima para montar o Google Drive no ambiente de execução, onde nossos dados estão armazenados.

import os
import pandas as pd


base_dir       = "drive/MyDrive/safeway/"
data_file_name = "SPDadosCriminais_2023"
data_file_ext  = ".xlsx"
df = pd.read_excel(base_dir + data_file_name + data_file_ext)
df.shape

Antes de começarmos a trabalhar com os dados, é fundamental definir o caminho correto para acessar nossos arquivos. O trecho acima faz exatamente isso. Utilizamos a biblioteca Pandas para ler o arquivo Excel contendo dados sobre ocorrências criminais em São Paulo e carregar os dados base para nossas descobertas a partir do diretório base, nome do arquivo e sua extensão.

df_bak = df.copy()
df.columns

 

Utilizamos df.dropna para eliminarmos as linhas em que a latitude ou a longitude estejam sem valor, ou seja, localizações inválidas. As dimensões atualizadas do DataFrame e a lista de colunas são exibidas usando print(df.shape) e print(df.columns).

 

f.drop('NOME_DEPARTAMENTO', axis='columns', inplace=True)
df.drop('NOME_SECCIONAL', axis='columns', inplace=True)
df.drop('NOME_DELEGACIA', axis='columns', inplace=True)
df.drop('NUM_BO', axis='columns', inplace=True)
df.drop('ANO_BO', axis='columns', inplace=True)
df.drop('DATA_COMUNICACAO', axis='columns', inplace=True)
df.drop('NOME_DELEGACIA_CIRCUNSCRIÇÃO', axis='columns', inplace=True)
df.drop('NOME_DEPARTAMENTO_CIRCUNSCRIÇÃO', axis='columns', inplace=True)
df.drop('NOME_SECCIONAL_CIRCUNSCRIÇÃO', axis='columns', inplace=True)
df.drop('ANO_ESTATISTICA', axis='columns', inplace=True)

 

Como parte do processo de simplificação e foco em atributos cruciais para nossa análise, várias colunas foram removidas do DataFrame, como o nome do departamento, a seccional, a delegacia, o número do boletim de ocorrência (NUM_BO), o ano do boletim (ANO_BO), a data de comunicação (DATA_COMUNICACAO), além de outras relacionadas à circunscrição e estatística.

 

Esse passo de limpeza visa reduzir a complexidade dos dados, concentrando-nos nas variáveis que mais impactam nossa análise das ocorrências criminais em São Paulo.

 

df[:30]

 

 

Exibimos as primeiras 30 linhas do DataFrame para ter uma ideia inicial dos dados.

 

df['NATUREZA_APURADA'].unique()

Exploramos os valores únicos em uma coluna específica (‘NATUREZA_APURADA’) para entender a diversidade das ocorrências presentes nos dados.

 

df = df[df.LATITUDE != 0.0]
df[['LATITUDE', 'LONGITUDE']].describe()

# Removing zeros for now
print(df['LONGITUDE'].value_counts())
df = df[df.LATITUDE != 0.0]
df[['LATITUDE', 'LONGITUDE']].describe()

 

Decidimos eliminar as coordenadas com latitude 0 para nossas análises regionais. Ao observarmos as estatísticas descritivas para ‘LATITUDE’ e ‘LONGITUDE’ com df[[‘LATITUDE’, ‘LONGITUDE’]].describe(), estamos melhorando a qualidade dos dados que serão a base de nossas análises futuras, pois queremos explorar tendências em relação às regiões.

 

df.to_json(base_dir + "cleaned_" + data_file_name + ".json", orient="records")

 

Exportamos os dados preparados para um arquivo JSON. Este arquivo, chamado “cleaned_SPDadosCriminais_2023.json”, servirá como uma versão refinada e pronta para análise de nossos dados criminais de São Paulo.

 

 

Autores

 

Gabriel Zanchetim Da Silva (173058)

 

Felipe Lemos Ferreira (174483)

 

Marcelle Santos Pacífico (183582)

 

Tales Dias De Almeida Silva (188292)

 

Lohayne Muriel Batista Bueno (215955)