Scrierea unui iterator pentru încărcarea datelor pe fragmente (5)
Acesta este ultimul pas. Ai învățat multe despre procesarea unui set de date de dimensiuni mari pe fragmente. În acest ultim exercițiu, vei pune tot codul de procesare a datelor într-o singură funcție, astfel încât să îl poți reutiliza fără a rescrie același lucru de fiecare dată.
Vei defini funcția plot_pop(), care primește două argumente: numele fișierului de procesat și codul de țară al rândurilor pe care vrei să le procesezi din setul de date.
Deoarece tot codul scris în exercițiile anterioare va fi inclus în plot_pop(), apelarea funcției realizează automat următoarele:
- Încărcarea fișierului fragment cu fragment,
- Crearea noii coloane cu valorile populației urbane și
- Reprezentarea grafică a datelor privind populația urbană.
Este multă muncă încapsulată într-o singură funcție, dar acum poți repeta același proces cu ușurință pentru orice fișier și cod de țară dorești să procesezi și să vizualizezi!
Vei folosi datele din 'ind_pop_data.csv', disponibil în directorul curent. Pachetele pandas și matplotlib.pyplot au fost importate ca pd, respectiv plt.
După ce termini, ia un moment să privești graficele și să reflectezi asupra noilor competențe dobândite. Călătoria nu se oprește aici! Dacă ți-a plăcut să lucrezi cu aceste date, poți continua să le explorezi folosind versiunea preprocesată disponibilă pe Kaggle.
Acest exercițiu face parte din cursul
Cutia cu instrumente Python
Instrucțiuni pentru exercițiu
- Definește funcția
plot_pop()cu două argumente: primul estefilenamepentru fișierul de procesat, iar al doilea estecountry_codepentru țara care urmează să fie procesată din setul de date. - Apelează
plot_pop()pentru a procesa datele corespunzătoare codului de țară'CEB'din fișierul'ind_pop_data.csv'. - Apelează
plot_pop()pentru a procesa datele corespunzătoare codului de țară'ARB'din fișierul'ind_pop_data.csv'.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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'