Código fonte de visual_rob

import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

[documentos] def plot_notas_por_estado(df): """ Plota um mapa das médias de notas dos estados brasileiros usando um DataFrame de dados. Parameters ---------- df : DataFrame Um DataFrame contendo a média de notas dos estados brasileiros. Returns ------- None Description ----------- Esta função carrega um shapefile dos estados brasileiros usando a biblioteca GeoPandas e cria um mapa das médias de notas por estado. Ela realiza uma junção entre o DataFrame fornecido e os dados dos estados, garantindo que todos os estados estejam representados no DataFrame antes de criar o mapa. O resultado é um mapa colorido dos estados brasileiros, onde a intensidade da cor representa a média de notas de cada estado. Além disso, a função verifica se os valores únicos nos DataFrames correspondem, a fim de evitar erros na junção. """ try: # Carrega o shapefile dos estados brasileiros usando geopandas estados_brasil = gpd.read_file('BR_UF_2022/BR_UF_2022.shp') except FileNotFoundError: print("Erro: O arquivo shapefile dos estados brasileiros não foi encontrado.") return except Exception as e: print(f"Erro ao carregar o shapefile dos estados brasileiros: {str(e)}") return # Define replacements para UFs replacements = { 'AC': 'Acre', 'AL': 'Alagoas', 'AP': 'Amapá', 'AM': 'Amazonas', 'BA': 'Bahia', 'CE': 'Ceará', 'DF': 'Distrito Federal', 'ES': 'Espírito Santo', 'GO': 'Goiás', 'MA': 'Maranhão', 'MT': 'Mato Grosso', 'MS': 'Mato Grosso do Sul', 'MG': 'Minas Gerais', 'PA': 'Pará', 'PB': 'Paraíba', 'PR': 'Paraná', 'PE': 'Pernambuco', 'PI': 'Piauí', 'RJ': 'Rio de Janeiro', 'RN': 'Rio Grande do Norte', 'RS': 'Rio Grande do Sul', 'RO': 'Rondônia', 'RR': 'Roraima', 'SC': 'Santa Catarina', 'SP': 'São Paulo', 'SE': 'Sergipe', 'TO': 'Tocantins' } df['SG_UF_PROVA'] = df['SG_UF_PROVA'].replace(replacements) estados_brasileiros = replacements.values() # Cria um DataFrame com os estados df_estados = pd.DataFrame({'SG_UF_PROVA': estados_brasileiros}) # Realiza uma junção externa para incluir todos os estados no DataFrame 'Estado' df = df_estados.merge(df, on='SG_UF_PROVA', how='left') # Verifica se os valores únicos correspondem unique_estados = df['SG_UF_PROVA'].unique() unique_nm_uf = estados_brasil['NM_UF'].unique() if set(unique_estados) == set(unique_nm_uf): # Junta o DataFrame com o GeoDataFrame dos estados brasileiros usando 'NM_UF' como chave gdf = estados_brasil.merge(df, left_on='NM_UF', right_on='SG_UF_PROVA', how='left') # Mapeia os valores da coluna 'Nota_unificada' para o novo intervalo de cores (450 a 600) vmin = 490 vmax = 580 norm = plt.Normalize(vmin, vmax) # Configura o plot do mapa fig, ax = plt.subplots(1, 1, figsize=(10, 6)) gdf.boundary.plot(ax=ax, linewidth=1, color='k') gdf.plot(column='Nota_unificada', cmap='Blues', norm=norm, ax=ax, legend=True) ano = df['NU_ANO'].iloc[0] # Obtém o ano a partir do DataFrame ax.set_title(f'Média de Notas por Estado no Brasil em {ano}') ax.set_axis_off() plt.show() else: print("Os valores na coluna 'Estado' não correspondem aos valores na coluna 'NM_UF'.")
[documentos] def plot_grafico_linhas(dataframe, coluna_x, coluna_y, titulo): """ Gera um gráfico de linhas usando dados de um DataFrame. Parameters ---------- df : pandas.DataFrame O DataFrame que contém os dados a serem plotados. coluna_x : str O nome da coluna a ser usada como eixo X. coluna_y : str O nome da coluna a ser usada como eixo Y. titulo : str O título do gráfico. Returns ------- None """ try: if coluna_x not in dataframe.columns or coluna_y not in dataframe.columns: raise ValueError("As colunas especificadas não existem no DataFrame.") # Tamanho da figura plt.figure(figsize=(8, 6)) plt.plot(dataframe[coluna_x], dataframe[coluna_y], marker='o', linestyle='-', color='b', label=coluna_y) # Adiciona rótulos e título ao gráfico plt.xlabel(coluna_x) plt.ylabel(coluna_y) plt.title(titulo) plt.legend() plt.grid(True) plt.show() except ValueError as e: print(f"Erro: {str(e)}") except Exception as e: print(f"Ocorreu um erro inesperado: {str(e)}")
[documentos] def plot_bar_chart(dataframe, column_names, title): """ Plota um gráfico de barras com duas colunas de um DataFrame em barras separadas. Parameters ---------- dataframe : pandas.DataFrame O DataFrame contendo os dados. column_names : list Uma lista com os nomes das duas colunas a serem plotadas. title : str Título do gráfico. Returns ------- None """ # Verifica se as colunas estão presentes no DataFrame if not all(col in dataframe.columns for col in column_names): print("Uma ou mais colunas não estão presentes no DataFrame.") return # Seleciona as colunas desejadas data = dataframe[column_names] # Cria um gráfico de barras data.plot(kind='bar') plt.title(title) plt.show()
[documentos] def plot_multi_grafico_linha(*dataframes): """ Plota um gráfico de linha a partir de um número variável de DataFrames. Cada DataFrame deve ter uma única linha com os mesmos nomes de coluna. Parameters ---------- *dataframes : DataFrame(s) Número variável de DataFrames. Cada DataFrame deve conter uma única linha com os mesmos nomes de coluna. Returns ------- None """ plt.figure() for idx, df in enumerate(dataframes): if not isinstance(df, pd.DataFrame): print(f"DataFrame {idx + 1} não é um DataFrame válido. Pulando.") continue # Verifica se o DataFrame possui apenas uma linha if df.shape[0] != 1: print(f"DataFrame {idx + 1} não possui uma única linha. Pulando.") continue # Extrai a linha como uma Série dados_da_linha = df.iloc[0] # Plota os dados como um gráfico de linha plt.plot(dados_da_linha.index, dados_da_linha.values, marker='o', label=f'DF {idx + 1}') # Adiciona rótulos, legenda e título plt.xlabel('Áreas de conhecimento') plt.ylabel('Médias') plt.legend(['2019', '2020', '2021', '2022']) plt.title('Média por área de conhecimento') plt.show() # Mostra o gráfico plt.show()
[documentos] def plot_scatter(df, x_column, y_column, title="Gráfico de Dispersão", x_label=None, y_label=None): """ Cria um gráfico de dispersão a partir de um DataFrame. Parameters ---------- df : pandas.DataFrame O DataFrame contendo os dados. x_column : str Nome da coluna a ser usada no eixo x. y_column : str Nome da coluna a ser usada no eixo y. title : str, optional Título do gráfico (opcional). x_label : str, optional Rótulo do eixo x (opcional). y_label : str, optional Rótulo do eixo y (opcional). Returns ------- None """ try: plt.figure(figsize=(10, 6)) # Define o tamanho da figura if x_column not in df.columns or y_column not in df.columns: raise ValueError("As colunas especificadas não existem no DataFrame.") # Obtém os valores das colunas do DataFrame x = df[x_column] y = df[y_column] # Cria o gráfico de dispersão, alpha controla a transparência dos pontos plt.scatter(x, y, alpha=0.5) # Define rótulos dos eixos plt.xlabel(x_label if x_label else x_column) plt.ylabel(y_label if y_label else y_column) plt.title(title) plt.show() except Exception as e: print(f"Erro ao plotar gráfico de dispersão: {str(e)}")