タスクをサブタスクへ分割する
この演習では、並列計算を使って、オリンピックの競技データセットで指定した年のアスリートの平均年齢を計算する関数 take_mean_age() を適用します。DataFrame の athlete_events は読み込まれており、主に次の2列を含みます。
Year: そのオリンピック種目が開催された年Age: オリンピアンの年齢
ここでは、ワークロードを複数のプロセスに分散できる multiprocessor.Pool API を使用します。関数 parallel_apply() はサンプルコード内で定義されています。適用する関数、グループ化の方法、解析に必要なコア数を引数として受け取ります。各処理の計測には @print_timing デコレータが使われている点に注意してください。
この演習はコースの一部です
データエンジニアリング入門
演習の手順
- コードを完成させ、まずは
1コア、その後に2、最後に4コアでtake_mean_ageを適用してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Function to apply a function over multiple cores
@print_timing
def parallel_apply(apply_func, groups, nb_cores):
with Pool(nb_cores) as p:
results = p.map(apply_func, groups)
return pd.concat(results)
# Parallel apply using 1 core
parallel_apply(take_mean_age, athlete_events.groupby('Year'), ____)
# Parallel apply using 2 cores
parallel_apply(take_mean_age, athlete_events.groupby('Year'), ____)
# Parallel apply using 4 cores
parallel_apply(take_mean_age, athlete_events.groupby('Year'), ____)