编写迭代器以分块加载数据(5)
来到最后一步。您已经学会了如何按块处理大型数据集。在本练习中,您将把处理数据的所有代码封装到一个函数中,这样就能复用,而不必一遍遍重写。
您将定义函数 plot_pop(),它接收两个参数:要处理的文件名,以及您希望在数据集中处理的国家代码。
由于之前练习中编写的所有代码都会放进 plot_pop(),因此只需调用该函数就会完成以下操作:
- 按块加载文件,
- 创建新的城市人口数列,
- 绘制城市人口数据。
这看起来工作不少,但这个函数让您能方便地针对任意文件和国家代码重复相同流程并完成可视化!
您将使用当前目录中的 'ind_pop_data.csv' 数据。pandas 和 matplotlib.pyplot 已分别以 pd 和 plt 导入,供您使用。
完成后,请花点时间看看图表,回顾一下您刚掌握的新技能。学习并未止步于此!如果您喜欢这个数据集,您还可以在 Kaggle 上继续探索其预处理版本。
本练习是课程的一部分
Python 工具箱
练习说明
- 定义函数
plot_pop(),包含两个参数:第一个是待处理文件的filename,第二个是数据集中待处理国家的country_code。 - 调用
plot_pop(),处理文件'ind_pop_data.csv'中国家代码为'CEB'的数据。 - 调用
plot_pop(),处理文件'ind_pop_data.csv'中国家代码为'ARB'的数据。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# 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'