跳转到主要内容

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 库,例如 matplotlibnumpy... 其他库可以用于树可视化(例如: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-pythonpyodbc,并且您在机器上有一个 DSN,则此步骤是多余的。在这种配置下,您不需要手动创建游标。可以直接使用 DSN 创建 vDataframe(vDataframe 的 dsn 参数)。

ODBC

要连接到数据库,用户可以使用ODBC连接到Vertica数据库。vertica-pythonpyodbc提供了一个指向数据库的光标。它将被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_pythonpyodbc以构建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 (384.7 kB 查看哈希值)

上传时间

构建分布

vertica_ml_python-1.0b0-py3-none-any.whl (417.2 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面