19
19
@pytest .mark .xfail (sys .platform == "win32" , reason = "Results deviate on Windows." , raises = AssertionError )
20
20
def test_pca_numpy_array ():
21
21
"""Test that PCA function gives correct output for Numpy array input."""
22
- pca_array , explained_variances = compute_pca (DATA , 2 )
22
+ pca_array , principal_components , explained_variances , explained_variance_ratios = compute_pca (DATA , 2 )
23
23
24
- expected_pca_values = np .array ([[- 1.73205081 , 1.11022302e-16 ], [0.0 , 0.0 ], [1.73205081 , 1.11022302e-16 ]])
25
- expected_explained_variances_values = [1.0 , 4.10865055e-33 ]
24
+ expected_pca_array_values = np .array ([[- 1.73205081 , 1.11022302e-16 ], [0.0 , 0.0 ], [1.73205081 , 1.11022302e-16 ]])
25
+ expected_component_values = np .array ([[0.70711 , 0.70711 ], [0.70711 , - 0.70711 ]])
26
+ expected_explained_variance_ratios_values = [1.0 , 4.10865055e-33 ]
26
27
28
+ np .testing .assert_equal (principal_components .size , 4 )
27
29
np .testing .assert_equal (explained_variances .size , 2 )
30
+ np .testing .assert_equal (explained_variance_ratios .size , 2 )
28
31
np .testing .assert_equal (pca_array .shape , DATA .shape )
29
32
30
- np .testing .assert_array_almost_equal (pca_array , expected_pca_values , decimal = 5 )
31
- np .testing .assert_array_almost_equal (explained_variances , expected_explained_variances_values , decimal = 5 )
33
+ np .testing .assert_array_almost_equal (pca_array , expected_pca_array_values , decimal = 5 )
34
+ np .testing .assert_array_almost_equal (principal_components , expected_component_values , decimal = 5 )
35
+ np .testing .assert_array_almost_equal (
36
+ explained_variance_ratios , expected_explained_variance_ratios_values , decimal = 5
37
+ )
32
38
33
39
34
40
@pytest .mark .xfail (sys .platform == "win32" , reason = "Results deviate on Windows." , raises = AssertionError )
35
41
def test_pca_df ():
36
42
"""Test that PCA function gives correct output for DF input."""
37
43
data_df = pd .DataFrame (data = DATA , columns = ["A" , "B" ])
38
44
39
- pca_df , explained_variances = compute_pca (data_df , 2 )
45
+ pca_df , principal_components , explained_variances , explained_variance_ratios = compute_pca (data_df , 2 )
40
46
41
47
expected_columns = ["principal_component_1" , "principal_component_2" ]
42
48
expected_pca_values = np .array ([[- 1.73205081 , 1.11022302e-16 ], [0.0 , 0.0 ], [1.73205081 , 1.11022302e-16 ]])
43
- expected_explained_variances_values = [1.0 , 4.10865055e-33 ]
49
+ expected_component_values = np .array ([[0.70711 , 0.70711 ], [0.70711 , - 0.70711 ]])
50
+ expected_explained_variance_ratios_values = [1.0 , 4.10865055e-33 ]
44
51
52
+ np .testing .assert_equal (principal_components .size , 4 )
45
53
np .testing .assert_equal (explained_variances .size , 2 )
54
+ np .testing .assert_equal (explained_variance_ratios .size , 2 )
46
55
np .testing .assert_equal (list (pca_df .columns ), expected_columns )
47
56
np .testing .assert_equal (pca_df .shape , data_df .shape )
48
57
49
58
np .testing .assert_array_almost_equal (pca_df .values , expected_pca_values , decimal = 5 )
50
- np .testing .assert_array_almost_equal (explained_variances , expected_explained_variances_values , decimal = 5 )
59
+ np .testing .assert_array_almost_equal (principal_components , expected_component_values , decimal = 5 )
60
+ np .testing .assert_array_almost_equal (
61
+ explained_variance_ratios , expected_explained_variance_ratios_values , decimal = 5
62
+ )
51
63
52
64
53
65
@pytest .mark .xfail (sys .platform == "win32" , reason = "Results deviate on Windows." , raises = AssertionError )
@@ -57,66 +69,96 @@ def test_pca_gdf():
57
69
data = DATA , columns = ["A" , "B" ], geometry = [Point (1 , 2 ), Point (2 , 1 ), Point (3 , 3 )], crs = "EPSG:4326"
58
70
)
59
71
60
- pca_gdf , explained_variances = compute_pca (data_gdf , 2 )
72
+ pca_gdf , principal_components , explained_variances , explained_variance_ratios = compute_pca (data_gdf , 2 )
61
73
62
74
expected_columns = ["principal_component_1" , "principal_component_2" , "geometry" ]
63
75
expected_pca_values = np .array ([[- 1.73205081 , 1.11022302e-16 ], [0.0 , 0.0 ], [1.73205081 , 1.11022302e-16 ]])
64
- expected_explained_variances_values = [1.0 , 4.10865055e-33 ]
76
+ expected_component_values = np .array ([[0.70711 , 0.70711 ], [0.70711 , - 0.70711 ]])
77
+ expected_explained_variance_ratios_values = [1.0 , 4.10865055e-33 ]
65
78
79
+ np .testing .assert_equal (principal_components .size , 4 )
66
80
np .testing .assert_equal (explained_variances .size , 2 )
81
+ np .testing .assert_equal (explained_variance_ratios .size , 2 )
67
82
np .testing .assert_equal (list (pca_gdf .columns ), expected_columns )
68
83
np .testing .assert_equal (pca_gdf .shape , data_gdf .shape )
69
84
70
85
np .testing .assert_array_almost_equal (pca_gdf .drop (columns = ["geometry" ]).values , expected_pca_values , decimal = 5 )
71
- np .testing .assert_array_almost_equal (explained_variances , expected_explained_variances_values , decimal = 5 )
86
+ np .testing .assert_array_almost_equal (principal_components , expected_component_values , decimal = 5 )
87
+ np .testing .assert_array_almost_equal (
88
+ explained_variance_ratios , expected_explained_variance_ratios_values , decimal = 5
89
+ )
72
90
73
91
74
92
@pytest .mark .xfail (sys .platform == "win32" , reason = "Results deviate on Windows." , raises = AssertionError )
75
93
def test_pca_with_nan_removal ():
76
94
"""Test that PCA function gives correct output for Numpy array input that has NaN values and remove strategy."""
77
95
data = np .array ([[1 , 1 ], [2 , np .nan ], [3 , 3 ]])
78
- pca_array , explained_variances = compute_pca (data , 2 , nodata_handling = "remove" )
96
+ pca_array , principal_components , explained_variances , explained_variance_ratios = compute_pca (
97
+ data , 2 , nodata_handling = "remove"
98
+ )
79
99
80
100
expected_pca_values = np .array ([[- 1.414 , 0.0 ], [np .nan , np .nan ], [1.414 , 0.0 ]])
81
- expected_explained_variances_values = [1.0 , 0.0 ]
101
+ expected_component_values = np .array ([[0.70711 , 0.70711 ], [- 0.70711 , 0.70711 ]])
102
+ expected_explained_variance_ratios_values = [1.0 , 0.0 ]
82
103
104
+ np .testing .assert_equal (principal_components .size , 4 )
83
105
np .testing .assert_equal (explained_variances .size , 2 )
106
+ np .testing .assert_equal (explained_variance_ratios .size , 2 )
84
107
np .testing .assert_equal (pca_array .shape , DATA .shape )
85
108
86
109
np .testing .assert_array_almost_equal (pca_array , expected_pca_values , decimal = 3 )
87
- np .testing .assert_array_almost_equal (explained_variances , expected_explained_variances_values , decimal = 3 )
110
+ np .testing .assert_array_almost_equal (principal_components , expected_component_values , decimal = 3 )
111
+ np .testing .assert_array_almost_equal (
112
+ explained_variance_ratios , expected_explained_variance_ratios_values , decimal = 3
113
+ )
88
114
89
115
90
116
@pytest .mark .xfail (sys .platform == "win32" , reason = "Results deviate on Windows." , raises = AssertionError )
91
117
def test_pca_with_nan_replace ():
92
118
"""Test that PCA function gives correct output for Numpy array input that has NaN values and replace strategy."""
93
119
data = np .array ([[1 , 1 ], [2 , np .nan ], [3 , 3 ]])
94
- pca_array , explained_variances = compute_pca (data , 2 , nodata_handling = "replace" )
120
+ pca_array , principal_components , explained_variances , explained_variance_ratios = compute_pca (
121
+ data , 2 , nodata_handling = "replace"
122
+ )
95
123
96
124
expected_pca_values = np .array ([[- 1.73205 , 1.11022e-16 ], [0 , 0 ], [1.73205 , 1.11022e-16 ]])
97
- expected_explained_variances_values = [1.0 , 4.10865e-33 ]
125
+ expected_component_values = np .array ([[0.707 , 0.707 ], [0.707 , - 0.707 ]])
126
+ expected_explained_variance_ratios_values = [1.0 , 4.10865e-33 ]
98
127
128
+ np .testing .assert_equal (principal_components .size , 4 )
99
129
np .testing .assert_equal (explained_variances .size , 2 )
130
+ np .testing .assert_equal (explained_variance_ratios .size , 2 )
100
131
np .testing .assert_equal (pca_array .shape , DATA .shape )
101
132
102
133
np .testing .assert_array_almost_equal (pca_array , expected_pca_values , decimal = 3 )
103
- np .testing .assert_array_almost_equal (explained_variances , expected_explained_variances_values , decimal = 3 )
134
+ np .testing .assert_array_almost_equal (principal_components , expected_component_values , decimal = 3 )
135
+ np .testing .assert_array_almost_equal (
136
+ explained_variance_ratios , expected_explained_variance_ratios_values , decimal = 3
137
+ )
104
138
105
139
106
140
@pytest .mark .xfail (sys .platform == "win32" , reason = "Results deviate on Windows." , raises = AssertionError )
107
141
def test_pca_with_nodata_removal ():
108
142
"""Test that PCA function gives correct output for input that has specified nodata values and removal strategy."""
109
143
data = np .array ([[1 , 1 ], [2 , - 9999 ], [3 , 3 ]])
110
- pca_array , explained_variances = compute_pca (data , 2 , nodata_handling = "remove" , nodata = - 9999 )
144
+ pca_array , principal_components , explained_variances , explained_variance_ratios = compute_pca (
145
+ data , 2 , nodata_handling = "remove" , nodata = - 9999
146
+ )
111
147
112
148
expected_pca_values = np .array ([[- 1.414 , 0.0 ], [np .nan , np .nan ], [1.414 , 0.0 ]])
113
- expected_explained_variances_values = [1.0 , 0.0 ]
149
+ expected_component_values = np .array ([[0.707 , 0.707 ], [- 0.707 , 0.707 ]])
150
+ expected_explained_variance_ratios_values = [1.0 , 0.0 ]
114
151
152
+ np .testing .assert_equal (principal_components .size , 4 )
115
153
np .testing .assert_equal (explained_variances .size , 2 )
154
+ np .testing .assert_equal (explained_variance_ratios .size , 2 )
116
155
np .testing .assert_equal (pca_array .shape , DATA .shape )
117
156
118
157
np .testing .assert_array_almost_equal (pca_array , expected_pca_values , decimal = 3 )
119
- np .testing .assert_array_almost_equal (explained_variances , expected_explained_variances_values , decimal = 3 )
158
+ np .testing .assert_array_almost_equal (principal_components , expected_component_values , decimal = 3 )
159
+ np .testing .assert_array_almost_equal (
160
+ explained_variance_ratios , expected_explained_variance_ratios_values , decimal = 3
161
+ )
120
162
121
163
122
164
def test_pca_empty_data ():
0 commit comments