Skip to main content

一个 Hy 库,通过包装 Python 的流行数据库(如 Pandas 和 Matplotlib)提供 Lispy 功能接口。

项目描述

海五

什么是 HyFive?

HyFive 是一个Hy库,它通过包装 Python 的流行数据库(如PandasMatplotlib )来提供 Lispy 功能接口。

HyFive 与香草熊猫

熊猫DataFrame有自己的怪癖。它的范围从没有filter方法到具有join与 SQL 不同的定义。从Pandas 和 SQL之间令人眼花缭乱的比较中可以明显看出这一点。HyFive 旨在提供一个尽可能接近Spark 的 SQL 和 DataFrame的 Lispy 接口。

从函数式编程的角度来看,与 Spark SQL 的方法链约定不同,Pandas 接口很难组合。由于这个困难,Pandas 经常不正当地鼓励数据帧的短名称,以支持创建中间变量,这会在命名空间中乱扔垃圾。

HyFive 利用 Hy 的线程宏来模仿 Spark DataFrame 的方法链接约定,同时保持熟悉的 Pandas 数据帧。考虑以下 HyFive 片段:

(setv DATAFRAME
  (-> NAME-REGISTRY
      (hf.with-column "variant"
        (let [mod-res-id (hf.mod "resident_id" 3)]
          (hf.cond-col [(hf.eq? mod-res-id 1) (hf.lit "a")]
                       [(hf.eq? mod-res-id 2) (hf.lit "b")]
                       [:else                 (hf.lit "c")])))
      (hf.filter (hf.is-in "variant" ["a" "b"]))
      (hf.join AGE-REGISTRY :on "resident_id")
      (hf.group-by "variant")
      (hf.agg {"min_age"  (hf.min "age")
               "mean_age" (hf.mean "age")
               "std_age"  (hf.std "age")
               "max_age"  (hf.max "age")})
      (hf.order-by "min_age" :desc True)))

在这里,我们进行了添加列、过滤行、连接表、聚合组和排序行的简单操作。除了 Lispy 之外cond,这些操作将一对一地转换为 Spark 数据帧或 SQL。

相比之下,在纯 Pandas 中必须更加努力:

mod_res_id = NAME_REGISTRY.resident_id % 3
variant = np.where(mod_res_id == 1, 'a', np.where(mod_res_id == 2, 'b', 'c'))
select_ix = np.isin(variant, ['a', 'b'])
dataframe = (NAME_REGISTRY
                .assign(variant=variant)
                [select_ix]
                .merge(AGE_REGISTRY, on='resident_id')
                .groupby('variant')
                .apply(lambda df: pd.Series({
                    'min_age': df.age.min(),
                    'mean_age': df.age.mean(),
                    'std_age': df.age.std(),
                    'max_age': df.age.max()
                }))
                .reset_index()
                .sort_values(by='min_age', ascending=False)
                .reset_index(drop=True))

Pandas 版本的可读性较差,我们失去了与 Spark 数据帧或 SQL 的一对一转换。

尝试 HyFive

克隆存储库,并在终端的根目录上输入以下命令:

./run build-docker

使用以下命令运行单元测试:

./run unit-tests .

通过运行调用 Hy REPL:

./run repl

最后,使用以下命令导入 HyFive:

(import [hyfive :as hf])

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

dev_aa_test_1-0.1.0.tar.gz (3.1 kB 查看哈希

已上传 source

内置分布

dev_aa_test_1-0.1.0-py3-none-any.whl (15.3 kB 查看哈希

已上传 py3