from numpy import False_
import pandas as pd
from sklearn.preprocessing import StandardScaler
from random import randint

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

url = "CSV/N_DataSetIntensiónSiembra.csv"
fields = ['DEPARTAMENTO', 'PROVINICA', 'DISTRITO', 'CULTIVO', 'AGO',
          'SEP', 'OCT', 'NOV', 'DIC', 'ENE', 'FEB', 'MAR', 'ABR', 'MAY', 'JUN', 'JUL']
#  DEPARTAMENTO,PROVINICA,DISTRITO,CULTIVO,CAMPANA,AGO,SEP,OCT,NOV,DIC,ENE,FEB,MAR,ABR,MAY,JUN,JUL

df = pd.read_csv(url, skipinitialspace=True, usecols=fields)

dict_departament = {'AMAZONAS': 1, 'ANCASH': 2, 'APURIMAC': 3, 'AREQUIPA': 4, 'CAJAMARCA': 5, 'CUSCO': 6, 'HUANCAVELICA': 7, 'HUANUCO': 8, 'ICA': 9, 'JUNIN': 10, 'LA LIBERTAD': 11,
                    'LAMBAYEQUE': 12, 'LIMA': 13, 'LORETO': 14, 'MADRE DE DIOS': 15, 'MOQUEGUA': 16, 'PASCO': 17, 'PIURA': 18, 'PUNO': 19, 'SAN MARTIN': 20, 'TACNA': 21, 'TUMBES': 22, 'UCAYALI': 23}


datacultivo = []
for i in df.index:
    datacultivo.append(dict_departament.get(df['DEPARTAMENTO'][i]))

df["DEPARTAMENTON"] = datacultivo

features = ['DEPARTAMENTON', 'AGO', 'SEP', 'OCT', 'NOV', 'DIC',
            'ENE', 'FEB', 'MAR', 'ABR', 'MAY', 'JUN', 'JUL']

x = df.loc[:, features].values

y = df.loc[:, ['DEPARTAMENTO']].values
x = StandardScaler().fit_transform(x)

print(df)
print(x)

pca = PCA(n_components=2)

principalComponents = pca.fit_transform(x)
newdat = pca.transform([[1, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0]])
print(newdat)
principalDF = pd.DataFrame(data=principalComponents, columns=[
                           'component1', 'component2'])
print(principalDF)

finalDF = pd.concat(
    [principalDF, df[['DEPARTAMENTO', 'DEPARTAMENTON', 'CULTIVO']]], axis=1)
print(finalDF)
finalDF.to_csv('CSV/PAC/IntensionSiembraPAC2.csv')

# Visualize 2D Projection
#plt.scatter(principalDF.component1, principalDF.component2)
# plt.show()

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 1, 1)
ax.set_xlabel('Principal Component 1', fontsize=13)
ax.set_ylabel('Princiapl Component 2', fontsize=13)
ax.set_title('2 component PCA', fontsize=15)

targets = ['AMAZONAS', 'ANCHAS', 'APURIMAC', 'AREQUIPA', 'CAJAMARCA', 'CUSCO', 'HUANCAVELICA', 'HUANUCO', 'ICA', 'JUNIN', 'LA LIBERTAD',
           'LAMBAYEQUE', 'LIMA', 'LORETO', 'MADRE DE DIOS', 'MOQUEGUA', 'PASCO', 'PIURA', 'PUNO', 'SAN MARTIN', 'TACNA', 'TUMBES', 'UCAYALI']

# targets = ['Aji', 'Ajo', 'Algodon', 'Arroz cascara', 'Arveja grano seco', 'Arveja grano verde',
#   'Camote', 'Cebada grano', 'Cebolla cabeza blanca o amarilla', 'Cebolla cabeza roja',
#   'Frijol grano seco', 'Haba grano seco', 'Maiz amarillo duro', 'Maiz amilaceo', 'Maiz Choclo',
#    'Olluco', 'Papa blanca', 'Papa color', 'Papa nativa', 'Paprika', 'Quinua', 'Tomate', 'Trigo', ' Yuca', ' Zanahoria', 'Zapallo']

colors = []

for i in range(len(targets)):
    colors.append('#%06X' % randint(0, 0xFFFFFF))

for target, color in zip(targets, colors):
    indicesToKeep = finalDF['DEPARTAMENTO'] == target
    ax.scatter(finalDF.loc[indicesToKeep, 'component1'],
               finalDF.loc[indicesToKeep, 'component2'],
               c=color,
               s=50)
ax.legend(targets)
ax.grid()
plt.show()
