<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fernanda</title>
    <description>The latest articles on DEV Community by Fernanda (@fernandals).</description>
    <link>https://dev.to/fernandals</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F602571%2Fa96295a7-ffd8-49ac-828c-9654ed01f850.jpeg</url>
      <title>DEV Community: Fernanda</title>
      <link>https://dev.to/fernandals</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fernandals"/>
    <language>en</language>
    <item>
      <title>Qual a importância da linha de comando para a Ciência de Dados?</title>
      <dc:creator>Fernanda</dc:creator>
      <pubDate>Thu, 28 Apr 2022 02:06:43 +0000</pubDate>
      <link>https://dev.to/fernandals/qual-a-importancia-da-linha-de-comando-para-a-ciencia-de-dados-56j4</link>
      <guid>https://dev.to/fernandals/qual-a-importancia-da-linha-de-comando-para-a-ciencia-de-dados-56j4</guid>
      <description>&lt;p&gt;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 &lt;strong&gt;Interface de Linha de Comando&lt;/strong&gt; (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 &lt;strong&gt;processamento de dados&lt;/strong&gt;. E com a crescente fama da Ciência de Dados, essa funcionalidade não pode passar despercebida. &lt;/p&gt;

&lt;p&gt;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. &lt;/p&gt;

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




&lt;h2&gt;
  
  
  Comandos Básicos
&lt;/h2&gt;

&lt;p&gt;Antes de iniciarmos vamos fazer uma pequena revisão dos comandos de shell mais utilizados:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp80k0pp3wnv3w1lw3o5j.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp80k0pp3wnv3w1lw3o5j.gif" alt="Gif de digitação"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;ls [OPÇÃO]... [ARQUIVO]...&lt;/code&gt; : Lista as informações sobre os &lt;code&gt;ARQUIVO&lt;/code&gt;s (por padrão aqueles que estão dentro do diretório). Ordena as entradas em ordem alfabetica se nem &lt;code&gt;-cftuvSUX&lt;/code&gt; nem &lt;code&gt;--sort&lt;/code&gt; foram especificados.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Principais argumentos:
-a, –all     { inclui arquivos que começam com . }
-l           { lista arquivos no formato longo }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;cd [-L|[-P [-e]] [-@]] [dir]&lt;/code&gt; : Muda o diretório de trabalho do shell. O padrão é o diretório HOME.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;mkdir [OPÇÃO]...DIRETÓRIO...&lt;/code&gt; : Cria os &lt;code&gt;DIRETÓRIO&lt;/code&gt;s, caso eles ainda não existam.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;rmdir [OPÇÃO]...DIRETORIO...&lt;/code&gt; : Remove os &lt;code&gt;DIRETÓRIO&lt;/code&gt;s, caso eles estejam vazios.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;cp [OPÇÃO]... [-T] FONTE DESTINO&lt;/code&gt; ou &lt;code&gt;cp [OPÇÃO]... FONTE... DIRETÓRIO&lt;/code&gt; ou &lt;code&gt;cp [OPÇÃO]... -t DIRETÓRIO FONTE...&lt;/code&gt; : Copia &lt;code&gt;FONTE&lt;/code&gt; para &lt;code&gt;DESTINO&lt;/code&gt;, ou mútiplas &lt;code&gt;FONTE&lt;/code&gt;s para &lt;code&gt;DIRETÓRIO&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;rm [OPÇÃO]... [ARQUIVO]...&lt;/code&gt; : Remove (desvincula) os &lt;code&gt;ARQUIVO&lt;/code&gt;s.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;mv [OPÇÃO]... [-T] FONTE DESTINO&lt;/code&gt; ou &lt;code&gt;mv [OPÇÃO]... FONTE... 
DIRETÓRIO&lt;/code&gt; ou &lt;code&gt;mv [OPÇÃO]... -t DIRETÓRIO FONTE...&lt;/code&gt; : Renomeia &lt;code&gt;FONTE&lt;/code&gt; no &lt;code&gt;DESTINO&lt;/code&gt;, ou move &lt;code&gt;FONTE&lt;/code&gt;s para &lt;code&gt;DIRETÓRIO&lt;/code&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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 }        

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Relação com Ciência de Dados
&lt;/h2&gt;

&lt;p&gt;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. &lt;/p&gt;

&lt;p&gt;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. &lt;/p&gt;

&lt;p&gt;A partir de agora vou apresentar alguns comandos de shell que são úteis no &lt;u&gt;processamento de dados&lt;/u&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspeção de Dados
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;head [OPÇÃO]... [ARQUIVO]...&lt;/code&gt; : Imprime as 10 primeiras linhas do &lt;code&gt;ARQUIVO&lt;/code&gt; na saída padrão. Quando não há &lt;code&gt;ARQUIVO&lt;/code&gt;, ou quando o &lt;code&gt;ARQUIVO&lt;/code&gt; é -, o comando lê da entrada padrão.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Principais argumentos:
-n, --lines=[-]NUM     { imprime as NUM primeiras linhas ao invés das 10 primeiras }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;tail [OPÇÃO]... [ARQUIVO]...&lt;/code&gt; : Imprime as 10 últimas linhas do &lt;code&gt;ARQUIVO&lt;/code&gt;. Quando não há &lt;code&gt;ARQUIVO&lt;/code&gt;, ou quando o &lt;code&gt;ARQUIVO&lt;/code&gt; é -, o comando lê da entrada padrão.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Principais argumentos:
-n, --lines=[-]NUM     { imprime as NUM primeiras linhas ao invés das 10 primeiras }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;wc [OPÇÃO]... [ARQUIVO]...&lt;/code&gt; ou &lt;code&gt;wc [OPÇÃO]... --files0-from=F&lt;/code&gt; : Imprime a contagem de quebra de linha, palavras e bytes para cada &lt;code&gt;ARQUIVO&lt;/code&gt;, e o númeto total de linhas se mais de um &lt;code&gt;ARQUIVO&lt;/code&gt; é especificado.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;column [OPÇÕES] [...] : Listagem de &lt;code&gt;ARQUIVO&lt;/code&gt; em colunas.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Principais argumentos: 
-t, --table                 { cria uma tabela } 
-s, --separator &amp;lt;string&amp;gt;    { possíveis delimitadores da tabela } 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;shuf [OPÇÕES]... [ARQUIVO]&lt;/code&gt; ou &lt;code&gt;shuf -e [OPÇÕES]... [ARGUMENTOS]...&lt;/code&gt; ou &lt;code&gt;shuf -i LO-HI [OPÇÕES]...&lt;/code&gt; : Escreve uma permutação aleatória das linhas do &lt;code&gt;ARQUIVO&lt;/code&gt; na saída padrão.&lt;br&gt;
Principais argumentos:&lt;br&gt;
-n, --head-count=COUNT   { a saída tem COUNT linhas }&lt;br&gt;
-o, --output=FILE        { escreve o resultado no ARQUIVO ao invés da saída padrão } &lt;br&gt;
-r, --repeat             { as linhas da saída podem se repetir } &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;file [OPÇÃO...] [ARQUIVO...]&lt;/code&gt; : Determina o tipo dos &lt;code&gt;ARQUIVO&lt;/code&gt;s.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Processamento de Dados
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;cat [OPÇÃO]... [ARQUIVOS]...&lt;/code&gt; : Concatena &lt;code&gt;ARQUIVO&lt;/code&gt;s na saída padrão. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;sort [OPÇÃO]... [ARQUIVO]...&lt;/code&gt; ou &lt;code&gt;sort [OPÇÃO]... --files0-from=F&lt;/code&gt; : Escreve uma versão ordenada e concatenada de todos os &lt;code&gt;ARQUIVO&lt;/code&gt;s na saída padrão.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;cut OPÇÃO... [ARQUIVO]...&lt;/code&gt; : Imprime as partes selecionadas do &lt;code&gt;ARQUIVO&lt;/code&gt; na saída padrão.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Principais argumentos: 
-d, --delimiter=DELIM     { usa DELIM ao invés de TAB para delimitar os campos }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;grep [OPÇÃO]... PADRÕES [ARQUIVO]...&lt;/code&gt; : Procura PADRÕES em cada ARQUIVO. PADRÕES podem contem múltiplos padrões separados por quebras de linha.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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 } 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Exemplo: grep -i 'hello world' main.c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pipelines
&lt;/h3&gt;

&lt;p&gt;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:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;comando1 | comando2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo acima o &lt;code&gt;comando2&lt;/code&gt; recebe como entrada a saída do &lt;code&gt;comando1&lt;/code&gt;. Essa funcionalidade é chamada de &lt;em&gt;Pipeline&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;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. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpuyd5q7k9651e9xk456.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpuyd5q7k9651e9xk456.gif" alt="GIF de computador com tela cheia de comandos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.   &lt;/p&gt;

</description>
      <category>shell</category>
      <category>cienciadedados</category>
      <category>bash</category>
      <category>mlops</category>
    </item>
  </channel>
</rss>
