
189
8
章
Toolz
を使って小さなノートパソコン
でビッグデータを処理する方法
グレイシー:ナイフですって?ヤツは身長が 12 フィートもあるのよ!
ジャック:7 フィートだよ。大丈夫だって、なんとかできると思うよ。
―
ジャック・バートン『ゴーストハンターズ』
ストリーミングは、
SciPy
自体の機能ではありませんが、科学の世界でよく見られるような大
規模なデータセットを効率よく処理できるようにする手法です。
Python
には、ストリーミング
でデータ処理を行うのに役立つ基本構造がいくつか用意されており、これらを
Matt Rocklin
の
Toolz
ライブラリと組み合わせると、極めてメモリ効率がよく、エレガントで簡潔なコードを書
くことができます。本章では、ストリーミング処理の概念を適用して、お使いのコンピュータの
RAM
に載るよりもはるかに大きなデータセットを取り扱えるようにする方法を解説します。
ストリーミング処理という概念を知らずに、すでにストリーミングを実行していた人もいるで
しょう。おそらく最も単純なストリーミングは、ファイル全体をメモリに読み込むことなく、ファ
イル中の行を反復して、
1
行ずつ処理することでしょう。例えば、以下のような、各行の平均値を
計算して総和を取るループなどがそうです。
import numpy as np
with open('data/expr.tsv') as f:
sum_of_means = 0
for line in f:
sum_of_means += np.mean(np.fromstring(line, ...