No desenvolvimento de modelos de aprendizado de máquina e redes neurais, é fundamental saber como ingerir dados de diversas fontes. Este guia aborda as técnicas mais eficientes para ler arquivos de texto, binários e imagens utilizando o ecossistema Python.
- Arquivos de Texto: CSV, TSV e JSON
Arquivos de texto estruturados ou semiestruturados são a base de muitos conjuntos de dados tabulares. O CSV (Comma-Separated Values) e o TSV (Tab-Separated Values) diferem apenas pelo delimitador (vírgula e tabulação, respectivamente). O JSON é um formato leve e independente de linguagem, ideall para dados aninhados.
1.1. Lendo CSV e TSV com o módulo nativo csv
O módulo embutido csv permite a leitura linha a linha. O objeto retornado é um iterador, o que é excelente para arquivos grandes que não cabem na memória.
import csv
file_path = 'dataset_treinamento.csv'
registros = []
with open(file_path, mode='r', encoding='utf-8') as arquivo:
leitor = csv.reader(arquivo, delimiter=',') # Use delimiter='\t' para TSV
for linha in leitor:
registros.append(linha)
# Alternativa usando list comprehension
# registros = [linha for linha in csv.reader(arquivo, delimiter=',')]
1.2. Manipulação Avançada com pandas
Para análises mais complexas, o pandas é a ferramenta padrão. Ele carrega os dados diretamente em um DataFrame, permitindo filtragens, remoção de colunas e tratamento de valores ausentes de forma vetorial.
import pandas as pd
import numpy as np
caminho_arquivo = 'dataset_treinamento.tsv'
# O parâmetro sep define o delimitador. Para CSV, use ','. Para TSV, use '\t'.
df = pd.read_csv(caminho_arquivo, sep='\t', encoding='utf-8', header=0)
# Removendo colunas indesejadas
df_limpo = df.drop(columns=['coluna_irrelevante', 'id_temporario'])
# Removendo linhas específicas por índice
df_final = df_limpo.drop(index=[1, 5, 10])
# Convertendo para array NumPy
matriz_dados = df_final.to_numpy()
1.3. Processando arquivos JSON
O formato JSON é frequentemente usado para APIs e dados hierárquicos. Podemos usar a biblioteca nativa json ou o pandas para achatar a estrutura.
import json
import pandas as pd
caminho_json = 'metadados.json'
with open(caminho_json, 'r', encoding='utf-8') as arquivo_json:
conteudo_bruto = json.load(arquivo_json)
# Se o JSON for uma lista de dicionários, o pandas pode normalizar diretamente
df_json = pd.json_normalize(conteudo_bruto['itens'])
print(df_json.head())
- Arquivos Binários: NumPy (
.npy)
O formato .npy é otimizado para armazenar arrays NumPy, preservando forma e tipo de dados, além de ser muito mais rápido para leitura e escrita do que formatos de texto.
import numpy as np
diretorio_base = './data/'
tensores_treino = np.load(diretorio_base + 'features_treino.npy')
# Permite definir o tipo de codificação se necessário
# tensores = np.load(caminho, allow_pickle=True, encoding='latin1')
- Arquivos de Imagem: JPEG, PNG, etc.
O processamento de imagens exige bibliotecas específicas. Abaixo estão as três abordagens mais comuns, cada uma com suas particularidades quanto ao formato de saída (canais de cor e tipo de dado).
3.1. scikit-image (io.imread)
Retorna diretamente um array NumPy no formato (altura, largura, canais) com valores de pixel entre 0 e 255, ordenados em RGB.
from skimage import io
caminho_imagem = 'imagens/foto_01.jpg'
matriz_imagem = io.imread(caminho_imagem)
# Formato: (H, W, C), Canais: RGB
3.2. OpenCV (cv2.imread)
Extremamente rápido e robusto. No entanto, o OpenCV carrega imagens coloridas no formato BGR em vez de RGB, exigindo uma conversão se você for usar bibliotecas como o Matplotlib ou redes neurais padrão.
import cv2
caminho_imagem = 'imagens/foto_01.jpg'
imagem_bgr = cv2.imread(caminho_imagem)
# Conversão de BGR para RGB
imagem_rgb = cv2.cvtColor(imagem_bgr, cv2.COLOR_BGR2RGB)
# Alternativa usando fatiamento de array NumPy
# imagem_rgb = imagem_bgr[:, :, ::-1]
3.3. Pillow (PIL)
Uma biblioteca leve e muito popular. O método Image.open retorna um objeto de imagem PIL, que precisa ser convertido para um array NumPy para operações matemáticas ou de deep learning.
from PIL import Image
import numpy as np
caminho_imagem = 'imagens/foto_01.jpg'
objeto_imagem = Image.open(caminho_imagem)
# Convertendo o objeto PIL para array NumPy (Formato HWC, RGB)
matriz_pil = np.asarray(objeto_imagem)