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

ใน 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() |
อธิบาย 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) |
- 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 |
ทดสอบ 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 |
Well done !! ตอนนี้เพื่อนๆสามารถเขียน function ง่ายๆเพื่อวิเคราะห์ข้อมูลใน spreadsheet ได้แล้ว อยากอ่าน tutorial แบบไหนอีก? comment บอกเราได้เลยใต้บทความนี้ 😎
Reference
ขอบคุณ example dataset จาก dataquest.io