GraphQL#
如果你想在实时的 Python 内核中尝试这个笔记本,请使用 mybinder:
vaex-graphql 是一个插件包,它通过 GraphQL 接口暴露一个 DataFrame。这使得可以轻松地使用标准查询语言将数据或聚合/统计或机器学习模型共享给前端或其他程序。
(使用 $ pip install vaex-graphql 安装,目前不支持 conda-forge)
[3]:
import vaex
df = vaex.datasets.titanic()
df
[3]:
| # | pclass | survived | name | sex | age | sibsp | parch | ticket | fare | cabin | embarked | boat | body | home_dest |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | True | 艾伦,伊丽莎白·沃尔顿小姐 | 女性 | 29.0 | 0 | 0 | 24160 | 211.3375 | B5 | S | 2 | nan | 圣路易斯,密苏里州 |
| 1 | 1 | True | Allison, Master. Hudson Trevor | 男 | 0.9167 | 1 | 2 | 113781 | 151.55 | C22 C26 | S | 11 | nan | 蒙特利尔, PQ / 切斯特维尔, ON |
| 2 | 1 | False | 艾莉森,海伦·洛兰小姐 | 女性 | 2.0 | 1 | 2 | 113781 | 151.55 | C22 C26 | S | 无 | 无 | 蒙特利尔,魁北克 / 切斯特维尔,安大略 |
| 3 | 1 | False | Allison, Mr. Hudson Joshua Creighton | 男 | 30.0 | 1 | 2 | 113781 | 151.55 | C22 C26 | S | 无 | 135.0 | 蒙特利尔, PQ / 切斯特维尔, ON |
| 4 | 1 | False | Allison, Mrs. Hudson J C (Bessie Waldo Daniels) | 女性 | 25.0 | 1 | 2 | 113781 | 151.55 | C22 C26 | S | 无 | nan | 蒙特利尔, PQ / 切斯特维尔, ON |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 1,304 | 3 | False | Zabour, Miss. Hileni | 女性 | 14.5 | 1 | 0 | 2665 | 14.4542 | 无 | C | 无 | 328.0 | 无 |
| 1,305 | 3 | False | Zabour, Miss. Thamine | 女性 | 无 | 1 | 0 | 2665 | 14.4542 | 无 | C | 无 | 无 | 无 |
| 1,306 | 3 | False | Zakarian, Mr. Mapriededer | 男 | 26.5 | 0 | 0 | 2656 | 7.225 | 无 | C | 无 | 304.0 | 无 |
| 1,307 | 3 | False | Zakarian, Mr. Ortin | 男 | 27.0 | 0 | 0 | 2670 | 7.225 | None | C | None | nan | None |
| 1,308 | 3 | False | Zimmerman, Mr. Leo | 男 | 29.0 | 0 | 0 | 315082 | 7.875 | 无 | S | 无 | 无 | 无 |
[10]:
result = df.graphql.execute("""
{
df {
min {
age
fare
}
mean {
age
fare
}
max {
age
fare
}
groupby {
sex {
count
mean {
age
}
}
}
}
}
""")
result.data
[10]:
OrderedDict([('df',
OrderedDict([('min',
OrderedDict([('age', 0.1667), ('fare', 0.0)])),
('mean',
OrderedDict([('age', 29.8811345124283),
('fare', 33.29547928134572)])),
('max',
OrderedDict([('age', 80.0), ('fare', 512.3292)])),
('groupby',
OrderedDict([('sex',
OrderedDict([('count', [466, 843]),
('mean',
OrderedDict([('age',
[28.6870706185567,
30.585232978723408])]))]))]))]))])
Pandas 支持#
导入vaex.graphql后,vaex还会安装一个pandas访问器,因此它也可以用于Pandas DataFrames。
[11]:
df_pandas = df.to_pandas_df()
[20]:
df_pandas.graphql.execute("""
{
df(where: {age: {_gt: 20}}) {
row(offset: 3, limit: 2) {
name
survived
}
}
}
"""
).data
[20]:
OrderedDict([('df',
OrderedDict([('row',
[OrderedDict([('name', 'Anderson, Mr. Harry'),
('survived', True)]),
OrderedDict([('name',
'Andrews, Miss. Kornelia Theodosia'),
('survived', True)])])]))])
服务器#
学习使用GraphQL语言/vaex接口的最简单方法是启动一个服务器,并使用GraphiQL图形界面、其自动完成功能和模式浏览器进行实践。
我们尽量保持与Hasura API的接近:https://docs.hasura.io/1.0/graphql/manual/api-reference/graphql-api/query.html
可以从命令行启动服务器:
$ python -m vaex.graphql myfile.hdf5
或者从Python中使用 df.graphql.serve
GraphiQL#
查看 mariobuikhuizen/ipygraphql 获取图形小部件,或访问 mybinder 尝试一个实时示例。 
[ ]: