1
resposta

Analisando planilhas e criando gráficos

Analise de planilha usando chat gpt
chat você pode analisar os tipos de dados que contém nessa planilha?

Sim. Li o arquivo “Média de notas.csv” e ele tem 6 colunas. Os tipos de dados (inferidos automaticamente ao importar o CSV) são:

Tipos de dados por coluna (considerando só as linhas preenchidas)

Observação importante: o CSV tem 999 linhas, mas 979 estão completamente vazias. Quando removo essas linhas vazias, sobram 20 linhas reais.

Coluna Tipo (dtype) Preenchidos Vazios Exemplo
Aluno object (texto) 20 0 “Marcelo Barbosa”
Prova 1 float64 (número com decimal) 20 0 6.5
Prova 2 float64 (número com decimal) 20 0 8.3
Prova 3 float64 (número com decimal) 20 0 9.2
Prova 4 float64 (número com decimal) 20 0 7.2
Nota final float64 (número com decimal) 0 20 (tudo vazio)
O que isso significa na prática
Aluno é texto (por isso object).
Prova 1–4 são números decimais (float64), o que faz sentido porque há notas como 6.5, 8.3 etc.
Nota final está definida como número (float64), mas não tem nenhum valor preenchido no arquivo — está 100% vazia.

certo, agora você poderia calcular a média aritmética das notas de cada um dos alunos?

Sim. A média aritmética de cada aluno é:
média=Prova 1 + Prova 2 + Prova 3 + Prova 4

Aluno Média

Aluno Média
Marcelo Barbosa 7.80
Rafaela Santos 6.20
Ronaldo Santos 6.73
Lucas Gabriel Ribeiro 7.05
Luana da Silva 6.93
Mariana Pereira 4.28
Maria Eduarda Farias 7.68
Fernando Henrique Silva 6.25
Pedro Henrique Souza 6.33
Ana Paula Oliveira 3.93
Natália Guimarães 4.75
João Vitor Ferreira 4.93
Rodrigo Almeida 5.98
Gustavo Carvalho 6.85
Letícia Costa 7.03
Aline da Rocha 6.60
Marcos Vinicius Lima 5.73
Carla Cristina Castro 3.05
Isabela da Costa 6.43
Bruna Oliveira 7.25

gere um grafico de dispersão das médias dos estudantes :

utilizei o google collab

import matplotlib.pyplot as plt

nomes = ['Marcelo', 'Rafaela', 'Ronaldo', 'Lucas', 'Luana', 'Mariana',
'Maria E.', 'Fernando', 'Pedro H.', 'Ana P.', 'Natália', 'João V.',
'Rodrigo', 'Gustavo', 'Letícia', 'Aline', 'Marcos V.', 'Carla',
'Isabela', 'Bruna']

indices = list(range(1, 21))
medias = [7.80, 6.20, 6.73, 7.05, 6.93, 4.28, 7.68, 6.25, 6.33, 3.93,
4.75, 4.93, 5.98, 6.85, 7.03, 6.60, 5.73, 3.05, 6.43, 7.25]

plt.figure(figsize=(12, 6))
plt.scatter(indices, medias, s=100, c='blue', edgecolors='black')

for i, nome in enumerate(nomes):
plt.annotate(nome, (indices[i], medias[i]), fontsize=8, ha='center')

plt.axhline(y=sum(medias)/len(medias), color='red', linestyle='--', label='Média geral')
plt.xlabel('Índice do Estudante')
plt.ylabel('Média das Notas')
plt.title('Gráfico de Dispersão das Médias dos Estudantes')
plt.ylim(0, 10)
plt.grid(True, alpha=0.3)
plt.legend()
plt.tight_layout()
plt.savefig('grafico_dispersao.png', dpi=150) # Salva a imagem!
plt.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Bianca. Como vai?

Muito bacana ver o seu progresso utilizando o ChatGPT integrado com o Google Colab para a análise de dados! O seu gráfico de dispersão ficou excelente, com uma identidade visual muito clara e de fácil leitura. É ótimo ver como você conseguiu tratar o problema das linhas vazias na planilha e extrair os dados reais perfeitamente.

Para complementar a sua atividade e agregar ainda mais valor ao seu código, perceba que a linha horizontal vermelha (Média geral) ajuda a identificar rapidamente quem ficou acima ou abaixo do desempenho médio da turma.

Podemos dar um passo além na automação dessa análise. No seu código atual, os nomes e as médias foram inseridos manualmente em listas. Quando lidamos com bases de dados reais, o ideal é deixar que o próprio Python (através da biblioteca pandas) leia o arquivo e gere os dados dinamicamente. Dessa forma, se a planilha mudar para 50 ou 100 alunos, o código funcionará sozinho.

Caso queira testar uma abordagem totalmente automatizada diretamente no seu Google Colab, você pode estruturar o código da seguinte forma:

import pandas as pd
import matplotlib.pyplot as plt

# 1. Carrega o arquivo e remove as linhas completamente vazias
df = pd.read_csv('Média de notas.csv')
df = df.dropna(how='all')

# 2. Calcula a média das provas diretamente pelo Pandas
provas = ['Prova 1', 'Prova 2', 'Prova 3', 'Prova 4']
df['Média'] = df[provas].mean(axis=1)

# Extrai o primeiro nome para não poluir o gráfico
df['Primeiro Nome'] = df['Aluno'].apply(lambda x: x.split()[0])
df['Índice'] = range(1, len(df) + 1)

# 3. Construção do gráfico de dispersão
plt.figure(figsize=(12, 6))
plt.scatter(df['Índice'], df['Média'], s=100, c='blue', edgecolors='black')

# Adiciona os nomes dinamicamente
for i, row in df.iterrows():
    plt.annotate(row['Primeiro Nome'], (row['Índice'], row['Média']), fontsize=8, ha='center', va='bottom')

# Linha da média geral da turma
media_geral = df['Média'].mean()
plt.axhline(y=media_geral, color='red', linestyle='--', label=f'Média geral ({media_geral:.2f})')

# Customizações do gráfico
plt.xlabel('Índice do Estudante')
plt.ylabel('Média das Notas')
plt.title('Gráfico de Dispersão das Médias dos Estudantes')
plt.ylim(0, 10)
plt.grid(True, alpha=0.3)
plt.legend()
plt.tight_layout()

plt.show()
  • Dica extra: Repare que no laço de anotações usei o parâmetro va='bottom'. Isso faz com que o nome do aluno fique levemente acima do ponto azul, evitando que o texto cubra a bolinha do gráfico e melhorando ainda mais a visualização.

Parabéns pela dedicação no exercício prático e por explorar o potencial da IA Generativa na análise de dados!

Espero que possa ter lhe ajudado!