SQL vs Pandas - Criando um ranking

SQL vs Pandas - Criando um ranking

Neste artigo vamos ver como criar um ranking utilizando Pandas e o SQL.  Rankings são comuns na análise de dados e podem parecer simples a primeira vista, mas existem certos detalhes que devem ser levados em conta na hora de construir um.

Vamos começar vendo como fazer isso no Pandas. Para isso, vamos criar um dataframe com os dados que serão utilizados para montar o nosso ranking.

 

import pandas as pd

dataframe = pd.DataFrame({"nome": ["João", "Lucas", "Matheus", "Thiago", "Paulo", "Simão"], "salario": [2000, 2500, 3000, 3500, 3500, 4500]})

print(dataframe)

 

Nossa primeira tarefa vai ser colocar os dados em ordem decrescente de salário. 

 

import pandas as pd

dataframe = pd.DataFrame({"nome": ["João", "Lucas", "Matheus", "Thiago", "Paulo", "Simão"], "salario": [2000, 2500, 3000, 3500, 3500, 4500]})

dataframe = dataframe.sort_values("salario", ascending=False)

print(dataframe)

 

Para criar o ranking, vamos acrescentar uma coluna neste dataframe. Para criar o ranking basta utilizar o método rank() na coluna que desejamos utilizar como referência. Como parâmetro, vamos informar que desejamos um ranking na ordem decrescente, ou seja,o ranking será ordenado do maior salário para o menor.

 

import pandas as pd

dataframe = pd.DataFrame({"nome": ["João", "Lucas", "Matheus", "Thiago", "Paulo", "Simão"], "salario": [2000, 2500, 3000, 3500, 3500, 4500]})

dataframe[\'rank\'] = dataframe[\'salario\'].rank(ascending=False)

dataframe = dataframe.sort_values("salario", ascending=False)

print(dataframe)

 

Ao olhar o resultado percebemos um problema. O segundo e o terceiro lugar apareceram como 2,5 no ranking. Eles precisam aparecer como 2, já que o salário deles é igual.

Para ajustar a forma como o ranking foi criado podemos utilizar um parâmetro chamado "method". Por padrão, o method é do tipo "mean", que é a média. Se o parâmetro informado para o method for "min", teremos um resultado diferente:

 

dataframe[\'rank\'] = dataframe[\'salario\'].rank(method="min", ascending=False)

 

O retorno para ambos os casos com o mesmo valor o número 2. Perceba que ele pula o número 3 e vai direto para o núumero 4.

Vimos que o padrão do method e "mean" e testamos "min". Existe uma outra opção de method chamada "max". Fazendo assim:

 

dataframe[\'rank\'] = dataframe[\'salario\'].rank(method="max", ascending=False)

 

Retorna para ambos os casos com o mesmo valor o número 3. Perceba que ele pulou o número 2.

Para obter números diferentes de ranking para os valores repetidos devemos usar um method chamado "dense". 

 

dataframe[\'rank\'] = dataframe[\'salario\'].rank(method="dense", ascending=False)

 

Desta forma nosso problema é resolvido, e conseguimos a ordenação correta.

Existe uma outra forma de configurar o nosso ranking. Se você quiser um número unico de ranking para cada valor, independente de repetições, deve usar o method "first".

 

import pandas as pd

dataframe = pd.DataFrame({"nome": ["João", "Lucas", "Matheus", "Thiago", "Paulo", "Simão"], "salario": [2000, 2500, 3000, 3500, 3500, 4500]})

dataframe[\'rank\'] = dataframe[\'salario\'].rank(method="dense", ascending=False)

dataframe[\'rank2\'] = dataframe[\'salario\'].rank(method="first", ascending=False)

dataframe = dataframe.sort_values("salario", ascending=False)

print(dataframe)

 

Agora chegou a vez de ver como é feita a criação de um ranking utilizando SQL.

No SQL Server, podemos utilizar a função ROW_NUMBER() para criar nosso ranking. Já no MySQL, tudo vai depender da versão que está sendo utilizada em seu servidor. Se você estiver utilizando a versão 8 ou superior também poderá utilizar ROW_NUMBER(). Para versões inferiores, existe outra forma de criar um ranking.

Para não deixar o artigo muito extenso, eu compartilho um link onde eu mostro como pode ser criado um ranking no SQL Server e no MySQL

 

Criando um ranking com SQL

 

Encerramento

 

Neste artigo você viu como a comparação de como criar um ranking utilizando o Pandas e o SQL.

Caso você se interesse por mais comparações entre o Pandas e o SQL, não deixe de conferir os artigos anteriores:

 

SQL vs Pandas - Operações Básicas

 

SQL vs Pandas - Operações Básicas parte 2

 

SQL vs Pandas - Manipulando strings

 

SQL vs Pandas - Agrupamento e frequências

 

SQL vs Pandas - média, mediana e quartis

 

 

Outros conteudos que podem ser de seu interesse

Como calcular o total acumulado com SQL
31/07/2022SQL

Como calcular o total acumulado com SQL

Veja como fazer uma soma cumulativa utilizando SQL

Saiba mais...
Validando emails com o MySQL
13/10/2019SQL

Validando emails com o MySQL

Aprenda a validar e-mails utilizando o MySQL

Saiba mais...

Conteúdo sobre banco de dados sem complicação!