maxframe 0.1.0b5__cp310-cp310-macosx_11_0_arm64.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.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/__init__.py +32 -0
- maxframe/_utils.cpython-310-darwin.so +0 -0
- maxframe/_utils.pxd +33 -0
- maxframe/_utils.pyx +547 -0
- maxframe/codegen.py +528 -0
- maxframe/config/__init__.py +15 -0
- maxframe/config/config.py +443 -0
- maxframe/config/tests/__init__.py +13 -0
- maxframe/config/tests/test_config.py +103 -0
- maxframe/config/tests/test_validators.py +34 -0
- maxframe/config/validators.py +57 -0
- maxframe/conftest.py +139 -0
- maxframe/core/__init__.py +65 -0
- maxframe/core/base.py +156 -0
- maxframe/core/entity/__init__.py +44 -0
- maxframe/core/entity/chunks.py +68 -0
- maxframe/core/entity/core.py +152 -0
- maxframe/core/entity/executable.py +337 -0
- maxframe/core/entity/fuse.py +73 -0
- maxframe/core/entity/objects.py +100 -0
- maxframe/core/entity/output_types.py +90 -0
- maxframe/core/entity/tileables.py +438 -0
- maxframe/core/entity/utils.py +24 -0
- maxframe/core/graph/__init__.py +17 -0
- maxframe/core/graph/builder/__init__.py +16 -0
- maxframe/core/graph/builder/base.py +86 -0
- maxframe/core/graph/builder/chunk.py +430 -0
- maxframe/core/graph/builder/tileable.py +34 -0
- maxframe/core/graph/builder/utils.py +41 -0
- maxframe/core/graph/core.cpython-310-darwin.so +0 -0
- maxframe/core/graph/core.pyx +467 -0
- maxframe/core/graph/entity.py +171 -0
- maxframe/core/graph/tests/__init__.py +13 -0
- maxframe/core/graph/tests/test_graph.py +205 -0
- maxframe/core/mode.py +96 -0
- maxframe/core/operator/__init__.py +34 -0
- maxframe/core/operator/base.py +450 -0
- maxframe/core/operator/core.py +276 -0
- maxframe/core/operator/fetch.py +53 -0
- maxframe/core/operator/fuse.py +29 -0
- maxframe/core/operator/objects.py +72 -0
- maxframe/core/operator/shuffle.py +111 -0
- maxframe/core/operator/tests/__init__.py +13 -0
- maxframe/core/operator/tests/test_core.py +64 -0
- maxframe/core/tests/__init__.py +13 -0
- maxframe/core/tests/test_mode.py +75 -0
- maxframe/dataframe/__init__.py +81 -0
- maxframe/dataframe/arithmetic/__init__.py +359 -0
- maxframe/dataframe/arithmetic/abs.py +33 -0
- maxframe/dataframe/arithmetic/add.py +60 -0
- maxframe/dataframe/arithmetic/arccos.py +28 -0
- maxframe/dataframe/arithmetic/arccosh.py +28 -0
- maxframe/dataframe/arithmetic/arcsin.py +28 -0
- maxframe/dataframe/arithmetic/arcsinh.py +28 -0
- maxframe/dataframe/arithmetic/arctan.py +28 -0
- maxframe/dataframe/arithmetic/arctanh.py +28 -0
- maxframe/dataframe/arithmetic/around.py +152 -0
- maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
- maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
- maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
- maxframe/dataframe/arithmetic/ceil.py +28 -0
- maxframe/dataframe/arithmetic/core.py +342 -0
- maxframe/dataframe/arithmetic/cos.py +28 -0
- maxframe/dataframe/arithmetic/cosh.py +28 -0
- maxframe/dataframe/arithmetic/degrees.py +28 -0
- maxframe/dataframe/arithmetic/docstring.py +442 -0
- maxframe/dataframe/arithmetic/equal.py +56 -0
- maxframe/dataframe/arithmetic/exp.py +28 -0
- maxframe/dataframe/arithmetic/exp2.py +28 -0
- maxframe/dataframe/arithmetic/expm1.py +28 -0
- maxframe/dataframe/arithmetic/floor.py +28 -0
- maxframe/dataframe/arithmetic/floordiv.py +64 -0
- maxframe/dataframe/arithmetic/greater.py +57 -0
- maxframe/dataframe/arithmetic/greater_equal.py +57 -0
- maxframe/dataframe/arithmetic/invert.py +33 -0
- maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
- maxframe/dataframe/arithmetic/less.py +57 -0
- maxframe/dataframe/arithmetic/less_equal.py +57 -0
- maxframe/dataframe/arithmetic/log.py +28 -0
- maxframe/dataframe/arithmetic/log10.py +28 -0
- maxframe/dataframe/arithmetic/log2.py +28 -0
- maxframe/dataframe/arithmetic/mod.py +60 -0
- maxframe/dataframe/arithmetic/multiply.py +60 -0
- maxframe/dataframe/arithmetic/negative.py +33 -0
- maxframe/dataframe/arithmetic/not_equal.py +56 -0
- maxframe/dataframe/arithmetic/power.py +68 -0
- maxframe/dataframe/arithmetic/radians.py +28 -0
- maxframe/dataframe/arithmetic/sin.py +28 -0
- maxframe/dataframe/arithmetic/sinh.py +28 -0
- maxframe/dataframe/arithmetic/sqrt.py +28 -0
- maxframe/dataframe/arithmetic/subtract.py +64 -0
- maxframe/dataframe/arithmetic/tan.py +28 -0
- maxframe/dataframe/arithmetic/tanh.py +28 -0
- maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
- maxframe/dataframe/arithmetic/truediv.py +64 -0
- maxframe/dataframe/arithmetic/trunc.py +28 -0
- maxframe/dataframe/arrays.py +864 -0
- maxframe/dataframe/core.py +2417 -0
- maxframe/dataframe/datasource/__init__.py +15 -0
- maxframe/dataframe/datasource/core.py +81 -0
- maxframe/dataframe/datasource/dataframe.py +59 -0
- maxframe/dataframe/datasource/date_range.py +504 -0
- maxframe/dataframe/datasource/from_index.py +54 -0
- maxframe/dataframe/datasource/from_records.py +107 -0
- maxframe/dataframe/datasource/from_tensor.py +419 -0
- maxframe/dataframe/datasource/index.py +117 -0
- maxframe/dataframe/datasource/read_csv.py +528 -0
- maxframe/dataframe/datasource/read_odps_query.py +299 -0
- maxframe/dataframe/datasource/read_odps_table.py +253 -0
- maxframe/dataframe/datasource/read_parquet.py +421 -0
- maxframe/dataframe/datasource/series.py +55 -0
- maxframe/dataframe/datasource/tests/__init__.py +13 -0
- maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
- maxframe/dataframe/datastore/__init__.py +26 -0
- maxframe/dataframe/datastore/core.py +19 -0
- maxframe/dataframe/datastore/to_csv.py +227 -0
- maxframe/dataframe/datastore/to_odps.py +162 -0
- maxframe/dataframe/extensions/__init__.py +41 -0
- maxframe/dataframe/extensions/accessor.py +50 -0
- maxframe/dataframe/extensions/reshuffle.py +83 -0
- maxframe/dataframe/extensions/tests/__init__.py +13 -0
- maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
- maxframe/dataframe/fetch/__init__.py +15 -0
- maxframe/dataframe/fetch/core.py +86 -0
- maxframe/dataframe/groupby/__init__.py +82 -0
- maxframe/dataframe/groupby/aggregation.py +350 -0
- maxframe/dataframe/groupby/apply.py +251 -0
- maxframe/dataframe/groupby/core.py +179 -0
- maxframe/dataframe/groupby/cum.py +124 -0
- maxframe/dataframe/groupby/fill.py +141 -0
- maxframe/dataframe/groupby/getitem.py +92 -0
- maxframe/dataframe/groupby/head.py +105 -0
- maxframe/dataframe/groupby/sample.py +214 -0
- maxframe/dataframe/groupby/tests/__init__.py +13 -0
- maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
- maxframe/dataframe/groupby/transform.py +255 -0
- maxframe/dataframe/indexing/__init__.py +84 -0
- maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
- maxframe/dataframe/indexing/align.py +349 -0
- maxframe/dataframe/indexing/at.py +83 -0
- maxframe/dataframe/indexing/getitem.py +204 -0
- maxframe/dataframe/indexing/iat.py +37 -0
- maxframe/dataframe/indexing/iloc.py +566 -0
- maxframe/dataframe/indexing/insert.py +86 -0
- maxframe/dataframe/indexing/loc.py +411 -0
- maxframe/dataframe/indexing/reindex.py +526 -0
- maxframe/dataframe/indexing/rename.py +462 -0
- maxframe/dataframe/indexing/rename_axis.py +209 -0
- maxframe/dataframe/indexing/reset_index.py +402 -0
- maxframe/dataframe/indexing/sample.py +221 -0
- maxframe/dataframe/indexing/set_axis.py +194 -0
- maxframe/dataframe/indexing/set_index.py +61 -0
- maxframe/dataframe/indexing/setitem.py +130 -0
- maxframe/dataframe/indexing/tests/__init__.py +13 -0
- maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
- maxframe/dataframe/indexing/where.py +308 -0
- maxframe/dataframe/initializer.py +288 -0
- maxframe/dataframe/merge/__init__.py +32 -0
- maxframe/dataframe/merge/append.py +121 -0
- maxframe/dataframe/merge/concat.py +325 -0
- maxframe/dataframe/merge/merge.py +593 -0
- maxframe/dataframe/merge/tests/__init__.py +13 -0
- maxframe/dataframe/merge/tests/test_merge.py +215 -0
- maxframe/dataframe/misc/__init__.py +134 -0
- maxframe/dataframe/misc/_duplicate.py +46 -0
- maxframe/dataframe/misc/accessor.py +276 -0
- maxframe/dataframe/misc/apply.py +692 -0
- maxframe/dataframe/misc/astype.py +236 -0
- maxframe/dataframe/misc/case_when.py +141 -0
- maxframe/dataframe/misc/check_monotonic.py +84 -0
- maxframe/dataframe/misc/cut.py +383 -0
- maxframe/dataframe/misc/datetimes.py +79 -0
- maxframe/dataframe/misc/describe.py +108 -0
- maxframe/dataframe/misc/diff.py +210 -0
- maxframe/dataframe/misc/drop.py +440 -0
- maxframe/dataframe/misc/drop_duplicates.py +248 -0
- maxframe/dataframe/misc/duplicated.py +292 -0
- maxframe/dataframe/misc/eval.py +728 -0
- maxframe/dataframe/misc/explode.py +171 -0
- maxframe/dataframe/misc/get_dummies.py +208 -0
- maxframe/dataframe/misc/isin.py +217 -0
- maxframe/dataframe/misc/map.py +236 -0
- maxframe/dataframe/misc/melt.py +162 -0
- maxframe/dataframe/misc/memory_usage.py +248 -0
- maxframe/dataframe/misc/pct_change.py +150 -0
- maxframe/dataframe/misc/pivot_table.py +262 -0
- maxframe/dataframe/misc/qcut.py +104 -0
- maxframe/dataframe/misc/select_dtypes.py +104 -0
- maxframe/dataframe/misc/shift.py +256 -0
- maxframe/dataframe/misc/stack.py +238 -0
- maxframe/dataframe/misc/string_.py +221 -0
- maxframe/dataframe/misc/tests/__init__.py +13 -0
- maxframe/dataframe/misc/tests/test_misc.py +468 -0
- maxframe/dataframe/misc/to_numeric.py +178 -0
- maxframe/dataframe/misc/transform.py +361 -0
- maxframe/dataframe/misc/transpose.py +136 -0
- maxframe/dataframe/misc/value_counts.py +182 -0
- maxframe/dataframe/missing/__init__.py +53 -0
- maxframe/dataframe/missing/checkna.py +223 -0
- maxframe/dataframe/missing/dropna.py +280 -0
- maxframe/dataframe/missing/fillna.py +275 -0
- maxframe/dataframe/missing/replace.py +439 -0
- maxframe/dataframe/missing/tests/__init__.py +13 -0
- maxframe/dataframe/missing/tests/test_missing.py +89 -0
- maxframe/dataframe/operators.py +273 -0
- maxframe/dataframe/plotting/__init__.py +40 -0
- maxframe/dataframe/plotting/core.py +78 -0
- maxframe/dataframe/plotting/tests/__init__.py +13 -0
- maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
- maxframe/dataframe/reduction/__init__.py +107 -0
- maxframe/dataframe/reduction/aggregation.py +344 -0
- maxframe/dataframe/reduction/all.py +78 -0
- maxframe/dataframe/reduction/any.py +78 -0
- maxframe/dataframe/reduction/core.py +837 -0
- maxframe/dataframe/reduction/count.py +59 -0
- maxframe/dataframe/reduction/cummax.py +30 -0
- maxframe/dataframe/reduction/cummin.py +30 -0
- maxframe/dataframe/reduction/cumprod.py +30 -0
- maxframe/dataframe/reduction/cumsum.py +30 -0
- maxframe/dataframe/reduction/custom_reduction.py +42 -0
- maxframe/dataframe/reduction/kurtosis.py +104 -0
- maxframe/dataframe/reduction/max.py +65 -0
- maxframe/dataframe/reduction/mean.py +61 -0
- maxframe/dataframe/reduction/min.py +65 -0
- maxframe/dataframe/reduction/nunique.py +141 -0
- maxframe/dataframe/reduction/prod.py +76 -0
- maxframe/dataframe/reduction/reduction_size.py +36 -0
- maxframe/dataframe/reduction/sem.py +69 -0
- maxframe/dataframe/reduction/skew.py +89 -0
- maxframe/dataframe/reduction/std.py +53 -0
- maxframe/dataframe/reduction/str_concat.py +48 -0
- maxframe/dataframe/reduction/sum.py +77 -0
- maxframe/dataframe/reduction/tests/__init__.py +13 -0
- maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
- maxframe/dataframe/reduction/unique.py +90 -0
- maxframe/dataframe/reduction/var.py +72 -0
- maxframe/dataframe/sort/__init__.py +34 -0
- maxframe/dataframe/sort/core.py +36 -0
- maxframe/dataframe/sort/sort_index.py +153 -0
- maxframe/dataframe/sort/sort_values.py +311 -0
- maxframe/dataframe/sort/tests/__init__.py +13 -0
- maxframe/dataframe/sort/tests/test_sort.py +81 -0
- maxframe/dataframe/statistics/__init__.py +33 -0
- maxframe/dataframe/statistics/corr.py +280 -0
- maxframe/dataframe/statistics/quantile.py +341 -0
- maxframe/dataframe/statistics/tests/__init__.py +13 -0
- maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
- maxframe/dataframe/tests/__init__.py +13 -0
- maxframe/dataframe/tests/test_initializer.py +29 -0
- maxframe/dataframe/tseries/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
- maxframe/dataframe/tseries/to_datetime.py +297 -0
- maxframe/dataframe/ufunc/__init__.py +27 -0
- maxframe/dataframe/ufunc/tensor.py +54 -0
- maxframe/dataframe/ufunc/ufunc.py +52 -0
- maxframe/dataframe/utils.py +1267 -0
- maxframe/dataframe/window/__init__.py +29 -0
- maxframe/dataframe/window/aggregation.py +96 -0
- maxframe/dataframe/window/core.py +69 -0
- maxframe/dataframe/window/ewm.py +249 -0
- maxframe/dataframe/window/expanding.py +147 -0
- maxframe/dataframe/window/rolling.py +376 -0
- maxframe/dataframe/window/tests/__init__.py +13 -0
- maxframe/dataframe/window/tests/test_ewm.py +70 -0
- maxframe/dataframe/window/tests/test_expanding.py +66 -0
- maxframe/dataframe/window/tests/test_rolling.py +57 -0
- maxframe/env.py +33 -0
- maxframe/errors.py +21 -0
- maxframe/extension.py +81 -0
- maxframe/learn/__init__.py +17 -0
- maxframe/learn/contrib/__init__.py +17 -0
- maxframe/learn/contrib/pytorch/__init__.py +16 -0
- maxframe/learn/contrib/pytorch/run_function.py +110 -0
- maxframe/learn/contrib/pytorch/run_script.py +102 -0
- maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
- maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
- maxframe/learn/contrib/utils.py +52 -0
- maxframe/learn/contrib/xgboost/__init__.py +26 -0
- maxframe/learn/contrib/xgboost/classifier.py +86 -0
- maxframe/learn/contrib/xgboost/core.py +156 -0
- maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
- maxframe/learn/contrib/xgboost/predict.py +138 -0
- maxframe/learn/contrib/xgboost/regressor.py +78 -0
- maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
- maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
- maxframe/learn/contrib/xgboost/train.py +121 -0
- maxframe/learn/utils/__init__.py +15 -0
- maxframe/learn/utils/core.py +29 -0
- maxframe/lib/__init__.py +15 -0
- maxframe/lib/aio/__init__.py +27 -0
- maxframe/lib/aio/_runners.py +162 -0
- maxframe/lib/aio/_threads.py +35 -0
- maxframe/lib/aio/base.py +82 -0
- maxframe/lib/aio/file.py +85 -0
- maxframe/lib/aio/isolation.py +100 -0
- maxframe/lib/aio/lru.py +242 -0
- maxframe/lib/aio/parallelism.py +37 -0
- maxframe/lib/aio/tests/__init__.py +13 -0
- maxframe/lib/aio/tests/test_aio_file.py +55 -0
- maxframe/lib/compression.py +55 -0
- maxframe/lib/cython/__init__.py +13 -0
- maxframe/lib/cython/libcpp.pxd +30 -0
- maxframe/lib/filesystem/__init__.py +21 -0
- maxframe/lib/filesystem/_glob.py +173 -0
- maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
- maxframe/lib/filesystem/_oss_lib/common.py +198 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
- maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
- maxframe/lib/filesystem/arrow.py +236 -0
- maxframe/lib/filesystem/base.py +263 -0
- maxframe/lib/filesystem/core.py +95 -0
- maxframe/lib/filesystem/fsmap.py +164 -0
- maxframe/lib/filesystem/hdfs.py +31 -0
- maxframe/lib/filesystem/local.py +112 -0
- maxframe/lib/filesystem/oss.py +157 -0
- maxframe/lib/filesystem/tests/__init__.py +13 -0
- maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
- maxframe/lib/filesystem/tests/test_oss.py +182 -0
- maxframe/lib/functools_compat.py +81 -0
- maxframe/lib/mmh3.cpython-310-darwin.so +0 -0
- maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
- maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
- maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
- maxframe/lib/sparse/__init__.py +861 -0
- maxframe/lib/sparse/array.py +1604 -0
- maxframe/lib/sparse/core.py +92 -0
- maxframe/lib/sparse/matrix.py +241 -0
- maxframe/lib/sparse/tests/__init__.py +15 -0
- maxframe/lib/sparse/tests/test_sparse.py +476 -0
- maxframe/lib/sparse/vector.py +150 -0
- maxframe/lib/tblib/LICENSE +20 -0
- maxframe/lib/tblib/__init__.py +327 -0
- maxframe/lib/tblib/cpython.py +83 -0
- maxframe/lib/tblib/decorators.py +44 -0
- maxframe/lib/tblib/pickling_support.py +90 -0
- maxframe/lib/tests/__init__.py +13 -0
- maxframe/lib/tests/test_wrapped_pickle.py +51 -0
- maxframe/lib/version.py +620 -0
- maxframe/lib/wrapped_pickle.py +139 -0
- maxframe/mixin.py +100 -0
- maxframe/odpsio/__init__.py +21 -0
- maxframe/odpsio/arrow.py +91 -0
- maxframe/odpsio/schema.py +364 -0
- maxframe/odpsio/tableio.py +322 -0
- maxframe/odpsio/tests/__init__.py +13 -0
- maxframe/odpsio/tests/test_arrow.py +88 -0
- maxframe/odpsio/tests/test_schema.py +297 -0
- maxframe/odpsio/tests/test_tableio.py +136 -0
- maxframe/odpsio/tests/test_volumeio.py +90 -0
- maxframe/odpsio/volumeio.py +95 -0
- maxframe/opcodes.py +590 -0
- maxframe/protocol.py +415 -0
- maxframe/remote/__init__.py +18 -0
- maxframe/remote/core.py +210 -0
- maxframe/remote/run_script.py +121 -0
- maxframe/serialization/__init__.py +26 -0
- maxframe/serialization/arrow.py +95 -0
- maxframe/serialization/core.cpython-310-darwin.so +0 -0
- maxframe/serialization/core.pxd +44 -0
- maxframe/serialization/core.pyi +61 -0
- maxframe/serialization/core.pyx +1094 -0
- maxframe/serialization/exception.py +86 -0
- maxframe/serialization/maxframe_objects.py +39 -0
- maxframe/serialization/numpy.py +91 -0
- maxframe/serialization/pandas.py +202 -0
- maxframe/serialization/scipy.py +71 -0
- maxframe/serialization/serializables/__init__.py +55 -0
- maxframe/serialization/serializables/core.py +262 -0
- maxframe/serialization/serializables/field.py +624 -0
- maxframe/serialization/serializables/field_type.py +589 -0
- maxframe/serialization/serializables/tests/__init__.py +13 -0
- maxframe/serialization/serializables/tests/test_field_type.py +121 -0
- maxframe/serialization/serializables/tests/test_serializable.py +250 -0
- maxframe/serialization/tests/__init__.py +13 -0
- maxframe/serialization/tests/test_serial.py +412 -0
- maxframe/session.py +1310 -0
- maxframe/tensor/__init__.py +183 -0
- maxframe/tensor/arithmetic/__init__.py +315 -0
- maxframe/tensor/arithmetic/abs.py +68 -0
- maxframe/tensor/arithmetic/absolute.py +68 -0
- maxframe/tensor/arithmetic/add.py +82 -0
- maxframe/tensor/arithmetic/angle.py +72 -0
- maxframe/tensor/arithmetic/arccos.py +104 -0
- maxframe/tensor/arithmetic/arccosh.py +91 -0
- maxframe/tensor/arithmetic/arcsin.py +94 -0
- maxframe/tensor/arithmetic/arcsinh.py +86 -0
- maxframe/tensor/arithmetic/arctan.py +106 -0
- maxframe/tensor/arithmetic/arctan2.py +128 -0
- maxframe/tensor/arithmetic/arctanh.py +86 -0
- maxframe/tensor/arithmetic/around.py +114 -0
- maxframe/tensor/arithmetic/bitand.py +95 -0
- maxframe/tensor/arithmetic/bitor.py +102 -0
- maxframe/tensor/arithmetic/bitxor.py +95 -0
- maxframe/tensor/arithmetic/cbrt.py +66 -0
- maxframe/tensor/arithmetic/ceil.py +71 -0
- maxframe/tensor/arithmetic/clip.py +165 -0
- maxframe/tensor/arithmetic/conj.py +74 -0
- maxframe/tensor/arithmetic/copysign.py +78 -0
- maxframe/tensor/arithmetic/core.py +544 -0
- maxframe/tensor/arithmetic/cos.py +85 -0
- maxframe/tensor/arithmetic/cosh.py +72 -0
- maxframe/tensor/arithmetic/deg2rad.py +72 -0
- maxframe/tensor/arithmetic/degrees.py +77 -0
- maxframe/tensor/arithmetic/divide.py +114 -0
- maxframe/tensor/arithmetic/equal.py +76 -0
- maxframe/tensor/arithmetic/exp.py +106 -0
- maxframe/tensor/arithmetic/exp2.py +67 -0
- maxframe/tensor/arithmetic/expm1.py +79 -0
- maxframe/tensor/arithmetic/fabs.py +74 -0
- maxframe/tensor/arithmetic/fix.py +69 -0
- maxframe/tensor/arithmetic/float_power.py +103 -0
- maxframe/tensor/arithmetic/floor.py +77 -0
- maxframe/tensor/arithmetic/floordiv.py +94 -0
- maxframe/tensor/arithmetic/fmax.py +105 -0
- maxframe/tensor/arithmetic/fmin.py +106 -0
- maxframe/tensor/arithmetic/fmod.py +99 -0
- maxframe/tensor/arithmetic/frexp.py +92 -0
- maxframe/tensor/arithmetic/greater.py +77 -0
- maxframe/tensor/arithmetic/greater_equal.py +69 -0
- maxframe/tensor/arithmetic/hypot.py +77 -0
- maxframe/tensor/arithmetic/i0.py +89 -0
- maxframe/tensor/arithmetic/imag.py +67 -0
- maxframe/tensor/arithmetic/invert.py +110 -0
- maxframe/tensor/arithmetic/isclose.py +115 -0
- maxframe/tensor/arithmetic/iscomplex.py +64 -0
- maxframe/tensor/arithmetic/isfinite.py +106 -0
- maxframe/tensor/arithmetic/isinf.py +103 -0
- maxframe/tensor/arithmetic/isnan.py +82 -0
- maxframe/tensor/arithmetic/isreal.py +63 -0
- maxframe/tensor/arithmetic/ldexp.py +99 -0
- maxframe/tensor/arithmetic/less.py +69 -0
- maxframe/tensor/arithmetic/less_equal.py +69 -0
- maxframe/tensor/arithmetic/log.py +92 -0
- maxframe/tensor/arithmetic/log10.py +85 -0
- maxframe/tensor/arithmetic/log1p.py +95 -0
- maxframe/tensor/arithmetic/log2.py +85 -0
- maxframe/tensor/arithmetic/logaddexp.py +80 -0
- maxframe/tensor/arithmetic/logaddexp2.py +78 -0
- maxframe/tensor/arithmetic/logical_and.py +81 -0
- maxframe/tensor/arithmetic/logical_not.py +74 -0
- maxframe/tensor/arithmetic/logical_or.py +82 -0
- maxframe/tensor/arithmetic/logical_xor.py +88 -0
- maxframe/tensor/arithmetic/lshift.py +82 -0
- maxframe/tensor/arithmetic/maximum.py +108 -0
- maxframe/tensor/arithmetic/minimum.py +108 -0
- maxframe/tensor/arithmetic/mod.py +104 -0
- maxframe/tensor/arithmetic/modf.py +83 -0
- maxframe/tensor/arithmetic/multiply.py +81 -0
- maxframe/tensor/arithmetic/nan_to_num.py +99 -0
- maxframe/tensor/arithmetic/negative.py +65 -0
- maxframe/tensor/arithmetic/nextafter.py +68 -0
- maxframe/tensor/arithmetic/not_equal.py +72 -0
- maxframe/tensor/arithmetic/positive.py +47 -0
- maxframe/tensor/arithmetic/power.py +106 -0
- maxframe/tensor/arithmetic/rad2deg.py +71 -0
- maxframe/tensor/arithmetic/radians.py +77 -0
- maxframe/tensor/arithmetic/real.py +70 -0
- maxframe/tensor/arithmetic/reciprocal.py +76 -0
- maxframe/tensor/arithmetic/rint.py +68 -0
- maxframe/tensor/arithmetic/rshift.py +81 -0
- maxframe/tensor/arithmetic/setimag.py +29 -0
- maxframe/tensor/arithmetic/setreal.py +29 -0
- maxframe/tensor/arithmetic/sign.py +81 -0
- maxframe/tensor/arithmetic/signbit.py +65 -0
- maxframe/tensor/arithmetic/sin.py +98 -0
- maxframe/tensor/arithmetic/sinc.py +102 -0
- maxframe/tensor/arithmetic/sinh.py +93 -0
- maxframe/tensor/arithmetic/spacing.py +72 -0
- maxframe/tensor/arithmetic/sqrt.py +81 -0
- maxframe/tensor/arithmetic/square.py +69 -0
- maxframe/tensor/arithmetic/subtract.py +81 -0
- maxframe/tensor/arithmetic/tan.py +88 -0
- maxframe/tensor/arithmetic/tanh.py +92 -0
- maxframe/tensor/arithmetic/tests/__init__.py +15 -0
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
- maxframe/tensor/arithmetic/truediv.py +104 -0
- maxframe/tensor/arithmetic/trunc.py +72 -0
- maxframe/tensor/arithmetic/utils.py +65 -0
- maxframe/tensor/array_utils.py +186 -0
- maxframe/tensor/base/__init__.py +34 -0
- maxframe/tensor/base/astype.py +119 -0
- maxframe/tensor/base/atleast_1d.py +74 -0
- maxframe/tensor/base/broadcast_to.py +89 -0
- maxframe/tensor/base/ravel.py +92 -0
- maxframe/tensor/base/tests/__init__.py +13 -0
- maxframe/tensor/base/tests/test_base.py +114 -0
- maxframe/tensor/base/transpose.py +125 -0
- maxframe/tensor/base/unique.py +205 -0
- maxframe/tensor/base/where.py +127 -0
- maxframe/tensor/core.py +724 -0
- maxframe/tensor/datasource/__init__.py +32 -0
- maxframe/tensor/datasource/arange.py +156 -0
- maxframe/tensor/datasource/array.py +415 -0
- maxframe/tensor/datasource/core.py +109 -0
- maxframe/tensor/datasource/empty.py +169 -0
- maxframe/tensor/datasource/from_dataframe.py +70 -0
- maxframe/tensor/datasource/from_dense.py +54 -0
- maxframe/tensor/datasource/from_sparse.py +47 -0
- maxframe/tensor/datasource/full.py +186 -0
- maxframe/tensor/datasource/ones.py +173 -0
- maxframe/tensor/datasource/scalar.py +40 -0
- maxframe/tensor/datasource/tests/__init__.py +13 -0
- maxframe/tensor/datasource/tests/test_datasource.py +278 -0
- maxframe/tensor/datasource/zeros.py +188 -0
- maxframe/tensor/fetch/__init__.py +15 -0
- maxframe/tensor/fetch/core.py +54 -0
- maxframe/tensor/indexing/__init__.py +47 -0
- maxframe/tensor/indexing/choose.py +196 -0
- maxframe/tensor/indexing/compress.py +124 -0
- maxframe/tensor/indexing/core.py +190 -0
- maxframe/tensor/indexing/extract.py +71 -0
- maxframe/tensor/indexing/fill_diagonal.py +183 -0
- maxframe/tensor/indexing/flatnonzero.py +60 -0
- maxframe/tensor/indexing/getitem.py +175 -0
- maxframe/tensor/indexing/nonzero.py +120 -0
- maxframe/tensor/indexing/setitem.py +132 -0
- maxframe/tensor/indexing/slice.py +29 -0
- maxframe/tensor/indexing/take.py +130 -0
- maxframe/tensor/indexing/tests/__init__.py +15 -0
- maxframe/tensor/indexing/tests/test_indexing.py +234 -0
- maxframe/tensor/indexing/unravel_index.py +103 -0
- maxframe/tensor/merge/__init__.py +15 -0
- maxframe/tensor/merge/stack.py +132 -0
- maxframe/tensor/merge/tests/__init__.py +13 -0
- maxframe/tensor/merge/tests/test_merge.py +52 -0
- maxframe/tensor/operators.py +123 -0
- maxframe/tensor/random/__init__.py +168 -0
- maxframe/tensor/random/beta.py +87 -0
- maxframe/tensor/random/binomial.py +137 -0
- maxframe/tensor/random/bytes.py +39 -0
- maxframe/tensor/random/chisquare.py +110 -0
- maxframe/tensor/random/choice.py +186 -0
- maxframe/tensor/random/core.py +234 -0
- maxframe/tensor/random/dirichlet.py +123 -0
- maxframe/tensor/random/exponential.py +94 -0
- maxframe/tensor/random/f.py +135 -0
- maxframe/tensor/random/gamma.py +128 -0
- maxframe/tensor/random/geometric.py +93 -0
- maxframe/tensor/random/gumbel.py +167 -0
- maxframe/tensor/random/hypergeometric.py +148 -0
- maxframe/tensor/random/laplace.py +133 -0
- maxframe/tensor/random/logistic.py +129 -0
- maxframe/tensor/random/lognormal.py +159 -0
- maxframe/tensor/random/logseries.py +122 -0
- maxframe/tensor/random/multinomial.py +133 -0
- maxframe/tensor/random/multivariate_normal.py +192 -0
- maxframe/tensor/random/negative_binomial.py +125 -0
- maxframe/tensor/random/noncentral_chisquare.py +132 -0
- maxframe/tensor/random/noncentral_f.py +126 -0
- maxframe/tensor/random/normal.py +143 -0
- maxframe/tensor/random/pareto.py +140 -0
- maxframe/tensor/random/permutation.py +104 -0
- maxframe/tensor/random/poisson.py +111 -0
- maxframe/tensor/random/power.py +142 -0
- maxframe/tensor/random/rand.py +82 -0
- maxframe/tensor/random/randint.py +121 -0
- maxframe/tensor/random/randn.py +96 -0
- maxframe/tensor/random/random_integers.py +123 -0
- maxframe/tensor/random/random_sample.py +86 -0
- maxframe/tensor/random/rayleigh.py +110 -0
- maxframe/tensor/random/shuffle.py +61 -0
- maxframe/tensor/random/standard_cauchy.py +105 -0
- maxframe/tensor/random/standard_exponential.py +72 -0
- maxframe/tensor/random/standard_gamma.py +120 -0
- maxframe/tensor/random/standard_normal.py +74 -0
- maxframe/tensor/random/standard_t.py +135 -0
- maxframe/tensor/random/tests/__init__.py +15 -0
- maxframe/tensor/random/tests/test_random.py +167 -0
- maxframe/tensor/random/triangular.py +119 -0
- maxframe/tensor/random/uniform.py +131 -0
- maxframe/tensor/random/vonmises.py +131 -0
- maxframe/tensor/random/wald.py +114 -0
- maxframe/tensor/random/weibull.py +140 -0
- maxframe/tensor/random/zipf.py +122 -0
- maxframe/tensor/rechunk/__init__.py +26 -0
- maxframe/tensor/rechunk/rechunk.py +43 -0
- maxframe/tensor/reduction/__init__.py +66 -0
- maxframe/tensor/reduction/all.py +103 -0
- maxframe/tensor/reduction/allclose.py +88 -0
- maxframe/tensor/reduction/any.py +105 -0
- maxframe/tensor/reduction/argmax.py +103 -0
- maxframe/tensor/reduction/argmin.py +103 -0
- maxframe/tensor/reduction/array_equal.py +64 -0
- maxframe/tensor/reduction/core.py +168 -0
- maxframe/tensor/reduction/count_nonzero.py +81 -0
- maxframe/tensor/reduction/cumprod.py +97 -0
- maxframe/tensor/reduction/cumsum.py +101 -0
- maxframe/tensor/reduction/max.py +120 -0
- maxframe/tensor/reduction/mean.py +123 -0
- maxframe/tensor/reduction/min.py +120 -0
- maxframe/tensor/reduction/nanargmax.py +82 -0
- maxframe/tensor/reduction/nanargmin.py +76 -0
- maxframe/tensor/reduction/nancumprod.py +91 -0
- maxframe/tensor/reduction/nancumsum.py +94 -0
- maxframe/tensor/reduction/nanmax.py +111 -0
- maxframe/tensor/reduction/nanmean.py +106 -0
- maxframe/tensor/reduction/nanmin.py +111 -0
- maxframe/tensor/reduction/nanprod.py +94 -0
- maxframe/tensor/reduction/nanstd.py +126 -0
- maxframe/tensor/reduction/nansum.py +115 -0
- maxframe/tensor/reduction/nanvar.py +149 -0
- maxframe/tensor/reduction/prod.py +130 -0
- maxframe/tensor/reduction/std.py +134 -0
- maxframe/tensor/reduction/sum.py +125 -0
- maxframe/tensor/reduction/tests/__init__.py +13 -0
- maxframe/tensor/reduction/tests/test_reduction.py +181 -0
- maxframe/tensor/reduction/var.py +176 -0
- maxframe/tensor/reshape/__init__.py +17 -0
- maxframe/tensor/reshape/reshape.py +188 -0
- maxframe/tensor/reshape/tests/__init__.py +15 -0
- maxframe/tensor/reshape/tests/test_reshape.py +37 -0
- maxframe/tensor/statistics/__init__.py +13 -0
- maxframe/tensor/statistics/percentile.py +175 -0
- maxframe/tensor/statistics/quantile.py +288 -0
- maxframe/tensor/ufunc/__init__.py +26 -0
- maxframe/tensor/ufunc/ufunc.py +200 -0
- maxframe/tensor/utils.py +718 -0
- maxframe/tests/__init__.py +13 -0
- maxframe/tests/test_codegen.py +69 -0
- maxframe/tests/test_protocol.py +144 -0
- maxframe/tests/test_utils.py +376 -0
- maxframe/tests/utils.py +164 -0
- maxframe/typing_.py +37 -0
- maxframe/udf.py +134 -0
- maxframe/utils.py +1114 -0
- maxframe-0.1.0b5.dist-info/METADATA +104 -0
- maxframe-0.1.0b5.dist-info/RECORD +647 -0
- maxframe-0.1.0b5.dist-info/WHEEL +5 -0
- maxframe-0.1.0b5.dist-info/top_level.txt +3 -0
- maxframe_client/__init__.py +17 -0
- maxframe_client/clients/__init__.py +13 -0
- maxframe_client/clients/framedriver.py +118 -0
- maxframe_client/clients/spe.py +104 -0
- maxframe_client/conftest.py +15 -0
- maxframe_client/fetcher.py +264 -0
- maxframe_client/session/__init__.py +22 -0
- maxframe_client/session/consts.py +36 -0
- maxframe_client/session/graph.py +119 -0
- maxframe_client/session/odps.py +482 -0
- maxframe_client/session/task.py +280 -0
- maxframe_client/session/tests/__init__.py +13 -0
- maxframe_client/session/tests/test_task.py +85 -0
- maxframe_client/tests/__init__.py +13 -0
- maxframe_client/tests/test_fetcher.py +89 -0
- maxframe_client/tests/test_session.py +255 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import numpy as np
|
|
16
|
+
import pandas as pd
|
|
17
|
+
|
|
18
|
+
from ... import opcodes
|
|
19
|
+
from ...core import ENTITY_TYPE
|
|
20
|
+
from ...serialization.serializables import AnyField, BoolField, Int32Field, KeyField
|
|
21
|
+
from ...tensor.utils import filter_inputs
|
|
22
|
+
from ..core import DATAFRAME_TYPE, SERIES_TYPE
|
|
23
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
24
|
+
from ..utils import build_empty_df, parse_index, validate_axis
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class DataFrameCorr(DataFrameOperator, DataFrameOperatorMixin):
|
|
28
|
+
_op_type_ = opcodes.CORR
|
|
29
|
+
|
|
30
|
+
other = KeyField("other", default=None)
|
|
31
|
+
method = AnyField("method", default=None)
|
|
32
|
+
min_periods = Int32Field("min_periods", default=None)
|
|
33
|
+
axis = Int32Field("axis", default=None)
|
|
34
|
+
drop = BoolField("drop", default=None)
|
|
35
|
+
|
|
36
|
+
def _set_inputs(self, inputs):
|
|
37
|
+
super()._set_inputs(inputs)
|
|
38
|
+
inputs_iter = iter(self._inputs)
|
|
39
|
+
next(inputs_iter)
|
|
40
|
+
if isinstance(self.other, ENTITY_TYPE):
|
|
41
|
+
self.other = next(inputs_iter)
|
|
42
|
+
|
|
43
|
+
def __call__(self, df_or_series):
|
|
44
|
+
if isinstance(df_or_series, SERIES_TYPE):
|
|
45
|
+
inputs = filter_inputs([df_or_series, self.other])
|
|
46
|
+
return self.new_scalar(inputs, dtype=np.dtype(np.float_))
|
|
47
|
+
else:
|
|
48
|
+
|
|
49
|
+
def _filter_numeric(obj):
|
|
50
|
+
if not isinstance(obj, DATAFRAME_TYPE):
|
|
51
|
+
return obj
|
|
52
|
+
num_dtypes = build_empty_df(obj.dtypes)._get_numeric_data().dtypes
|
|
53
|
+
if len(num_dtypes) != len(obj.dtypes):
|
|
54
|
+
return obj[list(num_dtypes.index)]
|
|
55
|
+
return obj
|
|
56
|
+
|
|
57
|
+
df_or_series = _filter_numeric(df_or_series)
|
|
58
|
+
self.other = _filter_numeric(self.other)
|
|
59
|
+
|
|
60
|
+
inputs = filter_inputs([df_or_series, self.other])
|
|
61
|
+
if self.axis is None:
|
|
62
|
+
dtypes = pd.Series(
|
|
63
|
+
[np.dtype(np.float_)] * len(df_or_series.dtypes),
|
|
64
|
+
index=df_or_series.dtypes.index,
|
|
65
|
+
)
|
|
66
|
+
return self.new_dataframe(
|
|
67
|
+
inputs,
|
|
68
|
+
shape=(df_or_series.shape[1],) * 2,
|
|
69
|
+
dtypes=dtypes,
|
|
70
|
+
index_value=df_or_series.columns_value,
|
|
71
|
+
columns_value=df_or_series.columns_value,
|
|
72
|
+
)
|
|
73
|
+
else:
|
|
74
|
+
new_index_value = df_or_series.axes[1 - self.axis].index_value
|
|
75
|
+
if isinstance(self.other, DATAFRAME_TYPE):
|
|
76
|
+
align_dtypes = pd.concat(
|
|
77
|
+
[self.other.dtypes, df_or_series.dtypes], axis=1
|
|
78
|
+
)
|
|
79
|
+
align_shape = (np.nan, align_dtypes.shape[0])
|
|
80
|
+
new_index_value = parse_index(align_dtypes.index)
|
|
81
|
+
else:
|
|
82
|
+
align_shape = df_or_series.shape
|
|
83
|
+
|
|
84
|
+
shape = (np.nan,) if self.drop else (align_shape[1 - self.axis],)
|
|
85
|
+
return self.new_series(
|
|
86
|
+
inputs,
|
|
87
|
+
shape=shape,
|
|
88
|
+
dtype=np.dtype(np.float_),
|
|
89
|
+
index_value=new_index_value,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def df_corr(df, method="pearson", min_periods=1):
|
|
94
|
+
"""
|
|
95
|
+
Compute pairwise correlation of columns, excluding NA/null values.
|
|
96
|
+
|
|
97
|
+
Parameters
|
|
98
|
+
----------
|
|
99
|
+
method : {'pearson', 'kendall', 'spearman'} or callable
|
|
100
|
+
Method of correlation:
|
|
101
|
+
|
|
102
|
+
* pearson : standard correlation coefficient
|
|
103
|
+
* kendall : Kendall Tau correlation coefficient
|
|
104
|
+
* spearman : Spearman rank correlation
|
|
105
|
+
* callable: callable with input two 1d ndarrays
|
|
106
|
+
and returning a float. Note that the returned matrix from corr
|
|
107
|
+
will have 1 along the diagonals and will be symmetric
|
|
108
|
+
regardless of the callable's behavior.
|
|
109
|
+
|
|
110
|
+
.. note::
|
|
111
|
+
kendall, spearman and callables not supported on multiple chunks yet.
|
|
112
|
+
|
|
113
|
+
min_periods : int, optional
|
|
114
|
+
Minimum number of observations required per pair of columns
|
|
115
|
+
to have a valid result. Currently only available for Pearson
|
|
116
|
+
and Spearman correlation.
|
|
117
|
+
|
|
118
|
+
Returns
|
|
119
|
+
-------
|
|
120
|
+
DataFrame
|
|
121
|
+
Correlation matrix.
|
|
122
|
+
|
|
123
|
+
See Also
|
|
124
|
+
--------
|
|
125
|
+
DataFrame.corrwith : Compute pairwise correlation with another
|
|
126
|
+
DataFrame or Series.
|
|
127
|
+
Series.corr : Compute the correlation between two Series.
|
|
128
|
+
|
|
129
|
+
Examples
|
|
130
|
+
--------
|
|
131
|
+
>>> import maxframe.dataframe as md
|
|
132
|
+
>>> df = md.DataFrame([(.2, .3), (.0, .6), (.6, .0), (.2, .1)],
|
|
133
|
+
... columns=['dogs', 'cats'])
|
|
134
|
+
>>> df.corr(method='pearson').execute()
|
|
135
|
+
dogs cats
|
|
136
|
+
dogs 1.000000 -0.851064
|
|
137
|
+
cats -0.851064 1.000000
|
|
138
|
+
"""
|
|
139
|
+
op = DataFrameCorr(method=method, min_periods=min_periods)
|
|
140
|
+
return op(df)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def df_corrwith(df, other, axis=0, drop=False, method="pearson"):
|
|
144
|
+
"""
|
|
145
|
+
Compute pairwise correlation.
|
|
146
|
+
|
|
147
|
+
Pairwise correlation is computed between rows or columns of
|
|
148
|
+
DataFrame with rows or columns of Series or DataFrame. DataFrames
|
|
149
|
+
are first aligned along both axes before computing the
|
|
150
|
+
correlations.
|
|
151
|
+
|
|
152
|
+
Parameters
|
|
153
|
+
----------
|
|
154
|
+
other : DataFrame, Series
|
|
155
|
+
Object with which to compute correlations.
|
|
156
|
+
axis : {0 or 'index', 1 or 'columns'}, default 0
|
|
157
|
+
The axis to use. 0 or 'index' to compute column-wise, 1 or 'columns' for
|
|
158
|
+
row-wise.
|
|
159
|
+
drop : bool, default False
|
|
160
|
+
Drop missing indices from result.
|
|
161
|
+
method : {'pearson', 'kendall', 'spearman'} or callable
|
|
162
|
+
Method of correlation:
|
|
163
|
+
|
|
164
|
+
* pearson : standard correlation coefficient
|
|
165
|
+
* kendall : Kendall Tau correlation coefficient
|
|
166
|
+
* spearman : Spearman rank correlation
|
|
167
|
+
* callable: callable with input two 1d ndarrays
|
|
168
|
+
and returning a float.
|
|
169
|
+
|
|
170
|
+
.. note::
|
|
171
|
+
kendall, spearman and callables not supported on multiple chunks yet.
|
|
172
|
+
|
|
173
|
+
Returns
|
|
174
|
+
-------
|
|
175
|
+
Series
|
|
176
|
+
Pairwise correlations.
|
|
177
|
+
|
|
178
|
+
See Also
|
|
179
|
+
--------
|
|
180
|
+
DataFrame.corr : Compute pairwise correlation of columns.
|
|
181
|
+
"""
|
|
182
|
+
axis = validate_axis(axis, df)
|
|
183
|
+
if drop:
|
|
184
|
+
# TODO implement with df.align(method='inner')
|
|
185
|
+
raise NotImplementedError("drop=True not implemented")
|
|
186
|
+
op = DataFrameCorr(other=other, method=method, axis=axis, drop=drop)
|
|
187
|
+
return op(df)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def series_corr(series, other, method="pearson", min_periods=None):
|
|
191
|
+
"""
|
|
192
|
+
Compute correlation with `other` Series, excluding missing values.
|
|
193
|
+
|
|
194
|
+
Parameters
|
|
195
|
+
----------
|
|
196
|
+
other : Series
|
|
197
|
+
Series with which to compute the correlation.
|
|
198
|
+
method : {'pearson', 'kendall', 'spearman'} or callable
|
|
199
|
+
Method used to compute correlation:
|
|
200
|
+
|
|
201
|
+
- pearson : Standard correlation coefficient
|
|
202
|
+
- kendall : Kendall Tau correlation coefficient
|
|
203
|
+
- spearman : Spearman rank correlation
|
|
204
|
+
- callable: Callable with input two 1d ndarrays and returning a float.
|
|
205
|
+
|
|
206
|
+
.. note::
|
|
207
|
+
kendall, spearman and callables not supported on multiple chunks yet.
|
|
208
|
+
|
|
209
|
+
min_periods : int, optional
|
|
210
|
+
Minimum number of observations needed to have a valid result.
|
|
211
|
+
|
|
212
|
+
Returns
|
|
213
|
+
-------
|
|
214
|
+
float
|
|
215
|
+
Correlation with other.
|
|
216
|
+
|
|
217
|
+
See Also
|
|
218
|
+
--------
|
|
219
|
+
DataFrame.corr : Compute pairwise correlation between columns.
|
|
220
|
+
DataFrame.corrwith : Compute pairwise correlation with another
|
|
221
|
+
DataFrame or Series.
|
|
222
|
+
|
|
223
|
+
Examples
|
|
224
|
+
--------
|
|
225
|
+
>>> import maxframe.dataframe as md
|
|
226
|
+
>>> s1 = md.Series([.2, .0, .6, .2])
|
|
227
|
+
>>> s2 = md.Series([.3, .6, .0, .1])
|
|
228
|
+
>>> s1.corr(s2, method='pearson').execute()
|
|
229
|
+
-0.8510644963469898
|
|
230
|
+
"""
|
|
231
|
+
op = DataFrameCorr(other=other, method=method, min_periods=min_periods)
|
|
232
|
+
return op(series)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def series_autocorr(series, lag=1):
|
|
236
|
+
"""
|
|
237
|
+
Compute the lag-N autocorrelation.
|
|
238
|
+
|
|
239
|
+
This method computes the Pearson correlation between
|
|
240
|
+
the Series and its shifted self.
|
|
241
|
+
|
|
242
|
+
Parameters
|
|
243
|
+
----------
|
|
244
|
+
lag : int, default 1
|
|
245
|
+
Number of lags to apply before performing autocorrelation.
|
|
246
|
+
|
|
247
|
+
Returns
|
|
248
|
+
-------
|
|
249
|
+
float
|
|
250
|
+
The Pearson correlation between self and self.shift(lag).
|
|
251
|
+
|
|
252
|
+
See Also
|
|
253
|
+
--------
|
|
254
|
+
Series.corr : Compute the correlation between two Series.
|
|
255
|
+
Series.shift : Shift index by desired number of periods.
|
|
256
|
+
DataFrame.corr : Compute pairwise correlation of columns.
|
|
257
|
+
DataFrame.corrwith : Compute pairwise correlation between rows or
|
|
258
|
+
columns of two DataFrame objects.
|
|
259
|
+
|
|
260
|
+
Notes
|
|
261
|
+
-----
|
|
262
|
+
If the Pearson correlation is not well defined return 'NaN'.
|
|
263
|
+
|
|
264
|
+
Examples
|
|
265
|
+
--------
|
|
266
|
+
>>> import maxframe.dataframe as md
|
|
267
|
+
>>> s = md.Series([0.25, 0.5, 0.2, -0.05])
|
|
268
|
+
>>> s.autocorr().execute() # doctest: +ELLIPSIS.execute()
|
|
269
|
+
0.10355...
|
|
270
|
+
>>> s.autocorr(lag=2).execute() # doctest: +ELLIPSIS.execute()
|
|
271
|
+
-0.99999...
|
|
272
|
+
|
|
273
|
+
If the Pearson correlation is not well defined, then 'NaN' is returned.
|
|
274
|
+
|
|
275
|
+
>>> s = md.Series([1, 0, 0, 0])
|
|
276
|
+
>>> s.autocorr().execute()
|
|
277
|
+
nan
|
|
278
|
+
"""
|
|
279
|
+
op = DataFrameCorr(other=series.shift(lag), method="pearson")
|
|
280
|
+
return op(series)
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import numpy as np
|
|
16
|
+
import pandas as pd
|
|
17
|
+
|
|
18
|
+
from ... import opcodes as OperandDef
|
|
19
|
+
from ...core import ENTITY_TYPE
|
|
20
|
+
from ...serialization.serializables import (
|
|
21
|
+
AnyField,
|
|
22
|
+
BoolField,
|
|
23
|
+
DataTypeField,
|
|
24
|
+
Int32Field,
|
|
25
|
+
KeyField,
|
|
26
|
+
StringField,
|
|
27
|
+
)
|
|
28
|
+
from ...tensor.core import TENSOR_TYPE
|
|
29
|
+
from ...tensor.datasource import empty
|
|
30
|
+
from ...tensor.datasource import from_series as tensor_from_series
|
|
31
|
+
from ...tensor.datasource import tensor as astensor
|
|
32
|
+
from ...tensor.statistics.quantile import quantile as tensor_quantile
|
|
33
|
+
from ..core import DATAFRAME_TYPE
|
|
34
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
35
|
+
from ..utils import build_empty_df, find_common_type, parse_index, validate_axis
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class DataFrameQuantile(DataFrameOperator, DataFrameOperatorMixin):
|
|
39
|
+
_op_type_ = OperandDef.QUANTILE
|
|
40
|
+
|
|
41
|
+
input = KeyField("input", default=None)
|
|
42
|
+
q = AnyField("q", default=None)
|
|
43
|
+
axis = Int32Field("axis", default=None)
|
|
44
|
+
numeric_only = BoolField("numeric_only", default=None)
|
|
45
|
+
interpolation = StringField("interpolation", default=None)
|
|
46
|
+
|
|
47
|
+
dtype = DataTypeField("dtype", default=None)
|
|
48
|
+
|
|
49
|
+
def __init__(self, output_types=None, **kw):
|
|
50
|
+
super().__init__(_output_types=output_types, **kw)
|
|
51
|
+
|
|
52
|
+
def _set_inputs(self, inputs):
|
|
53
|
+
super()._set_inputs(inputs)
|
|
54
|
+
self.input = self._inputs[0]
|
|
55
|
+
if isinstance(self.q, TENSOR_TYPE):
|
|
56
|
+
self.q = self._inputs[-1]
|
|
57
|
+
|
|
58
|
+
def _calc_dtype_on_axis_1(self, a, dtypes):
|
|
59
|
+
quantile_dtypes = []
|
|
60
|
+
for name in dtypes.index:
|
|
61
|
+
dt = tensor_quantile(
|
|
62
|
+
tensor_from_series(a[name]),
|
|
63
|
+
self.q,
|
|
64
|
+
interpolation=self.interpolation,
|
|
65
|
+
handle_non_numeric=not self.numeric_only,
|
|
66
|
+
).dtype
|
|
67
|
+
quantile_dtypes.append(dt)
|
|
68
|
+
return find_common_type(quantile_dtypes)
|
|
69
|
+
|
|
70
|
+
def _call_dataframe(self, a, inputs):
|
|
71
|
+
if self.numeric_only:
|
|
72
|
+
empty_df = build_empty_df(a.dtypes)
|
|
73
|
+
dtypes = empty_df._get_numeric_data().dtypes
|
|
74
|
+
else:
|
|
75
|
+
dtypes = a.dtypes
|
|
76
|
+
if isinstance(self.q, TENSOR_TYPE):
|
|
77
|
+
q_val = self.q
|
|
78
|
+
pd_index = pd.Index([], dtype=q_val.dtype)
|
|
79
|
+
name = None
|
|
80
|
+
store_index_value = False
|
|
81
|
+
else:
|
|
82
|
+
q_val = np.asanyarray(self.q)
|
|
83
|
+
pd_index = pd.Index(q_val)
|
|
84
|
+
name = self.q if q_val.size == 1 else None
|
|
85
|
+
store_index_value = True
|
|
86
|
+
tokenize_objects = (a, q_val, self.interpolation, type(self).__name__)
|
|
87
|
+
|
|
88
|
+
if q_val.ndim == 0 and self.axis == 0:
|
|
89
|
+
index_value = parse_index(dtypes.index, store_data=store_index_value)
|
|
90
|
+
shape = (len(dtypes),)
|
|
91
|
+
# calc dtype
|
|
92
|
+
dtype = self._calc_dtype_on_axis_1(a, dtypes)
|
|
93
|
+
return self.new_series(
|
|
94
|
+
inputs,
|
|
95
|
+
shape=shape,
|
|
96
|
+
dtype=dtype,
|
|
97
|
+
index_value=index_value,
|
|
98
|
+
name=name or dtypes.index.name,
|
|
99
|
+
)
|
|
100
|
+
elif q_val.ndim == 0 and self.axis == 1:
|
|
101
|
+
index_value = a.index_value
|
|
102
|
+
shape = (len(a),)
|
|
103
|
+
# calc dtype
|
|
104
|
+
dt = tensor_quantile(
|
|
105
|
+
empty(a.shape[1], dtype=find_common_type(list(dtypes))),
|
|
106
|
+
self.q,
|
|
107
|
+
interpolation=self.interpolation,
|
|
108
|
+
handle_non_numeric=not self.numeric_only,
|
|
109
|
+
).dtype
|
|
110
|
+
return self.new_series(
|
|
111
|
+
inputs,
|
|
112
|
+
shape=shape,
|
|
113
|
+
dtype=dt,
|
|
114
|
+
index_value=index_value,
|
|
115
|
+
name=name or index_value.name,
|
|
116
|
+
)
|
|
117
|
+
elif q_val.ndim == 1 and self.axis == 0:
|
|
118
|
+
shape = (len(q_val), len(dtypes))
|
|
119
|
+
index_value = parse_index(
|
|
120
|
+
pd_index, *tokenize_objects, store_data=store_index_value
|
|
121
|
+
)
|
|
122
|
+
dtype_list = []
|
|
123
|
+
for name in dtypes.index:
|
|
124
|
+
dtype_list.append(
|
|
125
|
+
tensor_quantile(
|
|
126
|
+
tensor_from_series(a[name]),
|
|
127
|
+
self.q,
|
|
128
|
+
interpolation=self.interpolation,
|
|
129
|
+
handle_non_numeric=not self.numeric_only,
|
|
130
|
+
).dtype
|
|
131
|
+
)
|
|
132
|
+
dtypes = pd.Series(dtype_list, index=dtypes.index)
|
|
133
|
+
return self.new_dataframe(
|
|
134
|
+
inputs,
|
|
135
|
+
shape=shape,
|
|
136
|
+
dtypes=dtypes,
|
|
137
|
+
index_value=index_value,
|
|
138
|
+
columns_value=parse_index(dtypes.index, store_data=True),
|
|
139
|
+
)
|
|
140
|
+
else:
|
|
141
|
+
assert q_val.ndim == 1 and self.axis == 1
|
|
142
|
+
shape = (len(q_val), a.shape[0])
|
|
143
|
+
index_value = parse_index(
|
|
144
|
+
pd_index, *tokenize_objects, store_data=store_index_value
|
|
145
|
+
)
|
|
146
|
+
pd_columns = a.index_value.to_pandas()
|
|
147
|
+
dtype_list = np.full(len(pd_columns), self._calc_dtype_on_axis_1(a, dtypes))
|
|
148
|
+
dtypes = pd.Series(dtype_list, index=pd_columns)
|
|
149
|
+
return self.new_dataframe(
|
|
150
|
+
inputs,
|
|
151
|
+
shape=shape,
|
|
152
|
+
dtypes=dtypes,
|
|
153
|
+
index_value=index_value,
|
|
154
|
+
columns_value=parse_index(
|
|
155
|
+
dtypes.index, store_data=True, key=a.index_value.key
|
|
156
|
+
),
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
def _call_series(self, a, inputs):
|
|
160
|
+
if isinstance(self.q, TENSOR_TYPE):
|
|
161
|
+
q_val = self.q
|
|
162
|
+
index_val = pd.Index([], dtype=q_val.dtype)
|
|
163
|
+
store_index_value = False
|
|
164
|
+
else:
|
|
165
|
+
q_val = np.asanyarray(self.q)
|
|
166
|
+
index_val = pd.Index(q_val)
|
|
167
|
+
store_index_value = True
|
|
168
|
+
|
|
169
|
+
# get dtype by tensor
|
|
170
|
+
a_t = astensor(a)
|
|
171
|
+
self._dtype = dtype = tensor_quantile(
|
|
172
|
+
a_t,
|
|
173
|
+
self.q,
|
|
174
|
+
interpolation=self.interpolation,
|
|
175
|
+
handle_non_numeric=not self.numeric_only,
|
|
176
|
+
).dtype
|
|
177
|
+
|
|
178
|
+
if q_val.ndim == 0:
|
|
179
|
+
return self.new_scalar(inputs, dtype=dtype)
|
|
180
|
+
else:
|
|
181
|
+
return self.new_series(
|
|
182
|
+
inputs,
|
|
183
|
+
shape=q_val.shape,
|
|
184
|
+
dtype=dtype,
|
|
185
|
+
index_value=parse_index(
|
|
186
|
+
index_val,
|
|
187
|
+
a,
|
|
188
|
+
q_val,
|
|
189
|
+
self.interpolation,
|
|
190
|
+
type(self).__name__,
|
|
191
|
+
store_data=store_index_value,
|
|
192
|
+
),
|
|
193
|
+
name=a.name,
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
def __call__(self, a, q_input=None):
|
|
197
|
+
inputs = [a]
|
|
198
|
+
if q_input is not None:
|
|
199
|
+
inputs.append(q_input)
|
|
200
|
+
if isinstance(a, DATAFRAME_TYPE):
|
|
201
|
+
return self._call_dataframe(a, inputs)
|
|
202
|
+
else:
|
|
203
|
+
return self._call_series(a, inputs)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def quantile_series(series, q=0.5, interpolation="linear"):
|
|
207
|
+
"""
|
|
208
|
+
Return value at the given quantile.
|
|
209
|
+
|
|
210
|
+
Parameters
|
|
211
|
+
----------
|
|
212
|
+
q : float or array-like, default 0.5 (50% quantile)
|
|
213
|
+
0 <= q <= 1, the quantile(s) to compute.
|
|
214
|
+
interpolation : {'linear', 'lower', 'higher', 'midpoint', 'nearest'}
|
|
215
|
+
|
|
216
|
+
This optional parameter specifies the interpolation method to use,
|
|
217
|
+
when the desired quantile lies between two data points `i` and `j`:
|
|
218
|
+
|
|
219
|
+
* linear: `i + (j - i) * fraction`, where `fraction` is the
|
|
220
|
+
fractional part of the index surrounded by `i` and `j`.
|
|
221
|
+
* lower: `i`.
|
|
222
|
+
* higher: `j`.
|
|
223
|
+
* nearest: `i` or `j` whichever is nearest.
|
|
224
|
+
* midpoint: (`i` + `j`) / 2.
|
|
225
|
+
|
|
226
|
+
Returns
|
|
227
|
+
-------
|
|
228
|
+
float or Series
|
|
229
|
+
If ``q`` is an array or a tensor, a Series will be returned where the
|
|
230
|
+
index is ``q`` and the values are the quantiles, otherwise
|
|
231
|
+
a float will be returned.
|
|
232
|
+
|
|
233
|
+
See Also
|
|
234
|
+
--------
|
|
235
|
+
core.window.Rolling.quantile
|
|
236
|
+
numpy.percentile
|
|
237
|
+
|
|
238
|
+
Examples
|
|
239
|
+
--------
|
|
240
|
+
>>> import maxframe.dataframe as md
|
|
241
|
+
>>> s = md.Series([1, 2, 3, 4])
|
|
242
|
+
>>> s.quantile(.5).execute()
|
|
243
|
+
2.5
|
|
244
|
+
>>> s.quantile([.25, .5, .75]).execute()
|
|
245
|
+
0.25 1.75
|
|
246
|
+
0.50 2.50
|
|
247
|
+
0.75 3.25
|
|
248
|
+
dtype: float64
|
|
249
|
+
"""
|
|
250
|
+
|
|
251
|
+
if isinstance(q, ENTITY_TYPE):
|
|
252
|
+
q = astensor(q)
|
|
253
|
+
q_input = q
|
|
254
|
+
else:
|
|
255
|
+
q_input = None
|
|
256
|
+
|
|
257
|
+
op = DataFrameQuantile(q=q, interpolation=interpolation, gpu=series.op.gpu)
|
|
258
|
+
return op(series, q_input=q_input)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def quantile_dataframe(df, q=0.5, axis=0, numeric_only=True, interpolation="linear"):
|
|
262
|
+
"""
|
|
263
|
+
Return values at the given quantile over requested axis.
|
|
264
|
+
|
|
265
|
+
Parameters
|
|
266
|
+
----------
|
|
267
|
+
q : float or array-like, default 0.5 (50% quantile)
|
|
268
|
+
Value between 0 <= q <= 1, the quantile(s) to compute.
|
|
269
|
+
axis : {0, 1, 'index', 'columns'} (default 0)
|
|
270
|
+
Equals 0 or 'index' for row-wise, 1 or 'columns' for column-wise.
|
|
271
|
+
numeric_only : bool, default True
|
|
272
|
+
If False, the quantile of datetime and timedelta data will be
|
|
273
|
+
computed as well.
|
|
274
|
+
interpolation : {'linear', 'lower', 'higher', 'midpoint', 'nearest'}
|
|
275
|
+
This optional parameter specifies the interpolation method to use,
|
|
276
|
+
when the desired quantile lies between two data points `i` and `j`:
|
|
277
|
+
* linear: `i + (j - i) * fraction`, where `fraction` is the
|
|
278
|
+
fractional part of the index surrounded by `i` and `j`.
|
|
279
|
+
* lower: `i`.
|
|
280
|
+
* higher: `j`.
|
|
281
|
+
* nearest: `i` or `j` whichever is nearest.
|
|
282
|
+
* midpoint: (`i` + `j`) / 2.
|
|
283
|
+
|
|
284
|
+
Returns
|
|
285
|
+
-------
|
|
286
|
+
Series or DataFrame
|
|
287
|
+
If ``q`` is an array or a tensor, a DataFrame will be returned where the
|
|
288
|
+
index is ``q``, the columns are the columns of self, and the
|
|
289
|
+
values are the quantiles.
|
|
290
|
+
If ``q`` is a float, a Series will be returned where the
|
|
291
|
+
index is the columns of self and the values are the quantiles.
|
|
292
|
+
|
|
293
|
+
See Also
|
|
294
|
+
--------
|
|
295
|
+
core.window.Rolling.quantile: Rolling quantile.
|
|
296
|
+
numpy.percentile: Numpy function to compute the percentile.
|
|
297
|
+
|
|
298
|
+
Examples
|
|
299
|
+
--------
|
|
300
|
+
>>> import maxframe.dataframe as md
|
|
301
|
+
>>> df = md.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]),
|
|
302
|
+
... columns=['a', 'b'])
|
|
303
|
+
>>> df.quantile(.1).execute()
|
|
304
|
+
a 1.3
|
|
305
|
+
b 3.7
|
|
306
|
+
Name: 0.1, dtype: float64
|
|
307
|
+
|
|
308
|
+
>>> df.quantile([.1, .5]).execute()
|
|
309
|
+
a b
|
|
310
|
+
0.1 1.3 3.7
|
|
311
|
+
0.5 2.5 55.0
|
|
312
|
+
|
|
313
|
+
Specifying `numeric_only=False` will also compute the quantile of
|
|
314
|
+
datetime and timedelta data.
|
|
315
|
+
|
|
316
|
+
>>> df = md.DataFrame({'A': [1, 2],
|
|
317
|
+
... 'B': [md.Timestamp('2010'),
|
|
318
|
+
... md.Timestamp('2011')],
|
|
319
|
+
... 'C': [md.Timedelta('1 days'),
|
|
320
|
+
... md.Timedelta('2 days')]})
|
|
321
|
+
>>> df.quantile(0.5, numeric_only=False).execute()
|
|
322
|
+
A 1.5
|
|
323
|
+
B 2010-07-02 12:00:00
|
|
324
|
+
C 1 days 12:00:00
|
|
325
|
+
Name: 0.5, dtype: object
|
|
326
|
+
"""
|
|
327
|
+
if isinstance(q, ENTITY_TYPE):
|
|
328
|
+
q = astensor(q)
|
|
329
|
+
q_input = q
|
|
330
|
+
else:
|
|
331
|
+
q_input = None
|
|
332
|
+
axis = validate_axis(axis, df)
|
|
333
|
+
|
|
334
|
+
op = DataFrameQuantile(
|
|
335
|
+
q=q,
|
|
336
|
+
interpolation=interpolation,
|
|
337
|
+
axis=axis,
|
|
338
|
+
numeric_only=numeric_only,
|
|
339
|
+
gpu=df.op.gpu,
|
|
340
|
+
)
|
|
341
|
+
return op(df, q_input=q_input)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|