- Abra um novo notebook no Google Colab
- Copie e rode este comando:
!pip install --upgrade gspread gspread_dataframe
- Após isso, copie e rode este comando:
# Importa o pandas para manipulação de dados
import pandas as pd
# Importa o gspread, que permite a conexão com o Google Sheets
import gspread
# Importa o módulo de autenticação do Google Colab
from google.colab import auth
# Importa uma função para converter a planilha em um DataFrame do pandas
from gspread_dataframe import get_as_dataframe
# Importa as credenciais padrão do Google para autenticação
from google.auth import default
# Inicia o processo de autenticação com a conta do Google (vai abrir um link e pedir um código)
auth.authenticate_user()
# Obtém as credenciais da conta autenticada
creds, _ = default()
# Autoriza o gspread a acessar o Google Sheets com essas credenciais
gc = gspread.authorize(creds)
# Define o link da planilha que será acessada
url = "https://docs.google.com/spreadsheets/d/1cjVRMcPPGDiLtzc6MewHvVIYJ9uCjd7H26Aj_IuVVOY/edit?gid=1191050892#gid=1191050892"
# Abre a planilha pelo link informado
spreadsheet = gc.open_by_url(url)
# Seleciona a primeira aba da planilha (índice 0)
# Aqui também podemos definir com o nome da aba
#worksheet = spreadsheet.worksheet('Alunos')
worksheet = spreadsheet.get_worksheet(0)
# Converte os dados da aba em um DataFrame (estrutura de tabela usada no pandas)
df = get_as_dataframe(worksheet)
# Exibe as 5 primeiras linhas da tabela para visualização inicial
print(df.head())
- Ele deve pedir as permissões necessárias para se conectar com a planilha, acompanhe as instruções nos slides para isso
- Pronto, você está agora conectado!
A seguir temos o enunciado e o código para facilitar a cópia.
# Converte a coluna 'Data' para datetime
df['Data'] = pd.to_datetime(df['Data'], dayfirst=True)
# Extrai o ano
df['Ano'] = df['Data'].dt.year
# Soma total por ano
total_por_ano = {}
for _, row in df.iterrows():
ano = row['Ano']
total_por_ano[ano] = total_por_ano.get(ano, 0) + row['Valor']
# Exibe resultado
for ano, total in total_por_ano.items():
print(f"{ano}: R$ {total:.2f}")
import pandas as pd
# Corrige a conversão da coluna 'Data'
df['Data'] = pd.to_datetime(df['Data'], dayfirst=True, errors='coerce')
# Verifica se houve alguma falha de conversão
if df['Data'].isnull().any():
print("⚠️ Atenção: Existem datas inválidas ou mal formatadas na planilha.")
# Agora podemos usar .dt
df['AnoMes'] = df['Data'].dt.to_period('M')
mais_caro_por_mes = {}
for _, row in df.iterrows():
chave = str(row['AnoMes'])
if chave not in mais_caro_por_mes or row['Valor'] > mais_caro_por_mes[chave]['Valor']:
mais_caro_por_mes[chave] = {'Item': row['Item'], 'Valor': row['Valor']}
# Exibe os resultados
for mes, dados in mais_caro_por_mes.items():
print(f"{mes} → {dados['Item']} (R$ {dados['Valor']:.2f})")
import pandas as pd
import matplotlib.pyplot as plt
# Converte para datetime (linha obrigatória)
df['Data'] = pd.to_datetime(df['Data'], dayfirst=True, errors='coerce')
# Verifica se a conversão deu certo (opcional)
print(df['Data'].dtype) # Deve ser datetime64[ns]
# Cria coluna Ano-Mês
df['AnoMes'] = df['Data'].dt.to_period('M')
# Agrupa por mês
df_grouped = df.groupby('AnoMes')['Valor'].sum()
# Gera gráfico de linha
plt.figure(figsize=(12, 5))
df_grouped.plot(kind='line', marker='o')
plt.title('Total de Vendas por Mês')
plt.xlabel('Ano-Mês')
plt.ylabel('Valor (R$)')
plt.grid(True)
plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
# Garante que 'Valor' seja numérico
df['Valor'] = pd.to_numeric(df['Valor'], errors='coerce')
# Remove espaços extras dos nomes dos itens (opcional)
df['Item'] = df['Item'].str.strip()
# Seleciona os 10 itens mais caros
top10 = df.sort_values(by='Valor', ascending=False).head(10)
# Cria gráfico de barras horizontal
plt.figure(figsize=(12, 5))
plt.barh(top10['Item'], top10['Valor'], color='skyblue')
plt.xlabel('Valor (R$)')
plt.title('Top 10 Produtos Mais Caros Vendidos')
plt.gca().invert_yaxis() # Deixa o mais caro no topo
plt.tight_layout()
plt.show()
Classifique os produtos em faixas de preço e exiba um gráfico de pizza com a proporção de vendas por faixa
import matplotlib.pyplot as plt
# Garante que os valores sejam numéricos
df['Valor'] = pd.to_numeric(df['Valor'], errors='coerce')
# Define faixas de valor
faixas = pd.cut(df['Valor'], bins=[0, 500, 1000, 3000, float('inf')],
labels=['Até 500', '501-1000', '1001-3000', 'Acima de 3000'])
# Conta a quantidade por faixa
contagem_faixas = faixas.value_counts().sort_index()
# Gráfico de pizza
plt.figure(figsize=(6, 6))
contagem_faixas.plot(kind='pie', autopct='%1.1f%%', startangle=90, colors=plt.cm.Paired.colors)
plt.title('Distribuição de Itens por Faixa de Preço')
plt.ylabel('')
plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
# Certifica conversão da coluna 'Data'
df['Data'] = pd.to_datetime(df['Data'], dayfirst=True, errors='coerce')
df['Ano'] = df['Data'].dt.year
# Agrupa total por ano
vendas_por_ano = df.groupby('Ano')['Valor'].sum()
# Gráfico
plt.figure(figsize=(10, 5))
vendas_por_ano.plot(kind='bar', color='cornflowerblue')
plt.title('Total de Vendas por Ano')
plt.xlabel('Ano')
plt.ylabel('Valor (R$)')
plt.grid(axis='y')
plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
# Garante que 'Data' esteja em datetime
df['Data'] = pd.to_datetime(df['Data'], dayfirst=True, errors='coerce')
# Cria a coluna 'Ano'
df['Ano'] = df['Data'].dt.year
# Conta o número de produtos vendidos por ano
quantidade_por_ano = df.groupby('Ano')['Item'].count()
# Cria o gráfico de barras horizontais
plt.figure(figsize=(10, 5))
plt.barh(quantidade_por_ano.index.astype(str), quantidade_por_ano.values, color='mediumseagreen')
plt.title('Quantidade de Produtos Vendidos por Ano')
plt.xlabel('Quantidade')
plt.ylabel('Ano')
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
# Garante que 'Data' esteja no formato correto
df['Data'] = pd.to_datetime(df['Data'], dayfirst=True, errors='coerce')
df['Ano'] = df['Data'].dt.year
# Agrupa por Ano e Item somando o valor
agrupado = df.groupby(['Ano', 'Item'])['Valor'].sum().reset_index()
# Encontra o item de maior valor por ano
top_por_ano = agrupado.loc[agrupado.groupby('Ano')['Valor'].idxmax()]
# Exibe resultado
for _, row in top_por_ano.iterrows():
print(f"{row['Ano']} → {row['Item']} (R$ {row['Valor']:.2f})")
# Garante que 'Data' seja datetime
df['Data'] = pd.to_datetime(df['Data'], dayfirst=True, errors='coerce')
# Extrai Ano-Mês
df['AnoMes'] = df['Data'].dt.to_period('M')
# Agrupa por mês e calcula a média
media_mensal = df.groupby('AnoMes')['Valor'].mean()
# Exibe resultado
print("Média de vendas por mês:")
print(media_mensal.round(2))
# Converte para datetime (se ainda não foi feito)
df['Data'] = pd.to_datetime(df['Data'], dayfirst=True, errors='coerce')
# Calcula média geral
media_geral = df['Valor'].mean()
# Filtra produtos acima da média
produtos_acima = df[df['Valor'] > media_geral]
# Exibe os resultados formatados
print("Produtos com valor acima da média geral:")
for _, row in produtos_acima.iterrows():
print(f"{row['Data'].date()} - {row['Item']} → R$ {row['Valor']:.2f}")