Spaces:
Build error
Build error
File size: 3,442 Bytes
712ed64 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
# Función para aplicar Min-Max a cada columna
def min_max_normalize(column):
return (column - column.min()) / (column.max() - column.min())
# Cargar el archivo de Excel desde la ruta especificada
file_path = r"C:\Users\USUARIO\Documents\Indonecia\Rice_Spectral.xlsx"
data = pd.read_excel(file_path, sheet_name="Spectral")
# Asegurarse de que los valores de "Location" sean numéricos
data['Location'] = pd.to_numeric(data['Location'], errors='coerce')
# Separar los datos de los números de onda (Wavenumbers)
wavenumbers = data['Location'].dropna() # Eliminar posibles NaN en wavenumbers
# Filtrar las columnas que pertenecen a Java y Bangka Belitung
java_columns = [col for col in data.columns if "Java" in col]
belitung_columns = [col for col in data.columns if "Bangka Belitung" in col]
# Asegurarse de que todas las columnas de datos sean numéricas
data[java_columns] = data[java_columns].apply(pd.to_numeric, errors='coerce')
data[belitung_columns] = data[belitung_columns].apply(pd.to_numeric, errors='coerce')
# Aplicar normalización Min-Max a cada firma espectral
data[java_columns] = data[java_columns].apply(min_max_normalize)
data[belitung_columns] = data[belitung_columns].apply(min_max_normalize)
# Graficar las firmas espectrales normalizadas
plt.figure(figsize=(10, 6))
# Graficar las firmas de Java en un color
for column in java_columns:
plt.plot(wavenumbers, data[column].dropna(), color='blue', label='Java' if 'Java' in column else "")
# Graficar las firmas de Bangka Belitung en otro color
for column in belitung_columns:
plt.plot(wavenumbers, data[column].dropna(), color='green', label='Bangka Belitung' if 'Bangka Belitung' in column else "")
# Etiquetas y título
plt.title('Firmas Espectrales Normalizadas (Min-Max) de Muestras de Arroz')
plt.xlabel('Número de Onda (Wavenumber)')
plt.ylabel('Reflectancia Espectral Normalizada')
plt.legend(['Java', 'Bangka Belitung'])
# Mostrar la gráfica
plt.show()
# Preparar los datos para PCA y t-SNE
all_columns = java_columns + belitung_columns
spectral_data = data[all_columns].dropna().transpose() # Transponer para tener las firmas en filas
# PCA: Análisis de Componentes Principales
pca = PCA(n_components=2)
pca_result = pca.fit_transform(spectral_data)
# Graficar PCA
plt.figure(figsize=(8, 6))
plt.scatter(pca_result[:len(java_columns), 0], pca_result[:len(java_columns), 1], color='blue', label='Java')
plt.scatter(pca_result[len(java_columns):, 0], pca_result[len(java_columns):, 1], color='green', label='Bangka Belitung')
plt.title('PCA de Firmas Espectrales')
plt.xlabel('Componente Principal 1')
plt.ylabel('Componente Principal 2')
plt.legend()
plt.show()
# t-SNE: Embedding de Vecinos Estocásticos Distribuidos
tsne = TSNE(n_components=2, random_state=42)
tsne_result = tsne.fit_transform(spectral_data)
# Graficar t-SNE
plt.figure(figsize=(8, 6))
plt.scatter(tsne_result[:len(java_columns), 0], tsne_result[:len(java_columns), 1], color='blue', label='Java')
plt.scatter(tsne_result[len(java_columns):, 0], tsne_result[len(java_columns):, 1], color='green', label='Bangka Belitung')
plt.title('t-SNE de Firmas Espectrales')
plt.xlabel('Componente t-SNE 1')
plt.ylabel('Componente t-SNE 2')
plt.legend()
plt.show()
|