Reconhecimento como Outstanding PASS Volunteer – Agosto/2015

Fala galera, estas últimas semanas tem sido umas das mais empolgantes e recompensadoras para minhas atividades paralelas… Desde 2010 quando começei a fazer coisas com o PASS aqui no Brasil, eu tenho me dedicado a trabalhar e ajudar em várias frentes dessa comunidade global. Organização de SQL Saturdays, 24Hours of PASS, Welcome Reception no PASS Summit em Seattle, palestras em vários Chapters no Brasil, entre outroas coisas…

Isso foi sempre reconhecido pelos outros profissionais que também dedicam seu tempo a ser voluntário do PASS. Neste semestre fui convidado a me juntar ao Board of Directors do PASS global (pelo período de 1 ano – entre Julho/2015 e Junho/2016), com o foco em trabalhar para aumentar a comunidade aqui na América Latina. Junto comigo o Eduardo Castro (twitter | blog) lá da Costa Rica também foi convidado com o mesmo objetivo. Veja o comunicado do PASS sobre essa atividade: http://www.sqlpass.org/Community/PASSBlog/tabid/1476/entryid/722/PASS-Welcomes-LATAM-Regional-Board-Advisors.aspx

Não bastasse ter sido convidado para o Board, em Agosto também fui reconhecido globalmente como PASS Outstanding Volunteer, que é uma posição de destaque entre os voluntários do PASS ao redor do mundo. Este reconhecimento do PASS vem através de outros membros da comunidade SQL Server ao redor do mundo, por isso quero deixar o meu MUITO OBRIGADO a todos que acreditam no meu trabalho e expuseram isso para o PASS J

Aproveite e conheça também os outros voluntários que já tiveram esse reconhecimento do PASS: http://www.sqlpass.org/Community/Volunteers/OutstandingVolunteers.aspx

Acredito que o dia que acabar o prazer, ou eu achar que tenho obrigação de fazer estas coisas, chegou o momento de parar… Vamos que vamos – Think Think SQL!

0  

Plotando gráficos de caixas com dados sumarizados de média, mediana e quartis com R

Fala galera, dentro da área de estudo da Estatística Descritiva tem um conjunto de valores sumarizados que são utilizados com bastante frequência por analistas dos mais diversos ramos. Cálculos de Média, Mediana, 1º Quartil, 3º Quartil, Mínimo valor, Máximo valor, são alguns dados sumarizados que podem ser facilmente calculados e analisados nos nossos aplicativos.

Quando estamos estudando R, aprendemos a usar o método SUMMARY para olhar estes dados estatísticos na nossa amostragem. Quando este método é disparado contra um dataframe, o R calcula estes sumarizadores nas colunas numéricas e faz algumas outras amostragens em colunas de outros tipos de dados. Vamos focar na coluna numérica e então ver estes valores tanto no resultado do método summary quanto em um gráfico de caixas.

Para este estudo, vamos usar novamente uma base de dados pública da Universidade da Califórnia. Você pode ver mais detalhes desta base de dados no link: http://archive.ics.uci.edu/ml/datasets/Contraceptive+Method+Choice É um dataset que mostra algumas informações sobre a idade da mulher e uso de métodos contraceptivos (e algumas outras variáveis). O objetivo não é entrar em detalhes sobre o resultado do estudo, mas sim, entender estes dados estatísticos e como fazer gráficos com eles em R.

Primeira coisa é colocar a URL para baixar os dados, e então, colocar isso num Dataframe.

Carregar os dado no dataframe

url <- "http://archive.ics.uci.edu/ml/machine-learning-databases/cmc/cmc.data"
data <- read.csv(url, sep=",")

summary(data)

 

Este método summary apresenta o seguinte resultado:

 

Reparem que os dados são sumarizados através dos métodos:

  • Min (Mínimo valor)
  • 1st qu. (1º Quartil)
  • Median (Mediana)
  • Mean (Média)
  • 3rd Qu. (3º Quartil)
  • Max (Máximo valor)

Estes valores são calculados automaticamente com base em cada valor numérico da coluna. Porém, com o nome genérico que o R colocou em cada coluna, não é tão simples saber o que cada coluna representa. Voltando ao site da UCI e lendo os dados relativos à pesquisa, temos as colunas na seguinte ordem:

  • Wife’s age (numerical)
  • Wife’s education (categorical) 1=low, 2, 3, 4=high
  • Husband’s education (categorical) 1=low, 2, 3, 4=high
  • Number of children ever born (numerical)
  • Wife’s religion (binary) 0=Non-Islam, 1=Islam
  • Wife’s now working? (binary) 0=Yes, 1=No
  • Husband’s occupation (categorical) 1, 2, 3, 4
  • Standard-of-living index (categorical) 1=low, 2, 3, 4=high
  • Media exposure (binary) 0=Good, 1=Not good
  • Contraceptive method used (class attribute) 1=No-use, 2=Long-term, 3=Short-term

Vamos colocar estes nomes traduzidos no dataframe e facilitar nossa manipulação. Para isso, veja o código abaixo:

colunas <- c("IdadeEsposa","EducacaoEsposa"
            ,"EducacaoMarido","Filhos"
            ,"ReligiaoEsposa","EsposaTrabalha"
            ,"OcupacaoMarido","PadraoDeVida"
            ,"ExposicaoMidia","MetodoContraceptivo")

colnames(data) <- colunas
summary(data)

 

Analisando novamente o método summary, veja que agora temos cara coluna com um nome apropriado.

Plotando estes dados no gráfico

Para plotar estes dados em um gráfico, é possível usar o Gráfico de Caixa, que representa todos estes valores em uma única representação gráfica visual. Em R o método chamado é o Boxplot, vamos ver isso no código abaixo:

boxplot(IdadeEsposa~MetodoContraceptivo,
        data=data,
        col=unique(data$MetodoContraceptivo)+1,
        ylab="Idade Mulher",
        xlab="Método Contraceptivo",
        main="Boxplot de uso de métodos contraceptivos"
)

 

O resultado desta plotagem é esse gráfico abaixo:

O gráfico foi dividido no eixo X pelos métodos contraceptivos 1 (Não Usa), 2 (Uso de Longo Tempo) e 3 (Uso de Curto Tempo). Todos eles analisando a idade da mulher (no eixo Y) que o consumiu. Porém, quando olhamos o método summary ele fez isso com os dados de todo o dataframe e não separado por tipo de método contracpetivo, igual foi plotado no gráfico.

Para fazer esta separação, vamos criar outros três dataframes cada um baseado em um tipo de método contraceptivo, e então olhar os dados sumarizados destes novos dataframes. Para isso, veja o código abaixo:

data1 <- subset(data, MetodoContraceptivo==1)
data2 <- subset(data, MetodoContraceptivo==2)
data3 <- subset(data, MetodoContraceptivo==3)

summary(data1$IdadeEsposa)
summary(data2$IdadeEsposa)
summary(data3$IdadeEsposa)

 

O resultado destes dataframes só para a coluna IdadeEsposa são os seguintes:

Comparando estes valores do método summary com o apresentado no gráfico de caixas, verão que os dados são os mesmos!

Caso queira saber um pouco mais sobre a Estatística Descritiva, dê uma olhada neste link: https://pt.wikipedia.org/wiki/Estat%C3%ADstica_descritiva

E também se quiser saber mais sobre o Gráfico de Caixa, use este link: https://pt.wikipedia.org/wiki/Diagrama_de_caixa

0  

Implementando o algoritmo K-Means com linguagem R

Fala galera, para implementar o conceito do algoritmo K-Means que foi explicado aqui, vamos hoje escrever um pouco de código na linguagem R e tentar entender um pouco mais esse método de aprendizado de máquinas não supervisionado.

Para este experimento vou usar um dataset público existente no diretório da UC Irvine, que tive o prazer de conhecer quando fiz uma Especialização de Ensino Virtual. Para acessar o repositório e encontrar as dezenas de dataset disponíveis, acesse este link: http://archive.ics.uci.edu/ml/datasets.html. O dataset que vamos usar será Daily and Sports Activities Data Set que apresenta informações capturadas a cada 5 minutos de 8 pessoas (4 mulheres e 4 homens) entre 20 e 30 anos que realizaram 19 atividades físicas coletadas (eixos X, Y e Z) pelos sensores Acelerómetro, Magnetómetro e Giroscópio totalizando 9 amostragens de dados em cada uma das 5 partes do corpo, sendo Dorso, Braço Direito, Braço Esquerdo, Perna Direita e Perna Esquerda. O arquivo com os dados coletados está no link: http://archive.ics.uci.edu/ml/machine-learning-databases/00256/. Para exemplificar, vamos analisar somente os dados coletados dos sensores das pernas e de um único exercício, mas fique a vontade para fazer com qualquer sensor ou exercício.

Vou entender que você já tem o RStudio em sua máquina, caso não tenha, recomendo fortemente a leia disso.

Acessando e recebendo os dados externos

Usando R é possível trabalhar com a leitura e tratamento de dados externos em diversas origens. Pode ser um JSON, um XML, ZIP, e mais uma porção de outros formatos de dados. Neste caso vamos baixar um arquivo Zip e extrair seu conteúdo, em seguida vamos ler os dados e trabalhar com um pouco de descoberta em cima disso com os clusters.

Para baixar o arquivo via código e poder replicar o experimento sempre que precisar, vamos informar qual será o diretório de trabalho e quais os dados do arquivo que deve ser baixado. Depois de baixar o aquivo de 160MB, é necessário extrair os dados e ver o que aparece.

Veja o código abaixo como fazer isso:

setwd("C:/Temp/KMeans")

url <- "http://archive.ics.uci.edu/ml/machine-learning-databases/00256/data.zip"
destfile <- "data.zip"

download.file(url, destfile, mode="wb")

unzip("data.zip")

O resultado é um conjunto de pastas com diversos arquivos dentro. Se navegar pra dentro das pastas, vai encontrar os 60 arquivos txt em cada uma das pastas p* (que é uma pra cada das 8 pessoas) e por sua vez estão dentro das pastas a* (que representam as atividades). Se abrir um dos arquivos txt, irá encontrar as 45 colunas com as coletas de cada um dos sensores. Não se assuste com esse monte de números, tudo ficará mais claro no decorrer do texto.

Transformando os dados do arquivo em um DataFrame do R

Quando se abre o arquivo txt bruto não é tão simples de identificar o que são esses números. Lendo a documentação do Dataset fornecido no link lá em cima, entendemos a estrutura de como os dados são armazenados e quais são as colunas. Para este experimento, vamos usar a atividade número 15 – Pedalar na bicicleta ergométrica na horizontal – e analisar somente os sensores de pernas. Veja o código abaixo:

atividade <- 15
DadosDeOrigem <- gsub(" ","",paste(getwd(), "/data/a", atividade))
setwd(DadosDeOrigem)
Diretorios <- list.files()
TotalPessoas <- length(Diretorios)

DadoBruto <- NULL

i <- 1
while (i <= TotalPessoas)
{
  setwd( gsub(" ","",paste(DadosDeOrigem, "/", Diretorios[i])) )
  LerArquivos <- list.files()
  j <- 1
  while (j <= length(LerArquivos))
  {
    DadoBruto <- rbind(DadoBruto, read.table(LerArquivos[j], sep=","))
    j <- j+1
  }
  i <- i+1
}

#Colocar as colunas que são interessantes analisar
SoPernas <- DadoBruto[,28:45]

colnames(SoPernas) <- c("DAX", "DAY", "DAZ", "DGX", "DGY", "DGZ", "DMX",
 "DMY", "DMZ", "EAX", "EAY", "EAZ", "EGX", "EGY", "EGZ", "EMX", "EMY", "EMZ") 

Para terminar esta parte de acesso, todos os dados de pernas (coluna 28 até 45) da atividade 15 foram armazenados em um novo Dataframe chamado SoPernas. Foi dado um nome para coluna, seguindo a lógica:

  • D = Direita
  • E = Esquerda
  • A = Acelerómetro
  • G = Giroscópio
  • M = Magnetómetro

A coluna DAX significa D (direita) A (acelerómetro) X (eixo X). A coluna EGZ significa E (esquerda) G (Giroscópio) Z (eixo Z). E assim por diante.

Separando os dados em clusters

Depois dos dados tratados, usar o algoritmo de Kmeans é relativamente simples. Ele recebe o dataset que deve ser consultado e o conjunto de segmentos que deve criar. Como já sabemos que são 8 pessoas que fazem parte da amostragem, não precisamos rodar aquele algoritmo de Elbow Method para descobrir quando grupos é possível criar. Veja o código simples abaixo, que recebe o processamento do K-Means e depois mostra a quantidade de elementos do dataframe que foi classificado em cada um dos clusters .

Resultado <- kmeans(SoPernas[1:2], 8);
Resultado$size 

Após a execução do KMeans, pode-se plotar os dados em um gráfico e ver como o algoritmo separou os dados nos 8 grupos que foram solicitados. Para facilitar o entendimento, vou plotar somente os dados de DAX e DAY, para um gráfico simples de duas dimensões, usando o recurso de poder plotar cada grupo em uma cor diferente para facilitar a análise de quem está observando.

plot(SoPernas[1:2], col = Resultado$cluster, pch= 19)

Se quiser colocar cada ponto central de um centróide, pode usar este código abaixo na sequência da plotagem do gráfico:

points(Resultado$centers[,1:2], col="orange", pch=8, cex=2)

Após plotar o gráfico com os 8 segmentos, é possível identificar facilmente os grupos que o Kmeans separou.

Quando um novo item for inserido no dataset, ele ficará associado a algum dos clusters. Com isso, você não precisa necessariamente saber se o dado é de uma mulher de 20 anos ou de um homem de 30, simplesmente ao analisar o dado novo contra os dados já processados, o computador vai entender onde estes dados se enquadram e vai te retornar qual é o genero e a idade que ele estima que seja. Simples, não?!

0  

Entendendo como funciona o algoritmo de Cluster K-Means

Fala galera, uma das formas que existe para se trabalhar com aprendizado de máquinas (machine learning) é o aprendizado não supervisionado. Diferente do aprendizado supervisionado onde você informa o computador o que ele deve procurar e aprender, no aprendizado não supervisionado a gente não sabe exatamente o que estamos tentando ensinar o computador a aprender, então precisamos recorrer à agrupadores lógicos de segmentação para encontrar similaridade entre os dados da amostra e com isso, definir um padrão e assumir que este padrão encontrado é o que estamos tentando ensinar o computador, que por sua vez, vai aprender a encontrar esse padrão sempre quando for solicitado. Depois de descoberto o padrão, qualquer item novo que tenha uma similaridade com aquele segmento (cluster) pode ser inferido que ele “faz parte daquilo”.

A proposta deste post é mostrar com um certo nível de detalhes como segmentar a amostragem em grupos e descobrir padrões nos dados, usando tanto o Azure Machine Learning quanto a linguagem R. Vamos comerçar entendendo o algoritmo, em seguida vou publicar explicando a aplicação disso com códigos em R e em outro post faremos o mesmo processo no AzureML.

 

Agrupando os dados

Para exemplificar, pense em um dataset com algumas amostras dispostas nos eixo X e Y, como o gráfico abaixo. Seu objetivo é agrupar estes dados baseado em sua similaridades. Consegue fazer isso?

É possível bater o olho neste gráfico e ver a separação em alguns grupos. Cada um de nós que olhar o gráfico pode tentar criar um número diferente de cluster, ou até mesmo quando a quantidade de cluster for igual, pode-se pensar em agrupamentos de formas diferentes. Por exemplo, alguns podem ver a separação com apenas 2 clusters, e o gráfico poderia ser assim:



Qual é o certo? Todos estão certos! Isso pode acontecer de acordo com a interpretação de cada um dos observadores que encontraram apenas 2 grupos nestes dados. Outros podem encontrar 3 grupos, e não apenas dois, podendo chegar a definições como estas:



E aqui, qual dos gráficos é o certo? O certo é com 2 grupos ou com 3 grupos? Mais uma vez isso é dificil de responder, todos os 6 gráficos estão corretos de acordo com a visão de cada observador. Para ajudar a responder esta questão, existem alguns métodos usados e bem aceitos no meio científico, leia mais sobre eles aqui: https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set. Um destes métodos é o Elbow Method, que voltaremos a falar sobre ele mais pra frente.

Entendendo como funciona o algoritmo

Para entender o funcionamento vamos separar em 2 clusters e entender os passos que o algoritmo K-Means faz como os dados para convergir em um resultado. Neste caso o K será igual a 2, criando os 2 clusters que estamos buscando. O K, de K-Means, é a quantidade de centróides (pontos centrais dos grupos) que serão criados e ajudará a encontrará a similaridade dos dados.

Uma das formas de iniciar o processo é o algoritmo inserir o K pontos (centróides) aleatórios iniciais. Pode ser qualquer lugar do plano, para em seguida começar as iterações e encontrar os resultados.

Veja dois pontos aleatórios criados no gráfico, e uma linha tracejada que é calculada aproximadamente na metade da distância dos pontos Vermelho e Azul. Com este segmento, os ítens que estão plotados acima da linha tracejada fazem parte do grupo vermelho e os de baixo da linha fazem parte do grupo azul.

A primeira iteração do algoritmo é calcular a distância média de todos os pontos que estão atrelados ao centróide, e então mudar a posição do centróide para o novo ponto que foi calculado, que é a distância média de todos os pontos que se ligaram à aquele centróide. Essa mudança de posição do centróide pode alterar os itens que fazem parte daquele grupo. Veja isso na imagem abaixo:



Reparem que após a iteração do cálculo da média, alguns pontos mudaram de centróide, os pontos que estão marcados em verde passaram do centróide azul para o vermelho, e o que está marcado em azul passou do centróide vermelho para o azul. Essa iteração de cálculo da média da distância dos pontos até o centróide ocorre em loop até que nenhum ponto mude de centróide, isso acontece quando os centróides param de se mover porque já estão na posição central da distância entre os pontos.



Veja que entre a penúltima iteração e esta não ouve mais mudança de pontos entre o gráfico e o centróide, fazendo com que o algoritmo K-Means pare sua execução chegando ao resultado esperado e criando dois grupos. Assim, quando um novo item for incluído no gráfico, ele já terá um grupo que atende aquela região e o computador já saberá do que se trata o dado novo.

Escolhendo a quantidade de K (clusters) no algoritmo

Como falado alguns parágrafos atrás, o Elbow Method é uma das formas usadas. Ele tem esse nome por se parecer com o formato de um “braço” e nós sempre procurarmos o “cotovelo” pra definir que este é o número aceitável de K (clusters) a serem criados com base nos dados da amostra. Este método vai crescendo a quantidade de clusters a partir de 1 e analisando o resultado melhorado a cada incremento. Quando o benefício parar de ser relevante (um salto entre uma quantidade de cluster e a próxima quantidade) ele entra em um modelo platô, no qual a diferença da distância é quase insignificante. É neste momento que entende-se que o algoritmo é relevante com aquela quantidade de K e então ele deve ser usado pra segmentar os dados do gráfico.

Depois de executar o código do algoritmo do Elbow Method e olhando para os dados que estamos apresentando como exemplo, um bom número de K para ele é o número 4.

Rodando o algoritmo com 4 centróides, é possível ver a transformação acontecendo nesta segmentação:



Neste cenário, quando qualquer item novo for adicionado na base de dados, o algoritmo saberá classificar a qual grupo este novo item pertence. Nos próximos posts vou mostrar uma implementação em R e depois outro post com a implementação em Azure Machine Learning.

0  

Instalando o R e o RStudio para começar a trabalhar com Data Science

Fala galera, uma das ferramentas [free] mais interessantes e usadas por cientistas de dados é o R. Esta poderosa linguagem de programação criada na década de 70 é usada até hoje por matemáticos, estatísticos e cientistas ao redor do mundo. Com alguns poucos passos você consegue instalar o Framework R e o Rstudio em sua máquina e conseguirá usar todo o potencial de análise e exploração de dados existente nos pacotes criados por desenvolvedores até os dias de hoje.

A primeira coisa a se fazer é acessar o CRAN [The Comprehensive R Archive Network] pra fazer o download do Framework R para seu sistema operacional. Vou fazer pra Windows que é o que uso, mas existe também pra Mac OS ou distribuições Linux. Para isso, acesse o link https://cran.r-project.org/ e procure a área pra download.

Você será encaminhado para a página de download para Windows. Se quiser acessar diretamente, use o link https://cran.r-project.org/bin/windows/base/

A versão pra Windows tem por volta de 64MB… Depois de baixar é só instalar, pode usar as configurações padrão sem problema.

Após a instalação do framework, uma IDE é fornecida mas ela é bem menos interessante de se trabalhar do que o R Studio. Vamos fazer o download e instalação do RStudio para ter produtividade com a ferramenta. Para baixar o RStudio, acesse o link: https://www.rstudio.com/products/rstudio/ e procure o download para desktop [que também é free]. Ao clicar para fazer download da versão Desktop, você será redirecionado para uma nova página, que pode ser acessada diretamente em https://www.rstudio.com/products/rstudio/download/

Após fazer o download, abra e siga as intruções padrão do wizard de instalação. Dentro de instantes o RStudio estará disponível para uso.

Abra a instalação e divirta-se com as possibilidades de análise e exploração de dados!

0