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.