Skip to content

Instantly share code, notes, and snippets.

@nunesfb
Created July 23, 2025 12:57
Show Gist options
  • Save nunesfb/cedea479ea7ad76738f24eb2e952fbdf to your computer and use it in GitHub Desktop.
Save nunesfb/cedea479ea7ad76738f24eb2e952fbdf to your computer and use it in GitHub Desktop.
Bibliotecas

Bibliotecas

Instruções para conectar a planilha

  • 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!

Exemplos em aula

A seguir temos o enunciado e o código para facilitar a cópia.

Calcule quanto foi vendido em cada ano do período da planilha

# 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}")

Liste o item mais caro vendido em cada mês (maior valor)

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})")

Crie um gráfico de linha com o total de vendas por mês

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()

Exiba um gráfico de barras com os 10 itens mais caros vendidos

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()

Agrupe as vendas por ano e exiba um gráfico de barras com o total vendido em cada ano

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()

Conte quantos produtos diferentes foram vendidos por ano e exiba em gráfico de barras horizontal

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()

Para cada ano, descubra qual item teve o maior valor total de vendas somadas

# 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})")

Calcule a média de vendas por mês ao longo de todo o período

# 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))

Liste todos os produtos cujo valor foi superior à média geral de vendas

# 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}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment