始める無料で始める

タスクをサブタスクへ分割する

この演習では、並列計算を使って、オリンピックの競技データセットで指定した年のアスリートの平均年齢を計算する関数 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'), ____)
コードを編集して実行