一个 Hy 库,通过包装 Python 的流行数据库(如 Pandas 和 Matplotlib)提供 Lispy 功能接口。
项目描述
海五
什么是 HyFive?
HyFive 是一个Hy库,它通过包装 Python 的流行数据库(如Pandas和Matplotlib )来提供 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
查看哈希)
内置分布
dev_aa_test_1-0.1.0-py3-none-any.whl
(15.3 kB
查看哈希)
关
dev_aa_test_1-0.1.0.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b61643d0a3f7e3053a6e2476678cfedf375680cd5df8d5554b094999beb976fd |
|
| MD5 | f2100288ab145b62a8d904cbad873911 |
|
| 布莱克2-256 | f395c6bc0e56a4ba7c362a6dd8d3bfc61a8020ef868ef585a2f86da6be58df73 |
关
dev_aa_test_1-0.1.0 -py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | f8392ec91235294e8a2313596272cb933dece755407ec4171b1fc52bb1a7526a |
|
| MD5 | 6ac1139eef94e447e9f80cbc7c960311 |
|
| 布莱克2-256 | 9e90485c927696913c0ce887399628f3b2ad4ca96a5f7772b63ab8d4c3df932a |