# Padrão
import numpy as np
from urllib.request import urlopen
import matplotlib.pyplot as plt
# === Carregar dados ===
url = 'https://raw.githubusercontent.com/allanspadini/numpy/dados/citrus.csv'
dados = np.loadtxt(urlopen(url), delimiter=',', skiprows=1, usecols=[1, 2])
# === Interpolar NaNs se houver ===
def interpolar_nans(arr):
for j in range(arr.shape[1]):
col = arr[:, j]
nans = np.isnan(col)
if nans.any():
idx = np.arange(len(col))
col[nans] = np.interp(idx[nans], idx[~nans], col[~nans])
return arr
if np.isnan(dados).any():
dados = interpolar_nans(dados)
laranja = dados[:5000, 0]
toranja = dados[5000:, 0]
# === Gerar coeficientes aleatórios ===
def gerar_coeficientes(n, seed=None):
if seed is not None:
np.random.seed(seed)
return np.random.rand(n)
coef_laranja = gerar_coeficientes(100, seed=17)
coef_toranja = gerar_coeficientes(100, seed=17)
# === Análise estatística e projeção ===
def analise_estatistica(orig, coef):
x = np.arange(len(coef))
a, b = np.polyfit(x, coef, 1)
projecao = a * len(coef) + b
return a, b, projecao
a_lar, b_lar, proj_lar = analise_estatistica(laranja, coef_laranja)
a_tor, b_tor, proj_tor = analise_estatistica(toranja, coef_toranja)
# === Selecionar 3 maiores coeficientes ===
def top3_indices(coef):
return np.argsort(coef)[-3:] # índices dos 3 maiores valores
top3_lar_idx = top3_indices(coef_laranja)
top3_tor_idx = top3_indices(coef_toranja)
# === Plot com dois eixos y, só 3 maiores coeficientes destacados ===
fig, ax1 = plt.subplots(figsize=(12, 7))
x_lar = np.arange(len(laranja))
x_tor = np.arange(len(toranja))
x_coef = np.arange(100)
x_proj = 100
# Eixo y primário - Dados originais
ax1.set_xlabel('Índice')
ax1.set_ylabel('Dados Originais', color='black')
ln1 = ax1.plot(x_lar, laranja, label='Laranja - Dados Originais', color='blue')
ln2 = ax1.plot(x_tor, toranja, label='Toranja - Dados Originais', color='green')
ax1.tick_params(axis='y', labelcolor='black')
ax1.grid(True)
# Eixo y secundário - Coeficientes aleatórios
ax2 = ax1.twinx()
ax2.set_ylabel('Coeficientes Aleatórios (0-1)', color='black')
# Todos coeficientes com baixa opacidade
sc1 = ax2.scatter(x_coef, coef_laranja, color='orange', alpha=0.3, label='Laranja - Coeficientes')
sc2 = ax2.scatter(x_coef, coef_toranja, color='darkgreen', alpha=0.3, label='Toranja - Coeficientes')
# Ajuste linear coeficientes
ln3 = ax2.plot(x_coef, a_lar * x_coef + b_lar, '--', color='orange', label='Laranja - Ajuste Linear')
ln4 = ax2.plot(x_coef, a_tor * x_coef + b_tor, '--', color='darkgreen', label='Toranja - Ajuste Linear')
# Projeções próximas
sc3 = ax2.scatter(x_proj, proj_lar, color='red', s=100, edgecolors='black', label='Laranja - Projeção Próxima')
sc4 = ax2.scatter(x_proj, proj_tor, color='brown', s=100, edgecolors='black', label='Toranja - Projeção Próxima')
# Destacar 3 maiores coeficientes
sc5 = ax2.scatter(top3_lar_idx, coef_laranja[top3_lar_idx], color='red', s=150, edgecolors='black', label='Laranja - Top 3 Coeficientes')
sc6 = ax2.scatter(top3_tor_idx, coef_toranja[top3_tor_idx], color='darkred', s=150, edgecolors='black', label='Toranja - Top 3 Coeficientes')
ax2.tick_params(axis='y', labelcolor='black')
# Combinar legendas
lns = ln1 + ln2 + ln3 + ln4 + [sc1, sc2, sc3, sc4, sc5, sc6]
labels = [l.get_label() for l in lns]
ax1.legend(lns, labels, loc='upper left', bbox_to_anchor=(1.05, 1))
plt.title('Dados Originais e Coeficientes Aleatórios - Destacando Top 3 Maiores')
fig.tight_layout()
plt.show()