Como aprender as duas linguagens com clareza e estratégia?
Esta aula foi pensada para quem está no início da jornada em dados e quer tomar decisões de aprendizado com consciência, não com pressa.
No quarto - acesse aqui.
No R - acesse aqui.
No RStudio - acesse aqui.
R e Python no contexto de dadosA capacidade de coletar, transformar e comunicar dados se tornou uma competência fundamental em praticamente todas as áreas do conhecimento.
Note
Excel é uma ferramenta legítima para exploração inicial. O problema é quando ele se torna o único instrumento de análise.
Ambas foram desenvolvidas com foco em análise de dados, estatística e computação científica.
R é uma linguagem e ambiente de computação estatística criada por Ross Ihaka e Robert Gentleman na Universidade de Auckland, em 1993.
Python é uma linguagem de programação de propósito geral criada por Guido van Rossum em 1991, com filosofia de legibilidade e simplicidade.
| Dimensão | R | Python |
|---|---|---|
| Origem | Estatística acadêmica | Programação geral |
| Ponto forte principal | Análise estatística | Machine learning e automação |
| Curva de aprendizado | Moderada para dados tabulares | Moderada com sintaxe mais direta |
| Visualização nativa | ggplot2 - expressivo e elegante | matplotlib e seaborn |
| Comunidade acadêmica | Muito forte | Crescente |
| Área | R | Python |
|---|---|---|
| Estatística inferencial | Excelente | Bom |
| Visualização de dados | Excelente | Muito bom |
| Machine learning | Bom | Excelente |
| Deep learning | Limitado | Excelente |
| Web scraping | Bom | Excelente |
| Automação de processos | Limitado | Excelente |
| Relatórios e documentos | Excelente | Bom |
| Manipulação de dados | Excelente | Excelente |
A escolha depende de três fatores principais:
Recomendação
Defina sua área antes de escolher a linguagem. A linguagem é um instrumento - o problema que você quer resolver é o ponto de partida.
Se o objetivo é análise estatística, publicação científica ou trabalho com dados observacionais:
Se o objetivo é trabalhar com engenharia de dados, machine learning aplicado ou automação:
Se o objetivo é explorar dados, gerar relatórios e apoiar decisões em diferentes contextos:
Aula 9. Integração R x Python com pacote Reticulate.
Note
Consulte os slides anteriores para detalhes sobre o pacote Reticulate. Link aqui.
Para iniciar com R, três ferramentas são necessárias:
Dica
No R, o operador de atribuição padrão é <-. O atalho no teclado é Alt + - no RStudio.
# Criando vetores
idades <- c(22, 35, 28, 41, 19)
nomes <- c("Jeny", "Meguy", "Carla", "Diego", "Elisa")
aprovado <- c(TRUE, FALSE, TRUE, TRUE, FALSE)
# Operações vetorizadas - o R opera em todos os elementos
idades * 2
idades > 25
# Acessando elementos por índice
nomes[1] # primeiro elemento
idades[3:5] # do terceiro ao quintoO Tidyverse é uma coleção de pacotes com uma filosofia comum: dados organizados, código legível e consistência entre funções.
library(dplyr)
# Múltiplas operações encadeadas com pipe nativo |>
resumo <- mtcars |>
filter(cyl %in% c(4, 6)) |>
select(mpg, cyl, hp, wt) |>
mutate(eficiencia = mpg / wt) |>
group_by(cyl) |>
summarise(
media_mpg = mean(mpg),
media_eficiencia = mean(eficiencia),
n_veiculos = n()) |>
arrange(desc(media_mpg))
resumolibrary(ggplot2)
# Gráfico de dispersão
grafico1 <- ggplot(
data = mtcars,
aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point(size = 3) +
labs(
title = "Consumo por peso do veículo.",
x = "Peso (1000 lbs)",
y = "Milhas por galão",
color = "Cilindros",
caption = "Jeni Lopes | Café com R.") +
theme_classic()library(readr)
# Lendo CSV local
dados_local <- read_csv("dados/meu_arquivo.csv")
# Lendo CSV de URL
url <- "https://raw.githubusercontent.com/datasets/population/main/data/population.csv"
dados_url <- read_csv(url)
# Lendo Excel
library(readxl)
dados_excel <- read_excel("dados/planilha.xlsx", sheet = 1)
# Visualizando a estrutura
glimpse(dados_local)Para iniciar com Python para dados, três componentes são recomendados:
Alternativa para iniciantes
O Google Colab permite usar Python no navegador sem instalar nada. É ideal para quem está começando e quer focar no aprendizado da linguagem.
Note
Em Python, o operador de atribuição é =. f-strings (f”…“) permitem inserir variáveis diretamente dentro de texto.
# Criando listas
idades = [22, 35, 28, 41, 19]
nomes = ["Jeny", "Meguy", "Carla", "Diego", "Elisa"]
# Acessando elementos - índice começa em 0
print(nomes[0]) # primeiro elemento
print(idades[2:5]) # do terceiro ao quinto
# Adicionando elementos
nomes.append("Fernanda")
# Iterando
for nome in nomes:
print(nome)import numpy as np
# Arrays NumPy - mais eficientes que listas para cálculos
idades = np.array([22, 35, 28, 41, 19])
# Operações vetorizadas
print(idades * 2)
print(idades > 25)
# Estatísticas descritivas
print(f"Média: {idades.mean():.1f}")
print(f"Desvio padrão: {idades.std():.1f}")
print(f"Mínimo: {idades.min()} | Máximo: {idades.max()}")O pandas é o pacote central para análise de dados tabulares em Python. Sua estrutura principal, o DataFrame, é equivalente a uma tabela.
import pandas as pd
# Carregando dados
df = pd.read_csv("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv")
# Filtrando linhas
jantar = df[df["time"] == "Dinner"]
# Selecionando colunas
colunas = df[["total_bill", "tip", "size"]]
# Criando coluna calculada
df["percentual_gorjeta"] = (df["tip"] / df["total_bill"]) * 100
# Agrupamento e resumo
df.groupby("day")["tip"].mean().round(2)import matplotlib.pyplot as plt
import seaborn as sns
# Carregando dataset de exemplo
tips = sns.load_dataset("tips")
# Gráfico de dispersão com seaborn
sns.scatterplot(
data = tips,
x = "total_bill",
y = "tip",
hue = "day")
plt.title("Gorjeta por valor total da conta")
plt.xlabel("Valor total (USD)")
plt.ylabel("Gorjeta (USD)")
plt.tight_layout()
plt.show()import pandas as pd
# Lendo CSV local
dados_local = pd.read_csv("dados/meu_arquivo.csv")
# Lendo CSV de URL
url = "https://raw.githubusercontent.com/datasets/population/main/data/population.csv"
dados_url = pd.read_csv(url)
# Lendo Excel
dados_excel = pd.read_excel("dados/planilha.xlsx", sheet_name=0)
# Visualizando a estrutura
print(dados_local.shape)
print(dados_local.head())
print(dados_local.info())| Operação | R | Python |
|---|---|---|
| Ler CSV | read_csv("arquivo.csv") |
pd.read_csv("arquivo.csv") |
| Ver primeiras linhas | head(df) |
df.head() |
| Estrutura dos dados | str(df) |
df.info() |
| Resumo estatístico | summary(df) |
df.describe() |
| Dimensões | dim(df) |
df.shape |
| Operação | R (dplyr) | Python (pandas) |
|---|---|---|
| Filtrar linhas | filter(df, col > 5) |
df[df["col"] > 5] |
| Selecionar colunas | select(df, col1, col2) |
df[["col1", "col2"]] |
| Criar coluna | mutate(df, nova = a + b) |
df["nova"] = df["a"] + df["b"] |
| Renomear coluna | rename(df, novo = antigo) |
df.rename(columns={"antigo": "novo"}) |
| Operação | R (dplyr) | Python (pandas) |
|---|---|---|
| Agrupar e calcular | group_by(df, grupo) |> summarise(media = mean(val)) |
df.groupby("grupo")["val"].mean() |
| Ordenar | arrange(df, col) |
df.sort_values("col") |
| Remover duplicatas | distinct(df) |
df.drop_duplicates() |
| Remover NA | drop_na(df) |
df.dropna() |
# ERRO: objeto não encontrado
# print(resultado) # resultado não foi criado ainda
# ERRO: índice fora do limite
# vetor <- c(1, 2, 3)
# vetor[5] # retorna NA, não erro - cuidado com silêncio
# ERRO: tipo incompatível
# "10" + 5 # não funciona - string + numero
# CORRETO: converter antes de operar
as.numeric("10") + 5
# ERRO: pacote não carregado
# filter(dados, nota > 7) # precisa do library(dplyr)# ERRO: índice começa em 0, não em 1
lista = ["a", "b", "c"]
# lista[3] # IndexError: list index out of range
lista[2] # correto - terceiro elemento
# ERRO: indentação obrigatória em Python
# if x > 5:
# print("maior") # IndentationError
# CORRETO:
if x > 5:
print("maior") # indentação com 4 espaços
# ERRO: pacote não importado
# df = pd.DataFrame() # NameError: pd not defined
import pandas as pd # importar antes de usarWarning
Um script sem comentários é um script que você não vai entender em três meses.
A primeira fase de aprendizado deve cobrir os fundamentos da linguagem escolhida.
A segunda fase, deve focar em análise exploratória e visualização.
A terceira fase aprofunda técnicas e expande o repertório.
Referência
A fase 3 é o ponto em que aprender a segunda linguagem passa a fazer ainda mais sentido.
projeto_dados/
├── dados/
│ ├── brutos/ # dados originais - nunca modificar
│ └── processados/ # resultados de limpeza e transformação
├── scripts/
│ ├── 01_importacao.R
│ ├── 02_limpeza.R
│ └── 03_analise.R
├── outputs/
│ ├── graficos/
│ └── tabelas/
├── relatorio.qmd
└── README.md
dados_populacao_2023 é melhor que df1taxa_desemprego01_, 02_, 03_Note
Em R, a convenção mais comum é snake_case. Em Python, a mesma convenção é recomendada pelo PEP 8, o guia de estilo oficial.
.gitignore para excluir dados sensíveis e arquivos temporáriosComando básico
git init cria um repositório local. git add . e git commit -m "mensagem" registram as alterações.
# -------------------------------------------------------
# Script: Análise de notas por turma
# Autor: Nome do analista
# Data: 2026-01-15
# Objetivo: calcular média, mediana e distribuição de notas
# -------------------------------------------------------
library(dplyr)
library(ggplot2)
# Importando dados brutos
notas <- read_csv("dados/brutos/notas_turma_a.csv")
# Removendo registros sem nota registrada
notas_validas <- notas |>
filter(!is.na(nota))
# Calculando estatísticas por disciplina
resumo <- notas_validas |>
group_by(disciplina) |>
summarise(
media = mean(nota),
mediana = median(nota),
n = n())README.md claroNote
Um repositório com três projetos bem documentados vale mais que dez notebooks incompletos.
O Positron é uma IDE (Ambiente de Desenvolvimento Integrado) de última geração desenvolvida pela Posit, voltada para ciência de dados em Python e R.
Acesse os materiais do curso que ministrei para R-Ladies Goiânia.
Imagem: Allison Horst.
Continue praticando e explorando!
Esta apresentação é parte do projeto Café com R! É OPEN, USE, COMPARTILHE!
Fique por dentro das aulas, conteúdos, newsletter!
Que cada gole desperte uma nova ideia.
Que cada script abra uma nova conversa.
Que o Café com R, se torne um ponto de encontro nosso!
Printa a tela e escaneia o qrcode. Café com R.

Jennifer Lopes | Café com R