In [47]:
import pandas as pd
import numpy as np
import sklearn as sk

In [16]:
data = pd.read_csv("QuercusOaxaca_amb.txt")

In [17]:
data.head()


Out[17]:
FID FUENTE Seccion Especie LATITUD LONGITUD Elevacion bio_1 bio_2 bio_3 ... bio_9 bio_10 bio_11 bio_12 bio_13 bio_14 bio_15 bio_17 bio_18 bio_19
0 0 ANDRES Quercus oleoides 18.2709 -96.3813 201 259 102 57 ... 233 283 225 2336 510 31 94 104 562 114
1 1 ANTERIOR Quercus glabrescens 18.2572 -96.9739 0 147 138 67 ... 151 166 124 1618 362 17 89 70 331 160
2 2 ANDRES Quercus oleoides 18.2213 -96.3788 201 242 98 57 ... 236 267 209 3070 627 56 85 183 667 216
3 3 ANDRES Lobatae pinnativenulosa 18.2187 -96.9018 1801 165 123 64 ... 169 186 142 2022 433 25 87 95 457 191
4 4 ANDRES Quercus corrugata 18.1683 -97.0031 2269 149 139 67 ... 154 169 126 1352 292 15 88 60 303 127

5 rows × 25 columns


In [18]:
data = data.drop(['FID','FUENTE'], axis=1)

In [19]:
data.head()


Out[19]:
Seccion Especie LATITUD LONGITUD Elevacion bio_1 bio_2 bio_3 bio_4 bio_5 ... bio_9 bio_10 bio_11 bio_12 bio_13 bio_14 bio_15 bio_17 bio_18 bio_19
0 Quercus oleoides 18.2709 -96.3813 201 259 102 57 2326 349 ... 233 283 225 2336 510 31 94 104 562 114
1 Quercus glabrescens 18.2572 -96.9739 0 147 138 67 1613 248 ... 151 166 124 1618 362 17 89 70 331 160
2 Quercus oleoides 18.2213 -96.3788 201 242 98 57 2257 328 ... 236 267 209 3070 627 56 85 183 667 216
3 Lobatae pinnativenulosa 18.2187 -96.9018 1801 165 123 64 1697 261 ... 169 186 142 2022 433 25 87 95 457 191
4 Quercus corrugata 18.1683 -97.0031 2269 149 139 67 1619 252 ... 154 169 126 1352 292 15 88 60 303 127

5 rows × 23 columns


In [28]:
data["Nombre"] = data["Seccion"] + " " +data["Especie"]

In [29]:
data.head()


Out[29]:
Seccion Especie LATITUD LONGITUD Elevacion bio_1 bio_2 bio_3 bio_4 bio_5 ... bio_10 bio_11 bio_12 bio_13 bio_14 bio_15 bio_17 bio_18 bio_19 Nombre
0 Quercus oleoides 18.2709 -96.3813 201 259 102 57 2326 349 ... 283 225 2336 510 31 94 104 562 114 Quercus oleoides
1 Quercus glabrescens 18.2572 -96.9739 0 147 138 67 1613 248 ... 166 124 1618 362 17 89 70 331 160 Quercus glabrescens
2 Quercus oleoides 18.2213 -96.3788 201 242 98 57 2257 328 ... 267 209 3070 627 56 85 183 667 216 Quercus oleoides
3 Lobatae pinnativenulosa 18.2187 -96.9018 1801 165 123 64 1697 261 ... 186 142 2022 433 25 87 95 457 191 Lobatae pinnativenulosa
4 Quercus corrugata 18.1683 -97.0031 2269 149 139 67 1619 252 ... 169 126 1352 292 15 88 60 303 127 Quercus corrugata

5 rows × 24 columns


In [36]:
cols = data.columns.tolist()

In [31]:
cols


Out[31]:
['Seccion',
 'Especie',
 'LATITUD',
 'LONGITUD',
 'Elevacion',
 'bio_1',
 'bio_2',
 'bio_3',
 'bio_4',
 'bio_5',
 'bio_6',
 'bio_7',
 'bio_8',
 'bio_9',
 'bio_10',
 'bio_11',
 'bio_12',
 'bio_13',
 'bio_14',
 'bio_15',
 'bio_17',
 'bio_18',
 'bio_19',
 'Nombre']

In [37]:
cols =  [cols[-1]] + cols[2:-1]

In [38]:
cols


Out[38]:
['Nombre',
 'LATITUD',
 'LONGITUD',
 'Elevacion',
 'bio_1',
 'bio_2',
 'bio_3',
 'bio_4',
 'bio_5',
 'bio_6',
 'bio_7',
 'bio_8',
 'bio_9',
 'bio_10',
 'bio_11',
 'bio_12',
 'bio_13',
 'bio_14',
 'bio_15',
 'bio_17',
 'bio_18',
 'bio_19']

In [ ]:


In [39]:
df = data

In [41]:
df = df.reindex(cols, axis=1)

In [43]:
features = cols[1:]

In [44]:
features


Out[44]:
['LATITUD',
 'LONGITUD',
 'Elevacion',
 'bio_1',
 'bio_2',
 'bio_3',
 'bio_4',
 'bio_5',
 'bio_6',
 'bio_7',
 'bio_8',
 'bio_9',
 'bio_10',
 'bio_11',
 'bio_12',
 'bio_13',
 'bio_14',
 'bio_15',
 'bio_17',
 'bio_18',
 'bio_19']

In [56]:
df.head()


Out[56]:
Nombre LATITUD LONGITUD Elevacion bio_1 bio_2 bio_3 bio_4 bio_5 bio_6 ... bio_9 bio_10 bio_11 bio_12 bio_13 bio_14 bio_15 bio_17 bio_18 bio_19
0 Quercus oleoides 18.2709 -96.3813 201 259 102 57 2326 349 171 ... 233 283 225 2336 510 31 94 104 562 114
1 Quercus glabrescens 18.2572 -96.9739 0 147 138 67 1613 248 45 ... 151 166 124 1618 362 17 89 70 331 160
2 Quercus oleoides 18.2213 -96.3788 201 242 98 57 2257 328 158 ... 236 267 209 3070 627 56 85 183 667 216
3 Lobatae pinnativenulosa 18.2187 -96.9018 1801 165 123 64 1697 261 71 ... 169 186 142 2022 433 25 87 95 457 191
4 Quercus corrugata 18.1683 -97.0031 2269 149 139 67 1619 252 46 ... 154 169 126 1352 292 15 88 60 303 127

5 rows × 22 columns


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

In [46]:
x


Out[46]:
array([[ 18.2709, -96.3813, 201.    , ..., 104.    , 562.    , 114.    ],
       [ 18.2572, -96.9739,   0.    , ...,  70.    , 331.    , 160.    ],
       [ 18.2213, -96.3788, 201.    , ..., 183.    , 667.    , 216.    ],
       ...,
       [ 15.8453, -96.4594, 401.    , ...,  14.    , 655.    ,  35.    ],
       [ 15.8167, -96.45  , 401.    , ...,  14.    , 672.    ,  37.    ],
       [ 15.7333, -96.45  , 201.    , ...,   8.    , 492.    ,  98.    ]])

In [48]:
from sklearn.preprocessing import StandardScaler

In [49]:
x = StandardScaler().fit_transform(x)

In [50]:
x


Out[50]:
array([[ 2.07035808,  0.40981929, -2.3395737 , ...,  1.44523577,
         2.09408518,  0.6487078 ],
       [ 2.04537004, -0.30248064, -2.63442202, ...,  0.57786813,
         0.0733656 ,  1.37061063],
       [ 1.97989043,  0.41282427, -2.3395737 , ...,  3.46059   ,
         3.01259408,  2.24944885],
       ...,
       [-2.35380197,  0.31594379, -2.04619229, ..., -0.8507374 ,
         2.90762164, -0.59108183],
       [-2.40596678,  0.3272425 , -2.04619229, ..., -0.8507374 ,
         3.0563326 , -0.55969475],
       [-2.55808376,  0.3272425 , -2.3395737 , ..., -1.00380228,
         1.48174591,  0.39761117]])

In [51]:
from sklearn.decomposition import PCA

In [52]:
pca = PCA(n_components=2)

In [53]:
principalComponents = pca.fit_transform(x)

In [54]:
pcaDF = pd.DataFrame(data = principalComponents, columns = ['pca_1', 'pca_2'])

In [55]:
pcaDF


Out[55]:
pca_1 pca_2
0 9.449774 0.437591
1 0.065788 2.415762
2 10.216548 4.246851
3 1.689634 3.563667
4 -1.176141 1.991099
5 -0.726449 -2.531841
6 1.165470 0.883949
7 0.414801 1.062982
8 0.147880 1.362250
9 -1.957309 -1.754035
10 -2.182782 -1.569147
11 1.005858 3.140920
12 0.415054 1.062101
13 -0.737800 1.671515
14 -0.863354 2.779441
15 1.165470 0.883949
16 0.963026 3.155865
17 5.747941 6.303125
18 9.105356 -0.109177
19 9.020556 -0.071821
20 5.837370 6.268565
21 -1.226010 2.010882
22 -1.225992 2.010829
23 -1.207128 2.003455
24 -1.492949 2.683918
25 0.056129 -2.553677
26 -0.636712 -2.808285
27 -0.746588 -2.168465
28 5.878260 5.046278
29 -0.746588 -2.168465
... ... ...
2113 3.701032 -1.963924
2114 3.707276 -2.198353
2115 3.707383 -2.198372
2116 3.778838 -2.409532
2117 4.106166 -2.271902
2118 2.073537 -1.402705
2119 4.799517 -3.991811
2120 2.333423 -0.672616
2121 5.335608 -4.588135
2122 5.429638 -4.368473
2123 3.770644 -0.454002
2124 1.514292 -1.688969
2125 5.429638 -4.368473
2126 4.042647 -0.497829
2127 4.014949 -1.395792
2128 4.424748 -2.964044
2129 4.013883 -0.141453
2130 5.420873 -4.313808
2131 4.188501 -3.806384
2132 5.439655 -3.649874
2133 4.490995 -2.557474
2134 5.420586 -4.097529
2135 4.490995 -2.557474
2136 5.439655 -3.649874
2137 5.485377 -6.562078
2138 4.188501 -3.806384
2139 5.555324 -4.945398
2140 5.495455 -5.136308
2141 5.472495 -5.089639
2142 5.521322 -5.442170

2143 rows × 2 columns


In [57]:
finalDF = pd.concat([df[['Nombre']], pcaDF], axis = 1)

In [58]:
finalDF.head()


Out[58]:
pca_1 pca_2 Nombre
0 9.449774 0.437591 Quercus oleoides
1 0.065788 2.415762 Quercus glabrescens
2 10.216548 4.246851 Quercus oleoides
3 1.689634 3.563667 Lobatae pinnativenulosa
4 -1.176141 1.991099 Quercus corrugata

In [60]:
cols = finalDF.columns.tolist()

In [62]:
cols = [cols[-1]] + cols[0:-1]

In [63]:
cols


Out[63]:
['Nombre', 'pca_1', 'pca_2']

In [65]:
finalDF = finalDF.reindex(cols, axis=1)

In [67]:
finalDF.to_csv("QuercusPCA.txt")

In [ ]:
impo