超越NumPy和Pandas:三个鲜为人知的Python库

Python/ target=_blank class=infotextkey>Python是世界上使用最广泛的编程语言之一 , 并为开发人员提供了大量的库 。
然而 , 当涉及到数据处理和科学计算时 , 用户通常会想到诸如Numpy、Pandas或SciPy等库 。
在本文中 , 将介绍3个你可能感兴趣的Python库 。
1.DaskDask简介Dask是一个灵活的并行计算库 , 可实现大规模数据处理的分布式计算和并行计算 。
那么 , 为什么用户要使用Dask呢?正如他们在其网站上所说的:
【Dask】:https://www.dask.org/

Python已经发展成为数据分析和通用编程中的主流语言 。这种增长得益于像NumPy、Pandas和scikit-learn等计算库 。然而 , 这些包并不适用于超越单台机器的规模 。当数据集超过内存时 , Dask被开发出来原生地扩展这些包及其周边生态系统 , 以适应多核机器和分布式集群 。
因此 , 正如他们所说 , Dask的一个常见用途是:
【链接】:https://docs.dask.org/en/latest/dataframe.html
当需要像使用Pandas一样常用时 , 使用Dask DataFrame , 通常是因为Pandas在处理数据量或计算速度方面存在问题:
  • 处理大型数据集 , 即使这些数据集无法容纳在内存中
  • 通过使用多个内核加速长时间计算
  • 对使用标准Pandas操作的大型数据集进行分布式计算 , 例如groupby、join和时间序列计算
因此 , 当需要处理巨大的Pandas数据帧时 , Dask是一个不错的选择 。这是因为Dask可以:
允许用户在笔记本电脑上处理100GB以上的数据集 , 或者在工作站上处理1TB以上的数据集 。
这是一个相当了不起的结果 。
在幕后发生的情况是:
Dask DataFrames协调许多按索引排列的Pandas DataFrames/Series 。Dask DataFrame以行为单位进行分区 , 通过索引值对行进行分组 , 以提高效率 。这些Pandas对象可以存在于磁盘上或其他机器上 。
因此 , 有类似的如下情况:
超越NumPy和Pandas:三个鲜为人知的Python库

文章插图
Dask和Pandas数据帧的区别 。
运行中的Dask的一些功能展示首先 , 需要安装Dask 。可以通过pip或conda进行安装 , 如下所示:
$ pip install dask[complete]or$ conda install dask功能一:打开 csv 文件可以展示Dask的第一个功能 , 即如何打开CSV文件 。可以这样做 , 如下所示:
import dask.dataframe as dd# 使用Dask加载大型CSV文件df_dask = dd.read_csv('my_very_large_dataset.csv')# 在Dask DataFrame上执行操作mean_value_dask = df_dask['column_name'].mean().compute()因此 , 正如在代码中看到的 , 本文使用Dask的方式与Pandas非常相似 。尤其是:
  • 使用read_csv()方法与Pandas完全相同
  • 截取列的方式与Pandas完全相同 。事实上 , 如果有一个名为df的Pandas数据框架 , 我们会这样截取一列:df['column_name'] 。
  • 将mean()方法应用于截取的列 , 这与Pandas类似 , 但这里还需要添加compute()方法 。
【超越NumPy和Pandas:三个鲜为人知的Python库】此外 , 即使打开CSV文件的方法与Pandas相同 , Dask也能毫不费力地处理超过单台机器内存容量的大型数据集 。
这意味着 , 除了在Pandas中无法打开大型数据帧 , 而在Dask中可以打开之外 , 无法看到任何实际的差异 。
功能二:扩展机器学习工作流程可以使用Dask创建一个具有大量样本的分类数据集 。然后可以将其分割为训练集和测试集 , 使用机器学习模型拟合训练集 , 并计算测试集的预测结果 。
可以这样做 , 如下所示:
import dask_ml.datasets as dask_datasetsfrom dask_ml.linear_model import LogisticRegressionfrom dask_ml.model_selection import trAIn_test_split# 使用Dask加载分类数据集X, y = dask_datasets.make_classification(n_samples=100000, chunks=1000)# 将数据分割为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y)# 并行训练逻辑回归模型model = LogisticRegression()model.fit(X_train, y_train)# 对测试集进行预测y_pred = model.predict(X_test).compute()


推荐阅读