Amway — это артефакт Python для анализа больших данных!

Python

Автор: Брат взлетай

Способ повышения скорости бега Панд уже неоднократно вводился ранее, и Даск в нем часто упоминается.Многие друзья, которые не сталкивались с ним, могут мало знать о нем.Сегодня рекомендую этот артефакт.

1. Что такое Даск?

PandasиNumpyВсем знакомо.После выполнения кода данные загружаются в оперативную память.Если набор данных особенно велик, мы увидим рост памяти. Но иногда обрабатываемые данные не подходят дляRAM,В этот моментDaskприходящий.

DaskЭто с открытым исходным кодом и бесплатно. Он разработан в сотрудничестве с другими проектами сообщества, такими как Numpy, Pandas и Scikit-Learn.

официальный:dask.org/

Daskслужба поддержкиPandasизDataFrameиNumpyArrayструктур данных и может выполняться как на локальном компьютере, так и масштабироваться для работы в кластере.

По сути, просто напишите код один раз, используя обычныйPythonicсинтаксис, вы можете запустить его локально или развернуть в многоузловом кластере. Это крутая функция сама по себе, но не самая крутая.

я думаюDaskСамые крутые особенности:Он совместим с большинством инструментов, которые мы уже используем, и всего несколькими изменениями кода мы можем запускать код параллельно с вычислительной мощностью, которая уже есть на нашем ноутбуке. А параллельная обработка данных означает меньше времени выполнения, меньше времени ожидания и больше времени анализа.

СледующееDaskОбщий поток обработки данных.

2. Какие существующие инструменты поддерживает Dask?

Это то, что я предпочитаю, потому чтоDaskС участиемPythonПакеты библиотек обработки данных и моделирования совместимы, и используется API пакетов библиотек, что обеспечивает чрезвычайно низкую стоимость обучения для пользователей Python. И нравитсяHadoop,SparkЭтот вид обработки больших данных имеет высокий порог обучения и временные затраты.

В настоящее время,Daskможет поддержатьpandas,Numpy,Sklearn,XGBoost,XArray,RAPIDSПодождите, я думаю, что этих пунктов достаточно, по крайней мере, для часто используемой обработки данных, моделирования и анализа можно полностью охватить.

3. Установка даска

можно использовать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Введены 3 параллельные коллекции, которые могут хранить данные больше, чем оперативная память, эти коллекции имеютDataFrame,Bags,Arrays. Каждый из этих типов коллекций может использовать данные, разделенные между оперативной памятью и жестким диском, а также данные, распределенные по нескольким узлам в кластере.

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())

Эти интерфейсы высокого уровня повторяют стандартные интерфейсы с небольшими изменениями. Для большинства API в исходном проекте эти интерфейсы будут автоматически обрабатывать большие наборы данных для нас параллельно, и реализация не очень сложна.DaskДокумент документа может быть заполнен шаг за шагом.

Delayed

Давайте поговорим оDaskизDelayфункция, очень мощная.

Dask.delayed— это простой и мощный способ распараллелить существующий код. почему это называетсяdelayedПричина в том, что вместо немедленного вычисления результата он записывает вычисляемый результат в виде задачи в графе, который позже будет выполняться на параллельном оборудовании.

Иногда проблемы с существующимиdask.arrayилиdask.dataframeможет не подойти, в этих случаях мы можем использовать более простойdask.delayedИнтерфейс для распараллеливания пользовательских алгоритмов. Например следующий пример.

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

Приведенный выше код выполняется последовательно в одном потоке. Однако мы видим, что многие из них могут выполняться параллельно.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Несколько примеров машинного обучения.

Нелегко быть оригинальным, я думаю, хорошо, когда это нравится.

Приглашаю всех обратить внимание на мой оригинальный публичный аккаунт WeChat.PythonНаука о данных, специализирующийся на написании алгоритмов данных на основе Python, машинном обучении и глубоком изучении хардкорных галантерейных товаров, персональный веб-сайт:datadeepin