DEV Community

Cover image for Qual a importância da linha de comando para a Ciência de Dados?
Fernanda
Fernanda

Posted on

Qual a importância da linha de comando para a Ciência de Dados?

Estamos tão acostumados com Interfaces Gráficas de Usuário (Graphical User Interface, GUI) que acabamos deixando passar as maravilhas que podem ser realizadas com uma Interface de Linha de Comando (Command-Line Interface, CLI). Além da possibilidade de automatizar tarefas e da maior liberdade garantida pelo acesso às funcionalidades e serviços do sistema operacional, a Interface de Linha de Comando também é uma ferramenta poderosa para o processamento de dados. E com a crescente fama da Ciência de Dados, essa funcionalidade não pode passar despercebida.

Nesse artigo pretendo demonstrar a importância da CLI para a Ciência de Dados e por que devemos aprender a usá-la nesse intuito, ensinando alguns conceitos básicos relacionados ao tratamento de dados.

OBS.: Todos os códigos abaixo foram feitos para o shell Bash mas a maioria é aplicável em outros shells.


Comandos Básicos

Antes de iniciarmos vamos fazer uma pequena revisão dos comandos de shell mais utilizados:

Gif de digitação

  1. ls [OPÇÃO]... [ARQUIVO]... : Lista as informações sobre os ARQUIVOs (por padrão aqueles que estão dentro do diretório). Ordena as entradas em ordem alfabetica se nem -cftuvSUX nem --sort foram especificados.
Principais argumentos:
-a, –all     { inclui arquivos que começam com . }
-l           { lista arquivos no formato longo }
Enter fullscreen mode Exit fullscreen mode
  1. cd [-L|[-P [-e]] [-@]] [dir] : Muda o diretório de trabalho do shell. O padrão é o diretório HOME.

  2. mkdir [OPÇÃO]...DIRETÓRIO... : Cria os DIRETÓRIOs, caso eles ainda não existam.

  3. rmdir [OPÇÃO]...DIRETORIO... : Remove os DIRETÓRIOs, caso eles estejam vazios.

  4. cp [OPÇÃO]... [-T] FONTE DESTINO ou cp [OPÇÃO]... FONTE... DIRETÓRIO ou cp [OPÇÃO]... -t DIRETÓRIO FONTE... : Copia FONTE para DESTINO, ou mútiplas FONTEs para DIRETÓRIO.

Principais argumentos:
-i, --interactive     { mostra prompt antes de sobrescrever (sobrepõe a opção -n) }
-n, --no-clobber      { não sobrescreve um arquivo existente (sobrepõe a opção -i) }
-R, -r, --recursive   { copia diretórios recursivamente }
Enter fullscreen mode Exit fullscreen mode
  1. rm [OPÇÃO]... [ARQUIVO]... : Remove (desvincula) os ARQUIVOs.
Principais argumentos:
-f, --force           { ignora arquivos inexistentes e argumentos, não mostra o prompt }
-i                    { mostra prompt antes de cada remoção } 
-r, -R, --recursive   { remove diretórios e seus conteúdos recursivamente }
Enter fullscreen mode Exit fullscreen mode
  1. mv [OPÇÃO]... [-T] FONTE DESTINO ou mv [OPÇÃO]... FONTE... DIRETÓRIO ou mv [OPÇÃO]... -t DIRETÓRIO FONTE... : Renomeia FONTE no DESTINO, ou move FONTEs para DIRETÓRIO.
Principais argumentos:
-f, --force          { não mostra prompt antes de sobrescrever } 
-i, --interactive    { mostra prompt antes de sobrescrever }
-n, --no-clobber     { não sobrescreve um arquivo existente }        

Enter fullscreen mode Exit fullscreen mode

Relação com Ciência de Dados

A crescente quantidade de dados diversos no cenário atual obriga o mundo a desenvolver ferramentas que consigam lidar com esse volume de informações, é nesse contexto que surge a Ciência de Dados. Com todos os instrumentos necessários para tratar e processar esses dados, dando vazão aos mesmos.

Quando escolhemos uma ferramenta ideal para algum trabalho sempre optamos por algo que seja otimizado e de rápido processamento. Nesse contexto, temos as CLIs que permitem a automatização de tarefas, o manuseio de grandes arquivos rapidamente e a organização de dados mais facilmente.

A partir de agora vou apresentar alguns comandos de shell que são úteis no processamento de dados:

Inspeção de Dados

  1. head [OPÇÃO]... [ARQUIVO]... : Imprime as 10 primeiras linhas do ARQUIVO na saída padrão. Quando não há ARQUIVO, ou quando o ARQUIVO é -, o comando lê da entrada padrão.
Principais argumentos:
-n, --lines=[-]NUM     { imprime as NUM primeiras linhas ao invés das 10 primeiras }
Enter fullscreen mode Exit fullscreen mode
  1. tail [OPÇÃO]... [ARQUIVO]... : Imprime as 10 últimas linhas do ARQUIVO. Quando não há ARQUIVO, ou quando o ARQUIVO é -, o comando lê da entrada padrão.
Principais argumentos:
-n, --lines=[-]NUM     { imprime as NUM primeiras linhas ao invés das 10 primeiras }
Enter fullscreen mode Exit fullscreen mode
  1. wc [OPÇÃO]... [ARQUIVO]... ou wc [OPÇÃO]... --files0-from=F : Imprime a contagem de quebra de linha, palavras e bytes para cada ARQUIVO, e o númeto total de linhas se mais de um ARQUIVO é especificado.
Principais argumentos:
-c, --bytes    { imprime a contagem de bytes }
-m, --chars    { imprime a contagem de caracteres } 
-l, --lines    { imprime a contagem de quebras de linha }
-w, --words    { imprime a contagem de palavras }
Enter fullscreen mode Exit fullscreen mode
  1. column [OPÇÕES] [...] : Listagem de ARQUIVO em colunas.
Principais argumentos: 
-t, --table                 { cria uma tabela } 
-s, --separator <string>    { possíveis delimitadores da tabela } 
Enter fullscreen mode Exit fullscreen mode
  1. shuf [OPÇÕES]... [ARQUIVO] ou shuf -e [OPÇÕES]... [ARGUMENTOS]... ou shuf -i LO-HI [OPÇÕES]... : Escreve uma permutação aleatória das linhas do ARQUIVO na saída padrão.
    Principais argumentos:
    -n, --head-count=COUNT { a saída tem COUNT linhas }
    -o, --output=FILE { escreve o resultado no ARQUIVO ao invés da saída padrão }
    -r, --repeat { as linhas da saída podem se repetir }

  2. file [OPÇÃO...] [ARQUIVO...] : Determina o tipo dos ARQUIVOs.

Processamento de Dados

  1. cat [OPÇÃO]... [ARQUIVOS]... : Concatena ARQUIVOs na saída padrão.

  2. sort [OPÇÃO]... [ARQUIVO]... ou sort [OPÇÃO]... --files0-from=F : Escreve uma versão ordenada e concatenada de todos os ARQUIVOs na saída padrão.

Principais argumentos:
-r, --reverse               { reverte o resultado das comparações } 
-t, --field-separator=SEP   { usa SEP ao invés de um separador não vazio } 
-u, --unique                { imprime apenas a primeira ocorrência de um dado }
-k, --key=KEYDEF            { ordena pela chave (key); KEYDEF fornece a localização e o tipo }
Enter fullscreen mode Exit fullscreen mode
  1. cut OPÇÃO... [ARQUIVO]... : Imprime as partes selecionadas do ARQUIVO na saída padrão.
Principais argumentos: 
-d, --delimiter=DELIM     { usa DELIM ao invés de TAB para delimitar os campos }

Enter fullscreen mode Exit fullscreen mode
  1. grep [OPÇÃO]... PADRÕES [ARQUIVO]... : Procura PADRÕES em cada ARQUIVO. PADRÕES podem contem múltiplos padrões separados por quebras de linha.
Principais argumentos:
-v, --invert-match     { seleciona linhas que não contém o PADRÃO } 
-n, --line-number      { imprime númeração das linhas na saída padrão }
-i, --ignore-case      { ignora distinções de case nos PADRÕES e nos dados } 
Enter fullscreen mode Exit fullscreen mode
Exemplo: grep -i 'hello world' main.c
Enter fullscreen mode Exit fullscreen mode

Pipelines

Muitas vezes também podemos querer usar a saída de um comando como a entrada de outro, e para evitar o uso de algum arquivo intermediário podemos conectar os dois comandos da seguinte forma:

comando1 | comando2
Enter fullscreen mode Exit fullscreen mode

No exemplo acima o comando2 recebe como entrada a saída do comando1. Essa funcionalidade é chamada de Pipeline.


Conclusão

Os comandos apresentados tem aplicações variadas e muitos outros argumentos que não foram exibidos aqui. Então podemos ver que a CLI é uma ferramenta realmente preparada para lidar com o processamento de dados, o que nos falta muitas vezes é o conhecimento de tantos comandos e seus argumentos.

GIF de computador com tela cheia de comandos

A proposta do artigo foi mostrar um pouco do que a CLI pode fazer e espero que tenha incentivado alguém a ir além do apresentado e explorar outras funcionalidades relacionadas a Ciência de Dados.

Discussion (0)