• Roger Sampaio

Sua mãe ficará orgulhosa você saber 'Python com SQL'.


Fala meus guerreiros. Como estão vocês? Espero que bem, porque embarcaremos em dois assuntos muito feras quando se fala em tecnologia. De um lado o nosso tradicional e bom SQL: o idioma dos SGBD's relacionais quando precisamos nos comunicarmos com eles. Do outro o canhão Python, que se tornou a linguagem de programação favorita para análise de dados. Mas ao contrário do que muitas pessoas pensam: eles não de mundos diferentes. E podemos extrair o melhor dessas duas tecnologias juntos. Embora talvez você possa ser especialista em algum delas, acredito que enquanto mais tecnologias soubermos, mais ferramentas temos a disposição para resolvermos problemas de negócio. Gosto da abordagem 'não existe tecnologia perfeita e sim adequada a cada situação considerando os pós-contras'. Se você aprender a combiná-las, sua mãe certamente ficará muito orgulhosa e dirá 'meu filho é muito inteligente'. Vamos ver isso na prática, apertem os cintos!

1. Era uma vez, a base de dados ...


Após o entendimento do problema de negócio que queremos resolver, devemos coletar os dados. Eles podem vim das mais variadas fontes: banco de dados relacionais ou não, arquivos dos mais variados formados (textos, csv, json, xml), extraído de um site entre outras. A linguagem Python possui pacotes, funções para trabalhar com cada uma dessas fontes.


Suponha que precisamos montar um relatório para nosso gestor com dados clínicos (nome, idade, sexo, altura, peso e tipo sanguíneo) de vários pacientes, todos registrados em um arquivo csv. Um arquivo csv nada mais é do que um arquivo textual, no qual cada dado vem separado por um delimitador, geralmente é a virgula. Logo o primeiro passo é carregar os dados, processo conhecido como carga no ETL. Há um pacote em Python chamado Pandas, muito útil para análise de dados e usaremos ele. Então meu filho, vamos para a prática. O arquivo código-fonte está disponível no final desse artigo para você.

Na linha [2] importamos o pacote pandas e demos um apelido para ele chamado 'pd'. Então qualquer função que fomos usar do pandas, devemos usar pd.[nomeDaFuncao].

Na linha [3] como estamos diante de um arquivo csv, usaremos a função read_csv que conforme o próprio nome sugere, ela ler um arquivo no formato csv. Após a leitura do arquivo guardaremos em um variável chamada 'registros'.

Observe que na linha [6] a função type nos disse que a variável 'registros' é do tipo não inteiro, real e sim um dataframe. Pense em dataframe como se um fosse planilha com possibilidade de acessar, modificar qualquer valor dado a linha e coluna.

Já a linha [7] exibe os cinco primeiros registros através da função head. Importante ressaltar que a contagem de linhas começa em 0 e os nomes das colunas já veio do arquivo de origem, mas nada impede de a gente modificar posteriormente.


2. Que Comece a Brincadeira: o SELECT


Guerreiro, como você faria para trazer todas as pessoas com nome e sexo na linguagem SQL, considerando que registros é uma tabela? Pense e responda antes de rolar para baixo. Veja:

Simples não é? Aposto que sim. Na linguagem Python também é mamão com açúcar e com uma linha de código (isso mesmo que você ouviu) reproduzimos o mesmo resultado.

Na código acima dizemos exatamente as colunas que queremos trazer na consulta pelo nome delas, delimitado por aspas simples e todo conteúdo deve estar entre colchete. E se quisermos limitar a quantidade de resultados no SELECT em apenas 5? Como faríamos com linguagem SQL?

E agora com Python?

Note que para a função 'head' pertence a um objeto dataframe e como o próprio nome dela sugere: head = cabeça, lembra início de algo, no caso as primeiras linhas. Passamos para o parâmetro da função a quantidade de linhas que queremos exibir. E caso eu queira todas as colunas usando linguagem SQL, limitando apenas aos três primeiros registros iniciais?

E como seria com Python?


3. Filtrando, filtrando e filtrando: WHERE


A cláusula WHERE é uma das importantes quando falamos em SQL, porque permite especificar condições sobre a consulta a ser realizada, ou seja, um filtro. Retornando ao nosso exemplo, suponha que queiramos retornar todos os pacientes apenas do sexo feminino. Como faríamos isso em SQL?

E indo para linguagem Python, como seria esse quebra-cabeça?

Precisamos aplicar uma operação de 'slicing', que significa fatiar os dados baseado em algum critério. Veja:

Cabe uma observação importante aqui: existem dois operadores '=' na linguagem Python. Um igual '=' significa atribuição, podemos usá-lo, por exemplo, para atribuir um valor a uma variável. Já dois iguais '==' significa igualdade. No caso acima estamos comparando o valor da coluna para verificar se é igual ao caractere 'M' ou não. O código acima somente trará registros que atendam ao critério estabelecido, caso contrário nenhum aparecerá na tela. Podemos adicionais também mais critérios tanto em SQL como Python. Agora suponha que queria todas as pessoas do sexo masculino no qual o peso esteja 70-80. Como faremos isso com SQL? Vou mostrar duas formas de fazer, Arnaldo kkk.

E agora com Python?

A questão mais desafiadora aqui seja a organização para não se perder no meio dos parênteses. Perceba que tudo precisa estar alinhado, organizado para funcionar perfeitamente. O operador 'and' em SQL é operador '&', enquanto operador 'or' corresponde ao '|'. E agora se eu quiser trazer todos as pessoas são do tipo sanguíneo AB+ ou AB-, como seria isso em SQL? Temos duas possibilidades disso, veja:

E se for usando a linguagem Python como seria, meu amado?

E caso eu queria verificar se existem valores desconhecidos, ou seja, NULL, no campo 'Idade'? Como isso seria escrito no nosso bom SQL, meu guerreiro?

E agora com Python?

Perceba que nas linha [50] e [51] a função que verifica se algo valor é NULO são respectivamente: isna (dizendo que é nulo), notna (representando que não é nulo). Mais fácil que isso somente roubar doce de criança, concorda ou super concorda?

E ainda podemos transformar o nosso dataframe 'registros' em uma tabela temporária e aplicar diretamente a linguagem SQL no padrão ANSI, porém isso vou deixar como um gostinho de 'quero mais' para um futuro artigo. Quanto código foi mostrado até agora que pode parecer difícil e você pode estar surpreso, mas acredite: é prática. Tu pratica várias vezes e com o tempo começa a ficar fera.

4. Deixando as coisas mais interessantes: agrupando com GROUP BY


Na linguagem SQL existem as funções de agregação, que são bastante úteis. Afinal quem nunca precisou, por exemplo, calcular a média aritmética das sua notas para saber se foi aprovado ou não na época de escola ou então contou quanto tinha de dinheiro em mãos para comprar aquela roupa de Natal, hein? Aposto que todos. Count (para contar), AVG (média aritmética), SUM (soma de valores), Min (valor mínimo) , Max (valor máximo) são as funções de agregação em SQL. Retornando ao nosso exemplo, agora vamos contar por exemplo quantos pacientes são do sexo masculino. Em SQL será:

E na linguagem Python?

Na linha [20] a função iloc procura algo no dataframe, sendo que devem ser informado respectivamente a linha e coluna. No caso optamos por todas as linhas usando ':' e posteriormente a coluna de índice 1, que corresponde ao 'Sexo'. Qualquer linha e coluna do dataframe pode ser acessado por índices, começando sempre em 0. E por fim a função 'count' como o próprio nome sugere, efetua a contagem. E se quisermos agrupar a quantidade de pessoas por tipo sanguíneo considerando o sexo? Em SQL teremos:

E na linguagem Python?

Na linha [93] a função group by é exatamente a mesma no SQL. Dentro do parâmetro, você deve passar o nome das colunas no qual deseja o agrupamento. E um detalhe: não se limite aqui e dê asas a criatividade. É possível combinar funções uma dentro da outra, a depender do que realmente deseja fazer. Python e Pandas têm muitas funções e você pode aprender a usar cada uma delas, pesquisando na documentação oficial, confira:


https://pandas.pydata.org/docs/

https://docs.python.org/3/


5. Organizando a bagunça: ordenando com ORDER BY


A ordenação é atividade bastante comum na análise de dados. Podemos ordenar um relatório de forma crescente ou descrente usando nome das pessoas, a idade ou combinar mais critérios. Suponha que queiramos trazer todos os registros ordenados de forma crescente pelo nome do paciente. Como seria isso em SQL?

E se for em Python?

Na linha [94] a função sort_values é responsável pela ordenação e deve passado por parâmetro a coluna que será usada como critério através do 'by'. Simples e prático assim.


6. No Final das Contas


Meu guerreiro vou já encerrar por aqui para esse artigo não ficar longo demais, porque poderíamos fácil, fácil ficar a noite toda somente nessa assunto e ainda sim não cobriríamos tudo. Se você saber bem a linguagem SQL, para utilizar a Python é um 'pulo', porque as funções são bem próximas e a sintaxe não é tão complicada. Exploramos com muitos exemplos o SELECT por meio de 'slicing' no dataframe, WHERE via operadores lógicos, as funções de agregação juntamente com o GROUP BY e por fim o ORDER BY utilizando a função sort_values do Python. O código fonte do notebook e a base de dados se encontra abaixo para download:

SQLPython
.zip
Download ZIP • 4KB

E caso você queira aprender mais as tecnologias SQL e Python, temos 2 cursos disponíveis em mãos, confira:











Abraços e até a próxima.











183 visualizações0 comentário

Posts recentes

Ver tudo

Adoraria ouvir de você

  • Ícone do Instagram Preto

© 2023 por Laura Castro. Orgulhosamente criado com Wix.com