对于Pandas运行速度的提升方法,之前已经介绍过很多回了,里面经常提及Dask,很多朋友没接触过可能不太了解,今天就推荐一下这个神器。

1、什么是Dask?

Pandas和Numpy大家都不陌生了,代码运行后数据都加载到RAM中,如果数据集特别大,我们就会看到内存飙升。但有时要处理的数据并不适合RAM,这时候Dask来了。

Dask是开源免费的。它是与其他社区项目(如Numpy,Pandas和Scikit-Learn)协调开发的。

官方:https://dask.org/

Dask支持Pandas的DataFrame和NumpyArray的数据结构,并且既可在本地计算机上运行,也可以扩展到在集群上运行。

基本上,只要编写一次代码,使用普通的Pythonic语法,就可在本地运行或部署到多节点集群上。这本身就是一个很牛逼的功能了,但这还不是最牛逼的。

我觉得Dask的最牛逼的功能是:它兼容大部分我们已经在用的工具,并且只需改动少量的代码,就可以利用自己笔记本电脑上已有的处理能力并行运行代码。而并行处理数据就意味着更少的执行时间,更少的等待时间和更多的分析时间。

下面这个就是Dask进行数据处理的大致流程。

2、Dask支持哪些现有工具?

这一点也是我比较看中的,因为Dask可以与Python数据处理和建模的库包兼容,沿用库包的API,这对于Python使用者来说学习成本是极低的。而像Hadoop、Spark这种大数据处理是有很高的学习门槛和时间成本的。

目前,Dask可支持pandas、Numpy、Sklearn、XGBoost、XArray、RAPIDS等等,光是这几项我觉得就足够用了,至少对于常用的数据处理、建模分析是完全覆盖得掉的。


很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:721195303


3、Dask安装

可以使用 conda 或者 pip,或从源代码安装dask 。

conda install dask

因为dask有很多依赖,所以为了快速安装也可用下面代码,将安装运行Dask所需的最少依赖关系集。

conda install dask-core

再有就是通过源来安装。

git clone https://github.com/dask/dask.git
cd dask
python -m pip install .

4、Dask如何使用?

Numpy、pandas

Dask引入了3个并行集合,它们可以存储大于RAM的数据,这些集合有DataFrame、Bags、Arrays。这些集合类型中的每一个都能够使用在RAM和硬盘之间分区的数据,以及分布在群集中多个节点上的数据。

Dask的使用是非常清晰的,如果你使用NumPy数组,就从Dask数组开始,如果你使用Pandas DataFrame,就从Dask DataFrame开始,依此类推。

import dask.array as da
x = da.random.uniform(low=0, high=10, size=(10000, 10000),  # normal numpy codechunks=(1000, 1000))  # break into chunks of size 1000x1000y = x + x.T - x.mean(axis=0)  # Use normal syntax for high level algorithms# DataFrames
import dask.dataframe as dd
df = dd.read_csv('2018-*-*.csv', parse_dates='timestamp',  # normal Pandas codeblocksize=64000000)  # break text into 64MB chunkss = df.groupby('name').balance.mean()  # Use normal syntax for high level algorithms# Bags / lists
import dask.bag as db
b = db.read_text('*.json').map(json.loads)
total = (b.filter(lambda d: d['name'] == 'Alice').map(lambda d: d['balance']).sum())

这些高级接口在略微变化的情况下复制了标准接口。对于原始项目中的大部分API,这些接口会自动为我们并行处理较大的数据集,实现上不是很复杂,对照Dask的doc文档即可一步步完成。

Delayed

下面说一下Dask的 Delay 功能,非常强大。

Dask.delayed是一种并行化现有代码的简单而强大的方法。之所以被叫做delayed是因为,它没有立即计算出结果,而是将要作为任务计算的结果记录在一个图形中,稍后将在并行硬件上运行。

有时问题用已有的dask.array或dask.dataframe可能都不适合,在这些情况下,我们可以使用更简单的dask.delayed界面并行化自定义算法。例如下面这个例子。

def inc(x):return x + 1def double(x):return x * 2def add(x, y):return x + ydata = [1, 2, 3, 4, 5]output = []
for x in data:a = inc(x)b = double(x)c = add(a, b)output.append(c)total = sum(output)
45

上面代码在单个线程中按顺序运行。但是,我们看到其中很多可以并行执行。Dask delayed函数可修饰inc、double这些函数,以便它们可延迟运行,而不是立即执行函数,它将函数及其参数放入计算任务图中。

我们简单修改代码,用delayed函数包装一下。

import daskoutput = []
for x in data:a = dask.delayed(inc)(x)b = dask.delayed(double)(x)c = dask.delayed(add)(a, b)output.append(c)total = dask.delayed(sum)(output)

代码运行后inc、double、add和sum都还没有发生,而是生成一个计算的任务图交给了total。然后我们用visualizatize看下任务图。

total.visualize()

上图明显看到了并行的可能性,所以毫不犹豫,使用compute进行并行计算,这时才完成了计算。

>>> total.compute()
45

由于数据集较小无法比较时间,这里只介绍下使用方法,具体可自己动手实践下。

Sklearn机器学习

关于机器学习的并行化执行,由于内容较多,东哥会在另一篇文章展开。这里简单说下一下dask-learn。

dask-learn项目是与Sklearn开发人员协作完成的。现在可实现并行化有Scikit-learn的Pipeline、GridsearchCV和RandomSearchCV以及这些的变体,它们可以更好地处理嵌套的并行操作。

因此,如果你将sklearn替换为dklearn,那么速度将会提升很多。

 
# from sklearn.grid_search import GridSearchCVfrom dklearn.grid_search import GridSearchCV
# from sklearn.pipeline import Pipelinefrom dklearn.pipeline import Pipeline

下面是一个使用Pipeline的示例,其中应用了PCA和逻辑回归。

from sklearn.datasets import make_classificationX, y = make_classification(n_samples=10000,n_features=500,n_classes=2,n_redundant=250,random_state=42)from sklearn import linear_model, decomposition
from sklearn.pipeline import Pipeline
from dklearn.pipeline import Pipelinelogistic = linear_model.LogisticRegression()
pca = decomposition.PCA()
pipe = Pipeline(steps=[('pca', pca),('logistic', logistic)])grid = dict(pca__n_components=[50, 100, 150, 250],logistic__C=[1e-4, 1.0, 10, 1e4],logistic__penalty=['l1', 'l2'])# from sklearn.grid_search import GridSearchCV
from dklearn.grid_search import GridSearchCVestimator = GridSearchCV(pipe, grid)estimator.fit(X, y)

结果是:sklearn会在40秒钟左右执行此计算,而dask-learn替代品大约需要10秒钟。

另外,如果添加以下代码可以连接到集群,通过Client可以展示整个计算过程的dashboard,由Bokeh实现。

from dask.distributed import Client
c = Client('scheduler-address:8786')

5、总结

以上就是Dask的简单介绍,Dask的功能是非常强大的,且说明文档也非常全,既有示例又有解释。感兴趣的朋友可以自行去官网或者GitHub学习,东哥下次分享使用Dask进行机器学习的一些实例。

在这里还是要推荐下我自己建的Python学习群:721195303,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

Python大数据分析神器---Dask相关推荐

  1. python大数据免费_安利大家一个Python大数据分析神器

    对于Pandas运行速度的提升方法,之前已经介绍过很多回了,里面经常提及Dask,很多朋友没接触过可能不太了解,今天就推荐一下这个神器.StB免费资源网 1.什么是Dask?StB免费资源网 Pand ...

  2. visualize python_安利一个Python大数据分析神器!

    对于Pandas运行速度的提升方法,之前已经介绍过很多回了,里面经常提及Dask,很多朋友没接触过可能不太了解,今天就推荐一下这个神器. 1.什么是Dask? Pandas和Numpy大家都不陌生了, ...

  3. 讲python的东哥_安利一个Python大数据分析神器!

    对于Pandas运行速度的提升方法,之前已经介绍过很多回了,里面经常提及Dask,很多朋友没接触过可能不太了解,今天就推荐一下这个神器. 1.什么是Dask?Pandas和Numpy大家都不陌生了,代 ...

  4. 九大神招,让Python里数据分析神器Jupyter,完美升华

    九大神招,让Python里数据分析神器Jupyter,完美升华 Notebook作为一款经典的交互式编辑器,在视图数据等实时展示方面有其特有的优势,但是相比pycharm.sublime等编辑工具,J ...

  5. Python 大数据分析疫情:如何实现实时数据爬取及 Matplotlib 可视化?

    作者 | 杨秀璋 来源 | CSDN博客专家Eastmount 责编 | 夕颜 思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫.可视化分析.GIS地图 ...

  6. 程度性数据python分析_用户画像准确性评测初探——拨开python大数据分析的神秘面纱...

    导读 本文主要包括两部分内容,第一部分会对零零散散进行了两个多月的用户画像评测做个简要回顾和总结,第二部分会对测试中用到的python大数据处理神器pandas做个整体介绍. Part1用户画像评测回 ...

  7. Python大数据分析实战:豆瓣电影Top250中的最佳导演是谁?

    在之前写的一篇文中中,已经采用urllib和BeautifulSoup的方式抓取了豆瓣电影TOP250的导演.编剧.演员.上映时间和地区.语言.短评数.影评数.多少人想看.多少人看过等22个字段. 接 ...

  8. 毕设设计之 ---基于python大数据分析的北上广住房数据分析

    文章目录 前言 分析展示 一.北上广租房房源分布可视化 二.北上广内区域租金分布可视化 三.房源距地铁口租金的关系可视化 四.房屋大小与租金关系可视化 结论 租个人房源好还是公寓好 北上广深租房时都看 ...

  9. 干货!小白入门Python数据科学全教程 Python大数据分析

    本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据工程师 ...

最新文章

  1. android 应用uid,android adb 获取所有app 的uid
  2. vscode快捷键大全
  3. Java中的程序设计模式--单例与多例
  4. 前端和后端哪个工资高_嵌入式软硬件工程师哪个更有前途,工资还高
  5. Springboot访问jsp页面但是却变成下载该页面
  6. 判断变量是空_Python 判断变量是否是 None 的三种写法
  7. 2.1 ListView 源码
  8. rk3399_android7.1调试lsm9ds1三合一sensor记录
  9. vijos1846 [NOIP2013] 华容道【最短路】
  10. CentOS安装锐捷认证客户端
  11. html中加减号,如何添加加+和减号 - 按钮,在产品列表网页(list.phtml)
  12. U盘插上,系统有反应,但是却不识别,电脑能识别其他的U盘,U盘在其他电脑也是好用的经验分享(驱动问题)
  13. html图片显示详情,纯CSS鼠标经过图片视差弹出层显示详情链接按钮特效代码.html...
  14. inprivate浏览是什么意思_InPrivate浏览是什么?
  15. ABCD……组成菱形
  16. 新学期|除了认真学习的“flag”,你还立了啥?
  17. Vue.js入门学习--列表渲染--v-for遍历数组生成元素(四)
  18. c语言答案系统,c语言练习和答案
  19. 科学速读法:20分钟让你阅读速度提高3倍
  20. fiddler抓包教程------详细

热门文章

  1. VS2015主题设置
  2. 理解pip install --user package
  3. 妈妈,我居然在CDA经管之家学挑西瓜
  4. js清空数组遇到的小问题
  5. 市场调研中如何做数据分析?
  6. Multisim实现D触发器时钟信号分频
  7. 不是吧,阿sir,还有人不会制作影院订票系统前端页面吗?(拿来就用)
  8. 关于intel 网卡 i217 驱动安装不上的问题综述
  9. 贪心算法解硬币找零问题
  10. python:实现将照片右上角加上红色的数字(附完整源码)