|
| 1 | +import pandas as pd |
| 2 | +import gspread |
| 3 | +from google.colab import auth |
| 4 | +from google.auth import default |
| 5 | +import seaborn as sns |
| 6 | +import matplotlib.pyplot as plt |
| 7 | +import numpy as np |
| 8 | +from google.colab import drive |
| 9 | + |
| 10 | +# Autenticação e montagem do Drive |
| 11 | +auth.authenticate_user() |
| 12 | +creds, _ = default() |
| 13 | +gc = gspread.authorize(creds) |
| 14 | +drive.mount('/content/drive') |
| 15 | + |
| 16 | +# Configurações |
| 17 | +output_dir = '/content/drive/MyDrive/rankedpool/' |
| 18 | +spreadsheet_url = 'https://docs.google.com/spreadsheets/d/1GHn8ZSrAyi9d8kVgIfv2Yq-Cq_YD-NYaCDN15VPHO2g/edit?usp=sharing' |
| 19 | + |
| 20 | +# Acesso à planilha |
| 21 | +spreadsheet = gc.open_by_url(spreadsheet_url) |
| 22 | +worksheet = spreadsheet.worksheet('Respostas') |
| 23 | +data = worksheet.get_all_values() |
| 24 | +df = pd.DataFrame(data[1:], columns=data[0]) |
| 25 | + |
| 26 | +# Processamento STV |
| 27 | +def processar_votos(df): |
| 28 | + candidatos = df.columns[2:] |
| 29 | + resultados = {candidato: 0 for candidato in candidatos} |
| 30 | + for _, row in df.iterrows(): |
| 31 | + for idx, candidato in enumerate(candidatos): |
| 32 | + if row[candidato]: |
| 33 | + resultados[candidato] += len(candidatos) - idx |
| 34 | + return resultados |
| 35 | + |
| 36 | +resultados = processar_votos(df) |
| 37 | +resultados_ordenados = pd.Series(resultados).sort_values(ascending=False) |
| 38 | +top_15_resultados = resultados_ordenados.head(15) |
| 39 | +print("Top 15 Resultados STV:", top_15_resultados) |
| 40 | + |
| 41 | +# Função para plotar o gráfico de barras |
| 42 | +def plot_bar_chart(resultados, title, output_path): |
| 43 | + plt.figure(figsize=(14, 10)) |
| 44 | + sns.set(style="whitegrid") |
| 45 | + palette = ['#D4AF37', '#C5B358', '#B8860B', '#228B22', '#32CD32', '#FFD700'] |
| 46 | + ax = sns.barplot(x=resultados.index.str.replace('[', '').str.replace(']', ''), y=resultados.values, palette=palette, dodge=False) |
| 47 | + |
| 48 | + ax.set_facecolor('black') |
| 49 | + plt.gcf().set_facecolor('black') |
| 50 | + ax.set_xlabel('Ativos', fontsize=16, color='white') |
| 51 | + ax.set_ylabel('Votos Totais', fontsize=16, color='white') |
| 52 | + ax.set_title(title, fontsize=18, color='white', pad=50) # Aumenta o espaçamento do título |
| 53 | + ax.tick_params(axis='x', colors='white', labelsize=14, rotation=45) |
| 54 | + ax.tick_params(axis='y', colors='white', labelsize=14) |
| 55 | + ax.grid(True, which='major', axis='y', color='#333333', linestyle='--', linewidth=1) # Cor da grade mais escura |
| 56 | + ax.set_yticks(np.arange(0, resultados.max() + 3, 3)) # Define o intervalo do eixo y para 3 |
| 57 | + ax.spines['top'].set_visible(False) # Remove a borda superior |
| 58 | + ax.spines['right'].set_visible(False) # Remove a borda direita |
| 59 | + ax.spines['bottom'].set_visible(False) # Remove a borda inferior |
| 60 | + ax.spines['left'].set_visible(False) # Remove a borda esquerda |
| 61 | + plt.tight_layout() |
| 62 | + plt.savefig(output_path) |
| 63 | + plt.show() |
| 64 | + |
| 65 | + |
| 66 | +# Função para plotar o gráfico de radar |
| 67 | +def plot_radar(resultados, title, output_path): |
| 68 | + labels = resultados.index.str.replace('[', '').str.replace(']', '') |
| 69 | + stats = list(resultados.values) |
| 70 | + num_vars = len(labels) |
| 71 | + angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist() |
| 72 | + stats = np.concatenate((stats, [stats[0]])) |
| 73 | + angles += angles[:1] |
| 74 | + |
| 75 | + fig, ax = plt.subplots(figsize=(12, 12), subplot_kw=dict(polar=True)) |
| 76 | + |
| 77 | + fig.patch.set_facecolor('black') |
| 78 | + ax.set_facecolor('black') |
| 79 | + |
| 80 | + ax.fill(angles, stats, color='#D4AF37', alpha=0.7) |
| 81 | + ax.plot(angles, stats, color='#32CD32', linewidth=3) |
| 82 | + |
| 83 | + ax.set_xticks(angles[:-1]) |
| 84 | + ax.set_xticklabels(labels, color='white', fontsize=16) |
| 85 | + ax.set_yticks(np.arange(0, max(stats) + 1, 1)) |
| 86 | + ax.spines['polar'].set_visible(False) # Remove a linha da circunferência |
| 87 | + ax.grid(color='#444444', linestyle='--', linewidth=1) # Cor da grade mais escura |
| 88 | + plt.title(title, fontsize=18, color='white', pad=30) # Aumenta o espaçamento do título |
| 89 | + plt.savefig(output_path) |
| 90 | + plt.show() |
| 91 | + |
| 92 | + |
| 93 | +# Geração dos gráficos |
| 94 | +plot_bar_chart(top_15_resultados, "Barras dos 15 Melhores - Votação STV", f"{output_dir}barras.png") |
| 95 | +plot_radar(top_15_resultados, "Radar dos 15 Melhores - Votação STV", f"{output_dir}radar.png") |
0 commit comments