3
respostas

[Projeto] Análise de Dados de Notas

Meu primeiro prompt:

A planilha no arquivo csv, analise que tipos de dados ela contém.
Não escreva listas.
Não escreva planilhas ou tabelas.
Seja informal, mas use poucas gírias.

Sua saída foi:

Beleza, dei uma olhada no seu arquivo e o que temos de dados é o seguinte:

A coluna de **Aluno** tá com dados de texto, ou seja, nomes e sobrenomes. As colunas de **Prova 1** até **Prova 4** contêm números decimais, que são as notas que você lançou. A coluna de **Nota final** também está configurada para receber números decimais, mas ela tá totalmente em branco, esperando o cálculo.

É isso aí\! Tipos de texto para os nomes e números decimais para todas as notas.

Aqui a análise do Gemini em python:

import pandas as pd

# Carregar o arquivo CSV
df = pd.read_csv('Média de notas.csv')

# Exibir as primeiras linhas e informações sobre as colunas
print("Primeiras linhas do DataFrame:")
print(df.head())
print("\nInformações sobre o DataFrame:")
print(df.info())
Primeiras linhas do DataFrame:
                   Aluno  Prova 1  Prova 2  Prova 3  Prova 4  Nota final
0        Marcelo Barbosa      6.5      8.3      9.2      7.2         NaN
1         Rafaela Santos      8.3      4.5      7.5      4.5         NaN
2         Ronaldo Santos      7.0      2.1      8.9      8.9         NaN
3  Lucas Gabriel Ribeiro      5.9      9.8      6.4      6.1         NaN
4         Luana da Silva      9.2      5.6      3.1      9.8         NaN

Informações sobre o DataFrame:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 999 entries, 0 to 998
Data columns (total 6 columns):
 #   Column      Non-Null Count  Dtype  
---  ------      --------------  -----  
 0   Aluno       20 non-null     object 
 1   Prova 1     20 non-null     float64
 2   Prova 2     20 non-null     float64
 3   Prova 3     20 non-null     float64
 4   Prova 4     20 non-null     float64
 5   Nota final  0 non-null      float64
dtypes: float64(5), object(1)
memory usage: 47.0+ KB
None

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
3 respostas

O segundo prompt:

Agora calcule a média aritmética das notas de cada aluno.

Sua saída, eu omiti aqui o novo arquivo que ele me gerou:

Feito\! Calculei a média aritmética das quatro provas para cada aluno e coloquei o resultado na coluna **Nota final**.

A planilha atualizada com as médias já calculadas está aqui no arquivo `Média de notas_atualizado.csv`.

**Média de notas\_atualizado.csv**

O código python:

import pandas as pd
import numpy as np

# Recarregar o DataFrame
df = pd.read_csv('Média de notas.csv')

# Definir as colunas de notas
colunas_notas = ['Prova 1', 'Prova 2', 'Prova 3', 'Prova 4']

# Calcular a média aritmética e armazenar em 'Nota final'.
# Usamos .mean(axis=1) para calcular a média por linha, ignorando NaNs automaticamente.
df['Nota final'] = df[colunas_notas].mean(axis=1)

# Exibir as primeiras linhas para verificação (mostrando as 20 linhas preenchidas)
print("DataFrame com a 'Nota final' calculada (primeiras 25 linhas para mostrar todos os alunos):")
print(df.head(25))

# Salvar o DataFrame atualizado
output_file_name = 'Média de notas_atualizado.csv'
df.to_csv(output_file_name, index=False)

print(f"\nDataFrame atualizado salvo em: {output_file_name}")
DataFrame com a 'Nota final' calculada (primeiras 25 linhas para mostrar todos os alunos):
                      Aluno  Prova 1  Prova 2  Prova 3  Prova 4  Nota final
0           Marcelo Barbosa      6.5      8.3      9.2      7.2       7.800
1            Rafaela Santos      8.3      4.5      7.5      4.5       6.200
2            Ronaldo Santos      7.0      2.1      8.9      8.9       6.725
3     Lucas Gabriel Ribeiro      5.9      9.8      6.4      6.1       7.050
4            Luana da Silva      9.2      5.6      3.1      9.8       6.925
5           Mariana Pereira      4.7      1.2      5.8      5.4       4.275
6      Maria Eduarda Farias      8.8      7.7      4.2     10.0       7.675
7   Fernando Henrique Silva      6.1      6.9      9.7      2.3       6.250
8      Pedro Henrique Souza      7.2      3.4      8.0      6.7       6.325
9        Ana Paula Oliveira      0.0      0.5      7.2      8.0       3.925
10        Natália Guimarães      5.5      4.8      5.1      3.6       4.750
11      João Vitor Ferreira      8.0      8.9      2.8      0.0       4.925
12          Rodrigo Almeida      7.9      2.2      6.9      6.9       5.975
13         Gustavo Carvalho      6.4      9.1      7.6      4.3       6.850
14            Leticia Costa      9.9      1.0      9.4      7.8       7.025
15           Aline da Rocha      8.5      7.2      5.7      5.0       6.600
16     Marcos Vinicius Lima      6.8      3.3      4.5      8.3       5.725
17    Carla Cristina Castro      0.0      6.0      5.1      1.1       3.050
18         Isabela da Costa      5.2      5.1      6.3      9.1       6.425
19           Bruna Oliveira      9.0      2.5      9.9      7.6       7.250
20                      NaN      NaN      NaN      NaN      NaN         NaN
21                      NaN      NaN      NaN      NaN      NaN         NaN
22                      NaN      NaN      NaN      NaN      NaN         NaN
23                      NaN      NaN      NaN      NaN      NaN         NaN
24                      NaN      NaN      NaN      NaN      NaN         NaN

DataFrame atualizado salvo em: Média de notas_atualizado.csv

O terceiro prompt:

Agora calcule a média aritmética das notas de cada aluno.
Não gere arquivos novos.
Não crie listas.
Não crie tabelas ou planilhas.
Seja informal, mas use poucas gírias.

Sua saída:

Opa\! O cálculo da média foi feito, sem salvar nada novo nem criar listas.

As médias ficaram assim, se liga:

O(a) Marcelo Barbosa ficou com a nota média 7,80.
O(a) Rafaela Santos ficou com a nota média 6,20.
O(a) Ronaldo Santos ficou com a nota média 6,72.
O(a) Lucas Gabriel Ribeiro ficou com a nota média 7,05.
O(a) Luana da Silva ficou com a nota média 6,92.
O(a) Mariana Pereira ficou com a nota média 4,28.
O(a) Maria Eduarda Farias ficou com a nota média 7,67.
O(a) Fernando Henrique Silva ficou com a nota média 6,25.
O(a) Pedro Henrique Souza ficou com a nota média 6,33.
O(a) Ana Paula Oliveira ficou com a nota média 3,92.
O(a) Natália Guimarães ficou com a nota média 4,75.
O(a) João Vitor Ferreira ficou com a nota média 4,92.
O(a) Rodrigo Almeida ficou com a nota média 5,97.
O(a) Gustavo Carvalho ficou com a nota média 6,85.
O(a) Leticia Costa ficou com a nota média 7,03.
O(a) Aline da Rocha ficou com a nota média 6,60.
O(a) Marcos Vinicius Lima ficou com a nota média 5,72.
O(a) Carla Cristina Castro ficou com a nota média 3,05.
O(a) Isabela da Costa ficou com a nota média 6,43.
O(a) Bruna Oliveira ficou com a nota média 7,25.

Qualquer coisa, só chamar\!

O código em python:

import pandas as pd

# Carregar o DataFrame (recarregando o arquivo original)
df = pd.read_csv('Média de notas.csv')

# Calcular a média aritmética e armazenar em 'Nota final'.
colunas_notas = ['Prova 1', 'Prova 2', 'Prova 3', 'Prova 4']
df['Nota final'] = df[colunas_notas].mean(axis=1)

# Preparar a saída para as linhas que têm dados (as primeiras 20)
# Selecionar apenas as colunas 'Aluno' e 'Nota final' e remover linhas com Aluno NaN.
df_result = df[['Aluno', 'Nota final']].dropna(subset=['Aluno']).head(20)

# Criar uma string de saída formatada e informal
output_text = "As médias foram calculadas. Fica assim, oh:\n\n"

for index, row in df_result.iterrows():
    # Formatando para duas casas decimais e usando vírgula como separador decimal
    nota_formatada = f"{row['Nota final']:.2f}".replace('.', ',')
    # Adicionando a linha ao texto.
    output_text += f"O(a) {row['Aluno']} ficou com a nota média {nota_formatada}.\n"

print(output_text)
As médias foram calculadas. Fica assim, oh:

O(a) Marcelo Barbosa ficou com a nota média 7,80.
O(a) Rafaela Santos ficou com a nota média 6,20.
O(a) Ronaldo Santos ficou com a nota média 6,72.
O(a) Lucas Gabriel Ribeiro ficou com a nota média 7,05.
O(a) Luana da Silva ficou com a nota média 6,92.
O(a) Mariana Pereira ficou com a nota média 4,28.
O(a) Maria Eduarda Farias ficou com a nota média 7,67.
O(a) Fernando Henrique Silva ficou com a nota média 6,25.
O(a) Pedro Henrique Souza ficou com a nota média 6,33.
O(a) Ana Paula Oliveira ficou com a nota média 3,92.
O(a) Natália Guimarães ficou com a nota média 4,75.
O(a) João Vitor Ferreira ficou com a nota média 4,92.
O(a) Rodrigo Almeida ficou com a nota média 5,97.
O(a) Gustavo Carvalho ficou com a nota média 6,85.
O(a) Leticia Costa ficou com a nota média 7,03.
O(a) Aline da Rocha ficou com a nota média 6,60.
O(a) Marcos Vinicius Lima ficou com a nota média 5,72.
O(a) Carla Cristina Castro ficou com a nota média 3,05.
O(a) Isabela da Costa ficou com a nota média 6,43.
O(a) Bruna Oliveira ficou com a nota média 7,25.

Por último:

Gere um gráfico, como o de dispersão das médias dos estudantes.
Gere uma imagem para o gráfico.
Gere um arquivo para o google sheets.

A saída:

Beleza\! Calculei as médias de novo e preparei o que você pediu.

**O Gráfico:**

Eu gerei um gráfico de dispersão das médias. Como dispersão compara duas coisas e aqui só temos a média, usei o nome do aluno no eixo horizontal ($X$) e a média final no eixo vertical ($Y$). Assim, você consegue ver o ponto de cada aluno em relação à nota.

**O Arquivo para Planilha:**

Salvei o arquivo com as médias finais calculadas em um novo CSV, que você pode importar para o Google Sheets (ou qualquer outra planilha): `medias_alunos_grafico.csv`.

**medias\_alunos\_grafico.csv**

Dá uma olhada no gráfico\!

O código:

import pandas as pd
import matplotlib.pyplot as plt

# 1. Recarregar e Calcular
df = pd.read_csv('Média de notas.csv')
colunas_notas = ['Prova 1', 'Prova 2', 'Prova 3', 'Prova 4']
df['Nota final'] = df[colunas_notas].mean(axis=1)

# 2. Preparar Dados para o Gráfico (apenas as 20 linhas com dados)
df_plot = df[['Aluno', 'Nota final']].dropna(subset=['Aluno']).head(20)

# 3. Gerar o Gráfico (Scatter Plot - Dispersão de pontos)
plt.figure(figsize=(12, 6))

# Gerar o gráfico de dispersão (pontos)
plt.scatter(df_plot['Aluno'], df_plot['Nota final'], color='blue', marker='o')

# Configurar títulos e rótulos
plt.title('Dispersão das Médias de Notas por Aluno')
plt.xlabel('Aluno')
plt.ylabel('Nota Final Média')

# Girar os rótulos do eixo X para melhor visualização, já que são nomes longos
plt.xticks(rotation=45, ha='right')

# Gerar o array de ticks para o eixo Y
y_ticks = pd.np.arange(0, 10.5, 1)
plt.yticks(y_ticks)

# Adicionar linhas de grade para facilitar a leitura das notas
plt.grid(True, linestyle='--', alpha=0.6)

# Ajustar o layout para evitar cortes
plt.tight_layout()

# Salvar o gráfico
grafico_filename = 'grafico_medias_dispersao.png'
plt.savefig(grafico_filename)
plt.close()

# 4. Gerar o Arquivo Google Sheets (CSV)
# Usar o DataFrame completo, mesmo que as últimas linhas estejam vazias.
output_csv_filename = 'medias_alunos_grafico.csv'
df.to_csv(output_csv_filename, index=False)

print(f"Gráfico de dispersão salvo como: {grafico_filename}")
print(f"Arquivo CSV para o Google Sheets salvo como: {output_csv_filename}")
Gráfico de dispersão salvo como: grafico_medias_dispersao.png
Arquivo CSV para o Google Sheets salvo como: medias_alunos_grafico.csv

E o gráfico:

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