Python ビデオ チュートリアルこのコラムではビッグ データ分析成果物を紹介します
推奨 (無料) ) : python ビデオ チュートリアル
Pandas
の実行速度を向上させる方法は、これまでに何度も紹介されており、その中で頻繁に言及されていますDask
、これに接したことがなければ、多くの友人はそれについてあまり知らないかもしれません。今日はこのアーティファクトをお勧めしたいと思います。
1.ダスクとは何ですか?
Pandas
と Numpy
はすべて誰もがよく知っています。コードの実行後、データは RAM にロードされます。データ セットが特に大きい場合は、 、メモリの急上昇に注目します。しかし、処理対象のデータが RAM
に適していない場合があり、今回は Dask
が来ます。
Dask
はオープンソースで無料です。これは、Numpy、Pandas、Scikit-Learn などの他のコミュニティ プロジェクトと連携して開発されています。
公式: https://dask.org/
Dask
Pandas
の DataFrame
と NumpyArray をサポート
データ構造であり、ローカル コンピューター上で実行することも、クラスター上で実行するように拡張することもできます。
基本的には、コードを 1 回記述するだけで、通常の Pythonic
構文を使用して、ローカルで実行するか、マルチノード クラスターにデプロイします。これ自体は素晴らしい機能ですが、最も素晴らしい機能ではありません。
Dask
の最も素晴らしい機能は次のとおりです。 これは、私たちがすでに使用しているほとんどのツールと互換性があり、わずかな量で独自のノートブックを使用できます。コンピュータですでに利用可能な処理能力により、コードが並列実行されます。データを並列処理すると、実行時間、待ち時間が減り、分析時間が長くなります。
Dask
におけるデータ処理の一般的なプロセスは次のとおりです。
#2. Dask はどのような既存のツールをサポートしていますか?
これも私が気に入っている点です。Dask
は Python
データ処理およびモデリング ライブラリ パッケージと互換性があり、ライブラリ パッケージの API に従っているからです。 , Python ユーザーにとって学習コストが非常に低くなります。 Hadoop
や Spark
などのビッグ データ処理には、高い学習しきい値と時間コストがかかります。
現在、Dask
は pandas
、Numpy
、Sklearn
、XGBoost
、# をサポートできます。 ##XArray、
RAPIDS など、少なくとも一般的なデータ処理、モデリング分析については、これらだけで十分だと思います。これらは完全にカバーされています。
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
DaskRAM を超えるデータを保存できる 3 つの並列コレクションを紹介します。これらのコレクションは
DataFrame 、
バッグ、
配列。これらの各コレクション タイプは、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 code chunks=(1000, 1000)) # break into chunks of size 1000x1000 y = 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 code blocksize=64000000) # break text into 64MB chunks s = 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())
Dask## の doc ドキュメントを参照して、段階的に完了できます。 #。
非常に強力な
Dask の Delay
関数について話しましょう。
は、既存のコードを並列化するためのシンプルかつ強力な方法です。結果をすぐに計算せず、後で並列ハードウェアで実行されるタスクとして計算結果をグラフに記録するため、遅延
と呼ばれます。 既存の
または dask.dataframe
が問題に適していない場合があります。その場合は、より単純な dask を使用できます。遅延
インターフェイスはカスタム アルゴリズムを並列化します。たとえば、次の例を考えてみましょう。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">def inc(x):
return x + 1
def double(x):
return x * 2
def add(x, y):
return x + y
data = [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</pre><div class="contentsignin">ログイン後にコピー</div></div>
<p>上面代码在单个线程中按顺序运行。但是,我们看到其中很多可以并行执行。<code>Dask delayed
函数可修饰inc
、double
这些函数,以便它们可延迟运行,而不是立即执行函数,它将函数及其参数放入计算任务图中。
我们简单修改代码,用delayed
函数包装一下。
import dask output = [] 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 GridSearchCV from dklearn.grid_search import GridSearchCV # from sklearn.pipeline import Pipeline from dklearn.pipeline import Pipeline 下面是一个使用Pipeline的示例,其中应用了PCA和逻辑回归。 from sklearn.datasets import make_classification X, 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 Pipeline logistic = 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 GridSearchCV estimator = 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
进行机器学习的一些实例。
以上がAmway は誰もが Python ビッグデータ分析アーティファクトを持っていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。