Een iterator schrijven om data in stukken te laden (5)
Dit is de laatste etappe. Je hebt veel geleerd over het verwerken van een grote gegevensset in stukken. In deze laatste oefening stop je alle code voor het verwerken van de data in één functie, zodat je de code kunt hergebruiken zonder alles steeds opnieuw te hoeven schrijven.
Je gaat de functie plot_pop() definiëren, die twee argumenten verwacht: de bestandsnaam van het te verwerken bestand en de landcode van de rijen die je in de gegevensset wilt verwerken.
Omdat alle code die je in de vorige oefeningen hebt geschreven in plot_pop() komt, doet het aanroepen van de functie al het volgende:
- Het bestand stuk voor stuk laden,
- De nieuwe kolom met stedelijke bevolkingswaarden aanmaken, en
- De gegevens over de stedelijke bevolking plotten.
Dat is een hoop werk, maar met de functie kun je nu eenvoudig hetzelfde proces herhalen voor elk bestand en elke landcode die je wilt verwerken en visualiseren!
Je gaat de data uit 'ind_pop_data.csv' gebruiken, beschikbaar in je huidige map. De pakketten pandas en matplotlib.pyplot zijn respectievelijk geïmporteerd als pd en plt zodat jij ze kunt gebruiken.
Neem, als je klaar bent, even de tijd om naar de grafieken te kijken en stil te staan bij de nieuwe vaardigheden die je hebt opgedaan. De reis eindigt hier niet! Als je het leuk vond om met deze data te werken, kun je verder verkennen met de voorbewerkte versie die beschikbaar is op Kaggle.
Deze oefening maakt deel uit van de cursus
Python-gereedschapskist
Oefeninstructies
- Definieer de functie
plot_pop()met twee argumenten: eerstfilenamevoor het te verwerken bestand en daarnacountry_codevoor het land dat in de gegevensset moet worden verwerkt. - Roep
plot_pop()aan om de data te verwerken voor landcode'CEB'in het bestand'ind_pop_data.csv'. - Roep
plot_pop()aan om de data te verwerken voor landcode'ARB'in het bestand'ind_pop_data.csv'.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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'