前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Dask教程:使用dask.delayed并行化代码

Dask教程:使用dask.delayed并行化代码

作者头像
郭好奇同学
发布于 2021-08-26 09:15:41
发布于 2021-08-26 09:15:41
4.6K00
代码可运行
举报
文章被收录于专栏:好奇心Log好奇心Log
运行总次数:0
代码可运行

在本节中,我们使用 Dask 和 dask.delayed 并行化简单的 for 循环样例代码。通常,这是将函数转换为与 Dask 一起使用所需的唯一函数。

这是使用 dask 并行化现有代码库或构建复杂系统的一种简单方法。这也将有助于我们对后面的部分进行理解。

相关文档

  • Delayed documentation
  • Delayed screencast
  • Delayed API
  • Delayed examples
  • Delayed best practices

正如我们将在分布式调度器笔记本中看到的,Dask 有多种并行执行代码的方法。我们将通过创建 dask.distributed.Client 来使用分布式调度器。现在,这将为我们提供一些不错的诊断。稍后我们将深入讨论调度器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from dask.distributed import Client

client = Client(n_workers=4)

基础

首先让我们创建一些玩具函数,incadd,它们会休眠一段时间来模拟工作。然后我们将正常运行这些函数。

在下一节中,我们将并行化此代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from time import sleep

def inc(x):
    sleep(1)
    return x + 1

def add(x, y):
    sleep(1)
    return x + y

我们使用 %%time magic 指令来计时这段普通代码的执行时间,这是 Jupyter Notebook 的一个特殊功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time
# 这需要三秒钟才能运行,因为我们依次调用每个函数,一个接一个

x = inc(1)
y = inc(2)
z = add(x, y)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 3.02 s

使用 dask.delayed 装饰器并行化

两个 inc 调用可以并行调用,因为它们完全相互独立。

我们将使用 dask.delayed 函数转换 incadd 函数。当我们通过传递参数调用延迟版本时,与以前完全一样,原始函数实际上还没有被调用 —— 这就是单元执行很快完成的原因。相反,会生成一个延迟对象,它会跟踪要调用的函数和要传递给它的参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from dask import delayed
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time
# 这会立即运行,它所做的只是构建一个图

x = delayed(inc)(1)
y = delayed(inc)(2)
z = delayed(add)(x, y)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 1e+03 µs

上述代码立即运行,因为还没有真正发生任何事情。

要获得结果,请调用 compute。请注意,这比原始代码运行得更快。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time
# 实际上使用本地线程池运行我们的计算

z.compute()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 2.05 s
5

刚才发生了什么?

z 对象是一个惰性 Delayed 对象。这个对象包含我们计算最终结果所需的一切,包括对所有所需函数的引用,以及它们的输入和相互之间的关系。我们可以使用上面的 .compute() 评估结果,或者我们可以使用 .visualize() 可视化此值的任务图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
z
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Delayed('add-25aea027-2aa1-4253-9eb7-962a7d804914')

查看 z 的任务图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
z.visualize()

请注意,这包括之前的函数名称,以及 inc 函数输出到 add 输入的逻辑流。

一些需要考虑的问题

为什么我们从 3s 变成了 2s?为什么我们不能并行化到 1s?

如果 incadd 函数不包括 sleep(1) 会发生什么?Dask 还能加速这段代码吗?

不会加速

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def inc_v2(x):
    return x + 1

def add_v2(x, y):
    return x + y
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time

x = inc_v2(1)
y = inc_v2(2)
z = add_v2(x, y)
z
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 0 ns
5
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = delayed(inc_v2)(1)
y = delayed(inc_v2)(2)
z = delayed(add_v2)(x, y)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time

z.compute()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 24 ms
5

如果我们有多个输出或者还想访问 xy 怎么办?

练习:并行化 for 循环

for 循环是我们想要并行化的最常见的事情之一。在 incsum 上使用 dask.delayed 并行化以下计算。

串行代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = [1, 2, 3, 4, 5, 6, 7, 8]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time
# 串行代码

results = []
for x in data:
    y = inc(x)
    results.append(y)

total = sum(results)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 8.05 s
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
total
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
44

并行代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time

for x in data:
    y = delayed(inc)(x)
    results.append(y)

total = delayed(sum)(results)
print("Before computing:", total) # 查看 total 的类型
result = total.compute()
print("After computing:", result) # 计算之后
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Before computing: Delayed('sum-492662c6-3934-408a-beea-763b4f421a40')
After computing: 88
Wall time: 1.04 s

与直接使用 sum 函数而不是延迟包装的版本相比,图形可视化与给定的解决方案相比如何?你能解释一下后面的版本吗?您可能会发现以下表达式的结果很有启发性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delayed(inc)(1) + delayed(inc)(2)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
z = delayed(inc)(1) + delayed(inc)(2) + delayed(inc)(3)
z.visualize()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
z = delayed(sum)(delayed(inc)(1), delayed(inc)(2), delayed(inc)(3))
z.visualize()

练习:并行化带有流程控制的 for 循环代码

通常我们只想延迟一些函数,立即运行其中的几个。当这些函数速度很快时,这尤其有用,并帮助我们确定应该调用哪些其他较慢的函数。这个决定,延迟还是不延迟,通常是我们在使用 dask.delayed 时需要深思熟虑的地方。

在下面的示例中,我们遍历输入列表。如果输入是偶数,那么我们想调用 inc。如果输入是奇数,那么我们要调用 double。必须立即(而不是懒惰地)做出调用 incdoubleis_even 决定,以便我们的图形构建 Python 代码继续进行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def double(x):
    sleep(1)
    return 2 * x

def is_even(x):
    return not x % 2

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

串行代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time
results = []
for x in data:
    if is_even(x):
        y = double(x)
    else:
        y = inc(x)
    results.append(y)
    
total = sum(results)
print(total)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
90
Wall time: 10.1 s

并行版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time

results = []
for x in data:
    if is_even(x):
        y = delayed(double)(x)
    else:
        y = delayed(inc)(x)
    results.append(y)
    
total = delayed(sum)(results)
print(total)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Delayed('sum-f5af7db2-ff32-4186-af6c-2106e51a7341')
Wall time: 999 µs
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%time total.compute()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 2.04 s
90
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
total.visualize()

一些需要考虑的问题

我们不能使用延迟的其他控制流示例是什么?

如果我们在上面的例子中延迟了 is_even(x) 的计算会发生什么?

你对延迟 sum() 有什么看法?这个函数既是计算又运行快速。

创建数据

运行此代码以准备一些数据。

这将下载并提取 1990 年至 2000 年间从纽约出发的航班的一些历史航班数据。数据最初来自此处。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%run prep.py -d flights

查看数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pathlib
sorted(pathlib.Path("data", "nycflights").iterdir())
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[WindowsPath('data/nycflights/1990.csv'),
 WindowsPath('data/nycflights/1991.csv'),
 WindowsPath('data/nycflights/1992.csv'),
 WindowsPath('data/nycflights/1993.csv'),
 WindowsPath('data/nycflights/1994.csv'),
 WindowsPath('data/nycflights/1995.csv'),
 WindowsPath('data/nycflights/1996.csv'),
 WindowsPath('data/nycflights/1997.csv'),
 WindowsPath('data/nycflights/1998.csv'),
 WindowsPath('data/nycflights/1999.csv')]

使用 pandas.read_csv 读取一个文件,并计算平均起飞延误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
df = pd.read_csv(pathlib.Path("data", "nycflights", "1990.csv"))
df.head()

数据模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.dtypes
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Year                   int64
Month                  int64
DayofMonth             int64
DayOfWeek              int64
DepTime              float64
CRSDepTime             int64
ArrTime              float64
CRSArrTime             int64
UniqueCarrier         object
FlightNum              int64
TailNum              float64
ActualElapsedTime    float64
CRSElapsedTime         int64
AirTime              float64
ArrDelay             float64
DepDelay             float64
Origin                object
Dest                  object
Distance             float64
TaxiIn               float64
TaxiOut              float64
Cancelled              int64
Diverted               int64
dtype: object

数据中有哪些始发机场

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.Origin.unique()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array(['EWR', 'LGA', 'JFK'], dtype=object)

每个机场平均起飞延误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.groupby("Origin").DepDelay.mean()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Origin
EWR     9.168411
JFK    11.857274
LGA     8.560045
Name: DepDelay, dtype: float64

串行代码:每个机场平均起飞延误

上述单元格计算每个机场一年的平均起飞延误。在这里,我们使用顺序 for 循环将其扩展到所有年份。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pathlib
filenames = sorted(pathlib.Path("data", "nycflights").glob("*.csv"))
filenames
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[WindowsPath('data/nycflights/1990.csv'),
 WindowsPath('data/nycflights/1991.csv'),
 WindowsPath('data/nycflights/1992.csv'),
 WindowsPath('data/nycflights/1993.csv'),
 WindowsPath('data/nycflights/1994.csv'),
 WindowsPath('data/nycflights/1995.csv'),
 WindowsPath('data/nycflights/1996.csv'),
 WindowsPath('data/nycflights/1997.csv'),
 WindowsPath('data/nycflights/1998.csv'),
 WindowsPath('data/nycflights/1999.csv')]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time

sums = []
counts = []
for fn in filenames:
    # 读取文件
    df = pd.read_csv(fn)
    
    # 按起飞机场分组
    by_origin = df.groupby("Origin")
    
    # 按起飞机场计算所有起飞延误和
    total = by_origin.DepDelay.sum()
    
    # 按机场汇总航班数
    count = by_origin.DepDelay.count()
    
    # 保存中间结果
    sums.append(total)
    counts.append(count)
    
# 组合中间结果得到全部 mean-delay-per-origin
total_delays = sum(sums)
n_flights = sum(counts)
mean = total_delays / n_flights
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 9.92 s
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mean
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Origin
EWR    10.295469
JFK    10.351299
LGA     7.431142
Name: DepDelay, dtype: float64

并行化

使用 dask.delayed 并行化上面的代码。需要知道一些额外的事情。

  1. 延迟对象上的方法和属性访问会自动工作,因此如果您有一个延迟对象,您可以对其执行正常的算术、切片和方法调用,它将产生正确的延迟调用。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = delayed(np.arange)(10)
y = (x + 1)[::2].sum()  # 所有计算都被延迟
  1. 当您只有一个输出时,调用 .compute() 方法效果很好。当您有多个输出时,您可能需要使用 dask.compute 函数:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from dask import compute
>>> x = delayed(np.arange)(10)
>>> y = x ** 2
>>> min_, max_ = compute(y.min(), y.max())
>>> min_, max_
(0, 81)

这样 Dask 就可以共享中间值 (比如 y = x**2)

因此,您的目标是使用 dask.delayed 并行化上面的代码 (已在下面复制)。您可能还想对一些计算进行可视化,看看您是否正确地进行了计算。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from dask import compute
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time

sums = []
counts = []
for fn in filenames:
    # 读取文件
    df = delayed(pd.read_csv)(fn)
    
    # 按起飞机场分组
    by_origin = df.groupby("Origin")
    
    # 按起飞机场计算所有起飞延误和
    total = by_origin.DepDelay.sum()
    
    # 按机场汇总航班数
    count = by_origin.DepDelay.count()
    
    # 保存中间结果
    sums.append(total)
    counts.append(count)
    
# 组合中间结果得到全部 mean-delay-per-origin
sums, counts = compute(sums, counts)
total_delays = sum(sums)
n_flights = sum(counts)
mean = total_delays / n_flights
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 2.55 s
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mean
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Origin
EWR    10.295469
JFK    10.351299
LGA     7.431142
Name: DepDelay, dtype: float64

一些需要考虑的问题

你得到了多少加速?这是您期望的加速程度吗?

尝试在何处调用 compute。当你在 sumcounts 上使用时会发生什么?如果你等待并在 mean 上调用会发生什么?

mean 上使用 compute

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sums = []
counts = []
for fn in filenames:
    # 读取文件
    df = delayed(pd.read_csv)(fn)
    
    # 按起飞机场分组
    by_origin = df.groupby("Origin")
    
    # 按起飞机场计算所有起飞延误和
    total = by_origin.DepDelay.sum()
    
    # 按机场汇总航班数
    count = by_origin.DepDelay.count()
    
    # 保存中间结果
    sums.append(total)
    counts.append(count)
    
# 组合中间结果得到全部 mean-delay-per-origin
total_delays = delayed(sum)(sums)
n_flights = delayed(sum)(counts)
mean = delayed(lambda a, b: a/b)(total_delays, n_flights)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mean.visualize()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time
mean = mean.compute()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 1.98 s

尝试延迟 sum 调用。如果 sum 延迟,图形会是什么样子?如果不是,图表会是什么样子?

sum 上使用 compute

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sums = []
counts = []
for fn in filenames:
    # 读取文件
    df = delayed(pd.read_csv)(fn)
    
    # 按起飞机场分组
    by_origin = df.groupby("Origin")
    
    # 按起飞机场计算所有起飞延误和
    total = by_origin.DepDelay.sum()
    
    # 按机场汇总航班数
    count = by_origin.DepDelay.count()
    
    # 保存中间结果
    sums.append(total)
    counts.append(count)
    
# 组合中间结果得到全部 mean-delay-per-origin
total_delays = delayed(sum)(sums)
n_flights = delayed(sum)(counts)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from dask import visualize
visualize(total_delays, n_flights)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%time
total_delays, n_flights = compute(total_delays, n_flights)
mean = total_delays / n_flights
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Wall time: 2.12 s

原始版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sums = []
counts = []
for fn in filenames:
    # 读取文件
    df = delayed(pd.read_csv)(fn)
    
    # 按起飞机场分组
    by_origin = df.groupby("Origin")
    
    # 按起飞机场计算所有起飞延误和
    total = by_origin.DepDelay.sum()
    
    # 按机场汇总航班数
    count = by_origin.DepDelay.count()
    
    # 保存中间结果
    sums.append(total)
    counts.append(count)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
visualize(sums, counts)

你能想出你想要以一种方式减少另一种方式的任何原因吗?

学习更多

访问 Delayed documentation。特别是,(delayed screencast 将强化您在此处学到的概念,delayed best practices 文档收集了有关如何使用 dask.delayed 的建议。

关闭客户端

在继续下一个练习之前,请确保关闭您的客户端或停止此内核。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client.close()

参考

dask-tutorial

https://github.com/dask/dask-tutorial

Dask 教程

相关文章

使用 Dask 并行抽取站点数据


题图由 Jan-Christoph Horn 在 Pixabay 上发布。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 好奇心Log 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python︱大规模数据存储与读取、并行计算:Dask库简述
本文介绍了利用Dask和Kaleido库进行大数据处理和分析的应用案例,包括处理40TB数据集、进行特征工程、建立机器学习模型和评估模型性能。同时,本文还介绍了如何使用Dask进行分布式计算和并行计算,以及使用Kaleido进行特征选择和降维。
悟乙己
2018/01/02
6.4K0
python︱大规模数据存储与读取、并行计算:Dask库简述
安利一个Python大数据分析神器!
对于Pandas运行速度的提升方法,之前已经介绍过很多回了,里面经常提及Dask,很多朋友没接触过可能不太了解,今天就推荐一下这个神器。
Python数据科学
2020/09/30
1.7K0
安利一个Python大数据分析神器!
猫头虎 分享:Python库 Dask 的简介、安装、用法详解入门教程
今天猫头虎带大家走进 Dask 的世界,作为一个并行计算的强大工具,它在处理大规模数据和优化计算效率时非常有用!最近有粉丝问我:“猫哥,当我在处理大量数据时,Python 的 pandas 性能瓶颈让我头疼,能推荐个好用的并行处理工具吗?” 今天猫头虎就来聊聊如何用 Dask 高效解决问题。
猫头虎
2024/09/18
3480
R数据科学|3.7内容介绍及习题解答
虽然与summarize()函数结合起来使用是最有效的,但分组也可以与mutate()和filter()函数结合,以完成非常便捷的操作。示例如下:
庄闪闪
2021/04/09
4.2K0
R用户要整点python[系列完结]
对spyder的代码运行产生了一些嫌弃,每次按ctrl+enter都是运行全部,查了一下像Rstudio那样逐行运行是要按F9,太远了,不干。
用户11414625
2024/12/20
810
R用户要整点python[系列完结]
R语言包_dplyr_1
有5个基础的函数: - filter - select - arrange - mutate - summarise - group_by (plus)
用户1147754
2019/05/26
9630
使用Dask DataFrames 解决Pandas中并行计算的问题
如何将20GB的CSV文件放入16GB的RAM中。 如果你对Pandas有一些经验,并且你知道它最大的问题——它不容易扩展。有解决办法吗? 是的-Dask DataFrames。 大多数Dask AP
deephub
2021/07/01
4.4K0
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
一章内容介绍三块内容,感觉哪个都没说清。 In[1]: import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline 1. matplotlib入门 Matplotlib提供了两种方法来作图:状态接口和面向对象。 # 状态接口是通过pyplot模块来实现的,matplotlib会追踪绘图环境的当前状态 # 这种方法适合快速画一些简单
SeanCheney
2018/11/29
1.7K0
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
Pandas 高性能优化小技巧
Pandas 对于Pythoner的搞数据分析的来说是常用的数据操作库,对于很多刚接触Pandas的人来说会发现它是一个很方便而且好用的库,它提供了各种数据变化、查询和操作,它的dataframe数据结构和R语言、Spark的dataframe的API基本一样,因此上手起来也非常简单。但是很多新手在使用过程中会发现pandas的dataframe的性能并不是很高,而且有时候占用大量内存,并且总喜欢将罪名归于Python身上(lll¬ω¬),今天我这里给大家总结了在使用Pandas的一些技巧和代码优化方法。
机械视角
2019/10/23
3.1K0
Pandas 高性能优化小技巧
告别Pandas瓶颈,迎接Dask时代:Python数据处理从此起飞!
Dask的主要作用是提供并行和分布式计算能力,以处理超出单个机器内存容量的大型数据集。它与NumPy、Pandas和Scikit-Learn等流行库无缝集成,允许开发者在无需学习新库或语言的情况下,轻松实现跨多个核心、处理器和计算机的并行执行。
小白的大数据之旅
2024/11/20
1710
《Pandas Cookbook》第07章 分组聚合、过滤、转换1. 定义聚合2. 用多个列和函数进行分组和聚合3. 分组后去除多级索引4. 自定义聚合函数5. 用 *args 和 **kwargs
第01章 Pandas基础 第02章 DataFrame运算 第03章 数据分析入门 第04章 选取数据子集 第05章 布尔索引 第06章 索引对齐 第07章 分组聚合、过滤、转换 第08章 数据清理 第09章 合并Pandas对象 第10章 时间序列分析 第11章 用Matplotlib、Pandas、Seaborn进行可视化
SeanCheney
2018/10/10
9K0
大数据行业应用之Hive数据分析航班线路相关的各项指标
1.项目背景: 飞机航班经常会因为各种原因,如天气原因,雷雨、大雾、大风等情况,或机场原因,导致航班的延误甚至取消,现在有一批航班的历史数据,基于这些数据,对航班的各种重要指标做统计分析,如最繁忙航线、某机场起降最频繁时段等等;最后,利用机器学习,对航班延误做预测,旅客可参考这些统计及预测结果调整行程安排。 2.建设目标: 亲自动手搭建项目所需的实验环境:搭建hadoop集群、分析航空数据的一些指标;
Maynor
2021/12/10
1.1K0
如何在Python中用Dask实现Numpy并行运算?
Python的Numpy库以其高效的数组计算功能在数据科学和工程领域广泛应用,但随着数据量的增大和计算任务的复杂化,单线程处理往往显得力不从心。为了解决这一问题,Python提供了多种并行计算工具,其中Dask是一款能够扩展Numpy的强大并行计算框架。通过Dask,开发者能够轻松实现Numpy数组的并行化操作,充分利用多核处理器和分布式计算资源,从而显著提高计算性能。
sergiojune
2024/11/07
1720
如何在Python中用Dask实现Numpy并行运算?
手把手带你科研入门系列 | PyAOS基础教程十:大数据文件
首先看一下测试nc文件,总计7个文件,每个文件大约6.7G,是CNRM-CM6-1-HR模式按照25年的时间分开存储的。
气象学家
2021/07/27
1.2K0
手把手带你科研入门系列 | PyAOS基础教程十:大数据文件
资源 | Pandas on Ray:仅需改动一行代码,即可让Pandas加速四倍
选自UC Berkeley Rise Lab 作者:Devin Petersohn 机器之心编译 参与:Nurhachu Null、路雪 本文中,来自 UC Berkeley 的 Devin Petersohn 发布文章介绍了其参与的项目 Pandas on Ray,使用这款工具,无需对代码进行太多改动即可加速 Pandas,遇到大型数据集也不怕。作者还对 Pandas on Ray、Pandas 进行了对比评估。机器之心对此文进行了编译介绍。 项目链接:https://github.com/ray-pro
机器之心
2018/05/08
3.4K0
资源 | Pandas on Ray:仅需改动一行代码,即可让Pandas加速四倍
干货:可视化项目实战经验分享,轻松玩转Bokeh(建议收藏)
导读:本文通过一个项目案例,详细的介绍了如何从 Bokeh 基础到构建 Bokeh 交互式应用程序的过程,内容循序渐进且具有很高的实用性。本文共有两万字左右,属于纯干货分享,强烈推荐大家认真读完并收藏!
IT阅读排行榜
2019/03/18
2.9K0
干货:可视化项目实战经验分享,轻松玩转Bokeh(建议收藏)
R语言包_dplyr_2
data_frame() is a better way than data.frame() for creating data frames. Benefits of data_frame():
用户1147754
2019/05/26
7050
又见dask! 如何使用dask-geopandas处理大型地理数据
读者的问题涉及到地理信息系统(GIS)操作的一系列步骤,具体包括将栅格数据转换为点数据、为这些点数据添加XY坐标、通过空间连接给这些点添加行政区属性、以及计算指定行政区的质心。读者在使用ArcGIS软件完成前两步时未遇到明显问题,但在执行第三步时遇到了性能瓶颈,即使用ArcGIS和GeoPandas进行空间连接操作时系统会卡死。为了解决这个问题,读者尝试使用了dask-geopandas来处理约两百万个点的数据,但似乎遇到了错误。
用户11172986
2024/06/20
2600
又见dask! 如何使用dask-geopandas处理大型地理数据
客快物流大数据项目(八十八):ClickHouse快速入门
如果安装时出现warning: rpmts_HdrFromFdno: Header V4 RSA/SHA1 Signature, key ID e0c56bd4: NOKEY错误导致无法安装,需要在安装命令中添加—nogpgcheck来解决。
Lansonli
2022/12/22
5580
客快物流大数据项目(八十八):ClickHouse快速入门
【数据分析可视化】分组和透视功能实战-航班数据分析
数据来源 https://fivethirtyeight.com/politics/ import numpy as np import pandas as pd from pandas import Series, DataFrame # 航班数据半个月20w条 link = '/Users/bennyrhys/Desktop/数据分析可视化-数据集/homework/usa_flights.csv' df = pd.read_csv(link) df.head() flight_date u
瑞新
2020/07/07
6660
【数据分析可视化】分组和透视功能实战-航班数据分析
推荐阅读
相关推荐
python︱大规模数据存储与读取、并行计算:Dask库简述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文