numdaplot 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- numdaplot/__init__.py +506 -0
- numdaplot/arrays/__init__.py +5 -0
- numdaplot/arrays/array.py +92 -0
- numdaplot/arrays/array_arithmetic.py +404 -0
- numdaplot/arrays/array_calculation.py +143 -0
- numdaplot/arrays/array_conversion.py +150 -0
- numdaplot/arrays/array_creation.py +371 -0
- numdaplot/arrays/array_data.py +281 -0
- numdaplot/arrays/array_layout.py +179 -0
- numdaplot/arrays/array_logic.py +227 -0
- numdaplot/arrays/array_reflected_arithmetic.py +334 -0
- numdaplot/arrays/array_refusals.py +339 -0
- numdaplot/arrays/array_selection.py +195 -0
- numdaplot/arrays/array_sorting.py +59 -0
- numdaplot/arrays/axis_number.py +58 -0
- numdaplot/arrays/calculation/__init__.py +5 -0
- numdaplot/arrays/calculation/counting_statistics.py +325 -0
- numdaplot/arrays/calculation/location_statistics.py +268 -0
- numdaplot/arrays/calculation/math_function_values.py +183 -0
- numdaplot/arrays/calculation/statistic_values.py +209 -0
- numdaplot/arrays/calculation/time_function_values.py +419 -0
- numdaplot/arrays/conversion/__init__.py +5 -0
- numdaplot/arrays/conversion/array_text.py +62 -0
- numdaplot/arrays/conversion/equality_check.py +72 -0
- numdaplot/arrays/conversion/python_values.py +70 -0
- numdaplot/arrays/conversion/time_text.py +290 -0
- numdaplot/arrays/creation/__init__.py +5 -0
- numdaplot/arrays/creation/date_parts.py +89 -0
- numdaplot/arrays/creation/date_parts_values.py +437 -0
- numdaplot/arrays/creation/distribution.py +54 -0
- numdaplot/arrays/creation/filled_values.py +58 -0
- numdaplot/arrays/creation/list_conversion.py +311 -0
- numdaplot/arrays/creation/list_shape.py +97 -0
- numdaplot/arrays/creation/normal.py +65 -0
- numdaplot/arrays/creation/numpy_conversion.py +149 -0
- numdaplot/arrays/creation/random_integers.py +104 -0
- numdaplot/arrays/creation/random_values.py +97 -0
- numdaplot/arrays/creation/range_values.py +73 -0
- numdaplot/arrays/creation/spacing.py +84 -0
- numdaplot/arrays/creation/spacing_values.py +63 -0
- numdaplot/arrays/creation/uniform.py +63 -0
- numdaplot/arrays/equality.py +68 -0
- numdaplot/arrays/layout/__init__.py +5 -0
- numdaplot/arrays/layout/sorting_values.py +113 -0
- numdaplot/arrays/layout/unique_values.py +49 -0
- numdaplot/arrays/mapping/__init__.py +5 -0
- numdaplot/arrays/mapping/mapped_values.py +286 -0
- numdaplot/arrays/mapping/unmatched.py +50 -0
- numdaplot/arrays/mapping/value_change.py +55 -0
- numdaplot/arrays/mapping/value_mapping.py +161 -0
- numdaplot/arrays/math_functions/__init__.py +5 -0
- numdaplot/arrays/math_functions/absolute.py +27 -0
- numdaplot/arrays/math_functions/cosine.py +28 -0
- numdaplot/arrays/math_functions/exponential.py +27 -0
- numdaplot/arrays/math_functions/logarithm.py +72 -0
- numdaplot/arrays/math_functions/math_function.py +58 -0
- numdaplot/arrays/math_functions/round.py +58 -0
- numdaplot/arrays/math_functions/sine.py +28 -0
- numdaplot/arrays/math_functions/square_root.py +27 -0
- numdaplot/arrays/operations/__init__.py +5 -0
- numdaplot/arrays/operations/boolean_operands.py +48 -0
- numdaplot/arrays/operations/combination.py +157 -0
- numdaplot/arrays/operations/float_errors.py +170 -0
- numdaplot/arrays/operations/integer_bounds.py +175 -0
- numdaplot/arrays/operations/integer_rules.py +397 -0
- numdaplot/arrays/operations/operand.py +139 -0
- numdaplot/arrays/operations/time_arithmetic.py +479 -0
- numdaplot/arrays/operations/time_bounds.py +286 -0
- numdaplot/arrays/operations/time_result_bounds.py +397 -0
- numdaplot/arrays/operations/transformation.py +54 -0
- numdaplot/arrays/operations/type_requirements.py +94 -0
- numdaplot/arrays/replacement.py +66 -0
- numdaplot/arrays/selection/__init__.py +5 -0
- numdaplot/arrays/selection/comparison_masks.py +131 -0
- numdaplot/arrays/selection/membership_masks.py +118 -0
- numdaplot/arrays/selection/missing_mask.py +50 -0
- numdaplot/arrays/selection/region_index.py +178 -0
- numdaplot/arrays/selection/replaced_values.py +120 -0
- numdaplot/arrays/selection/rule_mask.py +83 -0
- numdaplot/arrays/selection/time_reference.py +172 -0
- numdaplot/arrays/shape.py +74 -0
- numdaplot/arrays/type_match.py +51 -0
- numdaplot/data_types/__init__.py +5 -0
- numdaplot/data_types/library.py +57 -0
- numdaplot/data_types/numpy_mapping.py +207 -0
- numdaplot/data_types/pandas_mapping.py +114 -0
- numdaplot/data_types/time_of_day.py +292 -0
- numdaplot/data_types/type.py +224 -0
- numdaplot/data_types/value_family.py +149 -0
- numdaplot/data_types/value_type.py +147 -0
- numdaplot/dates/__init__.py +5 -0
- numdaplot/dates/custom_date_format.py +83 -0
- numdaplot/dates/date_format.py +120 -0
- numdaplot/dates/date_part.py +59 -0
- numdaplot/dates/date_part_unit.py +153 -0
- numdaplot/dates/date_period.py +57 -0
- numdaplot/dates/duration_in.py +58 -0
- numdaplot/dates/duration_unit.py +90 -0
- numdaplot/dates/period_unit.py +101 -0
- numdaplot/dates/time_function.py +56 -0
- numdaplot/dates/time_zone.py +68 -0
- numdaplot/dates/time_zone_change.py +71 -0
- numdaplot/dates/time_zone_mode.py +81 -0
- numdaplot/dates/to_duration.py +58 -0
- numdaplot/errors/__init__.py +7 -0
- numdaplot/errors/broadcast_warning.py +36 -0
- numdaplot/errors/calculation_warning.py +35 -0
- numdaplot/errors/cell_out_of_range_error.py +77 -0
- numdaplot/errors/column_not_found_error.py +64 -0
- numdaplot/errors/conflicting_settings_error.py +60 -0
- numdaplot/errors/dimension_error.py +62 -0
- numdaplot/errors/display_warning.py +32 -0
- numdaplot/errors/duplicate_column_error.py +82 -0
- numdaplot/errors/duplicate_label_error.py +55 -0
- numdaplot/errors/duplicate_statistic_error.py +55 -0
- numdaplot/errors/duplicate_value_error.py +54 -0
- numdaplot/errors/empty_array_error.py +55 -0
- numdaplot/errors/empty_list_error.py +52 -0
- numdaplot/errors/empty_region_error.py +34 -0
- numdaplot/errors/empty_text_error.py +34 -0
- numdaplot/errors/empty_total_error.py +62 -0
- numdaplot/errors/empty_values_error.py +34 -0
- numdaplot/errors/file_access_error.py +70 -0
- numdaplot/errors/file_exists_error.py +62 -0
- numdaplot/errors/file_not_found_error.py +56 -0
- numdaplot/errors/incompatible_charts_error.py +80 -0
- numdaplot/errors/incompatible_types_error.py +104 -0
- numdaplot/errors/integer_overflow_error.py +61 -0
- numdaplot/errors/invalid_base_error.py +52 -0
- numdaplot/errors/invalid_bin_width_error.py +66 -0
- numdaplot/errors/invalid_bounds_error.py +58 -0
- numdaplot/errors/invalid_chart_data_error.py +81 -0
- numdaplot/errors/invalid_color_count_error.py +63 -0
- numdaplot/errors/invalid_color_error.py +51 -0
- numdaplot/errors/invalid_column_name_error.py +52 -0
- numdaplot/errors/invalid_conversion_error.py +119 -0
- numdaplot/errors/invalid_count_error.py +61 -0
- numdaplot/errors/invalid_date_format_error.py +51 -0
- numdaplot/errors/invalid_deviation_error.py +52 -0
- numdaplot/errors/invalid_fraction_error.py +51 -0
- numdaplot/errors/invalid_label_count_error.py +61 -0
- numdaplot/errors/invalid_limits_error.py +111 -0
- numdaplot/errors/invalid_opacity_error.py +52 -0
- numdaplot/errors/invalid_point_size_error.py +52 -0
- numdaplot/errors/invalid_position_error.py +106 -0
- numdaplot/errors/invalid_resolution_error.py +51 -0
- numdaplot/errors/invalid_rotation_error.py +53 -0
- numdaplot/errors/invalid_seed_error.py +53 -0
- numdaplot/errors/invalid_separator_error.py +52 -0
- numdaplot/errors/invalid_shape_error.py +52 -0
- numdaplot/errors/invalid_sheet_name_error.py +54 -0
- numdaplot/errors/invalid_size_error.py +58 -0
- numdaplot/errors/invalid_step_error.py +77 -0
- numdaplot/errors/invalid_suffixes_error.py +61 -0
- numdaplot/errors/invalid_time_zone_change_error.py +63 -0
- numdaplot/errors/invalid_type_error.py +79 -0
- numdaplot/errors/irregular_list_error.py +36 -0
- numdaplot/errors/join_relation_error.py +183 -0
- numdaplot/errors/missing_dependency_error.py +58 -0
- numdaplot/errors/missing_type_error.py +36 -0
- numdaplot/errors/missing_value_error.py +62 -0
- numdaplot/errors/not_single_value_error.py +53 -0
- numdaplot/errors/numdaplot_error.py +25 -0
- numdaplot/errors/numdaplot_warning.py +34 -0
- numdaplot/errors/occupied_cell_error.py +63 -0
- numdaplot/errors/out_of_domain_error.py +70 -0
- numdaplot/errors/readability_warning.py +35 -0
- numdaplot/errors/refused_operation_error.py +64 -0
- numdaplot/errors/refused_setting_error.py +60 -0
- numdaplot/errors/rejected_dates.py +60 -0
- numdaplot/errors/repeated_key.py +36 -0
- numdaplot/errors/shape_mismatch_error.py +67 -0
- numdaplot/errors/time_overflow_error.py +131 -0
- numdaplot/errors/time_zone_mismatch_error.py +83 -0
- numdaplot/errors/unknown_time_zone_error.py +51 -0
- numdaplot/errors/unmatched_value_error.py +81 -0
- numdaplot/errors/unsupported_image_format_error.py +56 -0
- numdaplot/errors/unsupported_index_error.py +38 -0
- numdaplot/errors/unsupported_missing_error.py +129 -0
- numdaplot/errors/unsupported_type_error.py +62 -0
- numdaplot/errors/value_conversion_error.py +215 -0
- numdaplot/ordering/__init__.py +5 -0
- numdaplot/ordering/missing_position.py +46 -0
- numdaplot/ordering/order.py +46 -0
- numdaplot/package_version.py +36 -0
- numdaplot/plots/__init__.py +5 -0
- numdaplot/plots/chart_layer.py +47 -0
- numdaplot/plots/charts/__init__.py +5 -0
- numdaplot/plots/charts/bar_chart.py +98 -0
- numdaplot/plots/charts/bar_layout.py +58 -0
- numdaplot/plots/charts/bin_count.py +61 -0
- numdaplot/plots/charts/bin_width.py +78 -0
- numdaplot/plots/charts/box_chart.py +97 -0
- numdaplot/plots/charts/cell_values.py +61 -0
- numdaplot/plots/charts/chart.py +59 -0
- numdaplot/plots/charts/chart_settings.py +105 -0
- numdaplot/plots/charts/color_scale.py +147 -0
- numdaplot/plots/charts/heatmap_chart.py +92 -0
- numdaplot/plots/charts/histogram_chart.py +93 -0
- numdaplot/plots/charts/line_chart.py +100 -0
- numdaplot/plots/charts/line_type.py +75 -0
- numdaplot/plots/charts/marker_shape.py +113 -0
- numdaplot/plots/charts/missing_chart.py +60 -0
- numdaplot/plots/charts/missing_map_chart.py +27 -0
- numdaplot/plots/charts/orientation.py +58 -0
- numdaplot/plots/charts/outliers.py +49 -0
- numdaplot/plots/charts/percentages.py +55 -0
- numdaplot/plots/charts/pie_chart.py +87 -0
- numdaplot/plots/charts/scatter_chart.py +159 -0
- numdaplot/plots/charts/value_axis.py +66 -0
- numdaplot/plots/data/__init__.py +5 -0
- numdaplot/plots/data/array_values.py +128 -0
- numdaplot/plots/data/chart_data.py +143 -0
- numdaplot/plots/data/chart_values.py +109 -0
- numdaplot/plots/data/column_reading.py +468 -0
- numdaplot/plots/data/heatmap_values.py +63 -0
- numdaplot/plots/data/missing_cells.py +165 -0
- numdaplot/plots/data/pie_values.py +215 -0
- numdaplot/plots/data/point_values.py +249 -0
- numdaplot/plots/data/position_kind.py +83 -0
- numdaplot/plots/data/renamed_layers.py +340 -0
- numdaplot/plots/data/sample_values.py +160 -0
- numdaplot/plots/data/shown_columns.py +248 -0
- numdaplot/plots/data/table_values.py +256 -0
- numdaplot/plots/data/unique_labels.py +45 -0
- numdaplot/plots/drawing/__init__.py +5 -0
- numdaplot/plots/drawing/bar_drawing.py +316 -0
- numdaplot/plots/drawing/box_drawing.py +344 -0
- numdaplot/plots/drawing/cell_merging.py +237 -0
- numdaplot/plots/drawing/chart_texts.py +124 -0
- numdaplot/plots/drawing/color_bar.py +57 -0
- numdaplot/plots/drawing/color_scale_values.py +120 -0
- numdaplot/plots/drawing/default_labels.py +41 -0
- numdaplot/plots/drawing/drawn_chart.py +50 -0
- numdaplot/plots/drawing/grid_axes.py +75 -0
- numdaplot/plots/drawing/heatmap_drawing.py +313 -0
- numdaplot/plots/drawing/histogram_drawing.py +350 -0
- numdaplot/plots/drawing/label_room.py +344 -0
- numdaplot/plots/drawing/label_thinning.py +216 -0
- numdaplot/plots/drawing/layer_alignment.py +319 -0
- numdaplot/plots/drawing/layer_colors.py +123 -0
- numdaplot/plots/drawing/line_drawing.py +85 -0
- numdaplot/plots/drawing/marker_codes.py +20 -0
- numdaplot/plots/drawing/missing_drawing.py +360 -0
- numdaplot/plots/drawing/moment_period_formatter.py +253 -0
- numdaplot/plots/drawing/pie_drawing.py +185 -0
- numdaplot/plots/drawing/plot_axes.py +38 -0
- numdaplot/plots/drawing/plot_drawing.py +288 -0
- numdaplot/plots/drawing/plot_theme.py +45 -0
- numdaplot/plots/drawing/position_axis.py +278 -0
- numdaplot/plots/drawing/scatter_drawing.py +364 -0
- numdaplot/plots/drawing/series_colors.py +177 -0
- numdaplot/plots/drawing/size_inches.py +45 -0
- numdaplot/plots/drawing/style_drawing.py +410 -0
- numdaplot/plots/drawing/text_contrast.py +44 -0
- numdaplot/plots/drawing/tick_rotation.py +354 -0
- numdaplot/plots/drawing/time_axis.py +212 -0
- numdaplot/plots/drawing/whole_numbers.py +72 -0
- numdaplot/plots/figure/__init__.py +5 -0
- numdaplot/plots/figure/cell.py +95 -0
- numdaplot/plots/figure/figure.py +256 -0
- numdaplot/plots/figure/figure_drawing.py +99 -0
- numdaplot/plots/figure/figure_style.py +60 -0
- numdaplot/plots/figure/layout.py +71 -0
- numdaplot/plots/figure/placement.py +150 -0
- numdaplot/plots/layer_reading.py +166 -0
- numdaplot/plots/output/__init__.py +5 -0
- numdaplot/plots/output/image_saving.py +187 -0
- numdaplot/plots/output/plot_display.py +181 -0
- numdaplot/plots/output/shown_object.py +45 -0
- numdaplot/plots/overlay_checks.py +245 -0
- numdaplot/plots/plot.py +31 -0
- numdaplot/plots/plot_data.py +140 -0
- numdaplot/plots/plot_distribution_creation.py +237 -0
- numdaplot/plots/plot_output.py +124 -0
- numdaplot/plots/plot_overlays.py +273 -0
- numdaplot/plots/plot_overview_creation.py +195 -0
- numdaplot/plots/plot_series_creation.py +213 -0
- numdaplot/plots/style/__init__.py +5 -0
- numdaplot/plots/style/axis_settings.py +60 -0
- numdaplot/plots/style/color.py +168 -0
- numdaplot/plots/style/custom_color.py +65 -0
- numdaplot/plots/style/grid_lines.py +49 -0
- numdaplot/plots/style/image_options.py +71 -0
- numdaplot/plots/style/legend_position.py +149 -0
- numdaplot/plots/style/plot_style.py +136 -0
- numdaplot/plots/style/size.py +70 -0
- numdaplot/plots/style/size_unit.py +62 -0
- numdaplot/positions/__init__.py +5 -0
- numdaplot/positions/axis.py +54 -0
- numdaplot/positions/index.py +51 -0
- numdaplot/positions/range.py +90 -0
- numdaplot/positions/region.py +92 -0
- numdaplot/py.typed +0 -0
- numdaplot/ratios/__init__.py +5 -0
- numdaplot/ratios/fraction.py +40 -0
- numdaplot/ratios/measure.py +48 -0
- numdaplot/rules/__init__.py +5 -0
- numdaplot/rules/between.py +78 -0
- numdaplot/rules/bounds.py +83 -0
- numdaplot/rules/case.py +48 -0
- numdaplot/rules/contains.py +63 -0
- numdaplot/rules/equal.py +43 -0
- numdaplot/rules/greater.py +39 -0
- numdaplot/rules/greater_or_equal.py +38 -0
- numdaplot/rules/is_in.py +67 -0
- numdaplot/rules/is_missing.py +25 -0
- numdaplot/rules/is_present.py +25 -0
- numdaplot/rules/less.py +39 -0
- numdaplot/rules/less_or_equal.py +38 -0
- numdaplot/rules/not_equal.py +45 -0
- numdaplot/rules/rule.py +62 -0
- numdaplot/rules/rule_values.py +44 -0
- numdaplot/rules/value_rule.py +110 -0
- numdaplot/settings/__init__.py +5 -0
- numdaplot/settings/argument_types.py +327 -0
- numdaplot/settings/field_types.py +593 -0
- numdaplot/statistics/__init__.py +5 -0
- numdaplot/statistics/count.py +71 -0
- numdaplot/statistics/count_distinct.py +27 -0
- numdaplot/statistics/counted_missing.py +46 -0
- numdaplot/statistics/maximum.py +27 -0
- numdaplot/statistics/mean.py +27 -0
- numdaplot/statistics/median.py +27 -0
- numdaplot/statistics/minimum.py +27 -0
- numdaplot/statistics/most_frequent.py +27 -0
- numdaplot/statistics/most_frequent_count.py +27 -0
- numdaplot/statistics/quantile.py +61 -0
- numdaplot/statistics/standard_deviation.py +29 -0
- numdaplot/statistics/statistic.py +63 -0
- numdaplot/statistics/sum.py +27 -0
- numdaplot/tables/__init__.py +5 -0
- numdaplot/tables/aggregation/__init__.py +5 -0
- numdaplot/tables/aggregation/aggregated_frame.py +189 -0
- numdaplot/tables/aggregation/aggregation.py +97 -0
- numdaplot/tables/aggregation/calculation.py +123 -0
- numdaplot/tables/aggregation/result_column.py +108 -0
- numdaplot/tables/aggregation/row_groups.py +96 -0
- numdaplot/tables/aggregation/statistic_name.py +122 -0
- numdaplot/tables/columns/__init__.py +5 -0
- numdaplot/tables/columns/added_column.py +89 -0
- numdaplot/tables/columns/boolean_conversion.py +144 -0
- numdaplot/tables/columns/boolean_rule.py +59 -0
- numdaplot/tables/columns/bracket_end.py +50 -0
- numdaplot/tables/columns/bracket_names.py +346 -0
- numdaplot/tables/columns/bracketed_column.py +179 -0
- numdaplot/tables/columns/brackets.py +234 -0
- numdaplot/tables/columns/chosen_columns.py +55 -0
- numdaplot/tables/columns/column_choice.py +84 -0
- numdaplot/tables/columns/column_mode.py +64 -0
- numdaplot/tables/columns/column_names.py +186 -0
- numdaplot/tables/columns/conversion.py +103 -0
- numdaplot/tables/columns/converted_column.py +669 -0
- numdaplot/tables/columns/date_conversion.py +526 -0
- numdaplot/tables/columns/date_range.py +135 -0
- numdaplot/tables/columns/name_change.py +67 -0
- numdaplot/tables/columns/new_column.py +79 -0
- numdaplot/tables/columns/number_conversion.py +281 -0
- numdaplot/tables/columns/renamed_columns.py +60 -0
- numdaplot/tables/columns/renaming.py +81 -0
- numdaplot/tables/columns/text_conversion.py +70 -0
- numdaplot/tables/columns/time_conversion.py +313 -0
- numdaplot/tables/columns/time_zone_conversion.py +128 -0
- numdaplot/tables/conflict.py +68 -0
- numdaplot/tables/description/__init__.py +5 -0
- numdaplot/tables/description/described_frame.py +335 -0
- numdaplot/tables/description/description.py +155 -0
- numdaplot/tables/duplicates/__init__.py +5 -0
- numdaplot/tables/duplicates/deduplicated_frame.py +66 -0
- numdaplot/tables/duplicates/deduplication.py +88 -0
- numdaplot/tables/duplicates/keep.py +81 -0
- numdaplot/tables/files/__init__.py +5 -0
- numdaplot/tables/files/column_names.py +60 -0
- numdaplot/tables/files/csv_file.py +265 -0
- numdaplot/tables/files/csv_read_options.py +89 -0
- numdaplot/tables/files/csv_separator.py +41 -0
- numdaplot/tables/files/csv_write_options.py +79 -0
- numdaplot/tables/files/decimal_count.py +42 -0
- numdaplot/tables/files/encoding.py +82 -0
- numdaplot/tables/files/excel_file.py +171 -0
- numdaplot/tables/files/excel_read_options.py +79 -0
- numdaplot/tables/files/excel_sheet.py +50 -0
- numdaplot/tables/files/excel_time_cells.py +146 -0
- numdaplot/tables/files/excel_write_options.py +63 -0
- numdaplot/tables/files/file_access.py +152 -0
- numdaplot/tables/files/file_paths.py +106 -0
- numdaplot/tables/files/json_decimals.py +387 -0
- numdaplot/tables/files/json_file.py +203 -0
- numdaplot/tables/files/json_layout.py +63 -0
- numdaplot/tables/files/json_read_options.py +64 -0
- numdaplot/tables/files/json_write_options.py +71 -0
- numdaplot/tables/files/missing_texts.py +63 -0
- numdaplot/tables/files/optional_package.py +42 -0
- numdaplot/tables/files/pandas_backend.py +11 -0
- numdaplot/tables/files/parquet_file.py +91 -0
- numdaplot/tables/files/parquet_read_options.py +56 -0
- numdaplot/tables/files/sas_file.py +94 -0
- numdaplot/tables/files/sas_read_options.py +67 -0
- numdaplot/tables/files/stata_file.py +83 -0
- numdaplot/tables/files/stata_read_options.py +56 -0
- numdaplot/tables/files/xpt_read_options.py +65 -0
- numdaplot/tables/filtering/__init__.py +5 -0
- numdaplot/tables/filtering/checked_frame.py +60 -0
- numdaplot/tables/filtering/column_mask.py +71 -0
- numdaplot/tables/filtering/column_match.py +62 -0
- numdaplot/tables/filtering/condition.py +94 -0
- numdaplot/tables/filtering/filter.py +74 -0
- numdaplot/tables/filtering/filter_mode.py +67 -0
- numdaplot/tables/filtering/row_mask.py +152 -0
- numdaplot/tables/filtering/rule_moments.py +164 -0
- numdaplot/tables/frames/__init__.py +5 -0
- numdaplot/tables/frames/array_frame.py +95 -0
- numdaplot/tables/frames/cleaned_names.py +132 -0
- numdaplot/tables/frames/column.py +15 -0
- numdaplot/tables/frames/column_values.py +273 -0
- numdaplot/tables/frames/frame_equality.py +130 -0
- numdaplot/tables/frames/frame_normalization.py +459 -0
- numdaplot/tables/frames/named_column_errors.py +85 -0
- numdaplot/tables/frames/pandas_decimals.py +113 -0
- numdaplot/tables/frames/region_positions.py +113 -0
- numdaplot/tables/frames/table_text.py +222 -0
- numdaplot/tables/frames/time_columns.py +345 -0
- numdaplot/tables/frames/time_range_errors.py +117 -0
- numdaplot/tables/frames/time_zones.py +271 -0
- numdaplot/tables/joining/__init__.py +5 -0
- numdaplot/tables/joining/join.py +110 -0
- numdaplot/tables/joining/join_keys.py +367 -0
- numdaplot/tables/joining/join_mode.py +93 -0
- numdaplot/tables/joining/join_relation.py +149 -0
- numdaplot/tables/joining/join_suffixes.py +71 -0
- numdaplot/tables/joining/joined_frame.py +166 -0
- numdaplot/tables/joining/joined_names.py +107 -0
- numdaplot/tables/joining/joined_rows.py +235 -0
- numdaplot/tables/joining/key_types.py +57 -0
- numdaplot/tables/joining/relation.py +78 -0
- numdaplot/tables/missing/__init__.py +5 -0
- numdaplot/tables/missing/missing_count.py +59 -0
- numdaplot/tables/missing/missing_counts.py +214 -0
- numdaplot/tables/missing/missing_drop.py +98 -0
- numdaplot/tables/missing/missing_mode.py +63 -0
- numdaplot/tables/missing/missing_ratio.py +71 -0
- numdaplot/tables/missing/missing_removal.py +257 -0
- numdaplot/tables/missing/missing_summary.py +174 -0
- numdaplot/tables/missing/ratio_comparison.py +70 -0
- numdaplot/tables/pivot/__init__.py +5 -0
- numdaplot/tables/pivot/pivot_table.py +104 -0
- numdaplot/tables/pivot/pivoted_frame.py +244 -0
- numdaplot/tables/preview/__init__.py +5 -0
- numdaplot/tables/preview/notebook_display.py +238 -0
- numdaplot/tables/preview/preview.py +100 -0
- numdaplot/tables/preview/preview_rows.py +55 -0
- numdaplot/tables/preview/shown_columns.py +62 -0
- numdaplot/tables/preview/side.py +82 -0
- numdaplot/tables/sorting/__init__.py +5 -0
- numdaplot/tables/sorting/sort_key.py +71 -0
- numdaplot/tables/sorting/sorted_frame.py +81 -0
- numdaplot/tables/sorting/sorting.py +82 -0
- numdaplot/tables/table.py +71 -0
- numdaplot/tables/table_calculation.py +172 -0
- numdaplot/tables/table_columns.py +214 -0
- numdaplot/tables/table_conversion.py +351 -0
- numdaplot/tables/table_data.py +321 -0
- numdaplot/tables/table_display.py +56 -0
- numdaplot/tables/table_joining.py +80 -0
- numdaplot/tables/table_layout.py +105 -0
- numdaplot/tables/table_missing.py +146 -0
- numdaplot/tables/table_reading.py +451 -0
- numdaplot/tables/table_refusals.py +295 -0
- numdaplot/tables/table_selection.py +163 -0
- numdaplot/tables/table_writing.py +269 -0
- numdaplot-0.1.0.dist-info/METADATA +176 -0
- numdaplot-0.1.0.dist-info/RECORD +474 -0
- numdaplot-0.1.0.dist-info/WHEEL +4 -0
- numdaplot-0.1.0.dist-info/licenses/LICENSE +28 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Settings of the count of the missing values of a Table.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
|
|
9
|
+
from numdaplot.ratios.measure import Measure
|
|
10
|
+
from numdaplot.settings.field_types import require_field_types
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass(frozen=True)
|
|
14
|
+
class MissingCount:
|
|
15
|
+
"""
|
|
16
|
+
How the missing values of a Table are counted, used by ``Table.count_missing``.
|
|
17
|
+
|
|
18
|
+
The axis, for each row or each column, is given to ``Table.count_missing`` itself.
|
|
19
|
+
|
|
20
|
+
.. versionadded:: 0.1.0
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
measure
|
|
25
|
+
A number of missing values by default, or with ``Measure.RATIO`` their fraction of the values counted.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
Raises
|
|
29
|
+
------
|
|
30
|
+
InvalidTypeError
|
|
31
|
+
When a setting is not of the type its annotation names.
|
|
32
|
+
|
|
33
|
+
Examples
|
|
34
|
+
--------
|
|
35
|
+
>>> import numdaplot as ndp
|
|
36
|
+
>>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
|
|
37
|
+
>>> prices = ndp.Array.from_list([120.0, None, None])
|
|
38
|
+
>>> table = ndp.Table.from_arrays({"city": cities, "price": prices})
|
|
39
|
+
>>> table.count_missing(ndp.MissingCount(measure=ndp.Measure.RATIO), axis=ndp.Axis.EACH_COLUMN)
|
|
40
|
+
column missing_ratio
|
|
41
|
+
TEXT FLOAT64
|
|
42
|
+
0 city 0.000000
|
|
43
|
+
1 price 0.666667
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
measure: Measure = Measure.COUNT
|
|
47
|
+
|
|
48
|
+
def __post_init__(self) -> None:
|
|
49
|
+
"""
|
|
50
|
+
Check the type of every setting.
|
|
51
|
+
|
|
52
|
+
.. versionadded:: 0.1.0
|
|
53
|
+
|
|
54
|
+
Raises
|
|
55
|
+
------
|
|
56
|
+
InvalidTypeError
|
|
57
|
+
When a setting is not of the type its annotation names.
|
|
58
|
+
"""
|
|
59
|
+
require_field_types(self)
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Count of the missing values of a Table.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import numpy
|
|
8
|
+
import pandas
|
|
9
|
+
from numpy.typing import NDArray
|
|
10
|
+
|
|
11
|
+
from numdaplot.data_types.numpy_mapping import to_numpy_dtype
|
|
12
|
+
from numdaplot.data_types.type import Type
|
|
13
|
+
from numdaplot.positions.axis import Axis
|
|
14
|
+
from numdaplot.ratios.measure import Measure
|
|
15
|
+
from numdaplot.tables.frames.column import Column
|
|
16
|
+
from numdaplot.tables.frames.column_values import build_column
|
|
17
|
+
from numdaplot.tables.missing.missing_count import MissingCount
|
|
18
|
+
|
|
19
|
+
COLUMN_NAMES_COLUMN = "column"
|
|
20
|
+
MEASURE_COLUMN_NAMES = {
|
|
21
|
+
Measure.COUNT: "missing_count",
|
|
22
|
+
Measure.RATIO: "missing_ratio",
|
|
23
|
+
}
|
|
24
|
+
# A numpy sum along axis 0 gives one result per column, along axis 1 one result per row.
|
|
25
|
+
COLUMN_SUM_AXIS = 0
|
|
26
|
+
ROW_SUM_AXIS = 1
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def count_frame_missing(frame: pandas.DataFrame, missing_count: MissingCount, axis: Axis | None) -> pandas.DataFrame:
|
|
30
|
+
"""
|
|
31
|
+
Return the count of the missing values of a Table, for the whole Table, each row or each column.
|
|
32
|
+
|
|
33
|
+
.. versionadded:: 0.1.0
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
frame
|
|
38
|
+
The columns of a Table.
|
|
39
|
+
missing_count
|
|
40
|
+
The measure of the count.
|
|
41
|
+
axis
|
|
42
|
+
``EACH_ROW`` for one count per row, ``EACH_COLUMN`` for one per column, or None for the whole Table.
|
|
43
|
+
|
|
44
|
+
Returns
|
|
45
|
+
-------
|
|
46
|
+
pandas.DataFrame
|
|
47
|
+
A ``missing_count`` or ``missing_ratio`` column: one row for the whole Table, one row per row,
|
|
48
|
+
or one row per column after a ``column`` column naming it. A ratio without any value is missing.
|
|
49
|
+
|
|
50
|
+
Examples
|
|
51
|
+
--------
|
|
52
|
+
>>> import pandas
|
|
53
|
+
>>> import numdaplot as ndp
|
|
54
|
+
>>> from numdaplot.tables.missing.missing_counts import count_frame_missing
|
|
55
|
+
>>> frame = pandas.DataFrame({"price": [1.5, None], "stock": [None, None]})
|
|
56
|
+
>>> count_frame_missing(frame, ndp.MissingCount(measure=ndp.Measure.RATIO), ndp.Axis.EACH_ROW)
|
|
57
|
+
missing_ratio
|
|
58
|
+
0 0.5
|
|
59
|
+
1 1.0
|
|
60
|
+
"""
|
|
61
|
+
missing_grid = find_frame_missing(frame)
|
|
62
|
+
counts, value_count = count_axis_missing(missing_grid, axis)
|
|
63
|
+
measures = counts
|
|
64
|
+
if missing_count.measure == Measure.RATIO:
|
|
65
|
+
measures = divide_counts(counts, value_count)
|
|
66
|
+
|
|
67
|
+
measure_name = MEASURE_COLUMN_NAMES[missing_count.measure]
|
|
68
|
+
measure_column = build_column(measures)
|
|
69
|
+
count_columns = dict[str, Column]()
|
|
70
|
+
if axis == Axis.EACH_COLUMN:
|
|
71
|
+
count_columns[COLUMN_NAMES_COLUMN] = build_name_column(frame)
|
|
72
|
+
|
|
73
|
+
count_columns[measure_name] = measure_column
|
|
74
|
+
count_frame = pandas.DataFrame(count_columns)
|
|
75
|
+
|
|
76
|
+
return count_frame
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def find_frame_missing(frame: pandas.DataFrame) -> NDArray[numpy.bool_]:
|
|
80
|
+
"""
|
|
81
|
+
Return which values of a Table are missing.
|
|
82
|
+
|
|
83
|
+
.. versionadded:: 0.1.0
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
frame
|
|
88
|
+
The columns of a Table.
|
|
89
|
+
|
|
90
|
+
Returns
|
|
91
|
+
-------
|
|
92
|
+
NDArray[numpy.bool_]
|
|
93
|
+
One row per row and one column per column, True at each missing value.
|
|
94
|
+
|
|
95
|
+
Examples
|
|
96
|
+
--------
|
|
97
|
+
>>> import pandas
|
|
98
|
+
>>> from numdaplot.tables.missing.missing_counts import find_frame_missing
|
|
99
|
+
>>> find_frame_missing(pandas.DataFrame({"price": [1.5, None]}))
|
|
100
|
+
array([[False],
|
|
101
|
+
[ True]])
|
|
102
|
+
"""
|
|
103
|
+
missing_frame = frame.isna()
|
|
104
|
+
missing_grid = missing_frame.to_numpy(dtype=numpy.bool_)
|
|
105
|
+
|
|
106
|
+
return missing_grid
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def count_axis_missing(missing_grid: NDArray[numpy.bool_], axis: Axis | None) -> tuple[NDArray[numpy.int64], int]:
|
|
110
|
+
"""
|
|
111
|
+
Return the number of missing values along an axis, and how many values each number is counted on.
|
|
112
|
+
|
|
113
|
+
.. versionadded:: 0.1.0
|
|
114
|
+
|
|
115
|
+
Parameters
|
|
116
|
+
----------
|
|
117
|
+
missing_grid
|
|
118
|
+
True at each missing value of a Table, one row per row.
|
|
119
|
+
axis
|
|
120
|
+
One count per row, per column, or a single count for the whole Table when ``None``.
|
|
121
|
+
|
|
122
|
+
Returns
|
|
123
|
+
-------
|
|
124
|
+
tuple[NDArray[numpy.int64], int]
|
|
125
|
+
The counts, then the number of values behind each count.
|
|
126
|
+
|
|
127
|
+
Examples
|
|
128
|
+
--------
|
|
129
|
+
>>> import numpy
|
|
130
|
+
>>> import numdaplot as ndp
|
|
131
|
+
>>> from numdaplot.tables.missing.missing_counts import count_axis_missing
|
|
132
|
+
>>> count_axis_missing(numpy.array([[True, False], [True, True]]), ndp.Axis.EACH_COLUMN)
|
|
133
|
+
(array([2, 1]), 2)
|
|
134
|
+
"""
|
|
135
|
+
row_count, column_count = missing_grid.shape
|
|
136
|
+
if axis == Axis.EACH_ROW:
|
|
137
|
+
row_counts = missing_grid.sum(axis=ROW_SUM_AXIS, dtype=numpy.int64)
|
|
138
|
+
return row_counts, column_count
|
|
139
|
+
|
|
140
|
+
if axis == Axis.EACH_COLUMN:
|
|
141
|
+
column_counts = missing_grid.sum(axis=COLUMN_SUM_AXIS, dtype=numpy.int64)
|
|
142
|
+
return column_counts, row_count
|
|
143
|
+
|
|
144
|
+
missing_total = missing_grid.sum(dtype=numpy.int64)
|
|
145
|
+
total_counts = numpy.array([missing_total], dtype=numpy.int64)
|
|
146
|
+
|
|
147
|
+
return total_counts, missing_grid.size
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def divide_counts(counts: NDArray[numpy.int64], value_count: int) -> NDArray[numpy.float64]:
|
|
151
|
+
"""
|
|
152
|
+
Return the fraction of the values each count represents.
|
|
153
|
+
|
|
154
|
+
.. versionadded:: 0.1.0
|
|
155
|
+
|
|
156
|
+
Parameters
|
|
157
|
+
----------
|
|
158
|
+
counts
|
|
159
|
+
Numbers of missing values.
|
|
160
|
+
value_count
|
|
161
|
+
The number of values behind each count.
|
|
162
|
+
|
|
163
|
+
Returns
|
|
164
|
+
-------
|
|
165
|
+
NDArray[numpy.float64]
|
|
166
|
+
Each count divided by the number of values, NaN everywhere when there is no value.
|
|
167
|
+
|
|
168
|
+
Examples
|
|
169
|
+
--------
|
|
170
|
+
>>> import numpy
|
|
171
|
+
>>> from numdaplot.tables.missing.missing_counts import divide_counts
|
|
172
|
+
>>> divide_counts(numpy.array([1, 2]), 4)
|
|
173
|
+
array([0.25, 0.5 ])
|
|
174
|
+
>>> divide_counts(numpy.array([0]), 0)
|
|
175
|
+
array([nan])
|
|
176
|
+
"""
|
|
177
|
+
if value_count == 0:
|
|
178
|
+
no_ratios = numpy.full(counts.shape, numpy.nan, dtype=numpy.float64)
|
|
179
|
+
return no_ratios
|
|
180
|
+
|
|
181
|
+
ratios = numpy.divide(counts, value_count, dtype=numpy.float64)
|
|
182
|
+
|
|
183
|
+
return ratios
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def build_name_column(frame: pandas.DataFrame) -> Column:
|
|
187
|
+
"""
|
|
188
|
+
Return a text column holding the names of the columns of a Table.
|
|
189
|
+
|
|
190
|
+
.. versionadded:: 0.1.0
|
|
191
|
+
|
|
192
|
+
Parameters
|
|
193
|
+
----------
|
|
194
|
+
frame
|
|
195
|
+
The columns of a Table.
|
|
196
|
+
|
|
197
|
+
Returns
|
|
198
|
+
-------
|
|
199
|
+
Column
|
|
200
|
+
One name per row, in the order of the Table.
|
|
201
|
+
|
|
202
|
+
Examples
|
|
203
|
+
--------
|
|
204
|
+
>>> import pandas
|
|
205
|
+
>>> from numdaplot.tables.missing.missing_counts import build_name_column
|
|
206
|
+
>>> build_name_column(pandas.DataFrame({"city": ["Pau"], "price": [1.5]})).tolist()
|
|
207
|
+
['city', 'price']
|
|
208
|
+
"""
|
|
209
|
+
column_names = [str(column_name) for column_name in frame.columns]
|
|
210
|
+
text_dtype = to_numpy_dtype(Type.TEXT)
|
|
211
|
+
name_values = numpy.array(column_names, dtype=text_dtype)
|
|
212
|
+
name_column = build_column(name_values)
|
|
213
|
+
|
|
214
|
+
return name_column
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Settings of the removal of the rows or the columns of a Table holding missing values.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
|
|
9
|
+
from numdaplot.errors.empty_list_error import EmptyListError
|
|
10
|
+
from numdaplot.settings.field_types import require_field_types
|
|
11
|
+
from numdaplot.tables.columns.column_names import require_column_names
|
|
12
|
+
from numdaplot.tables.missing.missing_mode import MissingMode
|
|
13
|
+
from numdaplot.tables.missing.missing_ratio import MissingRatio
|
|
14
|
+
|
|
15
|
+
COLUMN_ITEM_NAME = "column"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass(frozen=True)
|
|
19
|
+
class MissingDrop:
|
|
20
|
+
"""
|
|
21
|
+
Which rows or columns holding missing values are removed, used by ``Table.drop_missing``.
|
|
22
|
+
|
|
23
|
+
The axis, rows or columns, is given to ``Table.drop_missing`` itself.
|
|
24
|
+
|
|
25
|
+
.. versionadded:: 0.1.0
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
columns
|
|
30
|
+
The names of the columns looked at, every column when omitted. Rows are removed according to
|
|
31
|
+
their values in these columns; columns are only removed among them, the others are always kept.
|
|
32
|
+
The settings keep their own copy of the list.
|
|
33
|
+
rule
|
|
34
|
+
How many missing values make a row or a column removed: a single one by default, all of them with
|
|
35
|
+
``MissingMode.ALL``, or a share of them with ``MissingRatio``. In a Table without rows, no column
|
|
36
|
+
is removed.
|
|
37
|
+
|
|
38
|
+
Raises
|
|
39
|
+
------
|
|
40
|
+
InvalidTypeError
|
|
41
|
+
When a setting is not of the type its annotation names.
|
|
42
|
+
EmptyListError
|
|
43
|
+
When ``columns`` is an empty list.
|
|
44
|
+
InvalidColumnNameError
|
|
45
|
+
When a column name is an empty text.
|
|
46
|
+
DuplicateColumnError
|
|
47
|
+
When a column name appears twice.
|
|
48
|
+
|
|
49
|
+
Examples
|
|
50
|
+
--------
|
|
51
|
+
>>> import numdaplot as ndp
|
|
52
|
+
>>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
|
|
53
|
+
>>> prices = ndp.Array.from_list([120.0, None, 150.0])
|
|
54
|
+
>>> table = ndp.Table.from_arrays({"city": cities, "price": prices})
|
|
55
|
+
>>> table.drop_missing()
|
|
56
|
+
city price
|
|
57
|
+
TEXT FLOAT64
|
|
58
|
+
0 Paris 120.0
|
|
59
|
+
1 Pau 150.0
|
|
60
|
+
>>> table.drop_missing(ndp.MissingDrop(columns=["price"]), axis=ndp.Axis.EACH_COLUMN)
|
|
61
|
+
city
|
|
62
|
+
TEXT
|
|
63
|
+
0 Paris
|
|
64
|
+
1 Lyon
|
|
65
|
+
2 Pau
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
columns: list[str] | None = None
|
|
69
|
+
rule: MissingMode | MissingRatio = MissingMode.ANY
|
|
70
|
+
|
|
71
|
+
def __post_init__(self) -> None:
|
|
72
|
+
"""
|
|
73
|
+
Check the columns and replace them with a copy that only the settings hold.
|
|
74
|
+
|
|
75
|
+
.. versionadded:: 0.1.0
|
|
76
|
+
|
|
77
|
+
Raises
|
|
78
|
+
------
|
|
79
|
+
InvalidTypeError
|
|
80
|
+
When a setting is not of the type its annotation names.
|
|
81
|
+
EmptyListError
|
|
82
|
+
When ``columns`` is an empty list.
|
|
83
|
+
InvalidColumnNameError
|
|
84
|
+
When a column name is an empty text.
|
|
85
|
+
DuplicateColumnError
|
|
86
|
+
When a column name appears twice.
|
|
87
|
+
"""
|
|
88
|
+
require_field_types(self)
|
|
89
|
+
|
|
90
|
+
if self.columns is None:
|
|
91
|
+
return
|
|
92
|
+
|
|
93
|
+
if self.columns == []:
|
|
94
|
+
raise EmptyListError(COLUMN_ITEM_NAME)
|
|
95
|
+
|
|
96
|
+
require_column_names(self.columns)
|
|
97
|
+
columns_copy = list(self.columns)
|
|
98
|
+
object.__setattr__(self, "columns", columns_copy)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""
|
|
2
|
+
How many missing values make a row or a column removed.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from enum import Enum, auto
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class MissingMode(Enum):
|
|
11
|
+
"""
|
|
12
|
+
How many missing values make a row or a column removed, used by ``MissingDrop``.
|
|
13
|
+
|
|
14
|
+
.. versionadded:: 0.1.0
|
|
15
|
+
|
|
16
|
+
Examples
|
|
17
|
+
--------
|
|
18
|
+
>>> import numdaplot as ndp
|
|
19
|
+
>>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
|
|
20
|
+
>>> prices = ndp.Array.from_list([120.0, None, None])
|
|
21
|
+
>>> stocks = ndp.Array.from_list([3.0, 5.0, None])
|
|
22
|
+
>>> table = ndp.Table.from_arrays({"city": cities, "price": prices, "stock": stocks})
|
|
23
|
+
>>> table.drop_missing(ndp.MissingDrop(columns=["price", "stock"], rule=ndp.MissingMode.ALL))
|
|
24
|
+
city price stock
|
|
25
|
+
TEXT FLOAT64 FLOAT64
|
|
26
|
+
0 Paris 120.0 3.0
|
|
27
|
+
1 Lyon NaN 5.0
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
ANY = auto()
|
|
31
|
+
"""
|
|
32
|
+
A single missing value is enough. Default value.
|
|
33
|
+
|
|
34
|
+
Examples
|
|
35
|
+
--------
|
|
36
|
+
>>> import numdaplot as ndp
|
|
37
|
+
>>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
|
|
38
|
+
>>> prices = ndp.Array.from_list([120.0, None, None])
|
|
39
|
+
>>> stocks = ndp.Array.from_list([3.0, 5.0, None])
|
|
40
|
+
>>> table = ndp.Table.from_arrays({"city": cities, "price": prices, "stock": stocks})
|
|
41
|
+
>>> table.drop_missing(ndp.MissingDrop(columns=["price", "stock"], rule=ndp.MissingMode.ANY))
|
|
42
|
+
city price stock
|
|
43
|
+
TEXT FLOAT64 FLOAT64
|
|
44
|
+
0 Paris 120.0 3.0
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
ALL = auto()
|
|
48
|
+
"""
|
|
49
|
+
Every value must be missing.
|
|
50
|
+
|
|
51
|
+
Examples
|
|
52
|
+
--------
|
|
53
|
+
>>> import numdaplot as ndp
|
|
54
|
+
>>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
|
|
55
|
+
>>> prices = ndp.Array.from_list([120.0, None, None])
|
|
56
|
+
>>> stocks = ndp.Array.from_list([3.0, 5.0, None])
|
|
57
|
+
>>> table = ndp.Table.from_arrays({"city": cities, "price": prices, "stock": stocks})
|
|
58
|
+
>>> table.drop_missing(ndp.MissingDrop(columns=["price", "stock"], rule=ndp.MissingMode.ALL))
|
|
59
|
+
city price stock
|
|
60
|
+
TEXT FLOAT64 FLOAT64
|
|
61
|
+
0 Paris 120.0 3.0
|
|
62
|
+
1 Lyon NaN 5.0
|
|
63
|
+
"""
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""
|
|
2
|
+
A ratio of missing values from which a row or a column is removed.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
|
|
9
|
+
from numdaplot.ratios.fraction import require_fraction
|
|
10
|
+
from numdaplot.settings.field_types import require_field_types
|
|
11
|
+
from numdaplot.tables.missing.ratio_comparison import RatioComparison
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True)
|
|
15
|
+
class MissingRatio:
|
|
16
|
+
"""
|
|
17
|
+
A ratio of missing values from which a row or a column is removed, used by ``MissingDrop``.
|
|
18
|
+
|
|
19
|
+
The ratio of a row is its missing values divided by its number of values, and the same for a column.
|
|
20
|
+
|
|
21
|
+
.. versionadded:: 0.1.0
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
ratio
|
|
26
|
+
The threshold, a fraction between 0 and 1: ``0.3`` for 30 %.
|
|
27
|
+
comparison
|
|
28
|
+
Whether a ratio equal to the threshold is enough, ``RatioComparison.AT_LEAST`` by default, or the ratio must be
|
|
29
|
+
above it, ``RatioComparison.ABOVE``.
|
|
30
|
+
|
|
31
|
+
Raises
|
|
32
|
+
------
|
|
33
|
+
InvalidTypeError
|
|
34
|
+
When a setting is not of the type its annotation names.
|
|
35
|
+
InvalidFractionError
|
|
36
|
+
When ``ratio`` is lower than 0, greater than 1 or NaN.
|
|
37
|
+
|
|
38
|
+
Examples
|
|
39
|
+
--------
|
|
40
|
+
>>> import numdaplot as ndp
|
|
41
|
+
>>> prices = ndp.Array.from_list([120.0, None, 80.0, None])
|
|
42
|
+
>>> stocks = ndp.Array.from_list([3.0, 5.0, None, 2.0])
|
|
43
|
+
>>> table = ndp.Table.from_arrays({"price": prices, "stock": stocks})
|
|
44
|
+
>>> table.drop_missing(ndp.MissingDrop(rule=ndp.MissingRatio(0.4)), axis=ndp.Axis.EACH_COLUMN)
|
|
45
|
+
stock
|
|
46
|
+
FLOAT64
|
|
47
|
+
0 3.0
|
|
48
|
+
1 5.0
|
|
49
|
+
2 NaN
|
|
50
|
+
3 2.0
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
ratio: float
|
|
54
|
+
comparison: RatioComparison = RatioComparison.AT_LEAST
|
|
55
|
+
|
|
56
|
+
def __post_init__(self) -> None:
|
|
57
|
+
"""
|
|
58
|
+
Check that the ratio is a fraction.
|
|
59
|
+
|
|
60
|
+
.. versionadded:: 0.1.0
|
|
61
|
+
|
|
62
|
+
Raises
|
|
63
|
+
------
|
|
64
|
+
InvalidTypeError
|
|
65
|
+
When a setting is not of the type its annotation names.
|
|
66
|
+
InvalidFractionError
|
|
67
|
+
When ``ratio`` is lower than 0, greater than 1 or NaN.
|
|
68
|
+
"""
|
|
69
|
+
require_field_types(self)
|
|
70
|
+
|
|
71
|
+
require_fraction(self.ratio)
|