วิเคราะห์ข้อมูลเด็กทารกแรกเกิดใน US ด้วย Python

tutorial นี้ เราสอนเขียนพื้นฐาน Python เพื่อวิเคราะห์ข้อมูลจำนวนเด็กทารกที่เกิดในประเทศอเมริการะหว่างปี 1994-2003 เพื่อนๆสามารถดาวน์โหลดไฟล์ US_births.csv ได้ที่นี่

Capture

ใน csv file จะมีทั้งหมด 5 columns

  • year
  • month
  • date_of_month
  • day_of_week
  • births

สำหรับโจทย์วันนี้คือการเขียนฟังชั่นเพื่อหาผลรวมคอลั่ม births → แยกตามคอลั่ม year, month, date_of_month และ day_of_week

ตัวอย่าง output ที่เราต้องการจะออกมาเป็น dictionary หน้าตาแบบนี้ {“1994”: 500, “1995”: 1000, “1996”: 1500} โดยมี key เป็นปี (หรือคอลั่มอื่นๆ) ส่วน value คือผลรวมของคอลั่ม births

Refresher

สำหรับ tutorial นี้ assume ว่าเพื่อนๆเขียน Python ได้นิดหน่อย เข้าใจว่า dictionary คืออะไร? รวมถึงการเขียน control flow ง่ายๆ เช่น if-else และ for loop

ถ้าพร้อมแล้วก็เริ่มกันเลย tutorial นี้ใช้เวลาประมาณ 10 นาที เราจะเขียน Python กันบน Google Colab ไม่ต้อง install python ในคอมพิวเตอร์ให้เสียเวลา 😛

Note – google colab ทำงานได้ดีบน personal computer และต้องใช้ chrome web browser เท่านั้น (ถ้าใครใช้คอมบริษัท บางทีจะเปิด colab ไม่ขึ้น ให้กลับไปลองทำ tutorial นี้ที่บ้านอีกที)


Open File

ขั้นตอนที่หนึ่ง (2 นาที) – upload csv.file ขึ้นไปที่ google colab

code ด้านล่างนี้เป็น standard template สำหรับอัพโหลดไฟล์ csv ขึ้นไปที่ google colab (line 2-3) รวมถึงการเปิด อ่าน และปิดไฟล์ (line 7-9)

# import files module
from google.colab import files
uploaded = files.upload()
# you will see the filename.csv on google colab
# copy and paste it in function open()
f = open("US_births_1994-2003_CDC_NCHS.csv", "r")
data = f.read()
f.close()
view raw .py hosted with ❤ by GitHub

อธิบาย line 7 ในฟังชั่น open() เราใช้ "r" คือการบอก Python ให้เปิดไฟล์แบบ read only

Basic Data Analysis

ขั้นตอนที่สอง (5 นาที) – ทำความสะอาด และเขียน for loop เพื่อวิเคราะห์ข้อมูล

data ที่อัพโหลดขึ้นไปตอนนี้จะอยู่ในรูปแบบของ string object ขั้นตอนแรกคือการ split string ด้วย "\n" และ slice data[1:] เพื่อลบ column names ใน index 0 ออกไปก่อน (line 2-3)

# cleaing data
data = data.split("\n")
data = data[1:]
# see what data looks like
for row in data[:10]:
print(row)
# preliminary analysis
result = {}
for row in data:
year = row.split(",")[0] # year at index 0
birth = int(row.split(",")[4]) # birth at index 4
if year in result:
result[year] += birth
else:
result[year] = birth
# see result
print(result)
view raw .py hosted with ❤ by GitHub
  • line 10 เราสร้าง empty dictionary ขึ้นมาเพื่อเก็บ result ที่เราต้องการ
  • line 11-17 เราเขียน for loop กับ if-else วิเคราะห์ข้อมูลแต่ละ row ใน data file ของเราเพื่ออัพเดท result dictionary ซึ่งจะเหมือนกับ tutorial Count The Dogs ที่เราเคยเขียนไว้
  • line 20 ลอง print result ออกมาดู

output ที่ได้จากโค้ดนี้คือ dictionary ที่มี key คือคอลั่ม year (index 0) และ value คือผลรวมของคอลั่ม births (index 4)

Function

ขั้นตอนที่สาม (3 นาที) – เขียน function สำหรับใช้งานกับ csv file อื่นๆ

เราสามารถเขียน wrap code ด้านบนของเราเป็น function โดยฟังชั่นนี้รับ 3 arguments

  • data – ไฟล์ csv ที่เราเตรียมไว้
  • k – คอลั่ม index ที่เราจะใช้เป็น key
  • v – คอลั่ม index ที่เราจะหาผลรวมเป็น value
# write function for this analysis
def calculate_stat(data, k, v):
"""
input: data, idx key, idx value
output: dictionary with key: value pair
"""
result = {}
for row in data:
key = row.split(",")[k]
value = int(row.split(",")[v])
if key in result:
result[key] += value
else:
result[key] = value
return result
view raw .py hosted with ❤ by GitHub

ทดสอบ function ที่เราเขียนกับคอลั่มอื่นๆใน US Births data

# test function
calculate_stat(data, 0, 4) # sum births by year
calculate_stat(data, 1, 4) # sum births by month
calculate_stat(data, 2, 4) # sum births by dom
calculate_stat(data, 3, 4) # sum births by dow
view raw .py hosted with ❤ by GitHub

Well done !! ตอนนี้เพื่อนๆสามารถเขียน function ง่ายๆเพื่อวิเคราะห์ข้อมูลใน spreadsheet ได้แล้ว อยากอ่าน tutorial แบบไหนอีก? comment บอกเราได้เลยใต้บทความนี้ 😎


Reference

ขอบคุณ example dataset จาก dataquest.io

Leave a Reply