始める無料で始める

データをチャンク単位で読み込むイテレーターの作成(4)

前の演習では、最初の DataFrame チャンクのデータのみを処理しました。今回は、データセット内のすべての DataFrame チャンクにわたって結果を集計します。つまり、データセット全体を処理することになります。大きなデータセットを小さなチャンクに分けて処理できるのは、非常に便利な方法です。

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

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

Python Toolbox

コースを見る

演習の手順

  • data を使用して、空の DataFrame pd.DataFrame() を初期化します。
  • for ループの中で urb_pop_reader を反復処理し、データセット内のすべての DataFrame チャンクを処理できるようにします。
  • datadf_pop_ceb を含むリストを pd.concat() に渡して、2 つの DataFrame を結合します。

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

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

# Initialize reader object: urb_pop_reader
urb_pop_reader = pd.read_csv('ind_pop_data.csv', chunksize=1000)

# Initialize empty DataFrame: data
data = ____

# Iterate over each DataFrame chunk
for df_urb_pop in ____:

    # Check out specific country: df_pop_ceb
    df_pop_ceb = df_urb_pop[df_urb_pop['CountryCode'] == 'CEB']

    # 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 = ____

# Plot urban population data
data.plot(kind='scatter', x='Year', y='Total Urban Population')
plt.show()
コードを編集して実行