Vertica-ML-Python简化了在Vertica中的数据探索、数据清理和机器学习。
项目描述
Vertica-ML-Python
文档可在以下位置找到
https://github.com/vertica/Vertica-ML-Python/blob/master/documentation.pdf
或在Wiki中直接访问
https://github.com/vertica/Vertica-ML-Python/wiki
(c) 版权 [2018-2020] Micro Focus或其附属公司。根据Apache许可证版本2.0(“许可证”)授权;除非根据适用法律或书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获取许可证副本
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可证下管理许可和限制的具体语言,请参阅许可证。
⚠ 如果您想贡献,请发送邮件至 badr.ouali@microfocus.com
Vertica-ML-Python 是一个 Python 库,它提供了类似 sci-kit 的功能,可以在 Vertica 中执行数据科学项目,从而利用 Vertica 的速度和内置的分析与机器学习能力。它支持整个数据科学生命周期,使用“管道”机制对数据转换操作进行顺序化(称为虚拟数据表),并提供多种图形渲染方式。
“大数据”(TB 级数据)现在是数据科学领域的主要话题之一。数据科学家现在对于任何组织都至关重要。成为数据驱动型是生存的必要条件。Vertica 是第一个真正的分析型列式数据库,并且在市场上仍然是速度最快的。然而,SQL 的灵活性不足以在数据科学家中非常受欢迎。Python 的灵活性是无价的,并为任何用户提供了非常好的体验。抽象级别非常高,以至于只需考虑一个函数就能意识到它已经存在。在过去的 15 年中,许多数据科学 API 被创建并直接被数据科学社区采用(例如:pandas 和 scikit-learn)。然而,Python 只能在单节点进程中以内存工作。即使有一些著名的分布式编程语言存在来应对这一挑战,它们仍然是内存中的,并且大多数时候它们不能处理所有数据。此外,移动数据可能会变得非常昂贵。数据科学家还必须找到一种方法来部署他们的数据准备和模型。我们离轻松程度还远着呢,整个过程可能会变得耗时。
VERTICA ML PYTHON 的理念很简单:结合 Vertica 的可扩展性和 Python 的灵活性,为社区提供他们所需的东西——将逻辑带到数据而不是相反。这个 1.0 版本是三年新想法和改进的成果。
主要优势
- 轻松的数据探索。
- 轻松的数据准备。
- 轻松的数据建模。
- 轻松的模型评估。
- 轻松的模型部署。
- vertica_ml_python.vDataframe 可以做到 pandas.Dataframe 大多数功能(甚至更多)
- 轻松创建和评估 ML 模型。
- 许多 scikit 函数和算法可用(且可扩展!)。
有关 API 的所有信息可以在以下位置找到
https://github.com/vertica/Vertica-ML-Python/
Python 版本
vertica-ml-python 至少与以下版本兼容
- Vertica: => 9.1(对于旧版本,某些函数和算法可能不可用)
- Python 版本: => 3.6 - [版本 3.5 可能可用]
- Python 渲染功能所需的模块: matplotlib (=> 3.0) - [其他版本的 matplotlib 可能可用],numpy (=> 1.9) - [其他版本的 numpy 可能可用]
- 其他 Python 模块: 除了获取渲染功能外,VERTICA ML Python 仅使用内置库(statistics, random, math, time 和 os)
标准库
vertica-ml-python 库仅使用标准 Python 库,例如 matplotlib,numpy... 其他库可以用于树可视化(例如:anytree)或 SQL 缩进(例如:sqlparse),但它们是可选的。
安装
要安装 vertica-ml-python,您可以使用 pip 命令
root@ubuntu:~$ pip3 install vertica_ml_python
或者您可以从 Vertica-ML-Python github 项目克隆源代码并安装
root@ubuntu:~$ python3 setup.py install
您还可以将 vertica_ml_python 文件夹拖放到 Python 框架的 site-package 文件夹中。在 MAC 环境中,您可以在以下位置找到它
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages
另一种方法是调用位于那里的库。
然后您可以使用常规 Python 语法导入每个库元素。
# to import the vDataframe
from vertica_ml_python import vDataframe
# to import the Logistic Regression
from vertica_ml_python.learn.linear_model import LogisticRegression
以下文档中对所有内容进行了详细说明。
数据库连接
如果已经安装了 vertica-python 或 pyodbc,并且您在机器上有一个 DSN,则此步骤是多余的。在这种配置下,您不需要手动创建游标。可以直接使用 DSN 创建 vDataframe(vDataframe 的 dsn 参数)。
ODBC
要连接到数据库,用户可以使用ODBC连接到Vertica数据库。vertica-python和pyodbc提供了一个指向数据库的光标。它将被vertica-ml-python用于创建所有不同的对象。
#
# vertica_python
#
import vertica_python
# Connection using all the DSN information
conn_info = {'host': "10.211.55.14", 'port': 5433, 'user': "dbadmin", 'password': "XxX", 'database': "testdb"}
cur = vertica_python.connect(** conn_info).cursor()
# Connection using directly the DSN
from vertica_ml_python.utilities import to_vertica_python_format # This function will parse the odbc.ini file
dsn = "VerticaDSN"
cur = vertica_python.connect(** to_vertica_python_format(dsn)).cursor()
#
# pyodbc
#
import pyodbc
# Connection using all the DSN information
driver = "/Library/Vertica/ODBC/lib/libverticaodbc.dylib"
server = "10.211.55.14"
database = "testdb"
port = "5433"
uid = "dbadmin"
pwd = "XxX"
dsn = ("DRIVER={}; SERVER={}; DATABASE={}; PORT={}; UID={}; PWD={};").format(driver, server, database, port, uid, pwd)
cur = pyodbc.connect(dsn).cursor()
# Connection using directly the DSN
dsn = ("DSN=VerticaDSN")
cur = pyodbc.connect(dsn).cursor()
JDBC
用户还可以使用JDBC连接到Vertica数据库。
import jaydebeapi
# Vertica Server Details
database = "testdb"
hostname = "10.211.55.14"
port = "5433"
uid = "dbadmin"
pwd = "XxX"
# Vertica JDBC class name
jdbc_driver_name = "com.vertica.jdbc.Driver"
# Vertica JDBC driver path
jdbc_driver_loc = "/Library/Vertica/JDBC/vertica-jdbc-9.3.1-0.jar"
# JDBC connection string
connection_string = 'jdbc:vertica://' + hostname + ':' + port + '/' + database
url = '{}:user={};password={}'.format(connection_string, uid, pwd)
conn = jaydebeapi.connect(jdbc_driver_name, connection_string, {'user': uid, 'password': pwd}, jars = jdbc_driver_loc)
cur = conn.cursor()
快速入门
使用pip命令安装库
root@ubuntu:~$ pip3 install vertica_ml_python
安装vertica_python或pyodbc以构建DB光标
root@ubuntu:~$ pip3 install vertica_python
创建Vertica光标
from vertica_ml_python.utilities import vertica_cursor
cur = vertica_cursor("VerticaDSN")
创建您关系的虚拟数据帧
from vertica_ml_python import vDataframe
vdf = vDataframe("my_relation", cursor = cur)
如果您没有数据可供操作,您可以轻松地加载知名数据集
from vertica_ml_python.learn.datasets import load_titanic
vdf = load_titanic(cursor = cur)
现在您可以开始玩数据了...
vdf.describe()
# Output
min 25% 50% 75%
age 0.33 21.0 28.0 39.0
body 1.0 79.25 160.5 257.5
fare 0.0 7.8958 14.4542 31.3875
parch 0.0 0.0 0.0 0.0
pclass 1.0 1.0 3.0 3.0
sibsp 0.0 0.0 0.0 1.0
survived 0.0 0.0 0.0 1.0
max unique
age 80.0 96
body 328.0 118
fare 512.3292 277
parch 9.0 8
pclass 3.0 3
sibsp 8.0 7
survived 1.0 2
您还可以使用sql_on_off方法打印SQL代码生成。
vdf.sql_on_off()
vdf.describe()
# Output
## Compute the descriptive statistics of all the numerical columns ##
SELECT
SUMMARIZE_NUMCOL("age","body","survived","pclass","parch","fare","sibsp") OVER ()
FROM public.titanic
使用Vertica ML Python,现在可以只用四行代码(如果不考虑库加载,则为两行)来解决ML问题。
from vertica_ml_python.learn.model_selection import cross_validate
from vertica_ml_python.learn.ensemble import RandomForestClassifier
# Data Preparation
vdf["sex"].label_encode()["boat"].fillna(method = "0ifnull")["name"].str_extract(' ([A-Za-z]+)\.').eval("family_size", expr = "parch + sibsp + 1").drop(columns = ["cabin", "body", "ticket", "home.dest"])["fare"].fill_outliers().fillna().to_db("titanic_clean")
# Model Evaluation
cross_validate(RandomForestClassifier("rf_titanic", cur, max_leaf_nodes = 100, n_estimators = 30), "titanic_clean", ["age", "family_size", "sex", "pclass", "fare", "boat"], "survived", cutoff = 0.35)
# Output
auc prc_auc
1-fold 0.9877114427860691 0.9530465915039339
2-fold 0.9965555014605642 0.7676485351425721
3-fold 0.9927239216549301 0.6419135521132449
avg 0.992330288634 0.787536226253
std 0.00362128464093 0.12779562393
accuracy log_loss
1-fold 0.971291866028708 0.0502052541223871
2-fold 0.983253588516746 0.0298167751798457
3-fold 0.964824120603015 0.0392745694400433
avg 0.973123191716 0.0397655329141
std 0.0076344236729 0.00833079837099
precision recall
1-fold 0.96 0.96
2-fold 0.9556962025316456 1.0
3-fold 0.9647887323943662 0.9383561643835616
avg 0.960161644975 0.966118721461
std 0.00371376912311 0.025535200301
f1-score mcc
1-fold 0.9687259282082884 0.9376119402985075
2-fold 0.9867172675521821 0.9646971010878469
3-fold 0.9588020287309097 0.9240569687684576
avg 0.97141507483 0.942122003385
std 0.0115538960753 0.0168949813163
informedness markedness
1-fold 0.9376119402985075 0.9376119402985075
2-fold 0.9737827715355807 0.9556962025316456
3-fold 0.9185148945422918 0.9296324823943662
avg 0.943303202125 0.940980208408
std 0.0229190954261 0.0109037699717
csi
1-fold 0.9230769230769231
2-fold 0.9556962025316456
3-fold 0.9072847682119205
avg 0.928685964607
std 0.0201579224026
玩得开心!😜
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
vertica_ml_python-1.0b0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c476f1dd388eaa601b2cbb3cfa1804a85a56701edca4e8fb93525cb844513b69 |
|
MD5 | f2ee8f8cfdb110fd68af02b5ced8731b |
|
BLAKE2b-256 | c08d20805f1475cb5f6797dd5c2ad68447754cea3133f332230abe84af02a99d |
vertica_ml_python-1.0b0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 188d6a24af04bfee7c60379806b3ac3e781714a7ed52e81db4be60aea9f64332 |
|
MD5 | c8df2e6b5294c2c367ef37ccac22884a |
|
BLAKE2b-256 | 9e91d42ff30f0b99ec5fe952ff23fed59cfcfdd84c5f67d92d8dced5fec9efbf |