import pandas as pd
from sklearn import preprocessing
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

import numpy as np

df = pd.read_csv("iris.csv")

features=df.columns[:4]
x=df[features]
y=df["Species"]

num_features = x.shape[1]

#standardizacija podataka
scaler = preprocessing.StandardScaler().fit(x)
x =pd.DataFrame(scaler.transform(x))
x.columns = features

#primena pca
pca=PCA()

#pca=PCA(n_components=2)
pca.fit(x)
x_pca = pd.DataFrame(pca.transform(x))
pca_columns = ['pca%d'%i for i in range(1, pca.n_components_+1)]
x_pca.columns=pca_columns

print('components_ ')
for i, component in zip(range(1, pca.n_components_+1), pca.components_):
    pca_desc="pca%d"%i + "="
    for j, value in zip(range(0, num_features), component):
        pca_desc+="%.2f*%s"%(value, features[j])
    print(pca_desc)

print()

print('explained_variance_  ')
for i, ev in zip(range(1, num_features+1), pca.explained_variance_):
    print("pca%d: %.10f"%(i,ev))
print()

print()

print('explained_variance_ratio_  ')

for i, evr in zip(range(1, num_features+1), pca.explained_variance_ratio_):
    print("pca%d: %.10f"%(i,evr))
print()


plt.figure()
plt.bar(pca_columns,  pca.explained_variance_ratio_,  label='Procenat varijanse')
plt.plot(pca_columns,  np.cumsum(pca.explained_variance_ratio_), color='darkorange',
         label='Kumulativna varijansa',  marker='x')


plt.xlabel('Glavne komponente')
plt.ylabel('Procent objasnjene varijanse')
plt.legend()

plt.show()

plt.figure()
colors = ['red', 'blue', 'gold',  'm', 'plum', 'orange', 'black']

classes =y.unique()
for i, class_value in zip(range(0, len(classes)), classes):
    class_samples = x_pca.iloc[ y[ y == class_value].index]
    plt.scatter(class_samples['pca1'], class_samples['pca2'], color=colors[i],
                s=10, marker='o', label="class %s" % class_value)

plt.legend(loc='upper right')
plt.show()



