Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Definieer de functie plot_pop() met twee argumenten: eerst filename voor het te verwerken bestand en daarna country_code voor 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'
Code bewerken en uitvoeren