`
猫耳呀
  • 浏览: 165990 次
社区版块
存档分类
最新评论

在PyODPS DataFrame自定义函数中使用pandas、scipy和scikit-learn

阅读更多

背景
PyODPS DataFrame 提供了类似 pandas 的接口,来操作 ODPS 数据,同时也支持在本地使用 pandas,和使用数据库来执行。

PyODPS DataFrame 除了支持类似 pandas 的 map 和 apply 方法,也提供了 MapReduce API 来扩展 pandas 语法以适应大数据环境。

PyODPS 的自定义函数是序列化到 MaxCompute 上执行的,MaxCompute 的 Python 环境只包含了 numpy 这一个第三方包,用户常常问的问题是,如何在自定义函数里使用 pandas、scipy 或者 scikit-learn 这样的包含c代码的库?

现在,MaxCompute 在 sprint 27 及更高版本的 isolation,让在自定义函数中使用这些包成为可能。同时,
PyODPS也需要至少0.7.4版本 。接下来我会详细介绍使用步骤。

步骤
上传第三方包(只需做一次)
这个步骤只需要做一次,当 MaxCompute 资源里有了这些包,这一步直接跳过。

现在这些主流的 Python 包都提供了 whl 包,提供了各平台包含二进制文件的包,因此找到能在 MaxCompute 上能运行的包是第一步。

其次,要想在 MaxCompute 上运行,需要包含所有的依赖包,这个是比较繁琐的。我们可以看下各个包的依赖情况(删除表示已经包含)

包名 依赖

pandas    numpy, python-dateutil, pytz, six
scipy    numpy
scikit-learn    numpy, scipy

所以,我们一共需要上传 python-dateutil、pytz、pandas、scipy、sklearn、six 这六个包,就能保证 pandas、scipy 和 scikit-learn 可用。

我们直接通过 http://mirrors.aliyun.com/pypi/simple 来找包。首先是 python-dateutils:http://mirrors.aliyun.com/pypi/simple/python-dateutil/ 。我们找到最新版,这个包是纯 Python 的包,我们找到最新版的 zip 包,python-dateutil-2.6.0.zip,下载。

图片描述

重命名为 python-dateutil.zip,通过 MaxCompute Console 上传资源。

add archive python-dateutil.zip;

pytz 一样,找到 pytz-2017.2.zip。上传不表。

six 找到 six-1.11.0.tar.gz。

接下来,是pandas,对于这种包含c的包,我们一定要找 名字中包含cp27-cp27m-manylinux1_x86_64 的whl包,这样才能在 MaxCompute 上正确执行。因此,这样我们找到最新版的包是:pandas-0.20.2-cp27-cp27m-manylinux1_x86_64.whl。

这里我们把后缀改成zip,上传。

add archive pandas.zip;

其他包也是一样,因此,我们把它们都列出来:

包名 文件名 上传资源名

python-dateutil    python-dateutil-2.6.0.zip    python-dateutil.zip
pytz    pytz-2017.2.zip    pytz.zip
six    six-1.11.0.tar.gz    six.tar.gz
pandas    pandas-0.20.2-cp27-cp27m-manylinux1_x86_64.zip    pandas.zip
scipy    scipy-0.19.0-cp27-cp27m-manylinux1_x86_64.zip    scipy.zip
scikit-learn    scikit_learn-0.18.1-cp27-cp27m-manylinux1_x86_64.zip    sklearn.zip

至此,全部包上传都已完成。

当然,我们全部上传也可以使用 PyODPS 的资源上传接口来完成,同样只需要操作一遍即可。至于用哪个,看个人喜好了。

编写代码验证
我们写一个简单的函数,里面用到了所有的库,最好是在函数里来 import 这些第三方库。

def test(x):
    from sklearn import datasets, svm
    from scipy import misc
    import numpy as np

    iris = datasets.load_iris()
    assert iris.data.shape == (150, 4)
    assert np.array_equal(np.unique(iris.target),  [0, 1, 2])

    clf = svm.LinearSVC()
    clf.fit(iris.data, iris.target)
    pred = clf.predict([[5.0, 3.6, 1.3, 0.25]])
    assert pred[0] == 0

    assert misc.face().shape is not None

    return x

这段代码只是示例,目标是用到以上所说的所有的包。

写完函数后,我们写一个简单的 map,记住, 运行时要确保 isolation 打开 ,如果不在 project 级别打开,可以在运行时打开,一个可以设置全局的选项:

from odps import options

options.sql.settings = {'odps.isolation.session.enable': True}

也可以在 execute 方法上指定本次执行打开 isolation。

同样,我们可以在全局通过 options.df.libraries 指定用到的包,也可以在 execute 时指定。这里,我们要指定所有的包,包括依赖。下面就是调用刚刚定义的函数的例子。

hints = {
    'odps.isolation.session.enable': True
}
libraries = ['python-dateutil.zip', 'pytz.zip', 'six.tar.gz', 'pandas.zip', 'scipy.zip', 'sklearn.zip']

iris = o.get_table('pyodps_iris').to_df()

print iris[:1].sepal_length.map(test).execute(hints=hints, libraries=libraries)

可以看到,我们的函数顺利执行。

总结
对于要用到的第三方库及其依赖,如果已经上传,则可以直接编写代码,并指定用到的 libraries 即可;否则,需要按照教程上传第三方库。

可以看到,当第一步上传包做过后,以后每次使用都是优雅的,只需指定 libraries 就可以了。
原文链接

分享到:
评论

相关推荐

    Scikit-learn快速参考卡(中文版)

    Scikit-learn支持装载NumPy数组和SciPy稀疏矩阵格式的数据,并且能够处理其他可以转换为数值数组的数据类型,如Pandas的DataFrame。数据预处理包括标准化、特征缩放等操作。例如,使用`preprocessing.StandardScaler...

    Scikit-learn使用总结.pptx

    Scikit-learn是Python编程语言中的一个强大且广泛使用的机器学习库,它建立在NumPy、SciPy和Matplotlib的基础之上。自2007年发布以来,它已经成为数据分析和机器学习领域不可或缺的工具,特别是在Python社区中。...

    机器学习专业化:我使用Scikit-Learn,Pandas,Numpy和Scipy进行的Coursera机器学习专业化作业

    在本项目中,我们将深入探讨使用Scikit-Learn、Pandas、Numpy和Scipy这四个强大的Python库在Coursera上的"机器学习专业化"课程中的应用。这些工具是数据科学和机器学习领域不可或缺的组件,它们各自拥有独特的功能,...

    PyPI 官网下载 | sklearn-pandas-2.0.4.tar.gz

    首先,你可以用`pandas`加载和清洗数据,然后利用`sklearn-pandas`的转换器将DataFrame转换为`scikit-learn`的`Pipeline`或`FeatureUnion`,这样就可以在模型训练流程中无缝集成数据预处理步骤。这大大简化了代码,...

    无敌Scikit_Learn小抄2

    Scikit-learn是一个开源的Python库,它实现了一系列机器学习、预处理、交叉验证和可视化算法,使用统一的接口。下面是Scikit-learn小抄的详细知识点: 加载数据 Scikit-learn需要数据是数字的,并存储为NumPy数组...

    Pyto:适用于iOS的Python IDE,带有NumPy,Matplotlib,Pandas,SciPy和SciKit-Learn

    Pyto是一款专为iOS设备设计的Python集成开发环境(IDE),它提供了丰富的科学计算和数据分析库,如NumPy、Matplotlib、Pandas、SciPy以及SciKit-Learn。这些库在Python数据科学领域中占据着核心地位,使得Pyto成为...

    python-Risk-Based-Analysis-EDA-Profiling:使用numpy,pandas,matplotlib,seaborn,scipy,scikit-learn和google translation API对银行客户的EDA和客户配置文件进行分析

    这个项目特别关注银行客户的数据,利用numpy、pandas、matplotlib、seaborn、scipy和scikit-learn等工具,以及Google翻译API来处理和解析数据。以下是这些库在数据分析中的应用及其重要知识点: 1. **numpy**: ...

    PyPI 官网下载 | scikit-network-0.12.1.tar.gz

    5. **性能优化**:scikit-network利用Numpy和Scipy库进行底层计算,确保了高效性和可扩展性,尤其在处理大规模网络时表现优秀。 6. **文档与示例**:scikit-network提供了详细的API文档和丰富的示例代码,便于初学...

    Python3.7打包whl库,包括numpy、scikit、matplotlib、pandas、scipy等whl

    在这个场景中,我们讨论的是如何使用Python3.7来打包一些常用的科学计算和数据处理库,如numpy、scikit-learn、matplotlib、pandas和scipy,这些库在数据科学、机器学习和数据分析领域非常关键。 1. **numpy**: ...

    skift:适用于Python fastText的scikit-learn包装器

    脚步 用于Python fastText scikit-learn包装器。 >> > from skift import FirstColFtClassifier>> > df = pandas . DataFrame ([[ 'woof' , 0 ], [ 'meow' , 1 ]], columns = [ 'txt' , 'lbl' ])>> > sk_clf = ...

    pandas-cookbook-code-notes_jb51.rar

    9. **与其他库的集成**:Pandas可以与NumPy、SciPy、Scikit-learn等科学计算库无缝对接,形成强大的数据分析生态系统。 10. **进阶应用**:书中可能还会涉及更复杂的应用,如数据合并(merge/join)的策略、时间...

    python相关官方手册

    本压缩包包含了多个与Python相关的官方手册,涵盖了Pandas、Numpy、Scipy和Scikit-learn等核心库。 1. Python 3.6.2手册 (python362.chm) 这个手册详细介绍了Python 3.6.2版本的核心语法、内置函数、标准库以及异常...

    Python库 | pandas_plink-2.2.9-cp38-cp38-win_amd64.whl

    `pandas_plink`可以无缝集成到基于Pandas的数据分析流程中,与NumPy、SciPy、Scikit-learn等库协同工作,实现更复杂的数据处理和建模任务。例如,你可以使用Scikit-learn进行机器学习模型的构建,或者使用Seaborn和...

    数据科学代码_Data-Science-Notes-master.zip

    4. **Scikit-learn**:Scikit-learn是Python中最受欢迎的机器学习库,它提供了多种监督和无监督学习算法,如回归、分类、聚类和降维。此外,Scikit-learn还包含数据预处理、模型选择和评估工具,使得机器学习流程...

    python cheatsheets集锦

    这个"Python Cheatsheets集锦"包含了一系列重要的库和框架的速查表,如Numpy、Pandas、Matplotlib、Scipy和Scikit-learn,这些都是Python在这些领域的核心工具。 1. **Numpy**: Numpy是Python中的科学计算基础包,...

    11第11章 多元分析Python 程序及数据).rar

    Python作为一种强大的编程语言,具有丰富的库和工具,如NumPy、Pandas、SciPy和Scikit-learn,这些都是进行多元分析的关键资源。下面我们将深入探讨这些知识点: 1. **NumPy**: NumPy是Python科学计算的核心库,...

    PCA(numpy版+sklearn版).zip

    2. **数据加载**:同样,需要加载数据,但scikit-learn库通常处理的是CSV或Pandas DataFrame格式的数据。 3. **实例化PCA对象**:指定保留的主成分数量,例如`PCA(n_components=k)`。 4. **拟合数据**:使用`fit`...

    Scikit_Learn_Cheat_Sheet_Python.pdf

    Scikit-Learn是一个开源的Python机器学习库,它实现了广泛的机器学习、数据预处理、交叉验证和可视化算法,这些算法都使用统一的接口。它为数据科学提供了一个强大、灵活的工具集,可以用于各种统计建模以及数据挖掘...

    Python库 | pandas-1.4.0rc0-cp38-cp38-macosx_10_9_universal2.whl

    在开发过程中,了解pandas的最佳实践,如避免使用inplace操作、优化内存使用、利用Cython或Dask加速计算,以及使用pandas与其他库(如NumPy, SciPy, scikit-learn)的集成,都能提升数据处理效率。此外,持续关注...

    python2.7 package

    Scikit-learn是Python中领先的机器学习库,提供了大量的监督和无监督学习算法,如分类、回归、聚类、降维等。Scikit-learn-0.13.1.win32-py2.7.exe是针对Python 2.7的Windows版本。虽然这个版本相对较旧,但它仍...

Global site tag (gtag.js) - Google Analytics