<commit_before>---
layout: post
title: "dask"
date: "2022-01-02"
excerpt: "daskの使い方"
project: false
config: true
tag: ["python3", "dask"]
comments: false
---

# daskの使い方

## 概要
 - pandasを並列化処理をできるようにしたライブラリ
 - pandasより不安定で公式でも多用しすぎないようにアナウンスされている 
 - 定義した動作は遅延評価になるので、最後にcomputeしないと計算されない

## インストール

```console
$ python3 -m pip install dask
```

## ユースケース
 - たくさんのcsvを高速に読み込む
 - pandasのdataframeをいくつかに分割してcsv, parquetなどに複数のファイルに出力する

## 基本的な使い方

### csv読み込み

正規表現か、リストで与える
```python
df = dd.read_csv("*.csv")
```

```python
df = dd.read_csv(["1.csv", "2.csv", ...])
```

### 遅延評価を実行してpandasのDataFrameを得る

```python
df = df.compute()
```

### 並列化の方法を指定

```python
with dask.config.set(scheduler="processes"):
    ....
```
 - `"processes"` 
   - マルチプロセス 
 - `"threads"`
   - スレッドベース

### pandasのDataFrameをdaskのDataFrameに変換する

```python
df = dd.from_pandas(df, npartitions=16)
```
 - `npartitions`
   - パーティションのサイズ<commit_msg>update "dask" doc<commit_after>---
layout: post
title: "dask"
date: "2022-01-02"
excerpt: "daskの使い方"
project: false
config: true
tag: ["python3", "dask"]
comments: false
---

# daskの使い方

## 概要
 - pandasを並列化処理をできるようにしたライブラリ
 - pandasより不安定で公式でも多用しすぎないようにアナウンスされている 
 - 定義した動作は遅延評価になるので、最後にcomputeしないと計算されない

## インストール

```console
$ python3 -m pip install dask
```

## ユースケース
 - たくさんのcsvを高速に読み込む
 - pandasのdataframeをいくつかに分割してcsv, parquetなどに複数のファイルに出力する

## 基本的な使い方

### csv読み込み

複数のファイルを読み込む時、正規表現か、リストで与える
```python
import dask.dataframe as dd
df = dd.read_csv("*.csv")
```

```python
df = dd.read_csv(["1.csv", "2.csv", ...])
```
 - read_pickleはサポートしていない

### 遅延評価を実行してpandasのDataFrameを得る

```python
df = df.compute()
```

### 並列化の方法を指定

```python
with dask.config.set(scheduler="processes"):
    ....
```
 - `"processes"` 
   - マルチプロセス 
 - `"threads"`
   - スレッドベース

### pandasのDataFrameをdaskのDataFrameに変換する

```python
df = dd.from_pandas(df, npartitions=16)
```
 - `npartitions`
   - パーティションのサイズ
{'fraction_non_alphanumeric': 0.17144346013548722, 'fraction_numerical': 0.014590932777488274, 'mean_word_length': 4.423728813559322, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7465608', 'n_tokens_mistral': 1154, 'n_tokens_neox': 1077, 'n_words': 132}