
Neste tutorial, você vai explorar diversos métodos de visualização de dados e as estatísticas por trás deles. O foco é identificar tendências e relações entre variáveis em um data frame.
Isso mesmo: vamos nos concentrar em conceitos como correlação e regressão! Primeiro, você vai conhecer a correlação em R. Depois, vai ver como plotar matrizes de correlação em R usando pacotes como ggplot2 e GGally. Por fim, vai entender quais tipos de correlação existem e por que elas são importantes na sua análise.
Se quiser se aprofundar no tema, considere fazer o curso da DataCamp Correlation and Regression.
Contexto
No tutorial de hoje, você vai trabalhar com um conjunto de dados de filmes obtido no Kaggle para entender melhor as relações entre variáveis.
Fiz uma limpeza leve nos dados para garantir uma comparação justa — por exemplo, padronizando a unidade monetária. Sem esse passo, nossa análise estatística de variáveis como gross, budget e profit poderia ser enganosa. Você pode acessar o conjunto de dados original.
Importando os dados
Para acessar o conjunto movies e começar a usar, você pode importar o CSV para um data frame com a função read.csv() e armazená-lo na variável — muito criativa — movies!
movies <- read.csv(url("http://s3.amazonaws.com/dcwoods2717/movies.csv"))
Pronto! É só isso para começar.
Inspeção básica dos dados
Depois de importar o data frame, vale a pena dar uma olhada no que você tem em mãos. Primeiro, confira a estrutura dos dados que serão analisados. Abaixo estão os resultados do uso da função super simples e útil str():
str(movies)
## 'data.frame': 2961 obs. of 11 variables:
## $ title : Factor w/ 2907 levels "10 Cloverfield Lane",..: 1560 2143 34 2687 1405 1896 2633 894 1604 665 ...
## $ genre : Factor w/ 17 levels "Action","Adventure",..: 6 12 5 5 5 3 2 8 3 8 ...
## $ director : Factor w/ 1366 levels "Aaron Schneider",..: 474 472 781 828 175 1355 1328 1328 968 747 ...
## $ year : int 1920 1929 1933 1935 1936 1937 1939 1939 1940 1946 ...
## $ duration : int 110 100 89 81 87 83 102 226 88 144 ...
## $ gross : int 3000000 2808000 2300000 3000000 163245 184925485 22202612 198655278 84300000 20400000 ...
## $ budget : int 100000 379000 439000 609000 1500000 2000000 2800000 3977000 2600000 8000000 ...
## $ cast_facebook_likes: int 4 109 995 824 352 229 2509 1862 1178 2037 ...
## $ votes : int 5 4546 7921 13269 143086 133348 291875 215340 90360 6304 ...
## $ reviews : int 2 107 162 164 331 349 746 863 252 119 ...
## $ rating : num 4.8 6.3 7.7 7.8 8.6 7.7 8.1 8.2 7.5 6.9 ...
Neste data frame, dá para ver no console que há 2961 observações de 11 variáveis.
Observação: mesmo que cada filme tivesse só uma hora, você teria que assistir sem parar por mais de quatro meses para ver tudo!
O console também lista cada variável pelo nome, a classe e alguns exemplos de valores. Isso já dá uma boa noção do conteúdo do data frame — algo crucial para qualquer análise.
Outra função ótima para um overview rápido é summary(). Note as semelhanças e diferenças em relação ao output de str().
summary(movies)
## title genre
## Home : 3 Comedy :848
## A Nightmare on Elm Street : 2 Action :738
## Across the Universe : 2 Drama :498
## Alice in Wonderland : 2 Adventure:288
## Aloha : 2 Crime :202
## Around the World in 80 Days: 2 Biography:135
## (Other) :2948 (Other) :252
## director year duration
## Steven Spielberg : 23 Min. :1920 Min. : 37.0
## Clint Eastwood : 19 1st Qu.:1999 1st Qu.: 95.0
## Martin Scorsese : 16 Median :2004 Median :106.0
## Tim Burton : 16 Mean :2003 Mean :109.6
## Spike Lee : 15 3rd Qu.:2010 3rd Qu.:119.0
## Steven Soderbergh: 15 Max. :2016 Max. :330.0
## (Other) :2857
## gross budget cast_facebook_likes
## Min. : 703 Min. : 218 Min. : 0
## 1st Qu.: 12276810 1st Qu.: 11000000 1st Qu.: 2241
## Median : 34703228 Median : 26000000 Median : 4604
## Mean : 58090401 Mean : 40619384 Mean : 12394
## 3rd Qu.: 75590286 3rd Qu.: 55000000 3rd Qu.: 16926
## Max. :760505847 Max. :300000000 Max. :656730
##
## votes reviews rating
## Min. : 5 Min. : 2.0 Min. :1.600
## 1st Qu.: 19918 1st Qu.: 199.0 1st Qu.:5.800
## Median : 55749 Median : 364.0 Median :6.500
## Mean : 109308 Mean : 503.3 Mean :6.389
## 3rd Qu.: 133348 3rd Qu.: 631.0 3rd Qu.:7.100
## Max. :1689764 Max. :5312.0 Max. :9.300
##
Com um único comando, o R retorna estatísticas chave de cada variável do data frame. Agora que você já sabe com o que está lidando, vamos explorar os dados mais a fundo!
Feature engineering: calculando o lucro
Revisando as variáveis disponíveis, dá para notar que algumas numéricas podem ser combinadas para gerar novos insights.
Por exemplo, temos gross e budget; por que não calcular o lucro de cada filme?
Você pode calcular o lucro com a fórmula profit = gross - budget. Teste no bloco do DataCamp Light abaixo!
Demais!
Você vai perceber que há vários sucessos de bilheteria e também verdadeiros buracos negros de dinheiro no nosso data frame.
O profit provavelmente será útil em análises futuras, então vamos adicionar profit como uma nova coluna do data frame.
Correlação
Agora que profit entrou como nova coluna no data frame, é hora de olhar com mais atenção para as relações entre as variáveis.
Vamos ver como profit varia em relação ao rating de cada filme.
Para isso, use as funções nativas do R plot e abline. A função plot gera um gráfico de dispersão; já abline desenha uma linha de regressão (a famosa "linha de melhor ajuste") quando passamos um modelo linear, como você verá a seguir.
O resultado saiu como você esperava?

Em geral, parece que filmes com rating mais alto tendem a apresentar profit maior. Em outras palavras: existe uma correlação positiva entre rating e profit — pelo menos neste conjunto.
Dito isso, um olhar rápido no gráfico mostra vários filmes bem avaliados que não foram grandes sucessos, e alguns com lucros altíssimos que receberam notas relativamente baixas.
Correlação NÃO implica causalidade!
Uma anedota para ilustrar correlação vs. causalidade: eu tenho uma barraca de sorvete na praia. A média de pessoas atravessando fora da faixa na cidade aumenta quando minhas vendas de sorvete sobem. Meu sorvete faz as pessoas desrespeitarem as leis de trânsito ou há outro fator? Meu sorvete é ótimo, mas o sol provavelmente influencia tanto a vontade de tomar sorvete quanto a impaciência para ficar no semáforo. Existe uma relação (correlação) entre minhas vendas e o número de pedestres imprudentes, mas não dá para afirmar que é uma relação causal.
Mantenha esse raciocínio em mente ao longo do tutorial!
Calculando correlação no R
Que tipos de relação existem entre as variáveis de movies e como avaliá-las quantitativamente?
Uma forma é calcular correlações e matrizes de correlação com cor():
Observação: você pode especificar o método para indicar qual coeficiente de correlação deseja calcular. Atenção: há suposições por trás de cada método — os de Kendall e Spearman só fazem sentido para entradas ordenadas. Isso significa que você precisa ordenar os dados antes de calcular o coeficiente.
Além disso, o método padrão, Pearson, assume que as variáveis têm distribuição normal, que há uma relação linear entre elas e que os dados estão normalmente distribuídos em torno da linha de regressão.
Também é possível usar rcorr(), do pacote Hmisc, para calcular níveis de significância para correlações de Pearson e Spearman.
Você também vai notar que a matriz de correlação é, na prática, uma tabela com coeficientes entre pares de variáveis. É um ótimo primeiro passo para entender quais relações existem no seu conjunto — e vamos aprofundar isso na próxima seção.
Explorando correlação visualmente: a matriz de correlação no R
Agora, vamos plotar uma matriz de correlação usando as variáveis do seu data frame movies. Esse gráfico simples permite visualizar rapidamente quais variáveis têm correlação negativa, positiva, fraca ou forte.
Para isso, usaremos o pacote GGally e a função ggcorr().
A chamada tem a forma ggcorr(df), onde df é o data frame. O output é uma matriz triangular, colorida, com os nomes das variáveis. O coeficiente de correlação de cada par pode ser encontrado lendo pelas linhas e/ou colunas da matriz, conforme a posição.
Pode soar confuso, mas na prática é bem simples — experimente no bloco de código a seguir!

Na matriz que você acabou de criar (mandou bem!), basta ir à linha ou coluna de uma variável, como year, e observar o coeficiente pelo tom da célula que cruza com outra variável.
Analisando year, por exemplo, vemos uma correlação positiva fraca com budget e, de forma similar, uma correlação negativa fraca com rating.
Coeficientes de correlação sempre variam de -1 a 1, inclusive. Um coeficiente -1 indica ajuste perfeito e negativo (os valores de y diminuem na mesma taxa que os de x aumentam). Um coeficiente 1 indica ajuste perfeito e positivo (valores de y aumentam na mesma taxa que os de x).
Na maioria dos casos, como no exemplo de year, o coeficiente ficará entre -1 e 1.
Percebeu algo estranho nas variáveis exibidas?
Nem todas as variáveis de movies aparecem!
Isso porque nem todas são numéricas. A função ggcorr ignora automaticamente variáveis não numéricas — poupando você de fazer subset antes de criar a matriz.
Se quiser deixar a matriz ainda mais clara (ou se você tem alguma dificuldade com cores, como eu), há alguns ajustes simples para deixá-la mais informativa.
No código abaixo, incluímos o argumento label, que pode ser TRUE ou FALSE. O padrão é FALSE, mas com label = TRUE o valor numérico do coeficiente aparece em cada célula — sem precisar estimar pela escala de cores.
O argumento label_alpha permite variar a opacidade dos rótulos conforme a força da correlação — super útil para uma leitura rápida.
Não acredite só na minha palavra: teste aí!
Agora vamos plotar uma matriz de correlação melhorada:

Nos próximos gráficos, você verá que, quando há correlação "forte", a inclinação da linha de regressão (x/y) fica mais próxima de 1/1 ou -1/1; já em correlação "fraca", a linha quase não inclina. Uma inclinação próxima de 1/1 ou -1/1 indica alta relação entre as variáveis.
No caso do nosso data frame movies, essa linha de regressão pode revelar insights sobre a natureza das variáveis e possíveis interdependências.
Por exemplo, no gráfico de profit versus rating, a linha de regressão tinha inclinação positiva moderada. Olhando de novo a matriz, o coeficiente entre essas variáveis é 0,3.
Faz sentido, né?
Tipos de correlação
Agora vamos ver mais gráficos ilustrando os diferentes tipos de correlação que apareceram na seção anterior.
Correlação forte: votes versus reviews
Vamos começar plotando duas variáveis com correlação positiva forte.
Pela matriz, votes versus reviews atende ao critério, com correlação 0,8. Isso sugere uma inclinação próxima de 1/1.
Você vai usar o pacote ggplot2 neste e nos próximos exercícios. O ggplot2 é um conjunto versátil para criar visualizações impactantes.
Neste caso, vamos aproveitar a função qplot, que gera vários tipos de gráficos conforme o tipo passado para o argumento geom (geometria).
No código a seguir, geom recebe um vetor com duas geometrias: point (dispersão) e smooth (tendência). O method está como lm, então a linha de tendência será a reta de regressão — como fizemos no gráfico de profit versus years.
Resumindo: você vai ver como é fácil criar visualizações poderosas em poucos passos!

Você deve ter reparado no argumento alpha em qplot. O alpha aplica um gradiente de opacidade aos pontos do scatter, de forma parecida com a opacidade dos rótulos de coeficiente em ggcorr.
Na configuração usada, a opacidade total só é atingida quando um ponto é sobreposto por outros 5. Aumentar ou diminuir o denominador de alpha altera quantas sobreposições são necessárias para mudar a opacidade. Essa estética ajuda a identificar concentrações de pontos, revelando insights à primeira vista.
Brinque com o código e veja como se comporta!
Correlação fraca: lucro ao longo dos anos
Agora vamos ver uma correlação negativa "fraca" plotando profit versus years. Desta vez, não especificamos method, então a linha de tendência será uma curva ajustada (padrão da função). Você vai notar uma faixa cinza claro ao redor da curva; ela muda de tamanho conforme o intervalo de confiança.
Se você não está familiarizado com intervalo de confiança, sem estresse: o R faz o trabalho, e a ideia ficará mais clara depois do exercício.
Por enquanto, complete os espaços em branco com o código necessário e observe!

Depois de ver intervalo de confiança e curva de suavização em ação, que observações podemos fazer?
- Primeiro, no início do gráfico, o
profitparece aumentar a cadayear. - Segundo, a área cinza em torno da curva é inicialmente bem larga e há poucas observações.
- Terceiro, conforme a curva entra em uma região com mais observações, a área cinza diminui e praticamente abraça a curva, que passa a cair nos últimos
years.
Conclusão: plotar o intervalo de confiança junto da curva de suavização mostra a incerteza associada à nossa linha de regressão. Essa incerteza cresce com menos observações e diminui com mais observações.
Isso ajuda a visualizar como a relação entre variáveis muda ao longo do data frame e como a concentração de pontos afeta a curva.
O porém é que o gráfico pode ser um pouco ambíguo — fica difícil ver claramente se a correlação é positiva ou negativa.
Agora vamos plotar profit ao longo dos years do mesmo jeito que fizemos com votes versus reviews: substitua os "….." para colocar year no eixo x e profit no eixo y. Lembre-se de apontar o data frame em "data"!

Voltando à matriz, o coeficiente de profit e year é -0,1 — algo mais fácil de visualizar no gráfico com linha de melhor ajuste do que no gráfico com curva ajustada.
Juntando tudo
Agora vamos conhecer outra função poderosa do GGally, a ggpairs. Ela cria uma matriz que mostra o coeficiente de correlação de várias variáveis junto com o scatterplot (incluindo a linha de melhor ajuste com intervalo de confiança) e o gráfico de densidade.
Com uma única função, você reúne tudo o que viu neste tutorial de forma concisa e fácil de interpretar.
No bloco de código a seguir, escolha suas três variáveis favoritas do data frame (sem precisar fazer subset!), inclua e teste!

Como você deve imaginar, há muitos cenários em que um tipo de gráfico é mais indicado. O segredo é conhecer as técnicas disponíveis, saber usá-las e interpretar bem o resultado!
Próximos passos
Você percorreu bastante coisa neste tutorial — parabéns por chegar até aqui!
Espero que você consiga aplicar esses conceitos nas suas análises do dia a dia. Estes são os fundamentos da exploração de dados em R, e há muito mais para fazer antes de partir para modelagem. Que tal dar o próximo passo no curso Exploratory Data Analysis da DataCamp?
Enquanto isso, vale a pena visitar o Kaggle e encontrar um conjunto de dados rico e interessante para explorar — caso não queira continuar com o dataset de movies!

