始める無料で始める

イテレータを使ってデータをチャンク単位で読み込む(5)

いよいよ最終ステップです。大規模なデータセットをチャンク単位で処理する方法をたくさん学びました。この最後の演習では、これまで書いてきたコードを1つの関数にまとめ、同じ処理を何度でも再利用できるようにします。

ここではplot_pop() という処理対象のファイル名とデータセット内で処理する国コードの2つの引数を受け取る関数を定義します。

これまでの演習で書いたコードはすべて plot_pop() の中にまとめられるため、この関数を呼び出すだけで以下の処理が実行されます。

  • ファイルをチャンク単位で読み込む
  • 都市人口の値を格納する新しい列を作成する
  • 都市人口データをプロットする

処理が多いですが、関数にまとめると任意のファイルや国コードに対して同じ処理を簡単に繰り返せるようになります。

現在のディレクトリにある 'ind_pop_data.csv' のデータを使用します。pandas と matplotlib.pyplot はそれぞれ pdplt としてインポート済みです。

完了したら、生成されたプロットをじっくり眺めて、習得した新しいスキルを振り返ってみましょう。学習はここで終わりではありません。このデータの処理をさらに満喫したいなら、Kaggle で公開されている前処理済みバージョンを使って引き続き分析できます。

この演習はコースの一部です

Python Toolbox

コースを見る

演習の手順

  • plot_pop() 関数を定義してください。引数は2つで、1つ目は処理するファイルを指定する filename、2つ目はデータセットで処理する国を指定する country_code です。
  • plot_pop() ファイルで国コード 'CEB' のデータを処理するために 'ind_pop_data.csv' を呼び出してください。
  • plot_pop() ファイルで国コード 'ARB' のデータを処理するために 'ind_pop_data.csv' を呼び出してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Define plot_pop()
def ____(____, ____):

    # Initialize reader object: urb_pop_reader
    urb_pop_reader = pd.read_csv(filename, chunksize=1000)

    # Initialize empty DataFrame: data
    data = pd.DataFrame()
    
    # Iterate over each DataFrame chunk
    for df_urb_pop in urb_pop_reader:
        # Check out specific country: df_pop_ceb
        df_pop_ceb = df_urb_pop[df_urb_pop['CountryCode'] == country_code]

        # Zip DataFrame columns of interest: pops
        pops = zip(df_pop_ceb['Total Population'],
                    df_pop_ceb['Urban population (% of total)'])

        # Turn zip object into list: pops_list
        pops_list = list(pops)

        # Use list comprehension to create new DataFrame column 'Total Urban Population'
        df_pop_ceb['Total Urban Population'] = [int(tup[0] * tup[1] * 0.01) for tup in pops_list]
        
        # Concatenate DataFrame chunk to the end of data: data
        data = pd.concat([data, df_pop_ceb])

    # Plot urban population data
    data.plot(kind='scatter', x='Year', y='Total Urban Population')
    plt.show()

# Set the filename: fn
fn = 'ind_pop_data.csv'

# Call plot_pop for country code 'CEB'


# Call plot_pop for country code 'ARB'
コードを編集して実行