โปรเจค DE ง่ายๆ ผ่าน GCP (1)

Jaroensak Yodkantha
3 min readSep 22, 2021

--

วันนี้ผม จะลองมาเสนอ โปรเจคง่ายๆ ผ่าน GCP (Google Cloud Platform)

เมื่อพูดถึงโปรเจค DE(Data Engineer) คนส่วนมากบอกว่าคงจะยากแน่เลย (ส่วนตัวผมก็ว่ายาก 5555 ) แต่มันก็ไม่ได้มีอะไรยากอย่างที่คิด

https://github.com/shafiab/HashtagCashtag

หลังจาก ผม ได้ศึกษาคอร์ส R2DE ของ เพจ Data TH.com — Data Science ชิลชิล

https://www.facebook.com/datasciencechill

ผม ก็ได้มองภาพรวมพื้นฐานของคำว่า DE จากเริ่มต้น จนถึงสินสุดออกว่ามีอะไรบ้าง

สรุปใจความที่ผมได้คือ ทำให้ทุกอย่างทำงาน “อัตโนมัติ”

ในส่วนนี้ เราจะทำกระบวนการ ETL และ สร้าง Pipeline เพื่อให้ข้อมูลสมมารถทำงานได้แบบอัตโนมัติ เลย

https://blog.datath.com/etl-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/

เรามาเริ่มกันเลยดีกว่า อย่างแรกคือ การหาข้อมูลที่เราจะเล่นก่อน เว็บที่มีข้อมูลที่มากมายก็คือ kaggle.com เป็นเว็บที่สามารถหาฐานข้อมูลได้มากมาย

Data ที่ผมเลือกคือ https://www.kaggle.com/faviovaz/bank-term-deposit

ที่เลือก data นี้เพราะว่า ข้อมูลไม่ได้ใหญ่มาก เหมาะแก่การทดลองในโปรเจค แรก

จากนั้น ก็ลองโหลดโปรเจคดูว่าเราสามารถเล่นอะไรได้บ้าง

เครื่องมือที่ผมใช้เพื่อลองแก้ไขตารางคือ Google Colab (เพราะสามารถรันได้ทีละบรรทัด)

สิ่งที่เราจะ import ในนี้มีง่ายๆ 2 อย่างครับ คือ

import os

import pandas as pd

ในนี้ผมจะใช้ Pandas มาช่วยในการ

Pandas คือ library สำหรับจัดการ dataframe ของภาษา Python ทำให้เราเล่นกับข้อมูลได้ง่ายขึ้น เหมาะมากสำหรับทำ Data Cleaning / Wrangling

หลักจากที่เราโหลดไฟล์จาก kaggle เราจะไฟล์ที่เป็น zip เมื่อเราแตก zip จะได้ไฟล์หนึ่งคือ bank_term_deposit.csv จากนั้นก็อัพขึ้น colab เพื่อทดลอง

(ในกรณีนี้ ไฟล์ไม่ได้อยู่ใน data base และมีขนาดเล็ก ทำได้ แต่ถ้าไฟล์มีขนาดใหญ่และอยู่ใน db เราจะใช้วิธีการดึก ตัวอย่างไฟล์ทดลองมาแล้วค่อยเอามาเล่นก่อน แล้วค่อย hook ในตอนทำ airflow )

ได้แล้ว เรามาลองอ่านข้อมูลกันก่อนดีกว่า โดยใช้คำสั่ง

table_df=pd.read_csv(‘bank_term_deposit.csv’)

table_df

ให้ค่า ตัวแปล แล้วใช้ pd.read_csv อ่านค่า csv ออกมา แล้วก็อ่านค่า

สิ่งแรกที่ผมจะลองหาคือ ค่า null ว่า คอรัมน์ไหนมีค่า null บ้าง มีเท่าไหร่ โดย

null_columns=table_df.columns[table_df.isnull().any()]

table_df[null_columns].isnull().sum()

จะเห็นได้ว่ามี 2 คอลัมน์มีค่า null คือ age และ balance

เราจะทำยังไงดีกับค่า null เหล่านั้น โดยที่ไม่กระทบต่อค่าส่วนใหญ่ ผมเลยคิดว่า ถ้าเราแทน null ด้วยค่า mean ของแต่ละ คอลัมน์ ก็ดี

ดังนั้นเราก็จะหาค่า mean ได้จาก

table_df.mean(axis = 0, skipna = True)

โดย axis = 0 คือ คอลัมน์ /// axis = 1 คือ แถว

mean ของ age คือ 41.6 และ balance คือ 1136.75

จากนั้นผมก็เปลี่ยนค่า null ของแต่ละตารางเป็นค่า mean
แต่ถ้าค่าไหนไม่เป็น null ก็แทนค่าเดิม

table_df[“age”].fillna(“41.6”, inplace = True)

table_df[“balance”].fillna(“1136.75”, inplace = True)

table_df

ค่า null ได้หายไปแล้ว ผ่านนนนน

สุดท้าย เช็ค type ของแต่ละ คอลัมน์สักหน่อยว่าโอเคไหม โดย

table_df.dtypes

ค่า age กับ balance กลับไม่ใช่ float64

https://pbpython.com/pandas_dtypes.html

เราต้องเปลี่ยน โดยใช้

table_df[‘age’] = table_df[‘age’].astype(float)

table_df[‘balance’] = table_df[‘balance’].astype(float)

เรียบร้อย ในส่วนนี้ที่ต้องเปลี่ยนเผื่อเวลาจะนำข้อมูลตัวเลขไปคิดจะได้ไม่ติดขัด

(ในส่วนโปรเจคนี้ การ clean ไม่มีอะไรนอกจากนี้ และไม่มีการ join ข้อมูล แต่ในส่วนโปรเจคถัดไป จะมีแน่นอน)

ส่วนของการ clean ข้อมูลพื้นฐานมีแค่นี้ก่อน ในตอนถัดไป จะต้องเปลี่ยน โค้ดจาก colab ออกไปไว้ใน kubernete ของ GCP และทำการ ETL ต่อไป

(ใครอ่านมาถึงส่วนนี้ก็ กราบขอบคุณ และกราบ ขอภัยในการเขียน บทความแรกนะครับบ มีอะไรแนะนำ หรือติชม ก็บอกได้นะครับ ขอบคุณครับ)

สามารถอ่านบทความถัดไปได้ที่นี้เลยครับ

โปรเจค DE ง่ายๆ ผ่าน GCP (2)

--

--

Jaroensak Yodkantha

🔭 I’m open for Blockchain Dev. 🌱My personality is that of a leader, I enjoy conversing with others, am gregarious, and enjoy teaching and sharing