SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Ciência de dados na linha deCiência de dados na linha de
comandocomando
TuricasTuricas akaaka Álvaro JustenÁlvaro Justen
CapiConf 2019CapiConf 2019
10 de maio de 2019 - Curitiba/PR10 de maio de 2019 - Curitiba/PR
$ whoami$ whoami
TuricasTuricas, prazer! =), prazer! =)
Sigam-me os bons:Sigam-me os bons:
{{ ,,
,,
,,
,,
}}
//turicasturicas
twittertwitter
githubgithub
youtubeyoutube
slideshareslideshare
instagraminstagram
turicas@brasil.ioturicas@brasil.io
AgendaAgenda
Introdução
Navegação/manipulação de arquivos e diretórios
Acesso e filtragem de arquivos
Integrando comandos
Análise de Dados
Brasil.IOBrasil.IO
O Brasil em dados libertos
Data PipelineData Pipeline
schoolofdata.org/methodology
Maior parte do tempo dos projetos deMaior parte do tempo dos projetos de
análise de dados:análise de dados:
Acessibilidade de DadosAcessibilidade de Dados
ProblemasProblemas
Formato (qualidade técnica)
Exemplo: Boletim de balneabilidade em PDF (INEMA/BA)
Dispersão
Exemplo: Filiações partidárias em 945 ZIPs com CSVs (TSE)
Quantidade de dados
Exemplo: 18 milhões de sócios (RFB)
Domínio da área
Exemplo: o que é unidade eleitoral? (TSE)
1.1 Introdução: Terminal1.1 Introdução: Terminal
Terminal: teclado = <3
ou "linha de comando"
ou "modo texto"
ou "tela preta"
ou "shell"
É um interpretador de comandos
Existem diversos:
DOS
Bash
Zsh
PowerShell
...
Foco: sistemas UNIX-like (Linux, *BSD, darwin)
No Windows: oucygwin gitbash
hacktoon.com/bin/bash
1.2 Introdução: Comandos e1.2 Introdução: Comandos e
opçõesopções
Comandos ("verbos")
Exemplo: ls
Parâmetros
Exemplo: echo "olá, mundo!"
Opções
Exemplo: ls -l
Variáveis: armazenam valores
mensagem="olá, mundo!"
echo $mensagem
read -p "Qual seu nome? " no
echo $nome
2.1 Navegação/manipulação2.1 Navegação/manipulação
de arquivos e diretóriosde arquivos e diretórios
ls: list files
Exemplos: ls, ls /tmp, ls ~/Desktop
mkdir: make directory
Exemplo: mkdir nova-pasta
Caminhos relativos versus absolutos
rmdir: remove directory (apenas vazios)
Exemplo: rmdir nova-pasta
cd: change directory
Exemplo: cd /tmp
cp: copia arquivos
Exemplo: cp data/*.gz .
touch: cria arquivo em branco
2.2 Pedindo ajuda2.2 Pedindo ajuda
-h, --help
Exemplo: ls --help
man comando
Exemplo: man ls
Use /palavra para buscar
Use q para sair
Antes de continuar...Antes de continuar...
Baixar contracheque.csv.gz de
Baixar nomes.csv.gz de
brasil.io/dataset/salarios-
magistrados
brasil.io/dataset/genero-nomes
3.1 Descompactando arquivos3.1 Descompactando arquivos
gunzip arquivo.gz
xz -d arquivo.xz
tar xfz arquivo.tar.gz
unzip arquivo.zip
3.2 Acesso e filtragem de3.2 Acesso e filtragem de
arquivosarquivos
wc: word counter
Exemplo: wc -l contracheque.csv
cat: concatenate and print files
Exemplo: cat contracheque.csv
grep: filter
Exemplo: grep -i "Sergio Fernando Moro" contracheque.csv
cut: split and cut files
Exemplo: cut -d',' -f2,15 contracheque.csv
head: output the first part of a file
Exemplo: head -1 contracheque.csv
tail: output the last part of a file
Exemplo: tail -5 contracheque.csv
3.3. Redirecionar saída3.3. Redirecionar saída
comando > arquivo: cria novo arquivo (sempre)
Exemplo: head -1 contracheque.csv > cabecalho.csv
comando >> arquivo.txt: concatena ao arquivo
Exemplo: grep -i "Sergio Fernando Moro" contracheque.csv >>
cabecalho.csv
3.4. Uso de recursos3.4. Uso de recursos
Filosofia UNIX: um comando faz somente uma tarefa - e o faz
bem
Os comandos trabalham de forma preguiçosa (lazy)
Rodar grep num arquivo de 5GB não exige essa quantidade
de memória (diferente do que abrir um arquivo desses no
Excel)
3.4.2 Exemplo3.4.2 Exemplo
# `arquivo.csv` não cabe em memória!
# Será processado linha a linha.
grep XXX arquivo.csv > resultado.csv
3.5 Criando scripts3.5 Criando scripts
Crie um arquivo e coloque um comando por linha
O comando history pode te ajudar, listando os comandos que
você digitou recentemente
Execute o script com:
bash nome-do-arquivo.sh; ou
Dê permissão de execução (chmod +x arquivo.sh) e rode
./arquivo.sh
3.5.2 Navegando no histórico3.5.2 Navegando no histórico
de comandosde comandos
Seta para cima: mostra comandos anteriores
Facilita muito executar comandos parecidos, alterando
apenas alguns parâmetros
Ctrl-r: busca no histórico de comandos
Leia a documentação da para outros atalhosGNU Readline
3.5.3 Script de Exemplo3.5.3 Script de Exemplo
juizes.shjuizes.sh
#!/bin/bash
echo "Número de linhas do arquivo inicial:"
wc -l contracheque.csv
echo "Criando arquivo com Moro e Bruno..."
head -1 contracheque.csv > juizes.csv
grep --color=no -i "SERGIO FERNANDO MORO" contracheque.csv >>
grep --color=no -i "BRUNO SOUZA SAVINO" contracheque.csv >> j
echo "Arquivo criado. Total de linhas: $(wc -l juizes.csv)"
3.5.4 Script de Exemplo (2)3.5.4 Script de Exemplo (2)
juiz.shjuiz.sh
#!/bin/bash
INPUT="contracheque.csv"
head -1 "$INPUT" # header
grep --color=no -i "$1" "$INPUT"
4.1. Combinando comandos4.1. Combinando comandos
Pipe (barra vertical): |
Redireciona saída de um comando (standard output) para a
entrada (standard input) de outro
Pode ser utilizado quantas vezes quiser
Pode ser utilizado em conjunto com > e >>
3.2 Acesso e filtragem de3.2 Acesso e filtragem de
arquivos (2)arquivos (2)
juiz-rendimento.shjuiz-rendimento.sh
#!/bin/bash
INPUT="contracheque.csv"
head -1 "$INPUT"
grep --color=no -i "$1" "$INPUT" | 
cut -d "," -f 2,15,20,22 | 
sort
4.2. Repetindo comandos4.2. Repetindo comandos
for x in sequence; do commands; done
while condition; do commands; done
cd /home/turicas/projects/balneabilidade-brasil/data/download
for filename in ls *.pdf; do
echo do something with $filename
done
5. Análise de dados5. Análise de dados
Comandos que nem sempre estão instalados por padrão
Cada um requer uma forma diferente de instalação.
Em sistemas Debian e Ubuntu: apt install nome-do-programa
Exemplos:
aria2c: baixar arquivos
rows: converter dados tabulares em diversos formatos
convert (imagemagick): recorta, edita e converte imagens
Problema: lentidão ao baixarProblema: lentidão ao baixar
Estrelando:Estrelando: Receita FederalReceita Federal
twitter.com/turicas/status/1114185311372873729
SoluçãoSolução
URL="http://200.152.38.155/CNPJ/DADOS_ABERTOS_CNPJ.zip"
aria2c -s 16 -x 16 $URL
Problema: Formato não estruturadoProblema: Formato não estruturado
Estrelando:Estrelando: INEMA/BAINEMA/BA
SoluçãoSolução
rows convert arquivo.pdf arquivo.csv
github.com/turicas/balneabilidade-brasil
5.2. SQL5.2. SQL
sqlite3 + rows csv2sqlite
psql + rows pgimport
rows csv2sqlite data/contracheque.csv.gz 
--schemas=data/schema-contracheque.csv data/db.sqlite
rows csv2sqlite data/nomes.csv.gz data/db.sqlite
6.2. Script para SQLite6.2. Script para SQLite
genero.shgenero.sh
#!/bin/bash
echo "name,classification"
sort data/palestrantes.txt | 
cut -d " " -f 1 | 
iconv -f utf8 -t ascii//TRANSLIT | 
tr '[:lower:]' '[:upper:]' | 
sort | while read nome; do
echo -e ".mode csvnSELECT first_name,classification FROM n
WHERE first_name = '$nome'" | 
sqlite3 db.sqlite
done
rows print arquivo.csv
6.3. Script para SQLite6.3. Script para SQLite
echo "SELECT ..." > consulta.sql
echo -e ".mode csvn.headers onn$(cat consulta.sql)" | 
sqlite3 data/db.sqlite | 
gzip - > resultado.csv.gz
rows queryrows query
QUERY="SELECT classification AS gender, COUNT(*) FROM table1
rows query "$QUERY" genero.csv
ConclusãoConclusão
Dá pra fazer muita coisa
Existe uma infinidade de comandos
Contribua com o Brasil.IO!Contribua com o Brasil.IO!
blog.brasil.io
brasil.io/colabore
AvaliaçãoAvaliação
Dúvidas?Dúvidas?
{{ ,,
,,
,,
,,
}}
//turicasturicas
twittertwitter
githubgithub
youtubeyoutube
slideshareslideshare
instagraminstagram
turicas@brasil.ioturicas@brasil.io

Mais conteúdo relacionado

Semelhante a Ciência de Dados na Linha de Comando

Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Programação Estruturada 2 - Aula 04
Programação Estruturada 2 - Aula 04Programação Estruturada 2 - Aula 04
Programação Estruturada 2 - Aula 04thomasdacosta
 
Comandos básicos linux
Comandos básicos linuxComandos básicos linux
Comandos básicos linuxLuciano Souto
 
Gabarito simulado lpi-1
Gabarito simulado lpi-1Gabarito simulado lpi-1
Gabarito simulado lpi-1paradamonstro
 
O Que é shell - bash
O Que é shell - bashO Que é shell - bash
O Que é shell - bashSérgio Silva
 
Operadores de redirecionamento
Operadores de redirecionamentoOperadores de redirecionamento
Operadores de redirecionamentoIvani Nascimento
 
Redirecionamento, pipes e processos linux
Redirecionamento, pipes e processos   linuxRedirecionamento, pipes e processos   linux
Redirecionamento, pipes e processos linuxFábio dos Reis
 
Tutorial poke-tool
Tutorial poke-toolTutorial poke-tool
Tutorial poke-toolunifesptk
 
Aula - Comandos Linux - Parte 2
Aula - Comandos Linux - Parte 2Aula - Comandos Linux - Parte 2
Aula - Comandos Linux - Parte 2Leo Amorim
 
Aula - Comandos Linux - Parte 2
Aula - Comandos Linux - Parte 2Aula - Comandos Linux - Parte 2
Aula - Comandos Linux - Parte 2Leo Amorim
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1Leo Amorim
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Leo Amorim
 
Linux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosLinux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosFrederico Madeira
 
O Que é Shell (bash)
O Que é Shell (bash)O Que é Shell (bash)
O Que é Shell (bash)Sérgio Silva
 
(03) shell e comandos basicos[1]
(03) shell e comandos basicos[1](03) shell e comandos basicos[1]
(03) shell e comandos basicos[1]Anderson Lago
 

Semelhante a Ciência de Dados na Linha de Comando (20)

Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Programação Estruturada 2 - Aula 04
Programação Estruturada 2 - Aula 04Programação Estruturada 2 - Aula 04
Programação Estruturada 2 - Aula 04
 
Workshop Python.2
Workshop Python.2Workshop Python.2
Workshop Python.2
 
Comandos básicos linux
Comandos básicos linuxComandos básicos linux
Comandos básicos linux
 
Gabarito simulado lpi-1
Gabarito simulado lpi-1Gabarito simulado lpi-1
Gabarito simulado lpi-1
 
O Que é shell - bash
O Que é shell - bashO Que é shell - bash
O Que é shell - bash
 
Operadores de redirecionamento
Operadores de redirecionamentoOperadores de redirecionamento
Operadores de redirecionamento
 
Redirecionamento, pipes e processos linux
Redirecionamento, pipes e processos   linuxRedirecionamento, pipes e processos   linux
Redirecionamento, pipes e processos linux
 
Aula 10 semana
Aula 10 semanaAula 10 semana
Aula 10 semana
 
Tutorial poke-tool
Tutorial poke-toolTutorial poke-tool
Tutorial poke-tool
 
Aula - Comandos Linux - Parte 2
Aula - Comandos Linux - Parte 2Aula - Comandos Linux - Parte 2
Aula - Comandos Linux - Parte 2
 
Aula - Comandos Linux - Parte 2
Aula - Comandos Linux - Parte 2Aula - Comandos Linux - Parte 2
Aula - Comandos Linux - Parte 2
 
Aula 10 semana
Aula 10 semanaAula 10 semana
Aula 10 semana
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1
 
Linux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosLinux - Shell e Comandos Básicos
Linux - Shell e Comandos Básicos
 
Aula 11 semana
Aula 11 semanaAula 11 semana
Aula 11 semana
 
O Que é Shell (bash)
O Que é Shell (bash)O Que é Shell (bash)
O Que é Shell (bash)
 
Shell Scipt - Comandos
Shell Scipt - ComandosShell Scipt - Comandos
Shell Scipt - Comandos
 
(03) shell e comandos basicos[1]
(03) shell e comandos basicos[1](03) shell e comandos basicos[1]
(03) shell e comandos basicos[1]
 

Mais de Álvaro Justen

Sobre os ombos de gigantes
Sobre os ombos de gigantesSobre os ombos de gigantes
Sobre os ombos de gigantesÁlvaro Justen
 
Projeto Brasil.IO COVID-19: Dados Públicos Acessíveis
Projeto Brasil.IO COVID-19: Dados Públicos AcessíveisProjeto Brasil.IO COVID-19: Dados Públicos Acessíveis
Projeto Brasil.IO COVID-19: Dados Públicos AcessíveisÁlvaro Justen
 
Dados abertos, Python e PostgreSQL: a combinação perfeita
Dados abertos, Python e PostgreSQL: a combinação perfeitaDados abertos, Python e PostgreSQL: a combinação perfeita
Dados abertos, Python e PostgreSQL: a combinação perfeitaÁlvaro Justen
 
A era da pós-verdade - minhas reflexões e crenças
A era da pós-verdade - minhas reflexões e crençasA era da pós-verdade - minhas reflexões e crenças
A era da pós-verdade - minhas reflexões e crençasÁlvaro Justen
 
Realmente precisamos de big data?
Realmente precisamos de big data?Realmente precisamos de big data?
Realmente precisamos de big data?Álvaro Justen
 
Brasil.IO: Libertação de Dados Públicos, com Python
Brasil.IO: Libertação de Dados Públicos, com PythonBrasil.IO: Libertação de Dados Públicos, com Python
Brasil.IO: Libertação de Dados Públicos, com PythonÁlvaro Justen
 
#opendata #fail: Causos da Transparência Brasileira
#opendata #fail: Causos da Transparência Brasileira#opendata #fail: Causos da Transparência Brasileira
#opendata #fail: Causos da Transparência BrasileiraÁlvaro Justen
 
Brasil.IO: Dados Abertos para Mais Democracia
Brasil.IO: Dados Abertos para Mais DemocraciaBrasil.IO: Dados Abertos para Mais Democracia
Brasil.IO: Dados Abertos para Mais DemocraciaÁlvaro Justen
 
Dados abertos, direito autoral e democracia
Dados abertos, direito autoral e democraciaDados abertos, direito autoral e democracia
Dados abertos, direito autoral e democraciaÁlvaro Justen
 
Jornalismo de Dados: Programando a Democracia no Brasil
Jornalismo de Dados: Programando a Democracia no BrasilJornalismo de Dados: Programando a Democracia no Brasil
Jornalismo de Dados: Programando a Democracia no BrasilÁlvaro Justen
 
Introdução a programação com Python (para jornalistas)
Introdução a programação com Python (para jornalistas)Introdução a programação com Python (para jornalistas)
Introdução a programação com Python (para jornalistas)Álvaro Justen
 
Libertando dados públicos com ferramentas livres
Libertando dados públicos com ferramentas livresLibertando dados públicos com ferramentas livres
Libertando dados públicos com ferramentas livresÁlvaro Justen
 
Introdução a Programação com Python
Introdução a Programação com PythonIntrodução a Programação com Python
Introdução a Programação com PythonÁlvaro Justen
 
Software Livre versus Open Source
Software Livre versus Open SourceSoftware Livre versus Open Source
Software Livre versus Open SourceÁlvaro Justen
 
Datos Tabulares: La Manera Pythónica
Datos Tabulares: La Manera PythónicaDatos Tabulares: La Manera Pythónica
Datos Tabulares: La Manera PythónicaÁlvaro Justen
 
[FISL17] Liberando dados com um comando, por Álvaro Justen
[FISL17] Liberando dados com um comando, por Álvaro Justen[FISL17] Liberando dados com um comando, por Álvaro Justen
[FISL17] Liberando dados com um comando, por Álvaro JustenÁlvaro Justen
 
Arduino (para fazedores)
Arduino (para fazedores)Arduino (para fazedores)
Arduino (para fazedores)Álvaro Justen
 
Dados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaDados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaÁlvaro Justen
 
[PyBr11] Lendo dados tabulares: versão pythônica
[PyBr11] Lendo dados tabulares: versão pythônica[PyBr11] Lendo dados tabulares: versão pythônica
[PyBr11] Lendo dados tabulares: versão pythônicaÁlvaro Justen
 

Mais de Álvaro Justen (20)

Sobre os ombos de gigantes
Sobre os ombos de gigantesSobre os ombos de gigantes
Sobre os ombos de gigantes
 
Projeto Brasil.IO COVID-19: Dados Públicos Acessíveis
Projeto Brasil.IO COVID-19: Dados Públicos AcessíveisProjeto Brasil.IO COVID-19: Dados Públicos Acessíveis
Projeto Brasil.IO COVID-19: Dados Públicos Acessíveis
 
Dados abertos, Python e PostgreSQL: a combinação perfeita
Dados abertos, Python e PostgreSQL: a combinação perfeitaDados abertos, Python e PostgreSQL: a combinação perfeita
Dados abertos, Python e PostgreSQL: a combinação perfeita
 
A era da pós-verdade - minhas reflexões e crenças
A era da pós-verdade - minhas reflexões e crençasA era da pós-verdade - minhas reflexões e crenças
A era da pós-verdade - minhas reflexões e crenças
 
Realmente precisamos de big data?
Realmente precisamos de big data?Realmente precisamos de big data?
Realmente precisamos de big data?
 
Brasil.IO: Libertação de Dados Públicos, com Python
Brasil.IO: Libertação de Dados Públicos, com PythonBrasil.IO: Libertação de Dados Públicos, com Python
Brasil.IO: Libertação de Dados Públicos, com Python
 
#opendata #fail: Causos da Transparência Brasileira
#opendata #fail: Causos da Transparência Brasileira#opendata #fail: Causos da Transparência Brasileira
#opendata #fail: Causos da Transparência Brasileira
 
Brasil.IO: Dados Abertos para Mais Democracia
Brasil.IO: Dados Abertos para Mais DemocraciaBrasil.IO: Dados Abertos para Mais Democracia
Brasil.IO: Dados Abertos para Mais Democracia
 
Dados abertos, direito autoral e democracia
Dados abertos, direito autoral e democraciaDados abertos, direito autoral e democracia
Dados abertos, direito autoral e democracia
 
Jornalismo de Dados: Programando a Democracia no Brasil
Jornalismo de Dados: Programando a Democracia no BrasilJornalismo de Dados: Programando a Democracia no Brasil
Jornalismo de Dados: Programando a Democracia no Brasil
 
Python no Jornalismo
Python no JornalismoPython no Jornalismo
Python no Jornalismo
 
Introdução a programação com Python (para jornalistas)
Introdução a programação com Python (para jornalistas)Introdução a programação com Python (para jornalistas)
Introdução a programação com Python (para jornalistas)
 
Libertando dados públicos com ferramentas livres
Libertando dados públicos com ferramentas livresLibertando dados públicos com ferramentas livres
Libertando dados públicos com ferramentas livres
 
Introdução a Programação com Python
Introdução a Programação com PythonIntrodução a Programação com Python
Introdução a Programação com Python
 
Software Livre versus Open Source
Software Livre versus Open SourceSoftware Livre versus Open Source
Software Livre versus Open Source
 
Datos Tabulares: La Manera Pythónica
Datos Tabulares: La Manera PythónicaDatos Tabulares: La Manera Pythónica
Datos Tabulares: La Manera Pythónica
 
[FISL17] Liberando dados com um comando, por Álvaro Justen
[FISL17] Liberando dados com um comando, por Álvaro Justen[FISL17] Liberando dados com um comando, por Álvaro Justen
[FISL17] Liberando dados com um comando, por Álvaro Justen
 
Arduino (para fazedores)
Arduino (para fazedores)Arduino (para fazedores)
Arduino (para fazedores)
 
Dados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaDados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira Pythônica
 
[PyBr11] Lendo dados tabulares: versão pythônica
[PyBr11] Lendo dados tabulares: versão pythônica[PyBr11] Lendo dados tabulares: versão pythônica
[PyBr11] Lendo dados tabulares: versão pythônica
 

Ciência de Dados na Linha de Comando

  • 1. Ciência de dados na linha deCiência de dados na linha de comandocomando TuricasTuricas akaaka Álvaro JustenÁlvaro Justen CapiConf 2019CapiConf 2019 10 de maio de 2019 - Curitiba/PR10 de maio de 2019 - Curitiba/PR
  • 2. $ whoami$ whoami TuricasTuricas, prazer! =), prazer! =) Sigam-me os bons:Sigam-me os bons: {{ ,, ,, ,, ,, }} //turicasturicas twittertwitter githubgithub youtubeyoutube slideshareslideshare instagraminstagram turicas@brasil.ioturicas@brasil.io
  • 3. AgendaAgenda Introdução Navegação/manipulação de arquivos e diretórios Acesso e filtragem de arquivos Integrando comandos Análise de Dados
  • 6. Maior parte do tempo dos projetos deMaior parte do tempo dos projetos de análise de dados:análise de dados:
  • 7. Acessibilidade de DadosAcessibilidade de Dados ProblemasProblemas Formato (qualidade técnica) Exemplo: Boletim de balneabilidade em PDF (INEMA/BA) Dispersão Exemplo: Filiações partidárias em 945 ZIPs com CSVs (TSE) Quantidade de dados Exemplo: 18 milhões de sócios (RFB) Domínio da área Exemplo: o que é unidade eleitoral? (TSE)
  • 8. 1.1 Introdução: Terminal1.1 Introdução: Terminal Terminal: teclado = <3 ou "linha de comando" ou "modo texto" ou "tela preta" ou "shell" É um interpretador de comandos Existem diversos: DOS Bash Zsh PowerShell ... Foco: sistemas UNIX-like (Linux, *BSD, darwin) No Windows: oucygwin gitbash
  • 10. 1.2 Introdução: Comandos e1.2 Introdução: Comandos e opçõesopções Comandos ("verbos") Exemplo: ls Parâmetros Exemplo: echo "olá, mundo!" Opções Exemplo: ls -l Variáveis: armazenam valores mensagem="olá, mundo!" echo $mensagem read -p "Qual seu nome? " no echo $nome
  • 11. 2.1 Navegação/manipulação2.1 Navegação/manipulação de arquivos e diretóriosde arquivos e diretórios ls: list files Exemplos: ls, ls /tmp, ls ~/Desktop mkdir: make directory Exemplo: mkdir nova-pasta Caminhos relativos versus absolutos rmdir: remove directory (apenas vazios) Exemplo: rmdir nova-pasta cd: change directory Exemplo: cd /tmp cp: copia arquivos Exemplo: cp data/*.gz . touch: cria arquivo em branco
  • 12. 2.2 Pedindo ajuda2.2 Pedindo ajuda -h, --help Exemplo: ls --help man comando Exemplo: man ls Use /palavra para buscar Use q para sair
  • 13. Antes de continuar...Antes de continuar... Baixar contracheque.csv.gz de Baixar nomes.csv.gz de brasil.io/dataset/salarios- magistrados brasil.io/dataset/genero-nomes
  • 14. 3.1 Descompactando arquivos3.1 Descompactando arquivos gunzip arquivo.gz xz -d arquivo.xz tar xfz arquivo.tar.gz unzip arquivo.zip
  • 15. 3.2 Acesso e filtragem de3.2 Acesso e filtragem de arquivosarquivos wc: word counter Exemplo: wc -l contracheque.csv cat: concatenate and print files Exemplo: cat contracheque.csv grep: filter Exemplo: grep -i "Sergio Fernando Moro" contracheque.csv cut: split and cut files Exemplo: cut -d',' -f2,15 contracheque.csv head: output the first part of a file Exemplo: head -1 contracheque.csv tail: output the last part of a file Exemplo: tail -5 contracheque.csv
  • 16. 3.3. Redirecionar saída3.3. Redirecionar saída comando > arquivo: cria novo arquivo (sempre) Exemplo: head -1 contracheque.csv > cabecalho.csv comando >> arquivo.txt: concatena ao arquivo Exemplo: grep -i "Sergio Fernando Moro" contracheque.csv >> cabecalho.csv
  • 17. 3.4. Uso de recursos3.4. Uso de recursos Filosofia UNIX: um comando faz somente uma tarefa - e o faz bem Os comandos trabalham de forma preguiçosa (lazy) Rodar grep num arquivo de 5GB não exige essa quantidade de memória (diferente do que abrir um arquivo desses no Excel)
  • 18. 3.4.2 Exemplo3.4.2 Exemplo # `arquivo.csv` não cabe em memória! # Será processado linha a linha. grep XXX arquivo.csv > resultado.csv
  • 19. 3.5 Criando scripts3.5 Criando scripts Crie um arquivo e coloque um comando por linha O comando history pode te ajudar, listando os comandos que você digitou recentemente Execute o script com: bash nome-do-arquivo.sh; ou Dê permissão de execução (chmod +x arquivo.sh) e rode ./arquivo.sh
  • 20. 3.5.2 Navegando no histórico3.5.2 Navegando no histórico de comandosde comandos Seta para cima: mostra comandos anteriores Facilita muito executar comandos parecidos, alterando apenas alguns parâmetros Ctrl-r: busca no histórico de comandos Leia a documentação da para outros atalhosGNU Readline
  • 21. 3.5.3 Script de Exemplo3.5.3 Script de Exemplo juizes.shjuizes.sh #!/bin/bash echo "Número de linhas do arquivo inicial:" wc -l contracheque.csv echo "Criando arquivo com Moro e Bruno..." head -1 contracheque.csv > juizes.csv grep --color=no -i "SERGIO FERNANDO MORO" contracheque.csv >> grep --color=no -i "BRUNO SOUZA SAVINO" contracheque.csv >> j echo "Arquivo criado. Total de linhas: $(wc -l juizes.csv)"
  • 22. 3.5.4 Script de Exemplo (2)3.5.4 Script de Exemplo (2) juiz.shjuiz.sh #!/bin/bash INPUT="contracheque.csv" head -1 "$INPUT" # header grep --color=no -i "$1" "$INPUT"
  • 23. 4.1. Combinando comandos4.1. Combinando comandos Pipe (barra vertical): | Redireciona saída de um comando (standard output) para a entrada (standard input) de outro Pode ser utilizado quantas vezes quiser Pode ser utilizado em conjunto com > e >>
  • 24. 3.2 Acesso e filtragem de3.2 Acesso e filtragem de arquivos (2)arquivos (2) juiz-rendimento.shjuiz-rendimento.sh #!/bin/bash INPUT="contracheque.csv" head -1 "$INPUT" grep --color=no -i "$1" "$INPUT" | cut -d "," -f 2,15,20,22 | sort
  • 25. 4.2. Repetindo comandos4.2. Repetindo comandos for x in sequence; do commands; done while condition; do commands; done cd /home/turicas/projects/balneabilidade-brasil/data/download for filename in ls *.pdf; do echo do something with $filename done
  • 26. 5. Análise de dados5. Análise de dados Comandos que nem sempre estão instalados por padrão Cada um requer uma forma diferente de instalação. Em sistemas Debian e Ubuntu: apt install nome-do-programa Exemplos: aria2c: baixar arquivos rows: converter dados tabulares em diversos formatos convert (imagemagick): recorta, edita e converte imagens
  • 27. Problema: lentidão ao baixarProblema: lentidão ao baixar Estrelando:Estrelando: Receita FederalReceita Federal twitter.com/turicas/status/1114185311372873729
  • 29. Problema: Formato não estruturadoProblema: Formato não estruturado Estrelando:Estrelando: INEMA/BAINEMA/BA
  • 30. SoluçãoSolução rows convert arquivo.pdf arquivo.csv github.com/turicas/balneabilidade-brasil
  • 31. 5.2. SQL5.2. SQL sqlite3 + rows csv2sqlite psql + rows pgimport rows csv2sqlite data/contracheque.csv.gz --schemas=data/schema-contracheque.csv data/db.sqlite rows csv2sqlite data/nomes.csv.gz data/db.sqlite
  • 32. 6.2. Script para SQLite6.2. Script para SQLite genero.shgenero.sh #!/bin/bash echo "name,classification" sort data/palestrantes.txt | cut -d " " -f 1 | iconv -f utf8 -t ascii//TRANSLIT | tr '[:lower:]' '[:upper:]' | sort | while read nome; do echo -e ".mode csvnSELECT first_name,classification FROM n WHERE first_name = '$nome'" | sqlite3 db.sqlite done rows print arquivo.csv
  • 33. 6.3. Script para SQLite6.3. Script para SQLite echo "SELECT ..." > consulta.sql echo -e ".mode csvn.headers onn$(cat consulta.sql)" | sqlite3 data/db.sqlite | gzip - > resultado.csv.gz
  • 34. rows queryrows query QUERY="SELECT classification AS gender, COUNT(*) FROM table1 rows query "$QUERY" genero.csv
  • 35. ConclusãoConclusão Dá pra fazer muita coisa Existe uma infinidade de comandos
  • 36. Contribua com o Brasil.IO!Contribua com o Brasil.IO! blog.brasil.io brasil.io/colabore