Skriva en iterator för att läsa in data i delar (5)
Nu är vi i mål. Du har lärt dig mycket om hur man bearbetar en stor datamängd i delar. I den här sista övningen samlar du all kod för databearbetningen i en enda funktion, så att du enkelt kan återanvända den utan att behöva skriva om samma saker på nytt.
Du ska definiera funktionen plot_pop(), som tar två argument: filnamnet på filen som ska bearbetas och landskoden för de rader du vill bearbeta i datamängden.
Eftersom all kod från de tidigare övningarna nu samlas i plot_pop(), utför ett anrop till funktionen automatiskt följande steg:
- Läser in filen del för del,
- Skapar den nya kolumnen med värden för stadsbefolkning, och
- Ritar ett diagram över stadsbefolkningsdata.
Det är en hel del arbete – men nu gör funktionen det enkelt att upprepa samma process för vilken fil och landskod du än vill bearbeta och visualisera!
Du kommer att använda data från 'ind_pop_data.csv', som finns tillgänglig i din nuvarande katalog. Paketen pandas och matplotlib.pyplot har importerats som pd respektive plt.
När du är klar, ta ett ögonblick att titta på diagrammen och reflektera över de nya färdigheter du har förvärvat. Resan slutar inte här! Om du har tyckt om att arbeta med den här datamängden kan du fortsätta utforska den med hjälp av den förbearbetade versionen som finns på Kaggle.
Den här övningen är en del av kursen
Python Toolbox
Övningsinstruktioner
- Definiera funktionen
plot_pop()med två argument: förstfilenameför filen som ska bearbetas, och sedancountry_codeför landet som ska bearbetas i datamängden. - Anropa
plot_pop()för att bearbeta data för landskoden'CEB'i filen'ind_pop_data.csv'. - Anropa
plot_pop()för att bearbeta data för landskoden'ARB'i filen'ind_pop_data.csv'.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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'