Skip to content

Commit 82db606

Browse files
committed
cli: update PCA CLI functions
1 parent 1f908d8 commit 82db606

File tree

1 file changed

+33
-19
lines changed

1 file changed

+33
-19
lines changed

eis_toolkit/cli.py

+33-19
Original file line numberDiff line numberDiff line change
@@ -701,7 +701,7 @@ def parallel_coordinates_cli(
701701
def compute_pca_raster_cli(
702702
input_rasters: INPUT_FILES_ARGUMENT,
703703
output_raster: OUTPUT_FILE_OPTION,
704-
number_of_components: int = typer.Option(),
704+
number_of_components: Optional[int] = None,
705705
# NOTE: Omitted scaler type selection here since the parameter might be deleted from PCA func
706706
nodata_handling: Annotated[NodataHandling, typer.Option(case_sensitive=False)] = NodataHandling.remove,
707707
# NOTE: Omitted nodata parameter. Should use raster nodata.
@@ -715,27 +715,34 @@ def compute_pca_raster_cli(
715715
stacked_array, profiles = read_and_stack_rasters(input_rasters, nodata_handling="convert_to_nan")
716716
typer.echo("Progress: 25%")
717717

718-
pca_array, variance_ratios = compute_pca(
718+
transformed_data, principal_components, variances, variance_ratios = compute_pca(
719719
data=stacked_array, number_of_components=number_of_components, nodata_handling=get_enum_values(nodata_handling)
720720
)
721721

722722
# Fill np.nan with nodata before writing data to raster
723-
pca_array[pca_array == np.nan] = -9999
723+
transformed_data[transformed_data == np.nan] = -9999
724724
out_profile = profiles[0]
725725
out_profile["nodata"] = -9999
726726

727727
# Update nr of bands
728-
out_profile["count"] = number_of_components
728+
out_profile["count"] = len(variances)
729729

730730
# Create dictionary from the variance ratios array
731-
variances_ratios_dict = {}
732-
for i, variance_ratio in enumerate(variance_ratios):
733-
name = "PC " + str(i) + " explained variance"
734-
variances_ratios_dict[name] = variance_ratio
735-
json_str = json.dumps(variances_ratios_dict)
731+
# variances_ratios_dict = {}
732+
# for i, variance_ratio in enumerate(variance_ratios):
733+
# name = "PC " + str(i) + " explained variance"
734+
# variances_ratios_dict[name] = variance_ratio
735+
# json_str = json.dumps(variances_ratios_dict)
736+
737+
out_dict = {
738+
"principal_components": np.round(principal_components, 4).tolist(),
739+
"explained_variances": np.round(variances, 4).tolist(),
740+
"explained_variance_ratios": np.round(variance_ratios, 4).tolist(),
741+
}
742+
json_str = json.dumps(out_dict)
736743

737744
with rasterio.open(output_raster, "w", **out_profile) as dst:
738-
dst.write(pca_array)
745+
dst.write(transformed_data)
739746

740747
typer.echo("Progress: 100%")
741748

@@ -748,7 +755,7 @@ def compute_pca_raster_cli(
748755
def compute_pca_vector_cli(
749756
input_vector: INPUT_FILE_OPTION,
750757
output_vector: OUTPUT_FILE_OPTION,
751-
number_of_components: int = typer.Option(),
758+
number_of_components: Optional[int] = None,
752759
columns: Annotated[List[str], typer.Option()] = None,
753760
# NOTE: Omitted scaler type selection here since the parameter might be deleted from PCA func
754761
nodata_handling: Annotated[NodataHandling, typer.Option(case_sensitive=False)] = NodataHandling.remove,
@@ -762,7 +769,7 @@ def compute_pca_vector_cli(
762769
gdf = gpd.read_file(input_vector)
763770
typer.echo("Progress: 25%")
764771

765-
pca_gdf, variance_ratios = compute_pca(
772+
transformed_data, principal_components, variances, variance_ratios = compute_pca(
766773
data=gdf,
767774
number_of_components=number_of_components,
768775
columns=columns,
@@ -771,13 +778,20 @@ def compute_pca_vector_cli(
771778
)
772779

773780
# Create dictionary from the variance ratios array
774-
variances_ratios_dict = {}
775-
for i, variance_ratio in enumerate(variance_ratios):
776-
name = "PC " + str(i) + " explained variance"
777-
variances_ratios_dict[name] = variance_ratio
778-
json_str = json.dumps(variances_ratios_dict)
779-
780-
pca_gdf.to_file(output_vector)
781+
# variances_ratios_dict = {}
782+
# for i, variance_ratio in enumerate(variance_ratios):
783+
# name = "PC " + str(i) + " explained variance"
784+
# variances_ratios_dict[name] = variance_ratio
785+
# json_str = json.dumps(variances_ratios_dict)
786+
787+
out_dict = {
788+
"principal_components": np.round(principal_components, 4).tolist(),
789+
"explained_variances": np.round(variances, 4).tolist(),
790+
"explained_variance_ratios": np.round(variance_ratios, 4).tolist(),
791+
}
792+
json_str = json.dumps(out_dict)
793+
794+
transformed_data.to_file(output_vector)
781795
typer.echo("Progress: 100%")
782796

783797
typer.echo(f"Results: {json_str}")

0 commit comments

Comments
 (0)