Écrire un itérateur pour charger les données par blocs (5)
Voici la dernière étape. Vous avez beaucoup appris sur le traitement d'un grand jeu de données par blocs. Dans cet exercice final, vous allez regrouper tout le code de traitement dans une seule fonction afin de pouvoir le réutiliser sans tout réécrire chaque fois.
Vous allez définir la fonction plot_pop() qui prend deux arguments : le nom du fichier à traiter et le code de pays des lignes à traiter dans le jeu de données.
Comme tout le code des exercices précédents sera regroupé dans plot_pop(), appeler la fonction fera déjà ce qui suit :
- Chargement du fichier bloc par bloc,
- Création de la nouvelle colonne des valeurs de population urbaine, et
- Tracé du graphique de la population urbaine.
C'est beaucoup de travail, mais la fonction rend maintenant facile la répétition du même processus pour n'importe quel fichier et code de pays que vous voulez traiter et visualiser !
Vous allez utiliser les données de 'ind_pop_data.csv', disponible dans votre répertoire actuel. Les trousses pandas et matplotlib.pyplot ont été importées sous les alias pd et plt pour votre usage.
Quand vous aurez terminé, prenez un moment pour regarder les graphiques et réfléchir aux nouvelles compétences que vous avez acquises. Le parcours ne s'arrête pas ici ! Si vous avez aimé travailler avec ces données, vous pouvez continuer à les explorer à l'aide de la version prétraitée offerte sur Kaggle.
Cette activité fait partie du cours
Boîte à outils Python
Instructions de l’exercice
- Définissez la fonction
plot_pop()qui prend deux arguments : d'abordfilenamepour le fichier à traiter, puiscountry_codepour le pays à traiter dans le jeu de données. - Appelez
plot_pop()pour traiter les données du code de pays'CEB'dans le fichier'ind_pop_data.csv'. - Appelez
plot_pop()pour traiter les données du code de pays'ARB'dans le fichier'ind_pop_data.csv'.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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'