Classificação Multirrótulo: Calculando similaridades entre rótulos Parte 3
Oi gente! Voltando aqui para continuarmos nosso tutorialzinho. Na parte 2 nós aprendemos a criar um projeto no RStudio, setar o local de trabalho, abrir um arquivo csv e retirar uma coluna do dataframe. Hoje, vamos dar mais alguns passos para conseguir calcular as medidas de similaridade. Borá lá!
Verificando se os rótulos são iguais a 1
Vamos agora verificar se cada valor de cada coluna do conjunto de rótulos que estamos trabalhando é 1 ou não. Se o valor for igual a 1, então vai retornar para nós o valor TRUE, que é 1, caso contrário FALSE que é 0. O código até o momento está como a seguir:
Agora vamos continuar, você vai digitar o seguinte:
L1_1 = (dataset_2$L1 == 1)
L2_1 = (dataset_2$L2 == 1)
L3_1 = (dataset_2$L3 == 1)
L4_1 = (dataset_2$L4 == 1)
L5_1 = (dataset_2$L5 == 1)
L1_1, L2_1, L3_1, L4_1 e L5_1 são variáveis que armazenam o resultado da comparação entre os valores da coluna correspondentes com o valor 1. O comando (dataset_2$L1 == 1) faz exatamente essa comparação.
Depois de ter digitado, selecione as 5 linhas e aperte CTRL + ENTER para executar os 5 comandos. Para visualizar o resultado, você pode usar a aba de ambiente, conforme figura a seguir.
Note que aparece logi[1:5] e então temos os valores TRUE ou FALSE. logi vem de LÓGICO, pois TRUE/FALSE são valores lógicos. 1:5 indica que temos 5 valores, e 1:5 é lido como "de 1 até 5".
Verificando se os rótulos são iguais a 0
Agora vamos fazer exatamente a mesma coisa só que vamos comparar com zero. Digite no seu script:
L1_0 = (dataset_2$L1 == 0)
L2_0 = (dataset_2$L2 == 0)
L3_0 = (dataset_2$L3 == 0)
L4_0 = (dataset_2$L4 == 0)
L5_0 = (dataset_2$L5 == 0)
Selecione as 5 linhas e aperte CTRL+ENTER. O resultado é:
Observe que as variáveis na aba ambiente estão em ordem alfabética! Pronto, já sabemos agora quando o valor é igual a zero ou igual a um. Para reforçar o que foi dito, dê uma olhada nesse vídeo aqui!
Tem outro jeito de fazer essas comparações?
Sim, tem outro jeito para fazermos essa comparação, um ainda mais automático. Primeiro, vamos descobrir quantas linhas e colunas nosso dataframe tem usando os comandos nrow(nome_do_dataframe) e ncol(nome_do_dataframe). Digite e execute:
linhas = nrow(dataset_2)
colunas = ncol(dataset_2)
A variável linhas conterá o valor do número de linhas do dataset_2, enquanto a variável colunas, o número de colunas. Note que dataset_2 é o parâmetro que devemos passar para os comandos, para que eles possam contar o número de linhas/colunas.
No nosso caso temos 5 colunas e 6 linhas. Com esses valores armazenados em variáveis, nós somos capazes de reutilizá-los quantas vezes quisermos dentro do código e isso é muito útil!
Feito isto, agora podemos criar duas matrizes, um para cada comparação, e guardar os resultados nessas matrizes, o que é algo bem parecido com o que ocorre no Excel.
Uma matriz pode ser entendida como uma tabela onde, cada quadradinho dessa tabela contém um valor, exatamente como acontece no Excel. A diferença é que aqui nós vamos criar essas tabelas usando a linguagem R. Digite e execute os seguintes comandos:
L_0 = matrix(nrow=linhas, ncol=colunas)
L_1 = matrix(nrow=linhas, ncol=colunas)
Vamos entender o que acontece nessas linhas. L_0 e L_1 são os nomes das variávies. Quando faço matrix(nrow=X, ncol=Y) estou dizendo que quero criar uma matriz com X linhas e Y colunas. No nosso caso estamos usando as variáveis linhas e colunas nesses parâmetros.
Reforçando, serão criadas duas matrizes, uma chamada L_0 e outra chamada L_1, cada uma contendo 5 colunas e 6 linhas, que é exatamente o tamanho do dataset original. Vejam a Figura de como fica após a execução dos comandos:
O valor NA foi preenchimento automaticamente pela linguagem R. Esses valores serão substituídos posteriormente pelos valores de resultado das comparações. Para que as tabelas fiquem ainda melhores visualizadas, vamos colocar os nomes dos rótulos nas colunas usando os seguintes comandos:
colnames(L_0) = colnames(dataset_2)
colnames(L_1) = colnames(dataset_2)
colnames(nome_do_dataframe) é um comando que usamos quando queremos resgatar os nomes originais do dataframe que estamos manipulando. No nosso caso é o dataset_2. Observe que, curiosamente, usamos o mesmo comando para mudar os nomes do dataframe!
Incrível! O mesmo comando é capaz de obter e mudar os nomes das colunas. O que está do lado esquerdo do comando, é o dataframe que receberá os nomes das colunas do dataframe que está do lado direito do comando. Agora as matrizes ficarão assim:
Pronto! Agora podemos verificar quando o valor do dataframe dataset_2 é igual a 0 ou 1 e armazenar nas tabelas correspondentes. Digite e execute os comandos a seguir:
l = 1
for(l in 1:5){
L_0[,l] = (dataset_2[,l]==0)
}
l = 1
for(l in 1:5){
L_1[,l] = (dataset_2[,l]==1)
}
Bom, esses dois últimos trechos de código são um pouco mais complexos com relação aos outros comandos que vimos até aqui, mas não são tão dificieis de se entender.
O FOR é um comando que percorre a matriz, isto é, ele passa por todas as posições da matriz e pode inserir, apagar ou substituir valores dessas posições. Ele é o comando ideal para manipulação de matrizes. Esses trechos de código estão substituindo os NAs pelos valores resultantes da comparação.
A linha for(l in 1:5) indica que vamos passar nas colunas de 1 até 5, pois temos 5 colunas no dataframe. l é a variável que vai contar o número dessas colunas e ela é incrementada automaticamente, isto é, ela vai de 1 para 2, de 2 para 3, e assim por diante, "sozinha".
A linha L_0[,l] = (dataset_2[,l]==0) faz a comparação da coluna do dataframe dataset_2 com o valor 0 e imediatamente já armazena o resultado na coluna correspondente. Isto é, aquilo que fizemos manualmente antes, uma coluna por vez, ele faz automático aqui!
Usamos l dentro de L_0 e L_1 para indicar qual é a coluna que deve armazenar o resultado, da mesma forma que fazemos dataset_2[,l] para indicar qual coluna deve ser comparada!
Veja como fica a execução do script R que fizemos até este momento neste vídeo. Faça download do projeto do RStudio aqui.
Finalizando
Este artigo, infelizmente também já ficou grande. No próximo artigo, vou aprofundar essa questão da matriz, e então faremos os cálculos da tabela de contingência. Te vejo lá.
Este artigo foi escrito por Elaine Cecília Gatto - Cissa e publicado originalmente em Prensa.li.