Parte 03 - Formatos de Dados

Walter R P Cortes - Oct 25 - - Dev Community

Olá Devs!

Neste artigo, vamos aprender um pouco mais sobre os formatos utilizados para armazenar os dados que nossas visualizações irão consumir.

Fontes de dados e seus formatos

Para realizarmos nossas tarefas como Cientistas de Dados, é necessário que acessemos aquilo que nos é mais caro, o nosso combustível: os dados.

Estes dados vem das mais diversas fontes: websites, dispositivos IoT, bancos de dados, documentos, … Estas diferentes fontes significam que os dados possuem diferentes formatos, e uma de nossas tarefas é transformar este dado em um formato com o qual seja possível trabalhar e gerar os resultados esperados.

Dentro da área de Ciência da Computação, o formato mais utilizado para servir como base para o processamento de informação é o formato tabular.

Formato Tabular

O formato tabular é utilizado para descrever uma estrutura de dados organizada em linhas e colunas, formando uma tabela. É um formato muito utilizado em bancos de dados relacionais e em arquivos CSV (Comma-Separated Values), onde cada linha representa um registro ou observação e cada coluna representa uma variável ou campo. Esse formato é muito útil para representar dados estruturados de forma clara e organizada, permitindo a fácil manipulação e análise dos dados.

Abaixo, temos um exemplo prático de como podemos utilizar Python para carregar um arquivo CSV em nosso notebook.

import csv

# Abre o arquivo CSV em modo leitura
with open('exemplo.csv', 'r') as arquivo_csv:
 # Cria um objeto para ler o arquivo CSV
 leitor_csv = csv.reader(arquivo_csv, delimiter=',')

 # Percorre as linhas do arquivo CSV
 for linha in leitor_csv:
 print(linha)
['Nome', 'Idade', 'Cidade']
['Maria', '25', 'São Paulo']
['João', '30', 'Rio de Janeiro']
['Ana', '20', 'Belo Horizonte']
['Andre', '23', 'Porto Alegre']

Neste exemplo, utilizamos a função open para abrir o arquivo CSV em modo leitura e, em seguida, criamos um objeto csv.reader para ler o arquivo CSV. Utilizamos o parâmetro delimiter para indicar o caractere separador utilizado no arquivo CSV (no caso, a vírgula). Em seguida, utilizamos um loop for para percorrer as linhas do arquivo CSV e imprimir cada uma delas na tela.

Note que, neste exemplo, o resultado é uma lista de listas, onde cada lista interna representa uma linha do arquivo CSV. Para manipular os dados, é necessário fazer a conversão manualmente para o formato desejado.

E, apesar deste formato ser adequado ao processamento dos dados para visualização, ainda precisamos fazer alguns ajustes até chegar ao formato ideal.

Otimizando o Formato Tabular

O formato tabular padrão também pode ser referenciado pelo termo ‘Formato Largo’ (Wide format em inglês), por sua característica de organização em linhas e colunas, com a linha sendo uma observação e as colunas sendo as variáveis da observação. Isto pode ser percebido pelo formato que nossos código percorrem os arquivos ou selecionam a informação de um banco de dados: sempre pensando em extrair linhas que depois são usadas em algum tipo de processamento. Isso gera o que chamamos de overhead no processamento, porque por vezes precisamos apenas fazer o processamento de uma coluna de dados, mas somos obrigados a acessar todas as colunas para depois selecionar a coluna que queremos.

Para resolver essa questão, foi criado um caso especial de formato tabular, o chamado ‘Formato Longo’ (Long format em inglês), onde a orientação da organização dos dados é colunas e linhas, ou seja, podemos acessar uma coluna individualmente, com todas as suas linhas.

Formato Longo X Formato Largo

Em Python e em muitas outras linguagens de programação que são utilizadas para Ciência de Dados, o formato tabular é representado por estruturas de dados especiais, chamadas de DataFrames e Series.

Mas antes de explicar em mais detalhes essas estruturas, vamos conhecer um pouco das suas origens.

Dicionários e Listas

Se você já conhece o básico de Python, já aprendeu que temos os tipos de dados conhecidos como listas e dicionário de dados. Com estes tipos, podemos representar dados mais complexos, como uma sequência ou um objeto, que são compostos de vários tipos simples. Se você quiser aprender mais sobre listas e dicionários, vá para o final deste notebook.

Em Python, a representação de dados no formato tabular, seja longo ou largo, passa pela combinação destes dois tipos de dados.

Representação em Python do Formato Largo

Para criar um objeto em Python que represente um conjunto de dados no Formato Largo, é necessário montar uma lista de dicionários.

dados_largos = [
 {"codigo": 1, "nome": "Jose"},
 {"codigo": 2, "nome": "Maria"},
 {"codigo": 3, "nome": "Fernandez"}
]

Neste objeto, temos uma lista que contém 3 elementos. Cada elemento é um dicionário com dois campos. Conforme explicamos anteriormente, no formato largo, para acessar o nome de uma pessoa, precisamos identificar em que linha ela está. Para identificar a linha, percorremos nossa lista. Para inspecionar o nome, recuperamos todo o dicionário que está naquela posição da lista.

Representação em Python do Formato Longo

Para criar um objeto em Python que represente um conjunto de dados no Formato Longo, é necessário montar um dicionário de listas.

dados_longos = {
 "codigo": [1,2,3], 
 "nome": ["Jose","Maria","Fernandez"]
 }

Neste objeto, temos o dicionário com seus campos, e cada campo é uma lista com os valores para cada linha.

Entendendo a diferença

Vamos ver um exemplo prático para entender a diferença entre os dois. Acompanhe no código abaixo e leia os comentários.

# Queremos saber o nome do usuário que está na segunda linha do nosso conjunto de dados.

# Formato largo
print(dados_largos[1]["nome"]) # utilizamos o indice 1 porque em Python listas começam no indice 0

# Formato longo
print(dados_longos["nome"][1]) # apenas invertemos a referência - primeiro a coluna, depois a linha
Maria
Maria

A diferença parece pouca, certo? Apenas invertemos como os indices são acessados, onde está a tal otimização?

A otimização está no fato de que, ao acessar a linha de um dado no formato largo, estamos acessando todas as colunas de informação daquela linha.

print(dados_largos[1])
{'codigo': 2, 'nome': 'Maria'}

Já no formato longo, antes de especificar a linha, eu preciso referenciar a coluna, portanto, sempre terei apenas um valor.

print(dados_longos["nome"][1])
Maria

DataFrames e Series

O DataFrame e as Series são dois dos principais conceitos utilizados para trabalhar com dados em Python. Ambos estão presentes na biblioteca Pandas, que é uma das ferramentas mais usadas para análise de dados.

O DataFrame é um objeto que tem como base o conceito de dicionário de listas, onde as listas são representadas por Series. O DataFrame adiciona uma série de funcionalidades ao dicionário de listas, simplificando a manipulação dos mesmos.

Exemplo de código:

import pandas as pd 
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
print(df[2][2])
9

A Series é uma lista com superpoderes. Assim como o DataFrame, a Series acrescenta muitas facilidades para manipular a lista. Exemplo de código:

import pandas as pd 
s = pd.Series([1, 2, 3]) 
print(s[2])
3

Além do Pandas existem outras bibliotecas que utilizam esses conceitos para trabalhar com dados como NumPy (Numerical Python), SciPy (Scientific Python) e Scikit-learn (Machine Learning).

Finalizando

Neste artigo, aprendemos sobre os formatos de dados que podemos utilizar em nossas visualizações e conhecemos mais detalhes dos DataFrames e Series.

Aqui temos alguns links sobre o assunto: - Listas - Dicionários

. . . . . . . . . . . . . .
Terabox Video Player