Skip to content

Instantly share code, notes, and snippets.

@nunesfb
Last active July 23, 2025 12:50
Show Gist options
  • Save nunesfb/772522a716b1ce53fa7770dc15a4bd4b to your computer and use it in GitHub Desktop.
Save nunesfb/772522a716b1ce53fa7770dc15a4bd4b to your computer and use it in GitHub Desktop.

For

Instruções para conectar a planilha

  • Abra este link
  • 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:
# Importar bibliotecas
import pandas as pd
import gspread
from google.colab import auth
from gspread_dataframe import get_as_dataframe
from google.auth import default

# Autenticação
auth.authenticate_user()
creds, _ = default()
gc = gspread.authorize(creds)

# Abre a planilha
url = "https://docs.google.com/spreadsheets/d/1Y2eIBpUUlrdkqwHobCMS1YqVp93HhWIAgJQKmCzIHuw/edit?gid=182058863#gid=182058863"
spreadsheet = gc.open_by_url(url)

# Abas
worksheet_clientes = spreadsheet.worksheet("Clientes")
worksheet_vendas = spreadsheet.worksheet("Vendas")

# Converte para DataFrame
df_clientes = get_as_dataframe(worksheet_clientes).dropna(how='all')
df_vendas = get_as_dataframe(worksheet_vendas).dropna(how='all')

# Transforme os DataFrames em listas de dicionários para usar com for
clientes = df_clientes.to_dict(orient='records')
vendas = df_vendas.to_dict(orient='records')
  • 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.

Todas as vendas de um determinado cliente

codigo_cliente = input("Digite o código do cliente (ex: CLI001): ")

print(f"Vendas do cliente {codigo_cliente}:")
for venda in vendas:
    if venda['Código do Cliente'] == codigo_cliente:
        print(f" - {venda['Item Vendido']}: R$ {venda['Valor da Venda']} | Pago: {venda['Se o valor foi pago']}")

Percorra a planilha de vendas e calcule o valor total que ainda não foi recebido

total_nao_recebido = 0

for venda in vendas:
    if not venda['Se o valor foi pago']:
        total_nao_recebido += float(venda['Valor da Venda'])

print("Total de vendas sem receber: R$", total_nao_recebido)

Descubra qual foi a maior venda feita (única transação) e mostre os dados do cliente responsável

maior_valor = 0
codigo_maior = ""

for venda in vendas:
    valor = float(venda['Valor da Venda'])
    if valor > maior_valor:
        maior_valor = valor
        codigo_maior = venda['Código do Cliente']

# Busca dados do cliente com esse código
for cliente in clientes:
    if cliente['Código do Cliente'] == codigo_maior:
        print("Cliente que fez a maior compra única:")
        print(f"Nome: {cliente['Nome do Cliente']}")
        print(f"Cidade: {cliente['Cidade']}")
        print(f"Valor da compra: R$ {maior_valor}")
        break

Clientes com mais vendas (somada todas as vendas)

# Cria um dicionário para acumular valores por cliente
total_por_cliente = {}

for venda in vendas:
    codigo = venda['Código do Cliente']
    valor = float(venda['Valor da Venda'])

    if codigo not in total_por_cliente:
        total_por_cliente[codigo] = valor
    else:
        total_por_cliente[codigo] += valor

# Ordena por maior valor
clientes_ordenados = sorted(total_por_cliente.items(), key=lambda x: x[1], reverse=True)

print("Top clientes por valor total de compras:")
for codigo, total in clientes_ordenados[:10]:
    # Busca nome do cliente na outra tabela
    nome = next((c['Nome do Cliente'] for c in clientes if c['Código do Cliente'] == codigo), 'Desconhecido')
    print(f"{nome} ({codigo}) → R$ {total:.2f}")

Estados que mais tiveram vendas

# Cria um dicionário para acumular valores por estado
vendas_por_estado = {}

for venda in vendas:
    codigo = venda['Código do Cliente']
    valor = float(venda['Valor da Venda'])

    # Busca o estado do cliente
    estado = next((c['Estado'] for c in clientes if c['Código do Cliente'] == codigo), None)

    if estado:
        if estado not in vendas_por_estado:
            vendas_por_estado[estado] = valor
        else:
            vendas_por_estado[estado] += valor

# Ordena os estados por valor de vendas
estados_ordenados = sorted(vendas_por_estado.items(), key=lambda x: x[1], reverse=True)

print("Estados com maior volume de vendas:")
for estado, total in estados_ordenados:
    print(f"{estado} → R$ {total:.2f}")

Liste o total de vendas não pagas por cliente

nao_pagos = {}

for venda in vendas:
    if not venda['Se o valor foi pago']:
        codigo = venda['Código do Cliente']
        valor = float(venda['Valor da Venda'])

        if codigo not in nao_pagos:
            nao_pagos[codigo] = valor
        else:
            nao_pagos[codigo] += valor

for codigo, total in nao_pagos.items():
    nome = next((c['Nome do Cliente'] for c in clientes if c['Código do Cliente'] == codigo), 'Desconhecido')
    print(f"{nome} ({codigo}) → R$ {total:.2f}")

Conte quantas vendas foram feitas por cidade de origem do cliente

vendas_por_cidade = {}

for venda in vendas:
    codigo = venda['Código do Cliente']
    cidade = next((c['Cidade'] for c in clientes if c['Código do Cliente'] == codigo), None)
    
    if cidade:
        vendas_por_cidade[cidade] = vendas_por_cidade.get(cidade, 0) + 1

for cidade, total in vendas_por_cidade.items():
    print(f"{cidade}{total} vendas")

Liste os clientes que fizeram mais de 5 compras

compras = {}

for venda in vendas:
    codigo = venda['Código do Cliente']
    compras[codigo] = compras.get(codigo, 0) + 1

for codigo, qtd in compras.items():
    if qtd > 5:
        nome = next((c['Nome do Cliente'] for c in clientes if c['Código do Cliente'] == codigo), 'Desconhecido')
        print(f"{nome} ({codigo}) → {qtd} compras")

Conte quantos clientes existem em cada estado

clientes_por_estado = {}

for cliente in clientes:
    estado = cliente['Estado']
    clientes_por_estado[estado] = clientes_por_estado.get(estado, 0) + 1

for estado, total in clientes_por_estado.items():
    print(f"{estado}{total} clientes")

Calcule o valor médio de todas as vendas

soma = 0
qtd = 0

for venda in vendas:
    soma += float(venda['Valor da Venda'])
    qtd += 1

media = soma / qtd if qtd > 0 else 0
print("Média por venda: R$", round(media, 2))

Conte quantas vendas foram pagas e quantas não foram

pagas = 0
nao_pagas = 0

for venda in vendas:
    if venda['Se o valor foi pago']:
        pagas += 1
    else:
        nao_pagas += 1

print("Pagas:", pagas)
print("Não pagas:", nao_pagas)

Identifique clientes que estão na base mas não possuem nenhuma venda

clientes_com_venda = set(venda['Código do Cliente'] for venda in vendas)

for cliente in clientes:
    if cliente['Código do Cliente'] not in clientes_com_venda:
        print(f"{cliente['Nome do Cliente']} ({cliente['Código do Cliente']}) nunca comprou.")

Some o valor total de vendas por tipo de item vendido

vendas_por_item = {}

for venda in vendas:
    item = venda['Item Vendido']
    valor = float(venda['Valor da Venda'])

    vendas_por_item[item] = vendas_por_item.get(item, 0) + valor

for item, total in vendas_por_item.items():
    print(f"{item} → R$ {total:.2f}")

Encontre o estado com mais vendas e liste os clientes desse estado

vendas_estado = {}

for venda in vendas:
    codigo = venda['Código do Cliente']
    estado = next((c['Estado'] for c in clientes if c['Código do Cliente'] == codigo), None)
    if estado:
        vendas_estado[estado] = vendas_estado.get(estado, 0) + 1

estado_top = max(vendas_estado.items(), key=lambda x: x[1])[0]

print(f"Estado com mais vendas: {estado_top}")
print("Clientes desse estado:")

for cliente in clientes:
    if cliente['Estado'] == estado_top:
        print(f"{cliente['Nome do Cliente']} ({cliente['Código do Cliente']})")

Calcule a média de valor por compra para cada cliente e exiba os que mais gastam por venda

totais = {}
quantidades = {}

for venda in vendas:
    codigo = venda['Código do Cliente']
    valor = float(venda['Valor da Venda'])

    totais[codigo] = totais.get(codigo, 0) + valor
    quantidades[codigo] = quantidades.get(codigo, 0) + 1

medias = [(codigo, totais[codigo]/quantidades[codigo]) for codigo in totais]
medias.sort(key=lambda x: x[1], reverse=True)

print("Top clientes por média de valor por compra:")
for codigo, media in medias[:10]:
    nome = next((c['Nome do Cliente'] for c in clientes if c['Código do Cliente'] == codigo), 'Desconhecido')
    print(f"{nome} ({codigo}) → Média: R$ {media:.2f}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment