Big Data & Ciência de Dados – Transformando Dados em Receita

[fusion_builder_container hundred_percent=”no” hundred_percent_height=”no” hundred_percent_height_scroll=”no” hundred_percent_height_center_content=”yes” equal_height_columns=”no” menu_anchor=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” background_color=”” background_image=”” background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ video_mp4=”” video_webm=”” video_ogv=”” video_url=”” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” video_preview_image=”” border_size=”” border_color=”” border_style=”solid” margin_top=”” margin_bottom=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=””][fusion_builder_row][fusion_builder_column type=”1_1″ layout=”1_1″ spacing=”” center_content=”no” link=”” target=”_self” min_height=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” background_color=”” background_image=”” background_position=”left top” background_repeat=”no-repeat” hover_type=”none” border_size=”0″ border_color=”” border_style=”solid” border_position=”all” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” dimension_margin=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=”” last=”no”][fusion_imageframe image_id=”4749″ max_width=”” style_type=”none” stylecolor=”” hover_type=”zoomin” bordersize=”” bordercolor=”” borderradius=”” align=”center” lightbox=”no” gallery_id=”” lightbox_image=”” alt=”Congresso de TI da Unifacs: Ciência de Dados – Transformando Dados em Receita” link=”” linktarget=”_self” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” animation_type=”bounce” animation_direction=”left” animation_speed=”0.3″ animation_offset=””]https://blog.tecnologiaqueinteressa.com/wp-content/uploads/2018/09/Palestra-Congresso-TI-Unifacs-Ciencia-Dados.jpg[/fusion_imageframe][fusion_text columns=”” column_min_width=”” column_spacing=”” rule_style=”default” rule_size=”” rule_color=”” class=”” id=””]

Na última quinta-feira (20/09), tive a oportunidade de apresentar uma palestra no Congresso de TI da Unifacs com o título de “Ciência de Dados: Transformando Dados em Receita”, que abordou os seguintes tópicos:

  • Por que as empresas precisam de dados?
  • Quais empresas estão colocando isso em prática?
  • Como as empresas coletam dados?
  • Quais os riscos?
  • Cultura orientada a Dados (Data-Driven)
  • Qual o perfil profissional para atuar com dados?

Abaixo você tem um resumo de cada um dos pontos.

Por que as empresas precisam de dados?

Você já se perguntou porque as empresas precisam de dados?

Imagine a sua rotina e dos seus colegas de trabalho.

Consegue identificar como os dados são usados no dia a dia?

Dados são importantes por vários motivos.

Dados ajudam a identificar tendências, permitem analisar desempenho, identificar problemas e decisões.

Em suma, dados permitem que possamos entender pessoas, empresas, tudo enfim.

A partir desse entendimento, podemos construir conhecimento, de forma a tomar decisões mais embasadas, mais assertivas.

Portanto, dados ajudam a tomar melhores decisões.

É por isso que as empresas precisam tanto de dados, e há quem diga que dados são o novo petróleo (há também quem duvide!).

Quais empresas estão colocando isso em prática?

Há inúmeras empresas aproveitando a oportunidade de analisar a quantidade cada vez maior de dados disponíveis pela web, muitas vezes gratuitamente, para transformar seus negócios, criando produtos diferenciados como alguns que cito a seguir.

  • A HiQ percebeu que há mais informações sobre os funcionários das empresas fora da empresa do que dentro, e se especializou em capturar estas informações e fornecer às organizações a capacidade de analisá-las e tomar melhores decisões sobre os funcionários.
  • A Splunk se tornou referência em análise de dados ao se posicionar com sua plataforma de inteligência operacional, inicialmente a partir da análise de logs, depois através da análise de dados quaisquer, gerados por máquinas, que sejam relevantes para o negócio.
  • A Duetto é uma empresa que oferece soluções para criar experiências personalizadas para clientes de hotéis, a partir da análise detalhada de dados como o perfil de consumo, permitindo, por exemplo, dar um maior desconto a um hóspede que costuma consumir bastante no bar do hotel.

Como as empresas coletam dados?

Há basicamente três maneiras de coletar dados:

  1. Perguntar às pessoas o que se deseja saber
  2. Rastrear suas atividades e assim perceber seus comportamentos
  3. Combinar e criar com base em dados existentes e outros disponíveis na web ou mesmo fornecidos por empresas especializadas

Quais os riscos?

Nem tudo são flores nesse novo mundo que se apresenta, abundante em dados sobre tudo e sobre todos, cujas implicações são bastante significativas quando se trata de segurança da informação e privacidade.

Hoje há empresas especializadas em organizar dados sobre pessoas e construir verdadeiros dossiês individuais para fornecê-los a empresas interessadas.

Relaciono a seguir dois exemplos impressionantes:

  • Especula-se que a ACXIOM possua dados sobre mais de 200 milhões de residentes nos EUA, sendo que as informações contemplariam a incrível quantidade de 1500 características sobre cada indivíduo. Se eu passasse um mês refletindo sobre isso, não seria capaz de listar 1500 características minhas.
  • A Paramount Direct Marketing oferece listas especializadas de informações sobre pessoas interessadas em determinados tipos de produtos. Observei uma página listando informações sobre pessoas interessadas em seguros diversos, e havia desde listas de pessoas buscando seguro de carro até pessoas buscando “ansiosamente” um plano de saúde ou seguro de vida.

Fica claro porque o debate em torno da privacidade das pessoas é cada vez mais importante, já que muitas dessas informações comercializadas por empresas especializadas podem ter sido coletadas sem o consentimento da pessoa diretamente afetada pela disponibilidade dessa informação. Isso porque, cada vez mais, há uma tendência de vincular as informações a indivíduos específicos, visando aumentar a chance de alcançar o resultado desejado (geralmente vender!).

Desse debate começaram a surgir os primeiros resultados importantes, com destaque para a chamada “Lei de Proteção de Dados”, que no Brasil foi aprovada pela Câmara e Senado neste ano de 2018, devendo ser sancionada e entrar em vigor no próximo ano.

Alguns dados importantes sobre a nova legislação:

  • Empresas que tenham como atividade centrada no tratamento sistemático de dados pessoais sejam obrigadas a ter um Encarregado pelo Tratamento de Dados Pessoais – Data Protection Officer (DPO).
  • Dados pessoais (informação relacionada à pessoa natural identificada ou identificável, como nome, idade, estado civil, documentos) só podem ser coletados mediante o consentimento do usuário e com a devida explicação sobre a finalidade de solicitar aquele dado.
  • Classifica determinados dados como sensíveis, que seriam aqueles que, por sua natureza, devem ter uma proteção mais rigorosa, a exemplo de informações a respeito da origem do usuário (origem racial ou étnica), de crenças (convicções religiosas, as opiniões políticas, a filiação a sindicatos ou a organizações de caráter religioso, filosófico ou político), corporais (referentes à saúde, dados genéticos e dados biométrico) e sexuais (vida sexual).

Cultura orientada a Dados (Data-Driven)

Apesar dos riscos envolvidos, a tendência de aumento dos dados disponíveis para análise é irreversível, e tem seu lado positivo.

Imagine uma pessoa com uma doença grave.

Quanto mais dados sobre ela o médico tiver, melhor será o diagnóstico e mais personalizado o tratamento, não é verdade?

Isso cria o dilema entre privacidade e utilidade dos dados, e faz com que, de um lado, pessoas se cerquem de mecanismos para evitar que seus dados sejam coletados, no outro extremo temos pessoas que não se importam nem um pouco em expor suas informações (até publicamente) pois dão mais peso aos aspectos positivos dessa maior exposição.

Diante disso, é inevitável que as empresas se vejam obrigadas a criar uma cultura orientada a dados, onde as pessoas são instigadas a perceber as oportunidades e benefícios de adotar uma abordagem para tomada de decisão baseada em análise de dados, sejam dados históricos, atuais, internos ou externos.

Há vários desafios a serem enfrentados no caminho para criar uma cultura orientada a dados, dentre os quais listo alguns:

  • O volume de dados que será necessário analisar
  • A variedade de formatos destes dados (a maior parte dos dados não está estruturada)
  • A velocidade com que estes dados são gerados (pode ser necessário analisar em tempo real)

Para que se possa criar uma cultura orientada a dados também é necessário desenvolver a habilidade de análise de dados e incorporá-la ao dia a dia da organização, e isso exige profissionais especializados.

Qual o perfil profissional para atuar com dados?

O principal profissional envolvido na análise de dados é o Cientista de Dados, como você já deve ter imaginado.

Este profissional deve ter tantos conhecimentos que às vezes é mais fácil e efetivo compor uma equipe que se complemente ao invés de buscar o “unicórnio”.

Para mais detalhes, confira nosso guia para a carreira de Cientista de Dados.

Conclusão

Foi muito gratificante ver a sala cheia na palestra, demonstrando o aumento do interesse sobre este tema que abordamos já há vários anos aqui no blog.

Finalmente o mercado baiano percebe a necessidade de profissionais capacitados em análise de dados para ajudar as empresas a obterem melhores resultados, especialmente em tempos em que é necessário criatividade para driblar a crise.

Sigo aqui compartilhando informações para ajudar você a obter conhecimentos que façam diferença na sua carreira.

Espero que este resumo tenha sido útil, e caso tenha dúvidas, deixe seus comentários abaixo que ficarem muito feliz em respondê-los!

[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Programação em R – Parte 9 (exibindo gráficos)

Programação em R - Aprenda Analtics, Big Data & Ciência de Dados

 

Confira todos os textos da série Programação em R:
Programação em R – Parte 1 (Introdução)
Programação em R – Parte 2 (Manipulações simples; números e vetores)
Programação em R – Parte 3 (Entendendo e manipulando objetos)
Programação em R – Parte 4 (Fatores)
Programação em R – Parte 5 (Matrizes)
As
funções gráficas são um componente importante e extremamente
versátil do ambiente R. É possível usar as funções para
exibir uma grande variedade de gráficos estatísticos e também para
criar tipos de gráficos totalmente novos.
As funções gráficas podem ser usadas em modos interativos e em
lotes, mas, na maioria dos casos, o uso interativo é mais produtivo.
O uso interativo também é fácil porque, no momento da
inicialização, R inicia um driver de dispositivo gráfico que abre
uma janela gráfica especial para a exibição de gráficos
interativos. Embora isso seja feito automaticamente, pode ser útil
saber que o comando usado é X11() em UNIX, Windows() no Windows e
quartz() no MacOS. Um novo dispositivo sempre pode ser aberto por
dev.new().
Uma
vez que o driver do dispositivo está em execução, os comandos de
traçado de R podem ser usados ​​para produzir uma variedade de
exibições gráficas e para criar tipos de exibição totalmente
novos.
Os
comandos são divididos em três grupos básicos:
  • As funções de traçado de alto nível criam um novo gráfico
    no dispositivo gráfico, possivelmente com eixos, rótulos, títulos
    e assim por diante.
  • As funções de traçado de baixo nível adicionam mais
    informações a um gráfico existente, como pontos extras, linhas e
    rótulos.
  • As funções de gráficos interativos permitem que você
    adicione informações de forma interativa a um gráfico existente, ou
    extraia informações, usando um dispositivo apontador, como um
    mouse.
Além
disso, R mantém uma lista de parâmetros gráficos que podem ser
manipulados para personalizar suas parcelas.
Este
manual apenas descreve o que são conhecidos como gráficos “base”.
Um sub-sistema de gráficos separado na grade do pacote coexiste com
base – é mais poderoso, mas é mais difícil de usar.

Comandos de de alto nível

As
funções de traçado de alto nível são projetadas para gerar um
gráfico completo dos dados passados como argumentos para a função.
Quando apropriado, os eixos, rótulos e títulos são gerados
automaticamente (a menos que você solicite o contrário). Os
comandos de traçado de alto nível sempre iniciam um novo plot,
apagando o gráfico atual, se necessário.

A função plot ()

Uma
das funções de traçado mais utilizadas em R é a função plot().
Esta é uma função genérica: o tipo de gráfico produzido depende do
tipo ou classe do primeiro argumento.
plot(x, y)
plot(xy)
Se x
e y são vetores, plot(x, y) produz um diagrama de dispersão
de y contra x. O mesmo efeito pode ser produzido fornecendo um
argumento (segunda forma) como uma lista contendo dois
elementos x e y ou uma matriz de duas colunas.
plot(x)
Se x
for uma série temporal, isso produz um gráfico de séries
temporais. Se x é um vetor numérico, ele produz um gráfico dos
valores no vetor contra seu índice no vetor. Se x é um vetor
complexo, ele produz um gráfico de partes imaginárias versus partes
reais dos elementos vetoriais.
plot(f)
plot(f, y)
f é
um objeto fator, y é um vetor numérico. A primeira forma gera um
gráfico de barras de f; a segunda forma produz boxplots de y para
cada nível de f.
plot(df)
plot(~ expr)
plot(y ~ expr)
df é
um quadro de dados, y é qualquer objeto, expr é uma lista de nomes
de objetos separados por ‘+’ (por exemplo, a + b + c). As duas
primeiras formas produzem gráficos distributivos das variáveis ​​em
um quadro de dados (primeira forma) ou de vários objetos nomeados
(segunda forma). A terceira forma traça y contra cada objeto chamado
em expr.

Exibição de dados multivariados

R
fornece duas funções muito úteis para representar dados
multivariados. Se X for uma matriz numérica ou quadro de dados, o
comando
pairs(X)
produz
uma matriz de diagrama de dispersão em pares das variáveis
​​definidas pelas colunas de X, ou seja, cada coluna de X é
plotada em relação a qualquer outra coluna de X e as parcelas n
(n-1) resultantes são dispostas em uma matriz com escalas de
plotagem constantes em as linhas e as colunas da matriz.
Quando
três ou quatro variáveis ​​estão envolvidas, um coplot pode
ser mais esclarecedor. Se a e b são vetores numéricos e c é um
vetor numérico ou um objeto de fator (todo o mesmo comprimento),
então o comando
coplot(a ~ b | c)
produz
uma série de diagramas de dispersão de a contra b para valores
dados de c. Se c é um fator, isso simplesmente significa que a é
plotado contra b para cada nível de c. Quando c é numérico, é
dividido em uma série de intervalos de condicionamento e para cada
intervalo a é plotado contra b para valores de c dentro do
intervalo. O número e a posição dos intervalos podem ser
controlados com given.values ​​= argumento para coplot () – a
função co.intervals () é útil para selecionar intervalos. Você
também pode usar duas variáveis ​​fornecidas com um comando
como
coplot(a ~ b | c + d)
que
produz pontos de dispersão de a contra b para cada intervalo de
condicionamento conjunto de c e d.
A
função coplot () e pares () utilizam um painel de argumento = que
pode ser usado para personalizar o tipo de plot que aparece em cada
painel. O padrão é pontos () para produzir um diagrama de
dispersão, mas fornecendo algumas outras funções de gráficos de
baixo nível de dois vetores x e y como o valor do painel = você
pode produzir qualquer tipo de plot desejado. Uma função de painel
de exemplo útil para coplots é panel.smooth ().

Exibir gráficos

Outras
funções gráficas de alto nível produzem diferentes tipos de
gráficos. Alguns exemplos são:
qqnorm
(x)
qqline
(x)
qqplot
(x, y)
Parcelas
de comparação de distribuição. A primeira forma traça o vetor
numérico x contra as pontuações de ordem normal esperadas (um
gráfico de pontuação normal) e o segundo acrescenta uma linha reta
a tal traçado desenhando uma linha através da distribuição e
quartis dos dados. A terceira forma traça os quantiles de x contra
os de y para comparar suas respectivas distribuições.
hist
(x)
hist
(x, nclass = n)
hist
(x, breaks = b, …)
Produz
um histograma do vetor numérico x. Um número razoável de aulas é
geralmente escolhido, mas uma recomendação pode ser dada com o
argumento nclass =. Alternativamente, os pontos de interrupção
podem ser especificados exatamente com o break = argumento. Se a
probabilidade = argumento TRUE for dada, as barras representam
freqüências relativas divididas pela largura do compartimento em
vez das contagens.
dotchart
(x, …)
Constrói
um pontochart dos dados em x. Em um pontochart, o eixo y dá uma
rotulagem dos dados em x e o eixo x dá seu valor. Por exemplo,
permite uma seleção visual fácil de todas as entradas de dados com
valores que estão em intervalos especificados.
image (x, y, z, …)
contour (x, y, z, …)
persp
(x, y, z, …)
Parcelas
de três variáveis. O gráfico de imagem desenha uma grade de
retângulos usando cores diferentes para representar o valor de z, o
traçado de contorno desenha linhas de contorno para representar o
valor de z e o gráfico de perseguição desenha uma superfície 3D.

Argumentos para funções de alto nível


uma série de argumentos que podem ser passados ​​para funções
de gráficos de alto nível, da seguinte maneira:
add
= TRUE
Força
a função a atuar como uma função de gráficos de baixo nível,
superpondo o gráfico no gráfico atual (algumas funções somente).
axes = FALSE
Suprime
a geração de eixos – útil para adicionar seus próprios eixos
personalizados com a função axis (). O padrão, axes = TRUE,
significa incluir eixos.
log
= “x”
log
= “y”
log
= “xy”
Faz
com que os eixos x, y ou ambos sejam logarítmicos. Isso funcionará
para muitos tipos de plots, mas não todos.
type =
O argumento controla o tipo de plot produzida, da seguinte
forma:
type
= “p”
Traçar
pontos individuais (o padrão)
type
= “l”
Linhas
de traçado
tipo
= “b”
Pontos
de listagem conectados por linhas (ambos)
type
= “o”
Coloque
pontos sobrepostos por linhas
tipo
= “h”
Traçar
linhas verticais de pontos para o eixo zero (alta densidade)
tipo
= “s”
tipo
= “S”
Parcelas
de função passo a passo. Na primeira forma, o topo da vertical
define o ponto; no segundo, no fundo.
tipo
= “n”
Não
traça nada. No entanto, os eixos ainda são desenhados (por padrão)
e o sistema de coordenadas é configurado de acordo com os dados.
Ideal para criar gráficos com funções gráficas de baixo nível
subseqüentes.
xlab
= string
ylab
= corda
Etiquetas
de eixos para os eixos x e y. Use esses argumentos para alterar os
rótulos padrão, geralmente os nomes dos objetos usados ​​na
chamada para a função de traçado de alto nível.
main
= string
Título
da figura, colocado na parte superior do plot em uma fonte grande.
sub
= string
Subtítulo,
colocado logo abaixo do eixo dos x em uma fonte menor.

Comandos de baixo nível

Às
vezes, as funções de traçado de alto nível não produzem
exatamente o tipo de plot que você deseja. Nesse caso, comandos de
traçado de baixo nível podem ser usados ​​para adicionar
informações extras (como pontos, linhas ou texto) ao gráfico
atual.
Algumas
das funções de traçabilidade de baixo nível mais úteis são:
points
(x, y)
lines (x, y)
Adiciona
pontos ou linhas conectadas ao gráfico atual. O argumento type = do
argumento () também pode ser passado para essas funções (e padrão
para “p” para pontos () e “l” para linhas ().)
text (x, y, labels, …)
Adicione
texto a um gráfico em pontos dados por x, y. Normalmente, os rótulos
são um vetor de número inteiro ou de caracteres, em cujo caso os
rótulos [i] são plotados no ponto (x [i], y [i]). O padrão é 1:
comprimento (x).
Nota:
Esta função é freqüentemente usada na seqüência
plot (x, y, type = “n”); texto (x, y, nomes)
O
parâmetro gráfico type = “n” suprime os pontos, mas
configura os eixos, e a função text () fornece caracteres
especiais, conforme especificado pelo nome do vetor de caracteres
para os pontos.
abline
(a, b)
abline
(h = y)
abline
(v = x)
abline
(lm.obj)
Adiciona
uma linha de inclinação b e intercepta a para o gráfico atual. h =
y pode ser usado para especificar coordenadas y para as alturas de
linhas horizontais para atravessar um gráfico e v = x de forma
semelhante para as coordenadas x para linhas verticais. Também
lm.obj pode ser listado com um componente de coeficientes do
comprimento 2 (como o resultado das funções de montagem do modelo),
que são tomadas como uma interceptação e inclinação, nessa
ordem.
polígono
(x, y, …)
Desenha
um polígono definido pelos vértices ordenados em (x, y) e
(opcionalmente) faça sombra em linhas de hachura ou preencha se o
dispositivo gráfico permite o preenchimento de figuras.
legenda
(x, y, legenda, …)
Adiciona
uma legenda ao gráfico atual na posição especificada. Traçar
caracteres, estilos de linha, cores etc., são identificados com os
rótulos na legenda do vetor de caracteres. Pelo menos um outro
argumento v (um vetor com o mesmo comprimento que legenda) com os
valores correspondentes da unidade de traçado também deve ser dado,
da seguinte forma:
legenda
(, fill = v)
Cores
para caixas preenchidas
lenda
(col = v)
Cores
nas quais os pontos ou linhas serão desenhados
lenda
(lty = v)
Estilos
de linha
legenda
(, lwd = v)
Largura
de linha
lenda
(pch = v)
Traçando
caracteres (vetor de caracteres)
título
(principal, sub)
Adiciona
um título principal ao topo do gráfico atual em uma fonte grande e
(opcionalmente) um sub-título sub na parte inferior em uma fonte
menor.
eixo
(lado, …)
Adiciona
um eixo ao gráfico atual do lado dado pelo primeiro argumento (1 a
4, contando no sentido dos ponteiros do relógio da parte inferior).
Outros argumentos controlam o posicionamento do eixo dentro ou ao
lado da plot e marcam as posições e os rótulos. Útil para
adicionar eixos personalizados depois de chamar plot () com o
argumento = FALSE argumento.
As
funções de traçado de baixo nível geralmente requerem algumas
informações de posicionamento (por exemplo, coordenadas x e y) para
determinar onde colocar os novos elementos do plot. As coordenadas
são dadas em termos de coordenadas de usuário que são definidas
pelo comando anterior de gráficos de alto nível e são escolhidas
com base nos dados fornecidos.
Onde
os argumentos x e y são necessários, também é suficiente fornecer
um único argumento sendo uma lista com elementos chamados x e y. Da
mesma forma, uma matriz com duas colunas também é uma entrada
válida. Desta forma, funções como locator () (veja abaixo) podem
ser usadas para especificar posições em um gráfico de forma
interativa.

Anotações matemáticas

Em
alguns casos, é útil adicionar símbolos matemáticos e fórmulas a
um gráfico. Isso pode ser alcançado em R, especificando uma
expressão em vez de uma seqüência de caracteres em qualquer texto,
mtext, eixo ou título. Por exemplo, o código a seguir desenha a
fórmula para a função de probabilidade Binomial:
text (x, y, expressão (colar (bgroup (“(“, atop (n,
x), “)”), p ^ x, q ^ {n-x})))
Mais
informações, incluindo uma lista completa dos recursos disponíveis,
podem ser obtidas a partir de R usando os comandos:
help (plotmath)
example (plotmath)
demo (plotmath)

Fontes de vetor Hershey

É
possível especificar fontes de vetor Hershey para renderizar texto
ao usar as funções de texto e contorno. Existem três razões para
usar as fontes Hershey:
  • As fontes Hershey podem produzir uma melhor saída, especialmente na
    tela do computador, para texto girado e / ou pequeno.
  • As fontes Hershey fornecem certos símbolos que podem não estar
    disponíveis nas fontes padrão. Em particular, há signos do
    zodíaco, símbolos cartográficos e símbolos astronômicos.
  • As fontes de Hershey fornecem caracteres cítricos e japoneses (Kana
    e Kanji).
Mais
informações, incluindo tabelas de caracteres Hershey, podem ser
obtidas a partir de R usando os comandos:
help (Hershey)
demo (Hershey)
help (japanese)
demo (japanese)

Interagindo com gráficos

R
também fornece funções que permitem aos usuários extrair ou
adicionar informações a um gráfico usando um mouse. O mais simples
é a função localizador ():
localizador
(n, tipo)
Espera
que o usuário selecione locais no gráfico atual usando o botão
esquerdo do mouse. Isso continua até que n (pontos 512) sejam
selecionados ou outro botão do mouse esteja pressionado. O argumento
de tipo permite plotar nos pontos selecionados e tem o mesmo efeito
que para comandos de gráficos de alto nível; O padrão não é um
gráfico. locator () retorna as posições dos pontos selecionados
como uma lista com dois componentes x e y.
localizador
() geralmente é chamado sem argumentos. É particularmente útil
para selecionar interativamente posições para elementos gráficos,
como legendas ou rótulos quando é difícil calcular antecipadamente
onde o gráfico deve ser colocado. Por exemplo, para colocar um texto
informativo próximo a um ponto periférico, o comando
text (localizador (1), “Outlier”, adj = 0)
pode
ser útil. (o localizador () será ignorado se o dispositivo atual,
como postscript, não suporta apontar interativo.)
identify (x, y, labels)
Permita
que o usuário destaque qualquer um dos pontos definidos por x e y
(usando o botão esquerdo do mouse) traçando o componente
correspondente dos rótulos próximos (ou o número de índice do
ponto se os rótulos estiverem ausentes). Retorna os índices dos
pontos selecionados quando outro botão é pressionado.
Às
vezes, queremos identificar pontos particulares em um plot, ao
invés de suas posições. Por exemplo, talvez desejemos que o
usuário selecione alguma observação de interesse de uma exibição
gráfica e, em seguida, manipule essa observação de alguma forma.
Dado um número de coordenadas (x, y) em dois vetores numéricos x e
y, poderíamos usar a função identificador () da seguinte maneira:
plot(x, y)
identify (x, y)
As
funções identificador () não executam nenhum gráfico, mas
simplesmente permite ao usuário mover o ponteiro do mouse e clicar o
botão esquerdo do mouse perto de um ponto. Se houver um ponto
próximo ao ponteiro do mouse, ele será marcado com seu número de
índice (ou seja, sua posição nos vetores x / y) traçados nas
proximidades. Alternativamente, você pode usar uma string
informativa (como um nome de caso) como um destaque, usando o
argumento de rótulos para identificar (), ou desativar a marcação
completamente com o argumento plot = FALSE. Quando o processo é
encerrado (veja acima), identifique () retorna os índices dos pontos
selecionados; você pode usar esses índices para extrair os pontos
selecionados dos vetores originais x e y.

Usando parâmetros gráficos

Ao
criar gráficos, particularmente para fins de apresentação ou
publicação, os padrões de R nem sempre produzem exatamente o que é
necessário. No entanto, você pode personalizar quase todos os
aspectos da tela usando parâmetros gráficos. R mantém uma lista de
um grande número de parâmetros gráficos que controlam coisas como
estilo de linha, cores, arranjo de figuras e justificação de texto
entre muitos outros. Cada parâmetro gráfico tem um nome (como
‘col’, que controla as cores,) e um valor (um número de cores, por
exemplo).
Uma
lista separada de parâmetros gráficos é mantida para cada
dispositivo ativo, e cada dispositivo possui um conjunto de
parâmetros padrão quando inicializado. Os parâmetros gráficos
podem ser definidos de duas maneiras: permanentemente, afetando todas
as funções gráficas que acessam o dispositivo atual; ou
temporariamente, afetando apenas uma única chamada de função
gráfica.

A função par ():

Argumentos para funções gráficas:

Mudanças permanentes: a função par ()

A
função par () é usada para acessar e modificar a lista de
parâmetros gráficos para o dispositivo gráfico atual.
par()
Sem
argumentos, retorna uma lista de todos os parâmetros gráficos e
seus valores para o dispositivo atual.
par
(c (“col”, “lty”))
Com
um argumento de vetor de caracteres, retorna apenas os parâmetros de
gráficos nomeados (novamente, como uma lista).
par
(col = 4, lty = 2)
Com
argumentos nomeados (ou um único argumento de lista), define os
valores dos parâmetros de gráficos nomeados e retorna os valores
originais dos parâmetros como uma lista.
Definir
parâmetros gráficos com a função par () altera permanentemente o
valor dos parâmetros, no sentido de que todas as futuras chamadas
para funções gráficas (no dispositivo atual) serão afetadas pelo
novo valor. Você pode pensar em definir os parâmetros gráficos
dessa maneira, definindo valores “padrão” para os
parâmetros, que serão utilizados por todas as funções de
gráficos, a menos que seja dado um valor alternativo.
Observe
que as chamadas para par () sempre afetam os valores globais dos
parâmetros gráficos, mesmo quando o par () é chamado de dentro de
uma função. Isso geralmente é um comportamento indesejável –
geralmente queremos definir alguns parâmetros gráficos, fazer algum
planejamento e restaurar os valores originais para não afetar a
sessão R do usuário. Você pode restaurar os valores iniciais
salvando o resultado do par () ao fazer alterações e restaurar os
valores iniciais quando o plot estiver completo.
oldpar

… traçando comandos …
par (oldpar)
Para
salvar e restaurar todos os parâmetros gráficos settable25 usar
oldpar

… traçando comandos …
par (oldpar)

Alterações temporárias: Argumentos para funções gráficas

Parâmetros
gráficos também podem ser passados ​​para (quase) qualquer
função gráfica como argumentos nomeados. Isso tem o mesmo efeito
que passar os argumentos para a função par (), exceto que as
mudanças apenas duram a duração da chamada de função. Por
exemplo:
plot (x, y, pch = “+”)
produz
um diagrama de dispersão usando um sinal de mais como o personagem
de traçado, sem alterar o caractere de traçado padrão para futuros
plots.
Infelizmente,
isso não é implementado de forma consistente e às vezes é
necessário definir e redefinir parâmetros gráficos usando par ().

Lista de parâmetros gráficos

As
seções a seguir detalham muitos dos parâmetros gráficos comumente
usados. A documentação de ajuda R para a função par () fornece um
resumo mais conciso; Isso é fornecido como uma alternativa um pouco
mais detalhada.
Os
parâmetros gráficos serão apresentados da seguinte forma:
nome
= valor
Uma
descrição do efeito do parâmetro. nome é o nome do parâmetro, ou
seja, o nome do argumento para usar em chamadas para par () ou uma
função gráfica. O valor é um valor típico que você pode usar ao
configurar o parâmetro.
Observe
que os eixos não são um parâmetro gráfico, mas um argumento para
alguns métodos de plot: veja xaxt e yaxt.

Elementos gráficos

As
parcelas R são constituídas por pontos, linhas, textos e polígonos
(regiões preenchidas). Existem parâmetros gráficos que controlam
como esses elementos gráficos são desenhados, da seguinte forma:
pch
= “+”
Caráter
a ser usado para traçar pontos. O padrão varia com os drivers de
gráficos, mas geralmente é um círculo. Os pontos tracejados tendem
a aparecer um pouco acima ou abaixo da posição apropriada, a menos
que você use “.” como o personagem de traçado, que produz
pontos centrados.
pch
= 4
Quando
pch é dado como um número inteiro entre 0 e 25 inclusive, um
símbolo de traçado especializado é produzido. Para ver quais são
os símbolos, use o comando
legend (locator (1), as.character (0:25), pch = 0:25)
Os
de 21 a 25 podem parecer duplicar símbolos anteriores, mas podem ser
coloridos de diferentes maneiras: veja a ajuda sobre pontos e seus
exemplos.
Além
disso, pch pode ser um caractere ou um número no intervalo 32: 255
representando um caractere na fonte atual.
lty
= 2
Tipos
de linha. Os estilos de linha alternativos não são suportados em
todos os dispositivos gráficos (e variam nos que o fazem), mas o
tipo de linha 1 é sempre uma linha contínua, o tipo de linha 0
sempre é invisível e os tipos de linha 2 e a seguir são linhas
pontilhadas ou tracejadas ou alguma combinação de ambos.
lwd
= 2
Largura
de linha. Largura desejada de linhas, em múltiplos da largura da
linha “padrão”. Afecta linhas de eixos, bem como linhas
desenhadas com linhas (), etc. Nem todos os dispositivos suportam
isso, e alguns têm restrições nas larguras que podem ser usadas.
col
= 2
Cores
a serem usadas para pontos, linhas, texto, regiões preenchidas e
imagens. Um número da paleta atual (veja? Paleta) ou uma cor com
nome.
col.axis
col.lab
col.main
col.sub
A
cor a ser utilizada para anotações de eixo, etiquetas x e y,
principais e subtítulos, respectivamente.
font
= 2
Um
número inteiro que especifica qual fonte usar para texto. Se
possível, os drivers do dispositivo providenciam para que 1
corresponda ao texto simples, 2 ao rosto em negrito, 3 ao itálico, 4
ao itálico em negrito e 5 à fonte do símbolo (que inclui letras
gregas).
font.axis
font.lab
font.main
font.sub
A
fonte a ser utilizada para anotações de eixo, etiquetas x e y,
principais e subtítulos, respectivamente.
adj
= -0,1
Justificação
do texto em relação à posição de traçado. 0 significa esquerda
justificativa, 1 significa justificação correta e 0,5 significa
centralizar horizontalmente sobre a posição de traçado. O valor
real é a proporção de texto que aparece à esquerda da posição
de traçado, portanto, um valor de -0,1 deixa um intervalo de 10% da
largura do texto entre o texto e a posição de traçado.
cex
= 1,5
Expansão
do caráter. O valor é o tamanho desejado de caracteres de texto
(incluindo caracteres de traçado) em relação ao tamanho de texto
padrão.
cex.axis
cex.lab
cex.main
cex.sub
A
expansão do caractere a ser usada para anotações de eixo,
etiquetas x e y, principais e subtítulos, respectivamente.

Eixos e marcações

Muitas
das parcelas de alto nível de R têm eixos, e você pode construir
os eixos com a função de gráficos de eixo de baixo nível (). Os
eixos possuem três componentes principais: a linha de eixo (estilo
de linha controlada pelo parâmetro de gráficos de lty), as marcas
de marcação (que marcam as divisões da unidade ao longo da linha
de eixo) e as marcas de marca (que marcam as unidades). Esses
componentes podem ser personalizados com os seguintes parâmetros
gráficos.
lab
= c (5, 7, 12)
Os
dois primeiros números são o número desejado de intervalos de
tiques nos eixos x e y, respectivamente. O terceiro número é o
comprimento desejado de rótulos de eixos, em caracteres (incluindo o
ponto decimal). Escolher um valor muito pequeno para este parâmetro
pode resultar em todos os rótulos sendo arredondados para o mesmo
número!
las
= 1
Orientação
dos rótulos dos eixos. 0 significa sempre paralelo ao eixo, 1
significa sempre horizontal e 2 significa sempre perpendicular ao
eixo.
mgp
= c (3, 1, 0)
Posições
dos componentes do eixo. O primeiro componente é a distância da
etiqueta do eixo para a posição do eixo, nas linhas de texto. O
segundo componente é a distância para as marcas de tiques e o
componente final é a distância da posição do eixo para a linha do
eixo (geralmente zero). Os números positivos medem fora da região
do plot, números negativos dentro.
tck
= 0,01
Comprimento
das marcações, como uma fração do tamanho da região de traçado.
Quando tck é pequeno (menos de 0,5), as marcas de marcação nos
eixos x e y são forçadas a ter o mesmo tamanho. Um valor de 1
fornece linhas de grade. Os valores negativos dão marcações fora
da região de traçado. Use tck = 0,01 e mgp = c (1, -1,5,0) para
marcações internas.
xaxs
= “r”
yaxs
= “i”
Estilos
de eixos para os eixos x e y, respectivamente. Com os estilos “i”
(interno) e “r” (o padrão), as marcas sempre ficam dentro
do alcance dos dados, no entanto, o estilo “r” deixa uma
pequena quantidade de espaço nas bordas. (S tem outros estilos não
implementados na R.)

Figura margens

Um
único gráfico em R é conhecido como uma figura e compreende uma
região de plot cercada por margens (possivelmente contendo rótulos
de eixos, títulos, etc.) e (geralmente) delimitada pelos próprios
eixos.
Uma
figura típica é
Os
parâmetros gráficos que controlam o layout da figura incluem:
mai
= c (1, 0,5, 0,5, 0)
Largura
das margens inferior, esquerda, superior e direita, respectivamente,
medida em polegadas.
mar
= c (4, 2, 2, 1)
Semelhante
ao mai, exceto que a unidade de medição é linhas de texto.
mar
e mai são equivalentes no sentido de que definir um altera o valor
do outro. Os valores padrão escolhidos para este parâmetro
geralmente são muito grandes; a margem direita raramente é
necessária e nem a margem superior se não é usado o título. As
margens inferior e esquerda devem ser grandes o suficiente para
acomodar o eixo e marcar marcas. Além disso, o padrão é escolhido,
independentemente do tamanho da superfície do dispositivo: por
exemplo, usando o driver postscript () com o argumento altura = 4
resultará em um gráfico que é cerca de 50% de margem a menos que
mar ou mai sejam definidos explicitamente. Quando várias figuras
estão em uso (veja abaixo), as margens são reduzidas, porém isso
pode não ser suficiente quando muitas figuras compartilham a mesma
página.

Ambiente figurativo múltiplo

R
permite que você crie uma série de figuras n em uma única página.
Cada figura tem suas próprias margens, e a matriz de figuras é
opcionalmente cercada por uma margem externa, conforme mostrado na
figura a seguir.
Os
parâmetros gráficos relativos a múltiplas figuras são os
seguintes:
mfcol
= c (3, 2)
mfrow
= c (2, 4)
Defina
o tamanho de uma matriz de múltiplas figuras. O primeiro valor é o
número de linhas; O segundo é o número de colunas. A única
diferença entre esses dois parâmetros é que a configuração de
mfcol faz com que as figuras sejam preenchidas por coluna; Mfrow é
preenchido por linhas.
O
layout na Figura poderia ter sido criado definindo mfrow = c (3,2); A
figura mostra a página depois que quatro parcelas foram desenhadas.
Definir
qualquer destes pode reduzir o tamanho da base de símbolos e texto
(controlado por par (“cex”) e o ponto do dispositivo). Em
um layout com exatamente duas linhas e colunas, o tamanho da base é
reduzido por um fator de 0.83: se houver três ou mais linhas ou
colunas, o fator de redução é 0.66.
mfg
= c (2, 2, 3, 2)
Posição
da figura atual em um ambiente de figura múltipla. Os dois primeiros
números são a linha e a coluna da figura atual; os dois últimos
são o número de linhas e colunas na matriz de figuras múltiplas.
Defina este parâmetro para saltar entre figuras na matriz. Você
pode usar valores diferentes para os últimos dois números do que os
valores reais para figuras de tamanho desigual na mesma página.
fig
= c (4, 9, 1, 4) / 10
Posição
da figura atual na página. Os valores são as posições das margens
esquerda, direita, inferior e superior, respectivamente, como uma
porcentagem da página medida a partir do canto inferior esquerdo. O
valor do exemplo seria para uma figura no canto inferior direito da
página. Defina este parâmetro para posicionamento arbitrário de
figuras dentro de uma página. Se você quiser adicionar uma figura a
uma página atual, use novo = VERDADEIRO também (diferente de S).
oma
= c (2, 0, 3, 0)
omi
= c (0, 0, 0,8, 0)
Tamanho
das margens exteriores. Como mar e mai, as primeiras medidas em
linhas de texto e a segunda em polegadas, começando com a margem
inferior e trabalhando no sentido horário.
As
margens externas são particularmente úteis para títulos em página,
etc. O texto pode ser adicionado às margens externas com a função
mtext () com o argumento externo = VERDADEIRO. Não há margens
externas por padrão, no entanto, você deve criá-las explicitamente
usando oma ou omi.
Arranjos
mais complicados de figuras múltiplas podem ser produzidos pelas
funções split.screen () e layout (), bem como pelos pacotes de
grade e rede.

Controladores de dispositivo

R
pode gerar gráficos (de diferentes níveis de qualidade) em quase
qualquer tipo de dispositivo de exibição ou impressão. Antes que
isso possa começar, no entanto, R precisa ser informado sobre o tipo
de dispositivo com o qual ele está lidando. Isso é feito iniciando
um driver de dispositivo. O propósito de um driver de dispositivo é
converter instruções gráficas de R (“desenhar uma linha”,
por exemplo) em uma forma que o dispositivo particular possa
entender.
Os
drivers do dispositivo são iniciados chamando uma função de driver
de dispositivo. Há uma dessas funções para cada driver de
dispositivo: digite help (Dispositivos) para uma lista de todos eles.
Por exemplo, emitir o comando
postscript ()
faz
com que toda a saída gráfica futura seja enviada para a impressora
no formato PostScript. Alguns drivers de dispositivos comumente
usados ​​são:
X11
()
Para
usar com o sistema windows X11 no Unix-alikes
Windows()
Para
uso no Windows
quartz()
Para
uso no MacOS
postscript
()
Para
imprimir em impressoras PostScript ou criar arquivos de gráficos
PostScript.
pdf
()
Produz
um arquivo PDF, que também pode ser incluído em arquivos PDF.
png
()
Produz
um arquivo PNG bitmap. (Não está sempre disponível: veja a página
de ajuda.)
jpeg
()
Produz
um arquivo bitmap JPEG, melhor usado para gráficos de imagens. (Não
está sempre disponível: veja a página de ajuda.)
Quando
você terminar com um dispositivo, certifique-se de encerrar o driver
do dispositivo, emitindo o comando
dev.off ()
Isso
garante que o dispositivo finalize de forma limpa; Por exemplo, no
caso de dispositivos impressos, isso garante que todas as páginas
sejam preenchidas e enviadas para a impressora. (Isso acontecerá
automaticamente no final normal de uma sessão.)

Diagramas PostScript para documentos de composição

Ao
passar o argumento do arquivo para a função de driver do
dispositivo postscript (), você pode armazenar os gráficos no
formato PostScript em um arquivo de sua escolha. O gráfico será na
orientação horizontal, a menos que o argumento horizontal = FALSO
seja dado, e você pode controlar o tamanho do gráfico com os
argumentos de largura e altura (o gráfico será dimensionado
conforme apropriado para ajustar essas dimensões). Por exemplo, o
comando
postscript (“file.ps”, horizontal = FALSE, height =
5, pointize = 10)
irá
produzir um arquivo contendo código PostScript para uma figura de
cinco centímetros de altura, talvez para inclusão em um documento.
É importante notar que, se o arquivo nomeado no comando já existir,
ele será substituído. Este é o caso mesmo se o arquivo só foi
criado anteriormente na mesma sessão R.
Muitos
usos da saída PostScript serão para incorporar a figura em outro
documento. Isso funciona melhor quando o PostScript encapsulado é
produzido: R sempre produz saída compatível, mas apenas marca a
saída como tal quando o argumento onefile = FALSE é fornecido. Esta
notação incomum decorre da compatibilidade com S: isso realmente
significa que a saída será uma única página (que faz parte da
especificação EPSF). Assim, para produzir um plot para inclusão
use algo como
postscript (“plot1.eps”, horizontal = FALSE, onefile =
FALSE,
altura = 8, largura = 6, ponto = 10)

Múltiplos dispositivos gráficos

No
uso avançado de R, muitas vezes é útil ter vários dispositivos
gráficos em uso ao mesmo tempo. É claro que apenas um dispositivo
gráfico pode aceitar comandos gráficos em qualquer momento e isso é
conhecido como o dispositivo atual. Quando vários dispositivos estão
abertos, eles formam uma seqüência numerada com nomes que dão o
tipo de dispositivo em qualquer posição.
Os
comandos principais usados ​​para operar com vários dispositivos
e seus significados são os seguintes:
X11
()
[UNIX]
Windows()
win.printer
()
win.metafile
()
[Windows]
quartz()
[Mac
OS]
postscript
()
pdf
()
png
()
jpeg
()
tiff
()
bitmap
()
Cada
nova chamada para uma função de driver de dispositivo abre um novo
dispositivo gráfico, estendendo-se por um a lista de dispositivos.
Este dispositivo torna-se o dispositivo atual, ao qual a saída
gráfica será enviada.
dev.list
()
Retorna
o número eo nome de todos os dispositivos ativos. O dispositivo na
posição 1 na lista é sempre o dispositivo nulo que não aceita
comandos gráficos.
dev.next
()
dev.prev
()
Retorna
o número e o nome do dispositivo gráfico próximo ou anterior ao
dispositivo atual, respectivamente.
dev.set
(which = k)
Pode
ser usado para alterar o dispositivo de gráficos atual para aquele
na posição k da lista de dispositivos. Retorna o número eo rótulo
do dispositivo.
dev.off
(k)
Terminar
o dispositivo gráfico no ponto k da lista de dispositivos. Para
alguns dispositivos, como os dispositivos postscript, isso imprime o
arquivo imediatamente ou complete corretamente o arquivo para
posterior impressão, dependendo de como o dispositivo foi iniciado.
dev.copy
(dispositivo, …, que = k)
dev.print
(dispositivo, …, que = k)
Faça
uma cópia do dispositivo k. Aqui o dispositivo é uma função de
dispositivo, como postscript, com argumentos extras, se necessário,
especificado por ‘…’. o dev.print é semelhante, mas o dispositivo
copiado é imediatamente fechado, de modo que as ações finais, como
a impressão de cópias impressas, são executadas imediatamente.
graphics.off
()
Terminar
todos os dispositivos gráficos na lista, exceto o dispositivo nulo.

Gráficos dinâmicos

R
não possui recursos internos para gráficos dinâmicos ou
interativos, p. nuvens de ponto rotativo ou pontos de “escovação”
(destacando interativamente). No entanto, extensas funções gráficas dinâmicas estão disponíveis no sistema GGobi da Swayne,
Cook e Buja disponíveis a partir de
e
estes podem ser acessados ​​a partir de R através do pacote
rggobi, descrito em http://www.ggobi.org/rggobi.
Além
disso, o pacote rgl fornece formas de interagir com gráficos 3D, por
exemplo, de superfícies.
Além disso, ferramentas como o Vengage permitem criar vários tipos de (info)gráficos.

Conclusão

Chegamos ao final desta série, e espero sinceramente que tenha aproveitado bastante os conhecimentos compartilhados aqui.
Ficou com alguma dúvida?
Tem interesse em treinamentos em R?

Programação em R – Parte 8 (agrupamento, loops e execução condicional)

Expressões agrupadas

R é
uma linguagem de expressão no sentido de que seu único tipo de
comando é uma função ou expressão que retorna um resultado. Até
mesmo uma tarefa é uma expressão cujo resultado é o valor
atribuído e pode ser usado sempre que qualquer expressão pode ser
usada; em particular, tarefas múltiplas são possíveis.
Os
comandos podem ser agrupados em chaves, {expr_1; …; expr_m}, caso
em que o valor do grupo é o resultado da última expressão no grupo
avaliado. Como esse grupo também é uma expressão, ele pode, por
exemplo, ser incluído em parênteses e usado como parte de uma
expressão ainda maior, e assim por diante.

Declarações de controle



Execução condicional:

Execução repetitiva:

Execução condicional: declarações ‘’se’’

A linguagem possui uma construção condicional da forma
if (expr_1) expr_2 else expr_3
onde
expr_1 deve avaliar para um único valor lógico e o resultado de
toda a expressão é então evidente.
Os
operadores de “curto-circuito” && e || são
freqüentemente usados ​​como parte da condição em uma
declaração if. Considerando que & e | se aplicam a elementos de vetores, && e || se aplicam para vetores de comprimento um.
Existe
uma versão vetorial da construção if / else, a função ifelse.
Esta tem a forma ifelse (condição, a, b) e retorna um vetor do
mesmo comprimento que a condição, com elementos a [i] se a condição
[i] for verdadeira, caso contrário, b [i].

Execução repetitiva: loops for, repeat e while


também uma construção de loop na forma
for (nome in expr_1) expr_2
onde nome é a variável do loop. expr_1 é uma expressão vetorial
(muitas vezes uma seqüência como 1:20), e expr_2 é muitas vezes
uma expressão agrupada com suas sub-expressões escritas em termos
do nome. expr_2 é avaliado repetidamente como intervalos de
nomes através dos valores no resultado vetorial de expr_1.
Como
exemplo, suponha que ind seja um vetor de indicadores de classe e
queremos produzir parcelas separadas de y versus x dentro de classes.
Uma possibilidade aqui é usar coplot (), que irá produzir uma
série de gráficos correspondentes a cada nível do fator. Outra
maneira de fazer isso, agora colocando todos os gráficos no único
display, é a seguinte:
for (i in 1:length(y)) {

abline (lsfit (x [[i]], y [[i]]))
}
Aviso:
os loops são usados ​​no código R muito menos frequentemente
do que nas linguagens compiladas. O código que leva uma visão de
“objeto inteiro” provavelmente será tanto mais claro
quanto mais rápido em R.
Outras
opções de loop incluem o
repeat expr
while (condição) expr
A
declaração de interrupção pode ser usada para encerrar qualquer
loop, possivelmente anormalmente. Esta é a única maneira de
encerrar loops repetidos.
A
próxima declaração pode ser usada para interromper um ciclo
específico e passar para o “próximo”.
As
instruções de controle são mais utilizadas em conexão com funções
que são discutidas em Escrever suas próprias funções e onde mais
exemplos surgirão.

Conclusão

Ficou com alguma dúvida?
Tem interesse em treinamentos em R?

Programação em R – Parte 7 (Lendo Dados de Arquivos)

Os
objetos de dados em grandes volumes geralmente são lidos como valores de
arquivos externos em vez de inseridos durante uma sessão R via teclado. As opções de entrada R são simples e seus requisitos
são bem rígidos, até mesmo inflexíveis. Existe uma clara
presunção pelos designers do R de que você poderá modificar seus
arquivos de entrada usando outras ferramentas, como editores de
arquivos, para atender aos requisitos de R. Geralmente, isso
é muito simples.
Se
as variáveis devem ser mantidas principalmente em data frames,
como sugerimos fortemente, um data frame pode ser lido
diretamente com a função read.table().

Para
obter mais detalhes sobre a importação de dados em R e também para
exportação de dados, consulte o manual R para importar/exportar dados.

A função read.table()

Para
ler um data frame completo diretamente, o arquivo externo
normalmente terá uma forma especial.
  • A primeira linha do arquivo deve ter um nome para cada variável no
    data frame (cabeçalho);
  • Cada linha adicional do arquivo tem como primeiro item um rótulo de
    linha e os valores para cada variável.
Se o
arquivo tiver um item menor em sua primeira linha do que na segunda, este arranjo é presumido como correto e os ajustes necessários são feitos automaticamente. Portanto,
as primeiras linhas de um arquivo a serem lidas como um data frame podem parecer como as seguintes:
Arquivo de entrada com nomes e rótulos de linha:
Preço Chão Área Quart. Idade Cent.heat
01
52.00 111.0 830 5 6.2 não
02 54.75
128.0 710 5 7.5 não
03 57.50 101.0
1000 5 4.2 não
04 57.50 131.0 690
6 8.8 não
05 59.75 93.0 900 5
1.9 sim

Por
padrão, itens numéricos (exceto rótulos de linha) são lidos como
variáveis ​​numéricas e variáveis ​​não-numéricas, como
Cent.heat no exemplo, como fatores. Isso pode ser alterado se
necessário.
A
função read.table() pode então ser usada para ler o data frame diretamente.
Muitas
vezes, você quer omitir, incluindo os rótulos de linha diretamente
e usar os rótulos padrão. Nesse caso, o arquivo pode omitir a
coluna da etiqueta da linha como a seguir.

Arquivo de entrada sem rótulos de linha:
Preço Chão Área Quart. Idade Cent.heat
52.00 111.0 830 5 6.2 não
54.75 128.0 710 5 7.5 não
57.50
101.0 1000 5 4.2 não
57.50
131.0 690 6 8.8 não
59.75 93.0
900 5 1.9 sim

O data frame pode então ser lido como
HousePrice = read.table(“HousePrice.txt”,header=TRUE)

onde
a opção header = TRUE especifica que a primeira linha é uma linha
de cabeçalhos e, portanto, por implicação da forma do arquivo, que
nenhum rótulo de linha explícito é fornecido.

A função scan()

A função scan() fornece um modo bastante flexível de ler arquivos.

Considere o arquivo input.txt com o seguinte conteúdo:
,t1,t2,t3,t4,t5,t6,t7,t8
r1,1,0,1,0,0,1,0,2
r2,1,2,5,1,2,1,2,1
r3,0,0,9,2,1,1,0,1
r4,0,0,2,1,2,0,0,0
r5,0,2,15,1,1,0,0,0
r6,2,2,3,1,1,1,0,0
r7,2,2,3,1,1,1,0,1

Para ler o arquivo, poderia ser feita a seguinte operação:

x
E o resultado seria o seguinte:

> x
[1] “r1,1,0,1,0,0,1,0,2”  “r2,1,2,5,1,2,1,2,1”  “r3,0,0,9,2,1,1,0,1”
[4] “r4,0,0,2,1,2,0,0,0”  “r5,0,2,15,1,1,0,0,0” “r6,2,2,3,1,1,1,0,0”
[7] “r7,2,2,3,1,1,1,0,1”

Caso não tenha percebido, a primeira linha foi omitida na “carga” do arquivo.
Alternativamente, poderia ser lida apenas uma linha do arquivo com a operação:
> x

Read 1 item
E o resultado, neste caso, seria:
> x
[1] “r1,1,0,1,0,0,1,0,2”
É possível também ler o conteúdo do arquivo e armazenar cada linha como um item de uma lista, como abaixo.
> x

[[1]]
[1] “r1,1,0,1,0,0,1,0,2”
[[2]]
[1] “r2,1,2,5,1,2,1,2,1”
[[3]]
[1] “r3,0,0,9,2,1,1,0,1”
[[4]]
[1] “r4,0,0,2,1,2,0,0,0”
[[5]]
[1] “r5,0,2,15,1,1,0,0,0”
[[6]]
[1] “r6,2,2,3,1,1,1,0,0”
[[7]]
[1] “r7,2,2,3,1,1,1,0,1”
[[8]]
[1] “”
[[9]]
[1] “”
Ou ler dados diretamente do teclado:
> x

1: 43    #input 43 from the screen
2:
Read 1 item
> x
[1] “43”
E até mesmo “colar” conteúdo de uma planilha após executar a operação abaixo:
> x
E ter o conteúdo da planilha copiada disponível para uso com o objeto x.
Muito bacana a função scan(), não é mesmo?

Acessando conjuntos de dados pré-definidos

Uma das coisas mais incríveis do R é o conjunto com cerca
de 100 “bandos de dados de exemplo” fornecidos, havendo mais alguns disponíveis em pacotes (incluindo
os pacotes recomendados fornecidos com R).  Para ver a lista de data sets disponíveis, basta executar o comando
> data()
Todos
os conjuntos de dados fornecidos com R estão disponíveis
diretamente pelo nome. No entanto, muitos pacotes ainda utilizam a
convenção obsoleta em que os dados também foram usados ​​para
carregar conjuntos de dados em R, por exemplo
> data(infert)
E isso ainda pode ser usado com os pacotes padrão (como neste
exemplo). Na maioria dos casos, isso irá carregar um objeto R do
mesmo nome. No entanto, em alguns casos, carrega vários objetos,
então veja a ajuda on-line para o objeto para ver o que é recomendado.

Carregando dados de outros pacotes R

Para
acessar dados de um determinado pacote, use o argumento do pacote,
por exemplo
data(package = “rpart”)
data(Puromycin, package = “datasets”)
Se
um pacote foi anexado pela biblioteca, seus conjuntos de dados são
incluídos automaticamente na pesquisa.
Os
pacotes contribuídos pelo usuário podem ser uma fonte rica de
conjuntos de dados.

Conclusão

As funcionalidades da linguagem R para manipulação de dados em arquivos facilitam muito a vida, principalmente depois que você armazena os dados num objeto data frame.
E você? Já usou R para leitura e manipulação de arquivos?
Ficou com alguma dúvida?

Tem interesse em treinamentos em R?

Programação em R – Parte 5 (Matrizes)

Programação em R - Aprenda Analtics, Big Data & Ciência de Dados

Confira todos os textos da série Programação em R:

Uma
matriz pode ser considerada uma coleção de dados
do mesmo tipo, por exemplo numérico. R permite criar e
manipular matrizes de maneira simples.

Um
vetor de dimensão é um vetor de números inteiros não negativos.
Se o seu comprimento for k, a matriz é dita k-dimensional. Em geral as matrizes são bidimensionais. Mas as dimensões são indexadas de um até os
valores dados no vetor de dimensão, ou seja, você pode criar uma matriz com quantas dimensões desejar.
Por exemplo, se o vetor de dimensão para uma matriz, digamos A, é C (3,4,2), então há 3 * 4 * 2 = 24 elementos na matriz A, e os dados podem ser acessados na ordem [1,1,1], [2,1,1], …, até [2,4,2],[3,4,2].

Outras
funções como matrix() e array() estão disponíveis
para criação de matrizes e vetores (que são matrizes unidimensionais :).

Construindo matrizes com cbind() e rbind()

As matrizes podem ser construídas a
partir de outros vetores e matrizes pelas funções cbind() e rbind(). Podemos dizer que a função cbind() forma matrizes, unindo matrizes
juntadas verticalmente, ou em colunas, enquanto a rbind() faz o mesmo, porém horizontalmente, ou
em linhas.
Os
argumentos para cbind() devem ser vetores de qualquer comprimento ou
matrizes com o mesmo tamanho de coluna, que é o mesmo número de
linhas. O resultado é uma matriz com os argumentos concatenados
arg_1, arg_2, … formando as colunas.
Se
alguns dos argumentos para cbind() são vetores, eles podem ser
menores do que o tamanho da coluna de qualquer matriz presente, caso
em que elas são ciclicamente estendidas para coincidir com o tamanho
da coluna da matriz (ou o comprimento do vetor mais longo se nenhuma
matriz for dada ).

Assim, suponha a matriz m abaixo:

1 2
3 4
5 6

Suponha agora um vetor v com os elementos (1,2).

O resultado da operação cbind(m,v) é a matriz abaixo:

1 2 1
3 4 2
5 6 1

Percebeu como os elementos do vetor foram “distribuídos ao longo da matriz”?

Isso é R, meus amigos 🙂

A
função rbind() faz a operação correspondente para linhas. Neste
caso, qualquer argumento de vetor, possivelmente ciclicamente
estendido, é, naturalmente, tomado como vetores de linha.

A função de concatenação c()

Enquanto cbind() e rbind() são funções de
concatenação que respeitam os atributos dim, a função c() básica limpa objetos numéricos de todos os atributos dim e
dimnames, o que é ocasionalmente útil.

Mas o que isso significa na prática?

Simples: é uma maneira de transformar uma matriz de volta a um objeto vetorial (equivalente a usar as.vector()).
Existem
pequenas diferenças entre os dois, mas, em última análise, a
escolha entre eles é em grande parte uma questão de estilo (sendo o
primeiro preferível).

Conclusão

Matrizes são estruturas bastante úteis em determinadas situações, especialmente quando lidamos com dados homogêneos que precisam ser analisados de várias maneiras, e a linguagem R oferece diversas funções para facilitar a observação das características relevantes das matrizes.
Ficou com alguma dúvida?
Tem interesse em treinamentos em R?

Programação em R – Parte 4 (Fatores)

Programação em R - Aprenda Analtics, Big Data & Ciência de Dados

Confira todos os textos da série Programação em R:

Fatores ordenados e não ordenados

Um fator é
um objeto vetorial usado para especificar uma classificação
discreta (agrupamento) dos componentes de outros vetores do mesmo
comprimento. R fornece fatores ordenados e não ordenados.
Fatores podem ser
identificados automaticamente através da linguagem R, e servem para
“categorizar” os valores de alguma variável ou objeto.
Suponhamos, por
exemplo, que tenhamos uma amostra de informações de escolas
espalhadas pelo Brasil, com a indicação do estado em que cada
escola se localiza sendo especificado por um vetor de siglas
estaduais como abaixo
> escolas

“GO”, “MA”, “MT”, “MS”,
“MG”, “PA”, “PB”, “PE”,
“PI”, “PR”, “RJ”, “RN”, “RO”,
“RR”, “RS”, “SC”
“SE”, “SP”, “TO”, “BA”,
“SP”, “RJ”)
Observe que, no caso
de um vetor de caracteres, “ordenado” significa ordenados
em ordem alfabética.
Um fator pode ser
criado de forma semelhante usando a função factor ():
> estados

A função print ()
lida com fatores ligeiramente diferentes de outros objetos:
> estados
[1] “AC”,
“AL”, “AP”, “AM”, “BA”, “CE”,
“DF”, “ES”,
[9] “GO”,
“MA”, “MT”, “MS”, “MG”, “PA”,
“PB”, “PE”,
[17] “PI”,
“PR”, “RJ”, “RN”, “RO”, “RR”,
“RS”, “SC”
[26] “SE”,
“SP”, “TO”
Levels: “AC”,
“AL”, “AP”, “AM”, “BA”, “CE”,
“DF”, “ES”,
“GO”,
“MA”, “MT”, “MS”, “MG”, “PA”,
“PB”, “PE”,
“PI”,
“PR”, “RJ”, “RN”, “RO”, “RR”,
“RS”, “SC”
“SE”,
“SP”, “TO”
Para descobrir os
níveis de um fator, a função levels() pode ser usada.
> levels
(escolas)
[1] “AC”,
“AL”, “AP”, “AM”, “BA”, “CE”,
“DF”, “ES”,
[9] “GO”,
“MA”, “MT”, “MS”, “MG”, “PA”,
“PB”, “PE”,
[17] “PI”,
“PR”, “RJ”, “RN”, “RO”, “RR”,
“RS”, “SC”
[25] “SE”,
“SP”, “TO”

A função
tapply ()

Suponhamos que
tenhamos a quantidade de alunos das mesmas escolas em outro vetor
(valores apenas para efeito didático).
> alunos

610, 610, 610, 580, 510, 480, 650, 490, 490, 410, 480, 520,
460,
590, 460, 580, 430)
Para calcular a
média de alunos por escola para cada estado, agora podemos usar a
função especial tapply().
Primeiro vamos criar
um dataframe com todos os dados, para organizar melhor as
informações.
df

df$escolas

df$alunos

Agora, podemos
simplesmente usar a função tapply() da seguinte forma:
>
mediaalunos

resultando no vetor
de médias rotuladas pelos níveis (estados)
[1] “AC”,
“AL”, “AP”, “AM”, “BA”, “CE”,
“DF”, “ES”,
[9] “GO”,
“MA”, “MT”, “MS”, “MG”, “PA”,
“PB”, “PE”,
[17] “PI”,
“PR”, “RJ”, “RN”, “RO”, “RR”,
“RS”, “SC”
[25] “SE”,
“SP”, “TO”
[1] 800,
3000, 700, 800, 550 ((640+460)/2), 600, 590, 540
[9] 620, 690,
700, 420, 560, 610, 610, 610,
[17] 580,
510, 455 ((480+430)/2), 650, 490, 490, 410, 480
[25] 520, 520
((460+580)/2), 590
Note que apenas as
escolas cujos estados se repetem sofreram alteração no valor do
resultado, pois foi calculada a média de alunos para o mesmo estado.
Nos casos em que a a sigla estado tinha apenas uma ocorrência, o
valor resultante foi igual ao do vetor original.
A função tapply ()
é usada para aplicar uma função, neste caso a média – mean(),
para cada grupo de componentes do primeiro argumento (quantidade de
alunos), definidos pelos níveis do segundo componente (estados das
escolas), como se fossem estruturas vetoriais separadas. O resultado
é uma estrutura do mesmo comprimento que o atributo de níveis do
fator que contém os resultados.
Como exercício,
você pode imaginar outros usos da função tapply() para analisar
dados dos alunos de escolas. Experimente acrescentar novas colunas ao
data frame com informações como a região de cada estado, e obtenha
um resumo consolidado da quantidade de alunos por região do país.
A função tapply ()
também pode ser usada para lidar com indexação mais complicada de
um vetor por várias categorias. Por exemplo, talvez desejemos
dividir os alunos tanto pelo estado como pelo sexo. No entanto, neste
exemplo simples (apenas um fator), o que acontece pode ser pensado da
seguinte maneira. Os valores no vetor são coletados em grupos de
acordo com cada fator, ou seja, grupos de alunos por estado e por
sexo são considerados para os cálculos. A função é então
aplicada a cada um desses grupos individualmente. O valor é um vetor
de resultados de função, rotulado pelos níveis de cada fator.
A combinação de um
vetor e um fator de rotulagem é um exemplo do que às vezes é
chamado de uma matriz irregular, uma vez que os tamanhos da subclasse
são possivelmente irregulares. Quando os tamanhos da subclasse são
todos iguais, a indexação pode ser feita de forma implícita e
muito mais eficiente.

Fatores
ordenados

Os níveis de
fatores são armazenados em ordem alfabética, ou na ordem em que
foram especificados como fatores se fossem especificados
explicitamente.
Às vezes, os níveis
terão uma ordem natural que queremos gravar e queremos que nossa
análise estatística faça uso. A função ord() cria esses
fatores ordenados, mas é idêntica ao fator. Para a maioria dos
propósitos, a única diferença entre os fatores ordenados e não
ordenados é que os primeiros são impressos mostrando a ordenação
dos níveis, mas os contrastes gerados para eles na montagem de
modelos lineares são diferentes.

Conclusão

E então, interessante mais esse recurso da linguagem R, não é mesmo?
São tantos facilitadores que a cada dia nos surpreendemos com maneiras mais simples de realizar operações que a princípio envolveriam uma certa compexidade.
Que tal mostrar que você entendeu o conceito de fatores e colocar nos comentários o código que faz a análise dos alunos por região do país? Você consegue!


Ficou com alguma dúvida?
Tem interesse em treinamentos em R?

Programação em R – Parte 3 (Entendendo e Manipulando Objetos)

@page { margin: 2cm }
p { margin-bottom: 0.25cm; border: none; padding: 0cm; line-height: 115%; text-align: left; page-break-inside: auto; orphans: 2; widows: 2; page-break-after: auto }
a:link { so-language: zxx }

Programação em R - Aprenda Analtics, Big Data & Ciência de Dados

Confira todos os textos da série Programação em R:

Objetos,
seus modos e atributos

As entidades que R opera são
tecnicamente conhecidas como objetos. Os exemplos são vetores de
valores numéricos (reais) ou complexos, vetores de valores lógicos
e vetores de cadeias de caracteres. São conhecidas como estruturas
“atômicas”, pois seus componentes são todos do mesmo
tipo, ou modo, chamados de numérico, complexo, lógico,
caractere.
Os vetores devem ter seus valores todos
do mesmo tipo
. Assim, qualquer vetor dado deve ser
inequivocamente lógico, numérico, complexo, caractere. (A única exceção aparente a esta regra é o “valor”
especial listado como NA para quantidades não disponíveis).
Observe que um vetor pode estar
vazio e ainda possuir um tipo. Por exemplo, o vetor de string de
caracteres vazio é listado como caractere (0) e o vetor numérico
vazio como numérico (0).
R também opera em objetos chamados de
listas, que são sequências
de objetos que individualmente podem ser de qualquer tipo. As listas
são conhecidas como estruturas “recursivas” e não
atômicas, pois seus elementos podem ser listas.
As outras estruturas recursivas são as
de função e expressões. As funções são os objetos que
fazem parte do sistema R, juntamente com funções escritas do
usuário.
As expressões como objetos formam uma parte avançada do R.
Pelo tipo de um objeto, queremos dizer
o tipo básico de seus constituintes fundamentais. Este é um caso
especial de uma “propriedade” de um objeto. Outra
propriedade de cada objeto é seu tamanho. As funções type() e length() podem ser usadas ​​para
descobrir o tipo e o tamanho de qualquer estrutura definida.
R permite mudanças de tipo quase em
qualquer lugar. Por exemplo, com a operação
> z

poderíamos colocar
> digitos

após o qual os digitos vão ser o
vetor de caracteres c(“0”, “1”, “2”,
…, “9”). Uma coerção adicional, ou mudança de tipo,
reconstrói novamente o vetor numérico:
> d

Agora d e z são iguais. Existe uma
grande coleção de funções para coerção de um tipo para outro. É altamente recomendado se familiarizar com estas funções.

Alterar o tamanho de um
objeto

Um objeto “vazio” ainda pode
ter um tipo. Por exemplo
> e

faz de e uma estrutura vetorial
vazia de tipo numérico. Do mesmo modo, usar a função character () cria um
vetor de caracteres vazio, e assim por diante. Uma vez que um objeto
de qualquer tamanho é criado, novos elementos podem ser
adicionados a ele simplesmente dando-lhe um valor de índice fora do
seu alcance anterior. Assim, a operação
> e [3]

faz de e um vetor de
tamanho 3, (os dois primeiros elementos têm valor NA). Isso se aplica a qualquer estrutura, desde que o tipo do(s)
elemento(s) adicional(is) concordem com o tipo do objeto em primeiro
lugar.
Este ajuste automático dos
tamanhos de um objeto é usado frequentemente, por exemplo, na
função scan() para entrada.
Por outro lado, para truncar o tamanho
de um objeto, é necessário apenas uma tarefa para fazê-lo.
Portanto, se alfa for um objeto de tamanho 10, então
> alpha

torna um objeto de tamanho 5
consistindo apenas nos elementos anteriores com índice igual. (Os
índices antigos não são retidos, é claro.) Podemos então reter
apenas os três primeiros valores por
> length(alfa)

e os vetores podem ser estendidos da mesma maneira.

Obtendo e definindo atributos

A função attr(objeto, nome) pode ser
usada para selecionar um atributo específico. Essas funções
raramente são usadas, exceto em circunstâncias bastante especiais
quando algum novo atributo está sendo criado para algum propósito
específico, por exemplo, associar uma data de criação ou um
operador com um objeto R. O conceito, no entanto, é muito
importante.
Alguns cuidados devem ser tomados ao
atribuir ou excluir atributos, uma vez que eles são parte integrante
do sistema de objeto usado em R.
Quando é usado no lado esquerdo de uma
tarefa, ele pode ser usado para associar um novo atributo ao objeto
ou para mudar um existente. Por exemplo
> attr(z, “dim”)

permite que R trate z como se fosse uma
matriz de 10 por 10.

A classe de um objeto

Todos os objetos em R têm uma classe,
relatada pela classe de função. Para vetores simples, é apenas seu tipo, por exemplo “numérico”, “lógico”,
“caractere”
ou “lista”, e “matriz”, “fator” e “data.frame”
são outros valores possíveis.
Um atributo especial conhecido como a
classe do objeto é usado para permitir um estilo orientado ao objeto
de programação em R. Por exemplo, se um objeto tiver classe
“data.frame”, ele será impresso de uma certa maneira, o
gráfico irá exibi-lo graficamente de uma certa maneira, e as
outras chamadas funções genéricas como o summary() reagirão a ele
como um argumento de uma maneira sensível à sua classe.
Para remover temporariamente os efeitos
da classe, use a função unclass(). Por exemplo, se x tiver
a classe “data.frame”, então
> x
irá imprimi-lo em forma de tabela, que é como uma matriz, enquanto que
> unclass (x)
irá imprimi-lo como uma lista comum.
Somente em situações especiais você precisa usar esta facilidade,
mas é quando você está aprendendo a aceitar a idéia de funções
de classe e genéricos.
As funções genéricas e as classes
serão discutidas mais adiante na orientação do Objeto, mas apenas
brevemente.

Conclusão

Estes conceitos relativos aos tipos de objetos utilizados em R são uma das coisas mais interessantes da linguagem, pois ao escolher o tipo de objeto que vai trabalhar na sua aplicação (data frames, por exemplo, são extremamente úteis!) você determina uma séria de facilidades que vai ter ao manipular os dados através desses objetos.
Estas facilidades vão desde poder utilizar operadores como + e * para simplificar manipulações nos dados, até o uso de funções como as utilíssimas str() e summary() que descrevem a estrutura e fornecem um “resumo” dos dados do objeto, e são sensíveis ao tipo, ou seja, vão apresentar, automaticamente, as informações no formato mais adequado e legível.
É ou não é uma linguagem incrível esse tal de R?

Ficou com alguma dúvida?
Tem interesse em treinamentos em R?

Programação em R – Parte 2 (manipulações simples; números e vetores)

Programação em R - Aprenda Analtics, Big Data & Ciência de Dados

Confira todos os textos da série Programação em R:


Vetores e
atribuição

R opera em
estruturas de dados nomeadas. A estrutura mais simples é o vetor
numérico, que é uma entidade única constituída por uma coleção
ordenada de números. Para configurar um vetor chamado x, digamos,
consistindo de cinco números, nomeadamente 10.4, 5.6, 3.1, 6.4 e
21.7, use o comando R
> x

Esta é uma
declaração de atribuição usando a função c () que neste
contexto pode ter um número arbitrário de argumentos vetoriais e
cujo valor é um vetor obtido concatenando seus argumentos de ponta a
ponta.
Um número que
ocorre por si mesmo em uma expressão é tomado como um vetor de
comprimento um.
Observe que o
operador de atribuição (‘

A atribuição
também pode ser feita usando a função attrib (). Uma
maneira equivalente de fazer a mesma tarefa como a acima é com:
> attrib (“x”, c (10.4, 5.6, 3.1, 6.4, 21.7))
O operador usual,

As atribuições
também podem ser feitas na outra direção, usando a mudança óbvia
no operador de atribuição. Então, a mesma tarefa poderia ser feita
usando
> c (10,4,
5,6, 3,1, 6,4, 21,7) -> x
Se uma expressão
for usada como um comando completo, o valor será impresso e perdido.
Então, agora, se usássemos o comando
> 1 / x
os respectivos cinco valores seriam impressos no terminal (e o valor de x, é claro,
estaria inalterado).
A atribuição
adicional
> y

criaria um vetor y
com 11 entradas consistindo de duas cópias de x com um zero no meio.

Aritmética
do vetor

Os vetores podem ser
usados ​​em expressões aritméticas, caso em que as operações
são executadas elemento por elemento. Os vetores que ocorrem na
mesma expressão não precisam ser todos do mesmo comprimento. Se não
forem, o valor da expressão é um vetor com o mesmo comprimento que
o vetor mais longo que ocorre na expressão. Os vetores mais curtos
na expressão são reciclados com a frequência necessária (talvez
fracionalmente) até que correspondam ao comprimento do vetor mais
longo. Em particular, uma constante é simplesmente repetida. Então,
com as atribuições acima, o comando
> v

gera um novo vetor v
de comprimento 11 construído pela adição, elemento por elemento,
2*x repetidos 2,2 vezes, e repetidos apenas uma vez e 1 repetido 11
vezes.
Os operadores
aritméticos elementares são os mais comuns +, -, *, / e ^ para
aumentar a potência. Além disso, todas as funções aritméticas
comuns estão disponíveis. log, exp, sin, cos, tan, sqrt, e assim
por diante, todas têm seu significado usual. max e min selecionam os
maiores e menores elementos de um vetor, respectivamente. O intervalo
é uma função cujo valor é um vetor de comprimento dois, ou seja,
c (min (x), max (x)). O length (x) é o número de elementos em
x, sum (x) dá o total dos elementos em x e prod (x) o produto.
Duas funções
estatísticas são mean (x) que calcula a média da amostra, que é
o mesmo que  sum (x) / length (x) e var (x) que dá
sum((x-mean
(x))^2)/(length(x) -1)
ou a variância da
amostra. Se o argumento para var () for uma matriz n-por-p, o valor é
uma matriz de covariância de amostra p-por-p obtida em relação às
linhas como vetores de amostra independentes p-variável.
order (x)
retorna um vetor do mesmo tamanho que x com os elementos dispostos em
ordem crescente; no entanto, existem outras facilidades de
classificação mais flexíveis disponíveis (veja order() ou
sort.list () que produzem uma permutação para fazer a
classificação).
Observe que max e
min selecionam os maiores e menores valores em seus argumentos, mesmo
que sejam dados vários vetores. As funções máxima e mínima
paralelas pmax e pmin retornam um vetor (de comprimento igual ao seu
argumento mais longo) que contém em cada elemento o maior (menor)
elemento dessa posição em qualquer um dos vetores de entrada.
Para a maioria dos
propósitos, o usuário não se preocupará se os “números”
em um vetor numérico forem inteiros, reais ou até mesmo complexos.
Os cálculos internos são feitos como números reais de dupla
precisão ou números complexos de dupla precisão se os dados de
entrada forem complexos.
Para trabalhar com
números complexos, forneça uma parte complexa explícita. portanto
sqrt (-17)
dará a NaN e um
aviso, mas
sqrt (-17 +
0i)
irá fazer os
cálculos com números complexos.

Gerando
sequências regulares

R possui várias
facilidades para gerar seqüências de números comumente usadas. Por
exemplo, 1:30 é o vetor c (1, 2, …, 29, 30). O operador de dois pontos tem alta prioridade dentro de uma expressão, então, por exemplo, 2
* 1: 15 é o vetor c (2, 4, …, 28, 30). Coloque n

A construção 30: 1
pode ser usada para gerar uma seqüência que vai para trás.
A função seq () é
uma facilidade mais geral para gerar seqüências. Tem cinco
argumentos, apenas alguns dos quais podem ser especificados em
qualquer chamada. Os dois primeiros argumentos, se dados, especificam
o início e o fim da seqüência, e se estes são os dois únicos
argumentos dados, o resultado é o mesmo que o operador do ponto.
Isso é seq (2,10) é o mesmo vetor que 2:10.
Argumentos para seq
(), e para muitas outras funções R, também podem ser dadas sob a
forma nomeada, caso em que a ordem em que aparecem é irrelevante. Os
dois primeiros argumentos podem ser nomeados de = valor e para =
valor; assim seq (1,30), seq (de = 1, para = 30) e seq (para = 30, de
= 1) são todos iguais às 1:30. Os próximos dois argumentos para
seq () podem ser nomeados por = valor e comprimento = valor, que
especificam um tamanho de incremento e um tamanho para a seqüência,
respectivamente. Se nenhum destes for dado, o padrão por = 1 é
assumido.
Por exemplo
> seq (-5,
5, by = .2) -> s3
gera em s3 o vetor c
(-5,0, -4,8, -4,6, …, 4,6, 4,8, 5,0).
Similarmente
> s4

gera o mesmo vetor
em s4.
O quinto argumento
pode ser chamado de along = vetor, que normalmente é usado como o
único argumento para criar a seqüência 1, 2, …, o comprimento
(vetor) ou a seqüência vazia se o vetor estiver vazio (como pode
acontecer).
Uma função
relacionada é rep () que pode ser usada para replicar um objeto de
várias maneiras complicadas. A forma mais simples é
> s5

que colocará cinco
cópias de x de ponta a ponta na s5. Outra versão útil é
> s6

que repete cada
elemento de x cinco vezes antes de passar para o próximo.

Vetores
lógicos

Além dos vetores
numéricos, R permite a manipulação de quantidades lógicas. Os
elementos de um vetor lógico podem ter os valores TRUE, FALSE e NA
(para “não disponível”, veja abaixo). Os dois primeiros
são frequentemente abreviados como T e F, respectivamente. Note no
entanto que T e F são apenas variáveis ​​que são definidas
para TRUE e FALSE por padrão, mas não são palavras reservadas e,
portanto, podem ser substituídas pelo usuário. Portanto, você
sempre deve usar TRUE e FALSE.
Os vetores lógicos
são gerados por condições. Por exemplo
> temp 13
define temp como um
vetor do mesmo comprimento que x com valores FALSOS correspondentes a
elementos de x onde a condição não é atendida e onde o VERDADEIRO
está.
Os operadores
lógicos são <, <=,>,> =, == para igualdade exata e ! =
Para desigualdade. Além disso, se c1 e c2 são expressões lógicas,
então c1 e c2 são suas interseções (“e”), c1 | c2 é a
união deles (“ou”), e ! c1 é a negação de c1.
Os vetores lógicos
podem ser usados ​​na aritmética comum, caso em que são
coagidos em vetores numéricos, FALSOS tornando-se 0 e VERDADEIROS
tornando-se 1. No entanto, existem situações em que vetores lógicos
e suas contrapartes numéricas coercivas não são equivalentes, por
exemplo, veja a próxima subseção.

Valores
perdidos

Em alguns casos, os
componentes de um vetor podem não ser completamente conhecidos.
Quando um elemento ou valor está “não disponível” ou há
um “valor perdido” no sentido estatístico, um lugar dentro
de um vetor pode ser reservado para ele, atribuindo-lhe o valor
especial NA. Em geral, qualquer operação em NA torna-se NA. A
motivação para esta regra é simplesmente o fato de que se a
especificação de uma operação estiver incompleta, o resultado não
pode ser conhecido e, portanto, não está disponível.
A função is.na (x)
dá um vetor lógico do mesmo tamanho que x com o valor VERDADEIRO se
e somente se o elemento correspondente em x for NA.
> z

Observe que a
expressão lógica x == NA é bastante diferente de is.na (x), pois
NA não é realmente um valor, mas um marcador para uma quantidade
que não está disponível. Assim, x == NA é um vetor do mesmo
comprimento que x, todos cujos valores são NA, pois a própria
expressão lógica está incompleta e, portanto, indecidível.
Nota-se que há um
segundo tipo de valores “perdidos” que são produzidos por
computação numérica, os chamados valores Não um Número,
NaN. Exemplos são
> 0/0
ou
> Inf –
Inf
que ambos resultam
em NaN uma vez que o resultado não pode ser definido com
sensibilidade.
Em resumo, is.na
(xx) é VERDADEIRO tanto para valores NA quanto para NaN. Para
diferenciar estes, is.nan (xx) é apenas VERDDEIRO para NaNs.
Os valores que
faltam são às vezes impressos como quando os vetores de
caracteres são impressos sem aspas.

Vetores de
caracteres

As quantidades de
caracteres e os vetores de caracteres são usados ​​com
freqüência em R, por exemplo, como rótulos de plotagem. Quando
necessário, eles são denotados por uma seqüência de caracteres
delimitada pelo caractere de cotação dupla, por exemplo,
“valores-x”, “Novos resultados de iteração”.
As cadeias de
caracteres são inseridas usando as citações duplas (“) ou um
simples (‘), mas são impressas usando aspas duplas (ou às vezes sem
aspas). Elas usam as seqüências de escape do estilo C, usando
como o caractere de escape, então é inserido e impresso como
e dentro de aspas duplas “é inserido como “. Outras
seqüências de escape úteis são n, newline, t, tab e b,
backspace. Cotações para uma lista completa.
Os vetores de
caracteres podem ser concatenados em um vetor pela função c ();
Exemplos de seu uso emergirão com freqüência.
A função paste()
assume uma quantidade arbitrária de argumentos e concatena-os um a
um em strings de caracteres. Qualquer número dado entre os argumentos
é coagido em strings de caracteres da maneira evidente, ou seja, da
mesma forma que seria se fossem impressas. Os argumentos são, por
padrão, separados no resultado por um único caractere em branco,
mas isso pode ser alterado pelo argumento nomeado, sep = string, que
o muda para uma string, possivelmente vazia.
Por exemplo
> labs

cria labs nos
vetores dos caracteres
c (“X1”,
“Y2”, “X3”, “Y4”, “X5”, “Y6”,
“X7”, “Y8”, “X9”, “Y10”).
Nota-se
particularmente que a reciclagem de listas curtas também ocorre
aqui; assim c(“X”,”Y”) é repetido 5 vezes para
coincidir com a sequência 1:10. 9

Vetores de
índice; selecionando e modificando subconjuntos de um conjunto de
dados

Os subconjuntos dos
elementos de um vetor podem ser selecionados anexando ao nome do
vetor um vetor de índice entre colchetes. Geralmente, qualquer
expressão que se avalia em um vetor pode ter subconjuntos de seus
elementos selecionados de forma semelhante ao adicionar um vetor de
índice entre colchetes imediatamente após a expressão.
Esses vetores de
índice podem ser um desses quatro tipos distintos.
  1. Um vetor
    lógico
    . Nesse caso, o vetor do índice é reciclado no mesmo
    comprimento que o vetor a partir do qual os elementos devem ser
    selecionados. Os valores correspondentes a VERDADEIROS no vetor de
    índice são selecionados e aqueles que correspondem a FALSOS são
    omitidos. Por exemplo
> y

cria (ou recria) um
objeto y que conterá os valores não faltantes de x na mesma ordem.
Observe que se x tiver valores faltantes, y será menor do que x.
Além disso
> (x
+ 1) [(! is.na (x)) & x> 0] -> z
cria um objeto z
e coloca nele os valores do vetor x + 1 para o qual o valor
correspondente em x não era faltante e positivo.
2. Um vetor de
quantidades integrais positivas.
Nesse caso, os valores no vetor
do índice devem estar no conjunto {1, 2, …,
comprimento (x)}. Os elementos correspondentes do vetor são
selecionados e concatenados, nessa ordem, no resultado. O vetor de
índice pode ser de qualquer comprimento e o resultado é do mesmo
comprimento que o vetor do índice. Por exemplo x [6] é o sexto
componente de x e
> x [1:10]
seleciona os
primeiros 10 elementos de x (supondo que o comprimento (x) não seja
inferior a 10). Além disso
> c (“x”,
“y”) [rep (c (1,2,2,1), vezes = 4)]
(uma coisa
certamente improvável de se fazer) produz um vetor de caracteres de
comprimento 16 que consiste em “x”, “y”, “y”,
“x” repetido quatro vezes.
3. Um vetor de
quantidades integrais negativas
. Esse vetor de índice especifica
os valores a serem excluídos e não incluídos. portanto
> y

dá todos, exceto os
cinco primeiros elementos do x.
4. Um vetor de
cordas de caracteres.
Esta possibilidade aplica-se apenas quando
um objeto tem um atributo de nomes para identificar seus componentes.
Neste caso, um sub-vetor do vetor de nomes pode ser usado da mesma
maneira que os rótulos integrados positivos no item 2 acima.
> fruta

> nomes
(frutas)

> almoço

A vantagem é que os
nomes alfanuméricos são geralmente mais fáceis de lembrar do que
os índices numéricos. Esta opção é particularmente útil em
relação aos quadros de dados, como veremos mais adiante.
Uma expressão
indexada também pode aparecer na extremidade receptora de uma
tarefa, caso em que a operação de atribuição é executada apenas
nos elementos do vetor. A expressão deve ser do vetor de
form
 [index_vector] como tendo uma expressão arbitrária
no lugar do nome do vetor, não faz muito sentido aqui.
Por exemplo
> x [is.na
(x)]

substitui quaisquer
valores faltantes em x por zeros e
> y [y

tem o mesmo efeito
que
> y

Outros tipos
de objetos

Os vetores são o
tipo de objeto mais importante em R, mas há vários outros que
encontraremos mais formalmente em breve.
  • matrizes ou também chamadas de arrays são generalizações multidimensionais de vetores. Na verdade, elas são vetores que podem ser indexados por dois ou mais índices e serão impressos de maneiras especiais.

  • Os fatores fornecem maneiras compactas de lidar com dados categóricos.

  • as listas são uma forma geral de vetor em que os vários elementos não precisam ser do mesmo tipo, e são muitas vezes eles próprios vetores ou listas. As listas fornecem uma maneira conveniente de retornar os resultados de uma computação estatística.

  • Os data frames são estruturas tipo matriz, nas quais as colunas podem ser de diferentes tipos. Pense neles como “matrizes de dados” com uma linha por unidade de observação, mas com (possivelmente) variáveis ​​numéricas e categóricas. Muitas experiências são descritas melhor por data frames: os tratamentos são categóricos, mas a resposta é numérica.

  • As funções são objetos próprios em R que podem ser armazenadas no espaço de trabalho do projeto. Isso fornece uma maneira simples e conveniente de estender o R.

Conclusão


Esse tal de R é poderoso não é mesmo?
Fique atento que tem muito mais por vir!

Ficou com alguma dúvida?
Tem interesse em treinamentos em R?

@page { margin: 2cm }
h2 { margin-top: 0.64cm; direction: ltr; line-height: 100%; text-align: left; page-break-inside: avoid; orphans: 2; widows: 2 }
h2.western { font-family: “Arial”, serif; font-size: 16pt; font-weight: normal }
h2.cjk { font-family: “Arial”; font-size: 16pt; font-weight: normal }
h2.ctl { font-family: “Arial”; font-size: 16pt; font-weight: normal }
p { margin-bottom: 0.25cm; border: none; padding: 0cm; line-height: 120%; text-align: left; page-break-inside: auto; orphans: 2; widows: 2; page-break-after: auto }
a:link { so-language: zxx }

5 Tecnologias Que Todo Cientista de Dados Tem Que Conhecer

Conhecimentos necessários para uma carreira de sucesso em Big Data
Você já sabe que o cientista (maluco) de dados é um misto de estatístico, matemático, analista de TI e de negócios. Se não sabia, aprenda aqui.
O que a maioria das pessoas não sabe é que se, por um lado, é preciso estudar muito, por outro, quanto mais você estuda mais percebe que não é tão complicado (nem glamoroso 🙂 quanto parecia à primeira vista.
Embora a fama de “Profissão Mais Sexy do Século XXI” já tenha pegado, a verdade é que muito do trabalho do cientista de dados envolve “arrumar a bagunça” de conjuntos de dados que não estão adequados para uma análise que possa levar a resultados úteis. Essa é a parte mais difícil (e chata!): identificar e tratar os inúmeros problemas que os dados invariavelmente apresentam antes que seja possível fazer algo útil com eles.
Superada essa fase, o resto é bem mais tranquilo, embora não possa dizer que a coisa fica fácil.
E essa facilidade é resultado justamente da quantidade enorme de ferramentas que temos à disposição para ajudar a resolver todo tipo de problema das mais variadas maneiras.
Por isso resolvi selecionar 6 dessas ferramentas pra apresentar pra você hoje.
Vamos lá?

Linguagem R

Eu não tinha a menor ideia do que era possível fazer com a linguagem R até começar a aprofundar meus estudos em Big Data e Ciência de Dados a partir de 2013.
E desde então virei fanboy da linguagem.
Sempre leio que a linguagem R tem uma curva de aprendizado longa, mas na verdade não consigo aceitar isso como verdade, pois a realidade é que a maior parte das linguagens guarda muitas semelhanças entre si e, vamos falar a verdade, a parte mais difícil é dominar os pacotes e bibliotecas que fazem a mágica acontecer.
De visualizar a correlação entre duas variáveis num gráfico de dispersão a “fatiar” um conjunto de dados com milhões de registros com uma única linha de código, há pacotes prontos pra tudo em R, assim como há bibliotecas prontas pra tudo em Java, Python e outras linguagens. Há pacotes/bibliotecas mais maduros, outros nem tanto, mas dá pra fazer um MVP (Minimum Viable Product) em tempo razoável.
Ultimamente tenho pesquisado bastante sobre criptomoedas pois, além de investir, estou desenvolvendo uma ferramenta para facilitar a análise delas para investidores (para mais informações deixe seu comentário), e bastaram algumas horas pra encontrar várias APIs com exemplos de código em R que me permitiram criar uma primeira versão, tosca, da ferramenta, que agora estou “azeitando” pra colocar no ar em breve.
Por isso, mesmo que você não seja um desenvolvedor experiente, recomendo que estude a linguagem R, pois é uma excelente ferramenta para análise de dados, que conta com uma infinidade de facilitadores para resolver todo tipo de problema que possa imaginar.

Hadoop

O Hadoop é muito provavelmente a ferramenta mais conhecida quando se trata de Big Data. A solução inclui um sistema de arquivos distribuído, o HDFS, e um modelo de execução de processamento distribuído, Map Reduce, que simplifica o desenvolvimento de aplicações para análise de grandes volumes de dados em clusters distribuídos com até milhares de nós.
Ainda que possa haver discussão sobre a relevância do Hadoop no momento atual, em razão do desenvolvimento de outras soluções com desempenho muito superior para alguns casos de uso, é inegável que o conhecimento deste modelo de processamento distribuído ainda é muito relevante.
Isto porque a lógica do Hadoop, que leva a execução da aplicação para o local onde se encontra o dado, de maneira simples para o desenvolvedor, e eficiente para o resultado final desejado, foi copiado exaustivamente pelas inúmeras soluções que vieram depois, cujos méritos estão em identificar possibilidades de inovação e otimização, como a utilização de dados em memória pelo Spark.

Hive

Assim como o Hadoop, o Hive é “macaco velho” quando se trata de Big Data.
A solução de Dataware House para grandes conjuntos de dados permite, através da linguagem HQL, aproveitar seus conhecimentos do tradicional SQL para escrever scripts que serão convertidos em jobs Map Reduce e executados de maneira distribuída.
Utilizando uma distribuição na nuvem da Amazon ou baixando uma máquina virtual da Cloudera ou Hortonworks, é possível apreciar todo o poder e simplicidade do Hive para manusear conjuntos de dados de tamanho considerável, com uma curva de aprendizado simplificada.

APIs

Há vários anos li um artigo que dizia que “o software vai engolir o mundo”, e a tecnologia responsável por isso atende pelo nome de Application Program Interface.
Hoje praticamente não se cria nada, apenas se combinam APIs de diversos fornecedores para construir algo diferente. Posso estar exagerando, mas o exemplo que citei acima da ferramenta para análise de criptomoedas me ensinou isso.
Em poucas horas pude encontrar APIs de cotação, histórico de ordens de compra e venda de criptomoedas, estatísticas de mercado e muito mais, de forma que meu trabalho (não que seja simples ou fácil) se resume a combinar todas essas APIs e gerar algum resultado útil a partir daí.
Por isso, recomendo que, antes de se aventurar criando qualquer coisa, verifique se não existe uma API que já faz o que você pretendia fazer ou, pelo menos, faz algo que te ajuda na obtenção do resultado que deseja. Aposto que você vai se surpreender com a quantidade e qualidade de APIs disponíveis.
Em especial, recomendo que pesquise sobre as APIs gratuitas disponíveis para Big Data. A IBM, por exemplo, disponibiliza uma quota de uso das APIs do Watson gratuitamente. Tem muita coisa interessante!

Cloud

Por último, mas não menos importante, não há como falar de tecnologias para Big Data sem falar de nuvem, afinal é a infraestrutura de nuvem que possibilita a criação de clusters gigantescos para lidar com os volumes absurdos de dados de serviços como Facebook, Linkedin, Twitter e muitos outros.
Sendo assim, é importante que conheça as plataformas, os modelos de serviço (SaaS, PaaS, IaaS) que cada provedor oferece, e, em especial, os serviços específicos para Big Data e Ciência de Dados que estão disponíveis.
A quantidade de fornecedores de soluções em nuvem só aumenta, principalmente no segmento para análise de grandes volumes de dados, de forma que conhecer os fornecedores e seus serviços pode até mesmo representar a diferença entre fracasso e sucesso de um projeto de Big Data.

Conclusão

Esta lista de tecnologias que o Cientista de Dados deve conhecer não tem o objetivo de ser exaustiva, mas sim de orientar, definindo uma direção a seguir no estudo das tecnologias que possibilitam as maravilhas da análise de dados em grande escala e volume.
O conhecimento destas tecnologias de maneira mais aprofundada é o diferencial que vai permitir a você se posicionar como um Cientista de Dados capaz de entregar os resultados que a empresa (e o mundo!) necessita.
Tem uma crítica, dúvida, sugestão? Deixe seu eomentário agora mesmo e vamos conversar!

Tudo que você queria saber sobre Agrupamento (Clustering) e não tinha a quem perguntar!

Por André Camacam
Tudo que você queria saber sobre Agrupamento (Clustering) e não tinha a quem perguntar! 1
Diferentes clusters em diferentes pontos coloridos (De Matthew Mayo’s Palavras Chave de Aprendizagem de Máquina, Explicado)
Iniciando com Ciência de Dados (Data Science) ou precisando dar aquela refrescada na memória?
O agrupamento encontra-se entre as ferramentas mais utilizadas pelos Cientistas de Dados.
A seguir você vai ver 10 termos relacionados ao “tal de clustering” e suas definições.
Agrupamento é um método de análise de dados, que agrupa pontos de dados em conjunto para “maximizar similaridades dentro da classe e minimizar similaridades entre as classes” (Han, Kamber & Pei), sem utilizar rótulos de pontos pré-definidos (ou seja, uma técnica de aprendizagem não supervisionada).
Esse texto introduz palavras-chave para técnicas comuns na análise de clustering.

Seleção de Atributos

É uma etapa de pré-processamento de dados, no qual atributos redundantes e/ou irrelevantes são retirados para melhorar a qualidade do agrupamento.

Seleção de atributos podem também ser integrados diretamente ao algoritmo de agrupamento para ganho de compreensão. 

Maximização de Expectativa (EM)

É um algoritmo utilizado para estimar parâmetros de uma forma específica oriunda do modelo de dados generativo (p. ex.: Mistura de Gaussianas).

Método Baseado em Distância

K-means é um método de agrupamento utilizando distância. Possivelmente, é o exemplo mais conhecido do algoritmo de agrupamento.

É o método mais amplamente utilizado em implementações práticas, por causa da sua simplicidade. A distância Euclidiana é utilizada para computar distâncias.

Assim, os grupos particionados correspondem à média de cada agrupamento.

K-medians

É bem semelhante ao método k-means, mas utiliza a mediana junto com a dimensão, ao invés da média.

Essa abordagem é mais estável em casos de ruído e outliers, porque a mediana é geralmente menos sensível a valores extremos dos dados.

Método baseado em Densidade e Grade

Esses métodos tentam explorar o espaço dos dados em níveis elevados de granularidade.

Desse modo, eles podem ser utilizados para reconstruir toda a forma da distribuição de dados. 

Método baseado em Densidade

Em qualquer ponto particular no espaço dos dados é definido tanto em termos do número de pontos de dados em um volume pré-especificado de sua localidade quanto em termos de estimativa de densidade kernel mais suave.

Este método é naturalmente definido em um espaço contínuo, logo, são tipos de dados arbitrários, por exemplo, séries temporais, que não são tão fáceis de utilizar com métodos baseados em densidade sem transformações especializadas.

Método baseado em Grade

São uma classe específica de métodos baseados em densidade, na qual as regiões individuais da área de dados, que são exploradas, são moldadas em uma estrutura na forma de grade.

DBSCAN pode encontrar clusters não-linearmente separáveis e supera k-means ou o modelo EM de agrupamento de mistura de Gaussianas.

Tudo que você queria saber sobre Agrupamento (Clustering) e não tinha a quem perguntar! 2
DBSCAN pode encontrar clusters não-linearmente separáveis e supera k-means
ou o modelo EM de agrupamento de mistura de Gaussianas

Fatoração de Matrizes

Fatoração de Matrizes é para dados que são representados como matrizes não-negativas esparsas, também é referido como co-agrupamento, que agrupa as linhas e as colunas de uma matriz simultaneamente.


Métodos Espectrais

Métodos espectrais utilizam a matriz de similaridade (ou distância) nos dados subjacentes ao invés de trabalhar com dados de pontos originais e dimensões.
Eles podem realizar uma dupla tarefa ao incorporar esses objetos em um espaço Euclidiano enquanto realizam a redução de dimensionalidade.
Deste modo, este tipo é comum para agrupamento em objetos arbitrários, tais como conjuntos de nós em um grafo.


Técnicas baseadas em grafos

Métodos espectrais podem ser considerados como uma técnica baseada em grafos para agrupamento de qualquer tipo de dado, ao converter a matriz de similaridade em uma nova estrutura de redes. 
Diversas variantes existem em termos de escolhas diferente para construir a matriz de similaridade W. 
Algumas variantes mais simples utilizam o grafo K-Vizinhos Mais Próximos, ou simplesmente o grafo binário, no qual as distâncias são menores que em um dado limite.


Cenários Streaming

Cenário streaming é a acumulação contínua de dados ao longo do tempo.
Isso leva a inúmeros desafios nos casos de análise em tempo real e em questões de escalabilidade. 
Agrupamento é um dos principais métodos utilizados em mineração de dados, por exemplo, em aplicativos para segmentação de clientes, público-alvo e resumo de dados.
Na literatura, foram propostos inúmeros grupos de métodos.
Métodos probabilísticos, métodos baseados na distância, métodos baseados na densidade, métodos baseados em grade, técnicas de fatorização e métodos espectrais são agrupamentos típicos.
A integração de métodos de redução de seleção de atributo / dimensionalidade com agrupamento é geralmente encontrada em métodos de agrupamento.

Conclusão

Com a proliferação de dados compartilhados através da web nos últimos anos, o desenvolvimento de métodos e técnicas que permitam analisar e, em especial, classificar estes conteúdos segundo algum critério, se tornaram de extrema importância.
Através das técnicas de agrupamento e classificação de grandes volumes de dados é possível, dentre outras coisas, analisar fenômenos sociais (classificação de hashtags no Twitter representando movimentos sociais) e naturais (identificação de terremotos e epidemias pela análise de redes sociais).
Portanto, o conhecimento destas técnicas é essencial para qualquer profissional que se interesse por análise de dados.
Texto traduzido e adaptado de Thuy T. Pham – Universidade de Sydney, Austrália.
Referências:
M. Ester, H.-P. Kriegel, J. Sander, and X. Xu. A density-based algorithm for discovering clusters in large spatial databases with noise. Conferência ACM KDD, páginas 226–231, 1996.
W. Wang, J. Yang, and R. Muntz. Sting: A statistical information grid approach to spatial data mining. Conferência VLDB, 1997.
B. W. Silverman. Density Estimation for Statistics and Data Analysis. Chapman and Hall, 1986

Para saber mais

  1. Confira minha palestra virtual apresentando os conceitos básicos da tecnologia, e vamos trocar idéias!
  2. Se inscreva na lista que criei para discutir o tema no Google Groups.