Published on

April 15, 2018

SQL Server: Agrupando uma Variável Contínua

Na ciência de dados, trabalhar com variáveis é uma tarefa comum. Um aspecto importante é agrupar uma variável contínua, o que envolve agrupar os valores em categorias ou intervalos. Neste artigo, exploraremos diferentes técnicas para agrupar uma variável contínua no SQL Server.

Agrupamento de Largura Igual

O agrupamento de largura igual é uma técnica em que a largura de cada intervalo é igual, independentemente do número de casos em cada intervalo. Este método preserva a distribuição da variável contínua, especialmente quando o número de intervalos é alto.

Vamos começar com um exemplo usando código Python:

# Conectando e lendo a Idade
con = pyodbc.connect('DSN=AWDW;UID=RUser;PWD=Pa$$w0rd')
query = "SELECT CustomerKey, Age FROM dbo.TMAge;"
TMAge = pd.read_sql(query, con)

# Mostra a variável contínua Idade em 20 intervalos de largura igual
TMAge['AgeEWB'] = pd.cut(TMAge['Age'], 20)
TMAge['AgeEWB'].value_counts()

# Cria um gráfico de barras
pd.crosstab(TMAge.AgeEWB, columns='Count').plot(kind='bar', legend=False, title='AgeEWB')
plt.show()

Este código lê a variável Idade do banco de dados e a agrupa em 20 intervalos de largura igual. A distribuição resultante é então exibida em um gráfico de barras.

O agrupamento de largura igual também pode ser feito no T-SQL:

-- Agrupamento de largura igual de uma variável contínua
DECLARE @binwidth AS NUMERIC(5, 2), @minA AS INT, @maxA AS INT;

SELECT @minA = MIN(AGE), @maxa = MAX(Age), @binwidth = 1.0 * (MAX(Age) - MIN(Age)) / 5
FROM dbo.TMAge;

SELECT CustomerKey, Age,
    CASE
        WHEN Age >= @minA + 0 * @binwidth AND Age < @minA + 1 * @binwidth THEN CAST((@minA + 0 * @binwidth) AS VARCHAR(5)) + ' - ' + CAST((@minA + 1 * @binwidth) AS VARCHAR(5))
        WHEN Age >= @minA + 1 * @binwidth AND Age < @minA + 2 * @binwidth THEN CAST((@minA + 1 * @binwidth) AS VARCHAR(5)) + ' - ' + CAST((@minA + 2 * @binwidth) AS VARCHAR(5))
        WHEN Age >= @minA + 2 * @binwidth AND Age < @minA + 3 * @binwidth THEN CAST((@minA + 2 * @binwidth) AS VARCHAR(5)) + ' - ' + CAST((@minA + 3 * @binwidth) AS VARCHAR(5))
        WHEN Age >= @minA + 3 * @binwidth AND Age < @minA + 4 * @binwidth THEN CAST((@minA + 3 * @binwidth) AS VARCHAR(5)) + ' - ' + CAST((@minA + 4 * @binwidth) AS VARCHAR(5))
        ELSE CAST((@minA + 4 * @binwidth) AS VARCHAR(5)) + ' + '
    END AS AgeEWB
FROM dbo.TMAge;

Este código T-SQL calcula os valores mínimo, máximo e médio da variável Idade, bem como a largura de cada intervalo para o agrupamento de largura igual. Em seguida, usa a cláusula CASE para definir os intervalos e suas etiquetas.

Agrupamento de Altura Igual

O agrupamento de altura igual envolve dividir a variável contínua em intervalos de forma que cada intervalo contenha aproximadamente o mesmo número de casos. A largura dos intervalos pode variar neste método.

No T-SQL, você pode usar a função NTILE() para realizar o agrupamento de altura igual:

-- Agrupamento de altura igual
SELECT CustomerKey, Age, CAST(NTILE(5) OVER (ORDER BY Age) AS CHAR(1)) AS AgeEHB
FROM dbo.TMAge
ORDER BY NEWID();

Este código atribui cada caso a um intervalo usando a função NTILE(), que divide os dados em grupos de tamanho igual com base no número especificado de intervalos.

No Python, você pode obter o agrupamento de altura igual usando a função qcut() do pandas:

# Agrupamento de altura igual
TMAge['AgeEHB'] = pd.qcut(TMAge['Age'], 5)
TMAge['AgeEHB'].value_counts()

Este código usa a função qcut() para dividir a variável Idade em 5 intervalos de altura igual. A distribuição resultante é então exibida.

Agrupamento Personalizado

O agrupamento personalizado permite que você defina seus próprios intervalos com base na lógica do mundo real ou de negócios. Isso é útil quando a importância de uma diferença de uma unidade na variável contínua varia em diferentes faixas.

No T-SQL, você pode usar a cláusula CASE para realizar o agrupamento personalizado:

-- Agrupamento personalizado
SELECT CustomerKey, Age,
    CASE
        WHEN Age >= 18 AND Age < 24 THEN '18 - 23'
        WHEN Age >= 24 AND Age < 31 THEN '24 - 30'
        WHEN Age >= 31 AND Age < 41 THEN '31 - 40'
        WHEN Age >= 41 AND Age < 56 THEN '41 - 55'
        ELSE '56 +'
    END AS AgeCUB
FROM dbo.TMAge;

Este código atribui cada caso a um intervalo com base nas faixas de idade especificadas.

No Python, você pode usar a função cut() do pandas para o agrupamento personalizado:

# Agrupamento personalizado
custombins = [17, 23, 30, 40, 55, 90]
TMAge['AgeCUB'] = pd.cut(TMAge['Age'], custombins)
TMAge['AgeCUB'].value_counts()

Este código define os intervalos personalizados usando um vetor de pontos de corte e atribui cada caso ao intervalo correspondente.

Esses são apenas alguns exemplos de como você pode agrupar uma variável contínua no SQL Server. A escolha da técnica de agrupamento depende dos requisitos específicos da sua análise e da natureza dos dados.

Fique atento para o nosso próximo artigo nesta série de ciência de dados, onde exploraremos o conceito de entropia da informação para variáveis discretas.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.