import pandas as pd
import matplotlib.pyplot as plt
# Caminho do arquivo CSV
caminho_arquivo = 'vinhos.csv'
# Carregar os dados do CSV em um DataFrame
df = pd.read_csv(caminho_arquivo)
# Exibir as primeiras 5 linhas para verificar
print(df.info())
# Substituir valores NaN por - (se necessário)
df.fillna('-', inplace=True)
df = df.drop(columns=['region_2'])
df = df.drop(columns=['taster_twitter_handle'])
df = df.drop(columns=['Unnamed: 0'])
# Dicionário para renomear as colunas
novo_nome_colunas = {
'country': 'pais',
'description': 'descricao',
'designation': 'designacao',
'points': 'pontos',
'price': 'preco',
'province': 'provincia',
'region_1': 'regiao',
'taster_name': 'degustador',
'title': 'titulo',
'variety': 'variedade',
'winery': 'vinicola'
}
# Renomeando as colunas
df.rename(columns=novo_nome_colunas, inplace=True)
# Exibir o DataFrame com valores substituídos
print(df.info())
# Supondo que seu DataFrame se chama 'df'
# Substituir '-' por NaN nas colunas 'pontos' e 'variedade' para garantir que sejam tratados
df['pontos'] = pd.to_numeric(df['pontos'], errors='coerce') # Converte 'pontos' para numérico e coloca NaN onde houver erro
df['variedade'].replace('-', pd.NA, inplace=True) # Substitui '-' por valores ausentes (pd.NA) na coluna 'variedade'
# Filtrar o DataFrame para remover linhas com valores ausentes nas colunas 'pontos' ou 'variedade'
df_filtered = df.dropna(subset=['pontos', 'variedade'])
# Agrupar por variedade e calcular a média da pontuação
media_pontos_por_variedade = df_filtered.groupby('variedade')['pontos'].mean()
# Ordenar as variedades pela média de pontos de forma decrescente
media_pontos_por_variedade = media_pontos_por_variedade.sort_values(ascending=False)
# Exibir as 10 variedades com maior média
top_10_variedades = media_pontos_por_variedade.head(10)
# Plotando o gráfico
plt.figure(figsize=(10, 6))
top_10_variedades.plot(kind='bar', color='skyblue')
plt.title('Top 10 Variedades de Vinho com Maior Média de Pontuação')
plt.xlabel('Variedade')
plt.ylabel('Média de Pontuação')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
# Exibir o gráfico
plt.show()
# Supondo que seu DataFrame se chama 'df'
# Substituir '-' por NaN nas colunas 'pontos', 'preco' e 'variedade'
df['pontos'] = pd.to_numeric(df['pontos'], errors='coerce') # Converte 'pontos' para numérico
df['preco'] = pd.to_numeric(df['preco'], errors='coerce') # Converte 'preco' para numérico
df['variedade'].replace('-', pd.NA, inplace=True) # Substitui '-' por NaN na coluna 'variedade'
# Filtrar o DataFrame para remover linhas com valores ausentes nas colunas 'pontos', 'preco' ou 'variedade'
df_filtered = df.dropna(subset=['pontos', 'preco', 'variedade'])
# Plotando o gráfico de dispersão
plt.figure(figsize=(12, 8))
# Usando um gráfico de dispersão onde:
# - Eixo X: Preço
# - Eixo Y: Pontuação
# - A cor representa a variedade
plt.scatter(
df_filtered['preco'], df_filtered['pontos'],
c=df_filtered['variedade'].astype('category').cat.codes, # Codificando a 'variedade' para cores
cmap='viridis', # Usando o mapa de cores 'viridis'
alpha=0.5, # Transparência das bolinhas
s=60 # Tamanho das bolinhas
)
# Adicionando título e rótulos
plt.title('Relação entre Preço e Pontuação de Vinhos por Variedade', fontsize=16)
plt.xlabel('Preço (em unidades monetárias)', fontsize=12)
plt.ylabel('Pontuação (média)', fontsize=12)
# Adicionando uma legenda para as variedades
plt.colorbar(label='Variedade') # A legenda que associa cores com as variedades
# Melhorando a disposição dos rótulos no eixo x
plt.xticks(rotation=45, ha='right')
# Exibindo o gráfico
plt.tight_layout()
plt.show()
# Supondo que seu DataFrame se chama 'df'
# Substituir '-' por NaN nas colunas 'pontos', 'preco' e 'variedade'
df['pontos'] = pd.to_numeric(df['pontos'], errors='coerce') # Converte 'pontos' para numérico
df['preco'] = pd.to_numeric(df['preco'], errors='coerce') # Converte 'preco' para numérico
df['variedade'].replace('-', pd.NA, inplace=True) # Substitui '-' por NaN na coluna 'variedade'
# Filtrar o DataFrame para remover linhas com valores ausentes nas colunas 'pontos', 'preco' ou 'variedade'
df_filtered = df.dropna(subset=['pontos', 'preco', 'variedade'])
# Plotando o gráfico de dispersão com a área de calor
plt.figure(figsize=(12, 8))
# Criar a área de calor (heatmap) com hexágonos
hb = plt.hexbin(df_filtered['preco'], df_filtered['pontos'], gridsize=50, cmap='YlGnBu', mincnt=1)
# Adicionando uma barra de cores para a área de calor (densidade de pontos)
plt.colorbar(hb, label='Densidade de Pontos')
# Plotando as bolinhas (dispersão)
plt.scatter(
df_filtered['preco'], df_filtered['pontos'],
c=df_filtered['variedade'].astype('category').cat.codes, # Codificando a 'variedade' para cores
cmap='viridis', # Usando o mapa de cores 'viridis'
alpha=0.7, # Transparência das bolinhas
s=60 # Tamanho das bolinhas
)
# Adicionando título e rótulos
plt.title('Relação entre Preço e Pontuação de Vinhos por Variedade com Densidade', fontsize=16)
plt.xlabel('Preço (em unidades monetárias)', fontsize=12)
plt.ylabel('Pontuação (média)', fontsize=12)
# Adicionando uma legenda para as variedades
plt.colorbar(label='Variedade') # A legenda que associa cores com as variedades
# Melhorando a disposição dos rótulos no eixo x
plt.xticks(rotation=45, ha='right')
# Exibindo o gráfico
plt.tight_layout()
plt.show()
import numpy as np
from scipy.stats import gaussian_kde
# Supondo que seu DataFrame se chama 'df'
# Substituir '-' por NaN nas colunas 'pontos', 'preco' e 'variedade'
df['pontos'] = pd.to_numeric(df['pontos'], errors='coerce') # Converte 'pontos' para numérico
df['preco'] = pd.to_numeric(df['preco'], errors='coerce') # Converte 'preco' para numérico
df['variedade'].replace('-', pd.NA, inplace=True) # Substitui '-' por NaN na coluna 'variedade'
# Filtrar o DataFrame para remover linhas com valores ausentes nas colunas 'pontos', 'preco' ou 'variedade'
df_filtered = df.dropna(subset=['pontos', 'preco', 'variedade'])
# Coletando as variáveis 'preco' e 'pontos' para o gráfico de densidade
x = df_filtered['preco']
y = df_filtered['pontos']
# Calculando a densidade com gaussian_kde
xy = np.vstack([x, y])
kde = gaussian_kde(xy, bw_method='silverman') # Ajuste na largura de banda (suavização)
# Definir o intervalo de valores para a grade de contorno
xmin, xmax = x.min() - 1, x.max() + 1
ymin, ymax = y.min() - 1, y.max() + 1
# Gerar uma grade de valores para o gráfico de contorno
xi, yi = np.mgrid[xmin:xmax:200j, ymin:ymax:200j] # Aumentando a resolução para 200j
zi = kde(np.vstack([xi.flatten(), yi.flatten()])).reshape(xi.shape)
# Plotando o gráfico de contorno
plt.figure(figsize=(12, 8))
# Criando o gráfico de contorno com a densidade de pontos
contour = plt.contourf(xi, yi, zi, cmap='YlGnBu', levels=50) # Aumentando o número de níveis para mais detalhes
plt.colorbar(contour, label='Densidade de Pontos')
# Plotando as bolinhas (dispersão)
plt.scatter(
df_filtered['preco'], df_filtered['pontos'],
c=df_filtered['variedade'].astype('category').cat.codes, # Codificando a 'variedade' para cores
cmap='viridis', # Usando o mapa de cores 'viridis'
alpha=0.7, # Transparência das bolinhas
s=60 # Tamanho das bolinhas
)
# Adicionando título e rótulos
plt.title('Relação entre Preço e Pontuação de Vinhos por Variedade com Densidade (Contorno)', fontsize=16)
plt.xlabel('Preço (em unidades monetárias)', fontsize=12)
plt.ylabel('Pontuação (média)', fontsize=12)
# Adicionando uma legenda para as variedades
plt.colorbar(label='Variedade') # A legenda que associa cores com as variedades
# Melhorando a disposição dos rótulos no eixo x
plt.xticks(rotation=45, ha='right')
# Exibindo o gráfico
plt.tight_layout()
plt.show()