การเขียน iterator เพื่อโหลดข้อมูลเป็นชุด (4)
ในแบบฝึกหัดก่อนหน้า เราประมวลผลข้อมูลเฉพาะจาก DataFrame chunk แรกเท่านั้น คราวนี้จะรวบรวมผลลัพธ์จาก DataFrame chunk ทั้งหมดในชุดข้อมูล ซึ่งหมายความว่าจะประมวลผลชุดข้อมูลทั้งหมดในครั้งเดียว สิ่งที่น่าสนใจคือ สามารถจัดการชุดข้อมูลขนาดใหญ่ได้โดยแบ่งประมวลผลทีละส่วนเล็ก ๆ
แบบฝึกหัดนี้ใช้ข้อมูลจากไฟล์ 'ind_pop_data.csv' ซึ่งอยู่ในไดเรกทอรีปัจจุบัน โดย pandas และ matplotlib.pyplot ได้ถูก import ไว้แล้วในชื่อ pd และ plt ตามลำดับ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python Toolbox
คำแนะนำการฝึกหัด
- สร้าง DataFrame ว่างเปล่าชื่อ
dataโดยใช้pd.DataFrame() - ในลูป
forให้วนซ้ำผ่านurb_pop_readerเพื่อประมวลผล DataFrame chunk ทั้งหมดในชุดข้อมูล - นำ
dataและdf_pop_cebมาต่อกันโดยส่งรายการ DataFrame ทั้งสองเข้าไปในpd.concat()
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Initialize reader object: urb_pop_reader
urb_pop_reader = pd.read_csv('ind_pop_data.csv', chunksize=1000)
# Initialize empty DataFrame: data
data = ____
# Iterate over each DataFrame chunk
for df_urb_pop in ____:
# Check out specific country: df_pop_ceb
df_pop_ceb = df_urb_pop[df_urb_pop['CountryCode'] == 'CEB']
# 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 = ____
# Plot urban population data
data.plot(kind='scatter', x='Year', y='Total Urban Population')
plt.show()