Comandos úteis do Linux que ajudam a preprocessar bases de dados

Comandos simples presentes em distribuições Linux que são muito úteis durante o pré-processamento de bases de dados

Genicleito Gonçalves
Nov 1 · 8 min read
Ubuntu, uma popular distribuição Linux: https://distrowatch.com/images/screenshots/ubuntu-18.04-minimal.png

A todo momento, Engenheiros e Cientistas de Dados precisam tratar e lidar com grandes volumes de dados que, em sua forma “bruta” original, podem ser tarefas impossíveis de serem realizadas utilizado leitores convencionais de planilhas (como Excel, LibreOffice, entre outros) ou diante da ausência de softwares que paralelizem a manipulação de grandes bases de dados no R ou Python, por exemplo.

Muitas bases de dados são disponibilizadas em formato CSV (Comma Separated Values), que pode ser aberto por leitores de texto convencionais em um computador pessoal. No entanto, diante de grandes volumes de dados, essa tarefa torna-se frustrante ou muito lenta quando recursos computacionais são muito limitados (principalmente memória).

Esse será um guia que tem o intuito de apresentar formas básicas de uso de alguns comandos Linux que auxiliam no pré-processamento de bases de dados.

Visão Geral

Os exemplos desse artigo contém comandos do bash Shell (um dos mais populares) e podem ser executados em distribuições Linux populares como Ubuntu, Debian, CentOS, dentre vários outros.

A base de dados utilizada nos exemplos apresentados abaixo é a Bank Marketing [1] (relacionada com campanhas de marketing direto de uma instituição bancária portuguesa), que pode ser obtida livremente no UCI Machine Learning Repository. Basta fazer o download da base e extrair o arquivo bank-full.csv. Não se trata de uma “grande” base de dados, possui apenas 45.211 registros (sem considerar o cabeçalho) e 17 variáveis (ou atributos) que poderiam ser lidas tranquilamente em editores de texto, mas será suficiente para demonstrar os exemplos desse artigo que podem ser executados em bases maiores (ou menores, inclusive).

Antes de iniciarmos com os exemplos, supondo que baixou a base na pasta Downloads, execute o comando cd ~/Downloads para que o diretório de trabalho do Shell mude para esta pasta e você consiga executar os exemplos desse artigo sem problemas. Você pode executar o comando ls -l para ver a lista de arquivos presentes na pasta.

Figura 1: O comando ls -l permite visualizar em lista os arquivos em uma pasta e algumas informações sobre permissões dos arquivos

Sem mais demoras, vamos aos exemplos! :)


Contando linhas e palavras com o wc

O comando wc permite visualizar algumas informações interessantes sobre um arquivo, como número de linhas, número de palavras (sequência de caracteres delimitados por espaço) e quantidade de bytes. Uma de suas utilidades é informar a quantidade de linhas de um arquivo ou a quantidade de variáveis de uma base de dados (com o auxílio de outro comando) sem a necessidade de abri-la.

Figura 2: O parâmetro -l permite exibir apenas o número de linhas de um arquivo

Utilizando wc com pipe

Os sistemas operacionais baseados no Unix permitem utilizar a saída de um comando como entrada de outro por meio do uso de pipeline (representado por “|”), que funciona como uma ligação entre comandos. Dessa forma, é possível utilizar vários comandos em conjunto no terminal Linux. Em exemplos posteriores utilizaremos o pipe para mesclar alguns comandos do Linux e com isso extrair mais informações sobre nossa base de dados de exemplo.

Por exemplo, suponha que você queira saber a quantidade de arquivos em uma pasta sem a necessidade de contá-los manualmente, basta utilizar o comando ls em conjunto com o comando wc (ambos citados acima) com o auxílio de um pipe entre eles, conforme pode ser visto na Figura 3.

Figura 3: Pipe entre o comando ls e wc para exibir o número de arquivos em uma pasta

Para mais opções e informações sobre o comando wc visite a página manual do comando [4] ou digite wc --help no terminal do seu computador.

Visualizando partes de um arquivo com os comandos head e tail

Um comando bastante utilizado durante análises iniciais de bases de dados é o head. Ele permite que apenas uma parte inicial do arquivo seja lida e exibida no terminal. É um comando de fácil utilização que pode ser útil, dentre outras coisas, para visualizar o cabeçalho da base de dados, o separador dos campos dos registros e o preenchimento das informações de alguns registros, conforme pode ser visto na Figura 4.

Por padrão, o comando head exibe as primeiras 10 linhas do arquivo passado como parâmetro no terminal. Dentre outras opções, o head permite que seja informado o número de linhas que o usuário deseja visualizar no terminal, utilizando o parâmetro -n e em seguida o número de linhas que deseja-se serem exibidas.

Figura 4: Uso do comando head para exibir os primeiros registros de uma base de dados

O comando tail funciona de forma similar ao head, no entanto ele exibe no terminal as últimas linhas de um arquivo, conforme pode ser visto na Figura 5.

Figura 5: Exibindo as informações dos últimos registros com o comando tail

Para mais informações basta utilizar o parâmetro --help dos comandos no terminal ou acessar as referências desse artigo.

Buscando padrões no arquivo com o comando sed

O comando sed é muito útil para filtrar informações e realizar transformações na base de dados. Conhecendo-se um certo padrão presente na base de dados é possível buscar pelas ocorrências dele utilizando esse útil comando.

Por exemplo, suponha que depois de utilizar o head para visualizar alguns registros da base de dados você notou que uma das categorias da variável “job” é “management” e então você deseja filtrar por essa informação sabendo que ela não estará presente em nenhum campo de outra variável da base de dados.

O comando sed é muito poderoso pois, também possibilita fazer transformações em um arquivo. Suponha que deseja substituir o valor “unknown”, presente em alguns campos da base de dados, por algo vazio para que seja detectado por outras ferramentas como um valor faltante (missing/nulo). Para isso, basta utilizar o seguinte comando:

Entendendo o comando:

Um outro exemplo interessante é quando deseja-se visualizar certas linhas do arquivo ou verificar quantas variáveis têm a base de dados:

Figura 6: Exibindo a quantidade de variáveis de uma base de dados com os comandos head, sed e wc

São inúmeras as possibilidades que o comando sed oferece, para saber mais leia a documentação do comando no terminal, leia sobre expressões regulares ou busque por exemplos em fóruns na internet ou tutoriais.

Os comandos split e cat

O comando split, como o próprio nome sugere, é utilizado para dividir um arquivo em pedaços. Isso é extremamente útil quando deseja-se tratar uma base de dados muito grande em um computador de uso doméstico, que não conseguirá carregar um grande volume de dados em memória. Dessa forma, o split pode ser utilizado para permitir o pré-processamento de partes menores do arquivo, reduzindo o volume de dados que precisaria ser carregado em memória, para então só depois esses pedaços serem unidos novamente (utilizando o cat) em uma única base tratada.

O split aceita vários parâmetros, mas em nosso exemplo vamos utilizar o parâmetro -l, que permite dividir um arquivo limitando cada parte dessa divisão a um certo número de linhas. Por exemplo:

O comando cat concatena (une) partes de um arquivo em um único arquivo e exibe a saída no terminal.

Figura 7: O arquivo bank-full.csv foi dividido com o split e seus “pedaços” podem ser concatenados com o cat

Conclusões

Os sistemas Linux oferecem muitos recursos que auxiliam no pré-processamento de bases de dados. São inúmeras as possibilidades que esses simples comandos oferecem. Conhecê-los permitirá que você tenha mais essas opções em alguma tarefa do pré-processamento e certamente em algum momento utilizará algum deles.

A principal ideia desse artigo é mostrar que existem esses e muitos outros comandos que os ajudarão a preprocessar bases de dados. Os exemplos apresentados acima são bem simples, portanto, recomendo fortemente que leia mais sobre cada um deles, tente utilizá-los e combiná-los.

Qualquer crítica, dúvida ou sugestão fiquem à vontade para entrar em contato.


Genicleito Gonçalves

Written by

Computer Scientist, graduated from Federal University of Bahia (UFBa), and Data Engineer at Center for Integration of Data and Health Knowledge (CIDACS)

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade