Een iterator schrijven om data in stukken te laden (4)
In de vorige oefeningen heb je alleen de data uit de eerste DataFrame-chunk verwerkt. Deze keer ga je de resultaten over alle DataFrame-chunks in de gegevensset aggregeren. Dat betekent eigenlijk dat je nu de hele gegevensset verwerkt. Mooi, want zo kun je een grote gegevensset verwerken door met kleinere stukken te werken!
Je gaat de data gebruiken uit 'ind_pop_data.csv', beschikbaar in je huidige map. De pakketten pandas en matplotlib.pyplot zijn respectievelijk geïmporteerd als pd en plt voor je gebruik.
Deze oefening maakt deel uit van de cursus
Python-gereedschapskist
Oefeninstructies
- Initialiseer een lege DataFrame
datametpd.DataFrame(). - Itereer in de
for-lus overurb_pop_readerzodat je alle DataFrame-chunks in de gegevensset kunt verwerken. - Concateneer
dataendf_pop_cebdoor een lijst met de DataFrames door te geven aanpd.concat().
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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()